Linux 防火墙/IPtables - 如何查找特定 IP 地址(范围)、阻止、解除阻止地址?

Linux 防火墙/IPtables - 如何查找特定 IP 地址(范围)、阻止、解除阻止地址?

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命令所做的更改会立即生效。但是,根据您的配置,这些更改可能不会在重启后保留。

相关内容