
再起動せずに接続をブロックするように iptables ルールを更新する方法はありますか?
以下に、避けたい動作の例を示します。
On shell#1: I start a ping command 8.8.8.8
On shell#2: I block ping command with iptables rules.
On shell#1: The ping command is still working and I get replies from 8.8.8.8,
but if I end the ping command and I restart it, now it will not work.
再起動せずに ping コマンドをブロックする方法があるかどうか知りたいです。
答え1
1) あなたが尋ねているのは、iptables
接続状態に関係なく、宛先へのすべてのトラフィックをブロックして、既存の接続がタイムアウトするようにする最も簡単な方法です。したがって、あなたの例では
iptables -I OUTPUT -d 8.8.8.8 -j DROP
8.8.8.8 に到達する UDP (DNS)、ICMP (ping)、および TCP パケットを直ちにブロックします。これが答えのようです。説明されているような動作が発生する場合は、使用している iptables コマンドラインを投稿してください。
2) プロセスが再起動されるまで既存の接続を維持するという他の動作が必要な場合は、次のいずれかを実行します。
iptables -I OUTPUT -d 8.8.8.8 -m state --state NEW -j DROP
または
iptables -I OUTPUT -d 8.8.8.8 -p tcp --syn -j REJECT
3) 確立された TCP 接続をブロックしてタイムアウトさせるのではなく、実際にできるだけ早く閉じたい高度なケースでは、-j REJECT --reject-with tcp-reset
入力チェーンと出力チェーンに基づいて何かを行ったり、tcpkill
数秒間実行したりすることができます。これは難しいため、ほとんどの場合、ソリューション 1) を使用して接続を切断する必要があります。