更新:
我试过sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4,11.22.33.44 -j DROP
了,不工作,它给了我一个错误
iptables v1.8.2(nf_tables):!不允许有多个源或目标 IP 地址
例如,我的目标是只允许只允许1.2.3.4
并11.22.33.44
连接我服务器的 ssh(端口 22)。
我更喜欢这种方法/命令而不是其他方法。
sudo iptables -A INPUT -p tcp --dport 22 ! -s 1.2.3.4 -j DROP
但我不知道如何11.22.33.44
在此命令中添加另一个允许的 IP,
你能给我一点帮助或提示吗?
谢谢。
您可以使用IP 集。
根据您的发行版,您可能需要先安装该
ipset
实用程序。然后,您创建一个具有友好名称的集合。
一旦你有了一个集合,你就可以给它添加 IP。
现在您可以使用您在
iptables
规则中创建的集合,而不是单个 IP。仅使用一个命令 using定义多个地址是不可能的。
iptables
! --source
您可以考虑将默认规则集从允许更改为删除。这将允许您仅根据应允许的内容进行定义,即类似如下:
好处/优点是这样的规则集性能会更好,因为考虑了包的状态。此外,它还允许使用所需的语法。Plus 也是定义防火墙规则的推荐方式。
但是,请记住,如果使用如上所示的语法:
-s 1.2.3.4,11.22.33.44
仍然会创建 2 个单独的表条目,正如您可以使用命令看到的那样iptables -L INPUT
。此外,它不适用于所有版本的 iptables。此外,我个人觉得很难阅读或维护。这就是我试图避免它的原因,而是使用 2 个单独的命令。如果您希望尽量减少规则的数量,您可以做的最接近的方法是使用一个
iptables
规则来--match
代替--source
。但是,您仍然必须使用附加命令来定义匹配。在处理 ipset 的其他评论中已经完美地解释了它是如何工作的。