はじめに
Iptablesは、システム管理者がLinuxカーネルファイアウォールによって提供されるテーブルと、ファイアウォールが格納するチェーンおよびルールを構成できるようにするユーザースペースユーティリティプログラムです。ほとんどの場合、IptablesはすべてのLinuxディストリビューションにプリインストールされています。適切に構成されたファイアウォールを持つことは、サーバーの全体的なセキュリティにとって非常に重要です。
この記事では、UbuntuとCentosディストリビューションのIptablesファイアウォールでポートを開く手順を紹介します
前提条件
IptableがインストールされているUbuntuまたはCentosサーバーへのSudoアクセス。
ステップ1:現在のIptablesルールを一覧表示する
Sudoアクセスを使用してサーバーに接続し、iptablesに構成されている現在のルールを一覧表示するには、以下のコマンドを使用します
sudo iptables -L
以下のような出力が表示されます。これには、現在構成されているすべてのルールが表示されます
root@e2e:~# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:1167 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:zabbix-agent Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination root@e2e:~#
ステップ2:Iptablesをバックアップする
Iptableにルールを追加する前に、Iptableルールのバックアップを取る必要があります。Iptablesの構成に問題が発生した場合に備えて、バックアップからルールを復元できます
以下のコマンドを使用して、Iptableルールを保存します
iptables-save > IPtablesbackup.txt
ステップ2:Iptableルールを追加/削除
現在構成されているルールを認識したら、以下のコマンドを使用してルールを追加することにより、IPtablesでポートを開くことができます。
sudo iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
注:xxxxを、開きたい必要なポート番号に置き換えてください
たとえば、Mysqlポートを開くには 3306 、以下のコマンドを実行する必要があります。
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
これは基本的に、Mysqlへの接続をパブリックに受け入れるようにIptableに指示します。
iptables -Lでも同じように表示できます ステップ1で述べたように
root@:~# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:1167 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:zabbix-agent ACCEPT tcp -- anywhere anywhere tcp dpt:mysql Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination root@:~#
最近追加されたルールを削除したい場合は、以下のコマンドを使用できます
sudo iptables -D INPUT -p tcp --dport xxxx -j ACCEPT
公にポートを開きたくない場合は、単一のIPのポートを開くことができます。
以下のコマンドを使用して、単一IP専用のポートを開きます
sudo iptables -A INPUT -p tcp -s your_server_ip --dport xxxx -j ACCEPT
注:上記のコマンドでyour_server_ipを必要なIPに置き換え、xxxxを必要なポートに置き換えてください
ステップ3:Iptableルールを保存する
ルールを追加したら、ルールを保存して永続化する必要があります。Ubuntuを使用している場合はiptables-persistentを使用でき、Centosの場合はiptablessaveコマンドを使用できます
Ubuntu 14.04では、次のコマンドを使用してiptablesルールを保存/再読み込みします
sudo /etc/init.d/iptables-persistent save
sudo /etc/init.d/iptables-persistent reload
Ubuntu16.04およびUbuntu18.04では、次のコマンドを使用します
sudo netfilter-persistent save
sudo netfilter-persistent reload
CentOSを使用している場合は、以下のコマンドを使用してください
service iptables save
ステップ4:Iptablesバックアップを復元する
Iptables構成ルールに問題がある場合は、以下のコマンドを使用して変更を元に戻し、手順2でバックアップしたファイルを復元できます
iptables-restore < IPtablesbackup.txt
結論
上記の記事に従うと、Linuxシステムのポートを開閉するのに役立ちます。適切なファイアウォールのIPテーブルを実装すると、システム管理者がシステムを保護し、必要なポートのみを公に許可するため、セットアップの優先度を常に高くする必要があります。それらを特定のIPに制限する