iptables のドロップ長と TTL 条件が機能しない

iptables のドロップ長と TTL 条件が機能しない

Linux ホストのユーティリティを使用して、iptablesミニ ファイアウォールを作成する必要があります。パッケージ長が 722 より大きく、TTL が 22 より大きいすべての着信接続をドロップする必要があります。正確に AND する必要があります。両方の条件が TRUE の場合のみドロップします。

sudo iptables -N LOGDROP
sudo iptables -A OUTPUT -m ttl --ttl-gt 22 -j LOGDROP
sudo iptables -A INPUT -m ttl --ttl-gt 22 -j LOGDROP
sudo iptables -A LOGDROP -m length --length 722:65535 -j DROP

ホストの IP アドレスは10.6.7.9ファイアウォール付きです。

このホストから別のホストに ping を試みて、4 つのテストを実行しました。

ping -s 10000 -t 250 10.6.7.10 //fail (TTL AND LENGHT are wrong)
ping -s 100 -t 200 10.6.7.10 //success (TTL is wrong)
ping -s 10 -t 10 10.6.7.10 //success (Both are right)
ping -s 10000 -t 10 10.6.7.10 // fail, BUT SHOULD BE TRUE.

最後の ping が機能しないのはなぜですか? また、それを修正するにはどうすればいいですか?

答え1

2 つの条件が同時に真である必要がある場合は、次のように条件を構築する必要があります。

sudo iptables -A OUTPUT -m ttl --ttl-gt 22 -m length --length 722:65535 -j DROP

sudo iptables -A INPUT -m ttl --ttl-gt 22 -m length --length 722:65535 -j DROP

答え2

このオプションは送信パケットの TTL のみを設定するため、リモート ホストからの ping 応答の TTL が大きい可能性が高くなります-t。最近の一般的なデフォルトの TTL は 64 です (インターネットの幅の 2 倍が推奨値だと思います)。

もう 1 つの可能性としては、10000 バイトの ping を断片化する必要があったため、リモート ホストが応答を拒否した可能性があります。800 バイトの ping を送信してみてください。

また、これを行うと、sudo iptables -L -vルールが何回ヒットしたかがわかります。これはデバッグに役立ちます。

別のデバッグ オプションとしては、次のようなルールを実行することが挙げられます。

sudo iptables -A LOGDROP -m length --length 722:65535 -j LOG

DROP ルールの前。これにより、パケットがドロップされる前にカーネル ログ ( で読み取りdmesg) に記録されます。その後、何がドロップされたかを確認できます。

関連情報