有没有办法更新 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) 断开连接。