iptables ルールは生のソケット パケットを制御できますか?

iptables ルールは生のソケット パケットを制御できますか?

私が使用しているプログラムは、raw パケット モードを使用していくつかの TCP 接続を生成します。次の 2 つのコマンドを実行したとします。

/sbin/iptables -A INPUT -s 8.0.0.0/8 -j DROP
/sbin/iptables -A OUTPUT -d 8.0.0.0/8 -j DROP

そのネットワークにパケットが送信されないと想定しても安全でしょうか?

答え1

残念ながら、動作しないようです。確認方法は次のとおりです。1.1.1.1 と 2.2.2.2 の 2 つのサーバーを使用します。1.1.1.1 はパケットを送信し、2.2.2.2 はリッスンします。

まず、2.2.2.2 でスニッフィングを設定しましょう。

➜  ~ sudo tcpdump -vv 'src 1.1.1.1'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

次に、ポート 995 でその IP にパケットを送信します。

$ zmap --whitelist-file=<( echo 2.2.2.2 ) -p 995 -n 1

予想どおり、1.1.1.1 からのトラフィックが 2.2.2.2 に表示されています。

11:18:49.330632 IP (tos 0x0, ttl 250, id 54321, offset 0, flags [none], proto TCP (6), length 40)
    1.1.1.1.47495 > 2.2.2.2.pop3s: Flags [S], cksum 0x5e8a (correct), seq 4248475135, win 65535, length 0
11:18:49.331688 IP (tos 0x0, ttl 59, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    1.1.1.1.47495 > 2.2.2.2.pop3s: Flags [R], cksum 0x5e87 (correct), seq 4248475136, win 0, length 0

ここで、1.1.1.1 でこれをブロックしてプローブを繰り返してみます。

$ /sbin/iptables -A OUTPUT -d 2.2.2.2  -j DROP
$ zmap --whitelist-file=<( echo 2.2.2.2 ) -p 995 -n 1

残念ながら、さらに tcpdump データが表示されています。これは、機能しなかったことを意味します。

最終的には、クラウド プロバイダーのファイアウォール機能を使用して、別のレイヤーで問題を解決しました。

関連情報