iptablesがすぐに適用されるように強制する

iptablesがすぐに適用されるように強制する

私は次の設定を持っています:/etc/iptables/rules.v4

# Generated by iptables-save v1.4.21 on Mon Jul  1 11:32:00 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3:620]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.35.107/32 -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -s 192.168.35.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -s 192.168.35.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Mon Jul  1 11:32:00 2019

上記から特定のIPのpingをブロックしたいことがわかります。保存ルールiptables-restore < /etc/iptables/rules.v4とリストルールを使用した後、iptables -LIP 192.168.35.107を使用しているコンピュータがサーバーをpingできないと結論付けることができます。

ただし、そのIPを持つコンピュータはpingを実行できます。無期限私が会議を中断するまで。 pingを中断した後も再びpingができなくなるまで約60秒間一時停止する必要があります。 pingの間に5〜10秒間一時停止すると、ファイアウォールが通過することができます。

興味深いことに、iptablesを介してpingを有効にするとすぐに動作します。また、Sambaポート445を試してみました。同じ。

iptablesによって削除されたポートをすぐに適用する方法はありますか?

答え1

nf_conntrack*この問題はシステムがnetfilterの接続追跡システム(モジュールファミリ)を有効にしているために発生します。そしてあなたの--state RELATED,ESTABLISHEDルール(明確に設定されている)はpingのための特定のルールの前にACCEPT配置されます。DROP

これらの-m state規則とより細かい-m conntrack規則は、UDPやICMPなどのプロトコルも技術的に接続指向でない場合でも追跡する接続追跡システムを使用します。デフォルトの有効期限を使用してリストに「接続」エントリを作成して、これらのプロトコルを追跡します。これらのデフォルトは特定のファイル/proc/sys/net/netfilter/(通常はnf_conntrack_*_timeout

ICMPは非接続プロトコルであるため、接続追跡システムはこれらの「接続」が実際に完了するタイミングを検出できないため、タイムアウトベースのヒューリスティックに依存する必要があります。したがって、送信元IP /宛先IP ICMP「会話」と一致する接続追跡リストにエントリがある限り、すべてのルールはそのトラフィックと一致し、特定の-m state --state ESTABLISHEDルールに従ってそれを受け入れます。

気付いた「〜60秒」のタイムアウトは通常30秒です。ただし、そのファイルに別の値を入力し/proc/sys/net/netfilter/nf_conntrack_icmp_timeoutて変更された可能性があります。echo

また、このファイルの値は、その時点から新しい「接続」に適用されます。接続追跡システムで知られている現在の項目と現在の有効期限のタイムアウトを表示するには、インストールが必要なconntrackコマンドを使用できます。このコマンドを使用して項目を変更または削除することもできます。

iptablesによって削除されたポートをすぐに適用する方法はありますか?

最も簡単な方法は、常にACCEPTルールの前にDROPルールを置くことです。-m state

代替方法は、ルールを追加するたびにDROPそのconntrackコマンドを実行して現在アクティブなエントリを削除することです。

答え2

これは、そのホストの接続テーブルにエントリがまだ存在し、ルールを追加または削除するiptablesと、ユーティリティが何らかの方法でそのエントリを更新または操作しないために発生します。

これを行うには、インストールする必要がありますconntrack(8)カーネルのリアルタイム接続追跡テーブルを操作するために使用できるユーティリティです。これは/proc、他の方法では利用できない機能を提供するnetlinkソケットインタフェースを使用して行われます。

たとえば、conntrack -Fすべての接続がフラッシュされ、conntrack -D --dst=8.8.8.8このターゲットを持つすべてのアイテムが削除され、conntrack -D --src=192.168.35.107このソースを持つすべてのアイテムが削除されます。

ほとんどのディストリビューションに簡単にインストールできます。apt-get install conntrack、、yum install conntrackなど。

関連情報