添加额外允许的 IP

添加额外允许的 IP

这是我用来作为参考的:https://unix.stackexchange.com/a/145933

所以如果我这样做:

iptables -I INPUT -p tcp -s MY IP --dport 21 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 21 -j DROP

我知道只能MY IP连接到端口 21。但是有没有办法添加另一个接受的 IP?

我尝试过这样做:

iptables -I INPUT -p tcp -s MY OTHER IP --dport 21 -j ACCEPT

但它仍然被阻止,但我认为这是因为 DROP 是之前的。我可以在不删除 DROP 规则的情况下追加吗?

答案1

选项不-Iiptables附加(即-A),它用于插入一个新的规则。不同之处在于,-A添加了新规则结尾链的,而默认情况下,-I在链的开始的链条。

由于链是按顺序读取的,因此在规则-j ACCEPT之前处理您的规则非常重要-j DROP

有几种方法可以做到这一点:

  1. 使用-A而不是-I添加您的规则。这将确保规则添加在最后,并且如果您不重新排序命令,它们将按正确的顺序排列。我会推荐这个而不是其他两个选项。
  2. 继续使用-I,但交换您的规则。这样,-j ACCEPT规则将在规则之前被处理-j DROP
  3. -I可选地接受一个额外的参数,即链中插入新规则的位置,它应该是一个数字。由于您添加的-j ACCEPT规则不带任何参数,因此它成为第一个规则(即第 1 行);因此,在第 2 行添加第二条规则:

    iptables -I INPUT 2 -p tcp -s 0.0.0.0/0 --dport 21 `-j DROP`
    

话虽如此,如果您要拥有许多像第一个规则一样的规则,那么出于性能原因,最好创建一个自定义链:

iptables -N check-ftp
iptables -A check-ftp -s IP1 -j ACCEPT
iptables -A check-ftp -s IP2 -j ACCEPT
[...]
iptables -A check-ftp -j DROP
iptables -A INPUT -p tcp --dport 21 -j check-ftp

这会为您的链中的“FTP 连接”创建一条规则。这样,如果传入的网络数据包不是 FTP 数据包,则 netfilter 代码将不会遍历(长)规则列表来确定是否允许此特定数据包,而是立即转到下一个规则。如果它一个 FTP 数据包,然后将要过一遍长长的清单。

相关内容