假设我想使用 iptables 拒绝从网络上的特定 IP 发送到我的计算机的数据包。我是否需要在命令中定义数据包的目的地,还是仅包含源就足够了?
例如,假设我正在 126.184.25.25 上工作,并且我想拒绝来自 126.184.25.101 的所有 TCP 数据包,我应该使用:
sudo iptables -t filter -A INPUT -p tcp -s 126.184.25.101 -d 126.184.25.25 -j REJECT
或者删除目标地址并使用是否足够:
sudo iptables -t filter -A INPUT -p tcp -s 126.184.25.101 -j REJECT
在我的网络上测试上述两种方法时,前者似乎不起作用,但两者似乎都有道理,我不确定为什么前者可能不正确。
答案1
我是否需要在命令中定义数据包的目的地,还是仅包含源就足够了?
不,是的,确实如此。如果您忽略某个设置,它将具有默认值。如果不指定协议,则默认阻止所有协议;如果不指定表 (-t),则默认进行过滤。
手册页通常会说明默认设置(如果有)。
答案2
拒绝来自源地址的所有 tcp 数据包:
sudo iptables -I 输入 -p tcp -s 126.184.25.101 -j 拒绝
没有必要指定目的地,并且在某些情况下(即广播数据包)不起作用。
这表示的是您的 INPUT 链,(-I) 在顶部插入此规则。对于来自 (-s) 源地址的流量,(-j) 目标流量到 DROP 规则。
DROP 可能比 REJECT 更好,因为拒绝发回响应,而 drop,嗯.. 丢弃数据包,而不响应。
另外,如果你想删除所有协议(tcp、udp、icmp 等),请删除“-p tcp”,如下所示:
sudo iptables -I 输入 -s ipaddress -j 删除
这可能会对您的网络情况产生影响,其中 DROP 会造成麻烦,然后 REJECT 可能是更好的选择。
另请注意,这不会超出当前操作系统的运行周期。如果需要永久性,您将需要进行更多研究。