![使用 iptables 阻止端口 25(仅限出站)](https://linux22.com/image/175529/%E4%BD%BF%E7%94%A8%20iptables%20%E9%98%BB%E6%AD%A2%E7%AB%AF%E5%8F%A3%2025%EF%BC%88%E4%BB%85%E9%99%90%E5%87%BA%E7%AB%99%EF%BC%89.png)
我最近开始使用以下规则阻止 OpenVZ 7 节点上的端口 25:
iptables -I FORWARD -p tcp --dport 25 -j DROP
这工作正常,但似乎同时阻止入站和出站,但我只想阻止出站。这可能吗?
如果这有什么意义的话,我使用以下命令再次为特定 IP 地址打开端口 25:
iptables -I FORWARD 1 -d 192.168.0.1 -p tcp -m tcp --dport 25 -j ACCEPT
iptables -I FORWARD 1 -s 192.168.0.1 -p tcp -m tcp --dport 25 -j ACCEPT
答案1
我删除了原来的答案,因为它没有帮助,因为我读得太快并且没有注意到我们正在处理容器化。以下注释可以忽略(除非您想了解如何记录 iptables 活动)。
考虑到容器中接口的名称,您可能会更幸运:
iptables -A FORWARD -o docker0 -p tcp --dport 25 -j DROP
docker0
如果您的接口名称在哪里。如前所述,来自容器的流量通过 FORWARD 链(再次 - 容器化),因此 OUTPUT 和 INPUT 链在这里没有价值。
答案2
我很高兴地说,我已经完全正常工作了,感谢 Kahn,这是适合运行 OpenVZ 7 的其他人的解决方案:
运行以下命令:
iptables -A FORWARD -o br0 -p tcp --dport 25 -j DROP
这将删除 br0 上的出站端口 25(虚拟机继承的接口)
然后,如果需要打开特定 IP 地址,请运行:
iptables -I FORWARD 1 -s 192.168.0.1 -p tcp -m tcp --dport 25 -j ACCEPT
答案3
在 Ubuntu 22.04 容器 ( FROM ubuntu:jammy
) 上,我必须使用以下命令
添加
--cap-add=NET_ADMIN
到docker run
命令中。sudo iptables-legacy -A OUTPUT -o eth0 -p tcp --dport 25 -j DROP
如果没有iptables-legacy
,我得到的是unknown option "--dport"
没有-A OUTPUT
它仍然允许出站端口