iptablesの超基本(フィルター)
iptablesを自主学習していると、情報は多数見つかるが、多様かつ高度な説明をしているものが多いと感じる。ここでは、超基本であるフィルターの機能をパケットキャプチャデータ(Wiresharkによる取得)とともに記載。
とは言いつつ参考サイト
ネットワーク
VirtualBoxで3つのVMを設け、下記のように接続する。
中央のルーターであるLubuntuで、iptablesを機能させ、両端のVM(Busterdog)間の通信を制御する。
準備など
pingおよびnetcat(nc)を用いる。
ルーターLubuntu
パケット転送を許可する。
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
サーバー側(右のVM: Busterdog 2)
nc -l -p 12345
クライアント側(左のVM: Busterdog 1)
ping 172.16.0.21
nc -z 172.16.0.21 12345
”-z”オプションにより、TCPセッション確立後、すぐにセッションをクローズする。
検証
Filterなし
iptables未設定時の、ルーターの状況は下記となる。
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
なお、テーブルを指定しない(-tオプション)時のデフォルトのテーブルは、”filter”のようだ(”-t filter”と同じ)。
pingおよびnc実行時の、クライアント側のWiresharkの様子は下記である。
ping、ncによるTCPセッション、ともに成立(成功)している。
Filterあり
REJECT
ルーターにて、クライアント側IPアドレスのTCPを”REJECT”する。
$ sudo iptables -A FORWARD -p tcp -s 192.168.10.10 -j REJECT
$ sudo iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.10.10 anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
この時のpingおよびnc実行時の、クライアント側のWiresharkの様子は下記である。
pingは成功しているが、TCP SYNに対して、”Port unreachable”のICMP応答がある。期待どおりの動作。
Filter削除
次に進む前に、上記のFilterを削除する。
$ sudo iptables -t filter -D FORWARD 1
undeux3@vamos:~$ sudo iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
最初のフィルターは”1”により、指定できる。
DROP
ルーターにて、クライアント側IPアドレスのTCPを”DROP”する。
sudo iptables -A FORWARD -p tcp -s 192.168.10.10 -j DROP
undeux3@vamos:~$
undeux3@vamos:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.10.10 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
この時のnc実行時の、クライアント側のWiresharkの様子は下記である。
また、コマンド実行状況は下記となる。
ルーターから何も応答がない(TCPを”DROP”)ので、クライアントは再送している。こちらも期待どおりの動作である。
終わりに
単純だがこれが基本であろう。その2では、NATを取り上げる予定。