iptables ってコマンドのサンプルはたまに見かけるけど、そのコマンドにどういう意味があるのかとかどうやってサービスとして使うのかとかがよくわからなかったので調べました。
基本的に自分が分かるようにしか書いてないです。 具体的な設定例は多く書いてないので他の記事を参照してください。

iptables

IP パケットのフィルタリングのルールを設定する。 Linux で使える。

類似なものとして firewall なるものがある。 Centos7 などで採用されており、裏側で iptables を使っている(らしい)。

Basics

まず、数種類の table がある。通常 filter テーブルを操作することが多く、 iptables コマンド実行時にテーブルの指定を省略すると filter テーブルに対して操作が行われる。 filter テーブルでは、遮断・通過させるパケットを決定する。
その他 nat, mangle などのテーブルがあり、 -t オプションによって操作するテーブルを指定できる。

それぞれの table にはいくつかの chain がある。チェーンの種類には INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING などがあるが、一つのテーブルですべてのチェーンを持っているわけではない。例えば、 Filter テーブルには INPUT, OUTPUT, FORWARD の3つのチェーンがある。

また、 -N オプションによりユーザ定義チェーンを作成することができる。作成したチェーンは、ルール定義時に -j オプションのターゲットとして指定でき、あるルールにマッチしたパケットはそのチェーンに流す、ということができる。

各チェーン上でルールは sequential に並んでおり、各パケットについて一番はじめにマッチしたルールによってそのパケットの処理が決定される。 そのため、ルールの設定時にはルールを末尾に追加する -A オプションを使うことが多い。 どのルールにもマッチしなかった場合、そのチェーンの policy によってパケットの処理が決定される。 ポリシーは、 -P オプションによって設定される。

Save/Restore Rules

iptables コマンドによってルールを書き換えた場合、

# iptables-save > /etc/iptables/iptables.rules

などとすることでそれをファイルに保存する。逆に、このファイルを直接書き換えた場合、及びシステムの起動時は

# iptables-restore < /etc/iptables/iptables.rules

とすることで保存されたルールを読み込むことができる。 起動時にこの操作を行うサービスが多くのシステムで存在するので、適宜 systemctl enable iptables などで有効化する。 このサービスはルールの読み込みを行うのであって、このサービスの有無によって iptables によるフィルタリングが有効化・無効化されるわけではない (systemctl disable iptables としているシステムでも、直接 iptables コマンドでルールを操作すれば、それは(再起動するまで)有効になる)。

Examples

filter テーブル INPUT チェーンのポリシーを DROP とする(どのルールにもマッチしなかったすべての内向きパケットを破棄する)

# iptables -P INPUT DROP

http アクセスを許可する

# iptables -A INPUT -p tcp --dport http -j ACCEPT

lo interface を通るパケットを許可する

# iptables -A INPUT -i lo -j ACCEPT

送信元が 192.168.10.0/24 、送信先が eth0 であるパケットに IP Masquerade を設定する

# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

参考

Tags: qiita_mirror