我需要创建一个新的链来处理特定的 IP,比如 192.168.0.101。
在这个新的链中,这个 IP 将可以访问除 FTP 之外的所有服务。
我的解决方案是:
iptables -N IP1
iptables -A IP1 -p tcp --dport 20 -j DROP
iptables -A IP1 -p tcp --dport 21 -j DROP
iptables -A IP1 -j ACCEPT
iptables -A INPUT -s 192.168.0.101 -j IP1
解决方案正确吗?传入数据包是否需要两条带有 --sport 20, 21 的规则?
答案1
您建议的规则应该有效,但在某些情况下,链中的 DROP 不是正确的操作。
例如,如果您希望后面的规则INPUT
链允许网络上所有主机通过 ftp 访问某个特定目的地。
在这种情况下,aRETURN
可能是更好的选择。假设您的 INPUT 链的策略是,DROP
这可能也会得到相同的结果。
iptables -A IP1 -p tcp --dport 20 -j RETURN
iptables -A IP1 -p tcp --dport 21 -j RETURN
iptables -A IP1 -j ACCEPT
答案2
您的命令对我来说看起来是正确的。
--sport
将用于源端口(客户端正在连接的端口从),通常是随机的。 --dport
是正确的。回想一下,连接是源地址、源端口、目标地址和目标端口的 4 元组 - iptables 会根据它看到的数据包中的 4 元组进行操作。
FTP 的一个有趣之处在于,在被动模式下,客户端和服务器会就新端口号达成一致。另外,我认为使用端口 20 是为了建立连接到文件的目的地无论控制连接上的服务器是哪个,但在这种情况下阻止它不会有什么坏处。