私は次の設定を持っています:/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 -L
IP 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
など。