1)检查 IP 地址是否被防火墙阻止的最佳方法是什么?
我知道这个方法:
iptables -L -n --line | grep 111.222.333.444
但是,如果防火墙阻止了某个 IP 地址范围,例如 111.222.333.444/19,但我搜索 111.222.333.456,则不会返回任何结果。如果整个范围都被阻止,我该如何查找特定的 IP 地址?
2)如果防火墙阻止了某个IP地址,那么搜索结果中第一行和第二行是什么意思:
489 DROP all -- 11.222.333.444/19 0.0.0.0/0
490 DROP all -- 0.0.0.0/0 11.222.333.444/19
如何解除对 IP 地址或 IP 地址范围的阻止?这样正确吗?:
iptables -I INPUT -s 111.222.333.444 -j ACCEPT
(我只是想要解除阻止,而不是放入白名单)。
3)如果我想在我的服务器中阻止 IP 地址,这样做正确吗?
iptables -A INPUT -d 111.222.333.444 -j DROP
在阻止/解除阻止 IP 地址后,我是否需要重新启动/重新加载防火墙?
谢谢。
答案1
1) 您不必 grep iptables 输出,而是处理输出,将被阻止的 IP 子网转换为位掩码,以便您可以将其与您感兴趣的地址进行比较。这可以在 Perl 或 Python 等脚本语言中完成。
2a) 这两行指的是传入和传出数据 - 防火墙将阻止该网络与您的服务器/网络进行通信的尝试,和您的服务器/网络尝试与该网络进行通信。(这是对他们的尊重,因此您不会发送他们永远无法响应的连接请求。)
2b) 要解除对 IP 或网络的封锁,您只需将其从列表中完全删除即可。如果您想保持网络封锁,但仍允许从该网络中的一个特定地址进行访问,则必须在 INPUT 链顶部插入两个 ACCEPT 规则,一个允许传入流量,一个允许传出流量:
iptables -I INPUT 1 --src 111.222.333.444 -j ACCEPT
iptables -I INPUT 1 --dest 111.222.333.444 -j ACCEPT
这会有效地将这些地址放入白名单中,正如您表示不想做的那样。所以您的选择在这里有点有限。
3a) 假设您在 INPUT 链中没有 ACCEPT 规则,是的。如果有,您应该使用-I INPUT 1
而不是将这些规则插入到表的顶部。但是您提供的示例只会阻止从您的网络发送到他们的网络的数据包。如果您还想阻止来自他们网络的传入流量,-A INPUT
请务必添加另一条规则,使用-s
或 而--src
不是。-d
3b) 使用该iptables
命令所做的更改会立即生效。但是,根据您的配置,这些更改可能不会在重启后保留。