iptablesの設定内容確認と設定例
iptablesの設定内容確認
iptablesの設定を行う前に現状の設定内容を確認するために下記のコマンドを実行します。
iptables --list
これを実行すると現状のフィルタリングルールを確認することができ、下記のように表示されると思います。(下記の表示結果はubuntu12.04の場合です)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
上記のような結果が表示された場合は、policy ACCEPTと書かれていることから、全てのパケットに対して入ってくること、出ていくことが許可されている状態になります。なお、もしすでになにかしらルールが設定されている場合は、下記のコマンドを実行することで全てのルールを初期化(全削除)することができます。
iptables --flush
iptablesにルールを追加してそのルールの効果を確認する上では、一度初期化して随時ルールを追加していくと検証しやすいと思います。ただし、当然ながらルールを初期化すると全てのパケットを受け入れることになるためセキュリティを十分考慮した環境で行って下さい。ちなみに、iptablesの設定内容をより細かく確認したい場合は下記のコマンドを実行すると良いかもしれません。
iptables -nvL
上記のコマンドは、--numeric
、--verbose
、--list
オプションそれぞれを略記形式で実行したコマンドであり、下記が実行結果になります。--list
だけで表示した結果に比べて、pkts
、bytes
、in
、out
が追加表示されることが分かります。
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target port opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target port opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target port opt in out source destination
--numeric
は、数値で表示することを指示するオプションであり、--verbose
はインタフェース、ルールオプションを表示することを指示するオプションです。詳細は下記URLのiptablesチュートリアルを参照して下さい。
iptablseチュートリアル
iptablesの設定例
以下にiptablesの簡単な設定例をいくつか載せます。
例1:特定のインタフェースに入ってくるパケットを全て廃棄する
eth0に入ってくるパケットを全て廃棄します。
iptables --table filter --append INPUT --in-interface eth0 --jump DROP
上記のコマンドは各コマンドの略記を使うことで下記のようにも表せます。
iptables -t filter -A INPUT -i eth0 -j DROP
以降では全て略記を使います。ちなみに、-t
を使わずテーブルを指定しなかった場合は、デフォルトでfilterテーブルが指定されることになります。なので、filterテーブルを指定する場合は-t filter
は無くても同じです。
例2:ホストマシンからの通信に対する相手の応答通信を許可する
eth0に入ってくるパケットのうち、ホストマシンに対する応答通信であるパケットは通過を許可します。
--match state --state ESTABLISHED,RELATED
の部分によって応答通信であるパケットに限定しています。
--match
はモジュール名を指定してモジュールを使うためのオプションです。--match state
により、state
モジュールの使用を指定しています。state
モジュールを使用してESTABLISSED、RELATED
を指定することで、応答パケットに限定しています。
iptables -t filter -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT
※iptablesの注意点
iptablesではルールに優先順位が存在します。具体的には、ルールは基本的にルールを追加した順に高い優先順位がつけられ、iptablesでは高い優先順位のルールから順番に処理されていきます。例えば、下記のコマンドを順番に実行してみます。
itables -t filhljsA INPUT -i eth0 -j DROP
iptables -t filter -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT
実行後、iptables --list
によってルール内容を確認すると、下記のようになります。
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
DROP all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
target port opt source destination
iptablesでは各チェインの一番上のルールから順番に適用していきます。そして上記の場合は、INPUTチェインの一番上のルールがDROPでありかつその対象が全パケットであるため、次のACCEPTが適用されることはありません。すなわち、iptablesでは、ルールの順番が重要であり、パケットの対象範囲が小さいルールから順番に適用されるようルールを記述することが重要になります。なお、ルールの順番は追加した順番と同じになりますが、--replace
や--insert
などのルール操作コマンドを使うことでルールの順番を操作できます。(iptablesの概要メモを参照)
例3:特定の送信元IPアドレスのパケットの宛先IPアドレスと宛先ポート番号を変換する
送信元IPアドレスが192.168.101.0/24でありかつ宛先ポート番号が80番であるパケットの宛先IPアドレスを192.168.101.101、宛先ポート番号を3128番に変換する
iptables -t nat -A PREROUTING -s 192.168.101.0/24 -p tcp --dport 80 -j DNAT --to 192.168.101.101:3128
例4:特定のインタフェースに入ってきたパケットの宛先ポート番号を変換する
インタフェースeth0に入ってきたパケットの内、宛先ポート番号が80番であるパケットの宛先ポート番号を3128番に変換する
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptablesの設定保存方法
これまでに設定したルールはiptablesが動作するホストマシンを再起動すると消えて無効になってしまいます。そこで、再起動後も設定したルールを継続して有効にするためにiptables-save
、iptables-restore
コマンドを使う方法があります。
設定したルールを任意のファイルに書き出すコマンドとしてiptables-save
があり、下記のようにファイル名を指定して使います。
iptables-save > ファイル名
iptables-save
によって設定を書き出しておき、ホストマシンを再起動後、書き出しておいたファイルを下記のコマンドにより再読み込みすると、書き出されたルールが改めて設定されます。
iptables-restore < ファイル名
2013/10/7 追記
良く使うiptablesの運用管理方法2つをメモにiptablesの運用管理方法として、iptables-save、iptables-restoreを使った方法とシェルスクリプトを使った方法の2つをメモしました。iptablesの運用管理についてはこちらの方が情報が多いと思うので、良ければご参照下さい。
関連記事
- 公開日:2013/10/06 更新日:2013/10/06
良く使うiptablesの運用管理方法2つをメモ
iptablesのルールを編集し、ルールをPC起動と同時に自動設定させて運用させるための方法として、iptables-save、iptables-restoreを使った方法とシェルスクリプトを使った方法の2つをメモします。
- 公開日:2013/03/18 更新日:2013/03/18
iptablesの概要メモ
iptablesは多くのLinuxに標準でインストールされているファイアウォールソフトウェアであり、特定の通信を通過/遮断したり、パケットの送信元IPアドレス、宛先アドレスを別のアドレスに変換したりする機能を提供しています。iptablesはLinuxを使っていると出会う場面が多いので、その概要についてメモします。