1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今さらながらiptables基本(その1)

Posted at

iptablesの超基本(フィルター)

iptablesを自主学習していると、情報は多数見つかるが、多様かつ高度な説明をしているものが多いと感じる。ここでは、超基本であるフィルターの機能をパケットキャプチャデータ(Wiresharkによる取得)とともに記載。

とは言いつつ参考サイト

ネットワーク

VirtualBoxで3つのVMを設け、下記のように接続する。
image.png
中央のルーターである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の様子は下記である。
NoFilter.png
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の様子は下記である。
FillterReject.png
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の様子は下記である。FilterDrop.png
また、コマンド実行状況は下記となる。
image.png
ルーターから何も応答がない(TCPを”DROP”)ので、クライアントは再送している。こちらも期待どおりの動作である。

終わりに

単純だがこれが基本であろう。その2では、NATを取り上げる予定。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?