我正在使用虚拟机构建一个小型办公网络。我的架构如下:
- 计算机A:网关,IP1.1.1.1,用于 NAT 的 iptables [eth0=public internet dhcp, dhcp; eth1=gateway]
- 计算机B:客户端,IP1.1.1.2,使用计算机 A 的网关。
NAT 正在运行,计算机 B 可以使用 A 的网关访问互联网。我将一些传入端口从 A 重定向到 B(例如,如果 A 收到对端口 80 的请求,它会自动转到计算机 B 的 Apache)。
问题是我不太明白如何从计算机 A 打开/关闭计算机 B 的端口。我知道如何关闭端口:
iptables -A INPUT -p tcp --dport 80 -j DROP
并且它将拒绝所有到端口 80 的传入(非输出)连接。但是,这适用于主接口 eth0。例如,我尝试删除计算机 B、端口 80 的传入和传出连接:
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j DROP
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j DROP
但它不起作用。我不知道我做错了什么。有什么线索吗?
答案1
第一行应该包含 sport(源端口为 80)。同时要小心使用 -A。这会将规则附加到链中(在末尾添加规则)。链中的规则从头到尾进行评估,如果一条规则匹配,则不再评估其余规则。因此,如果您想确保使用 -I(在链的开头插入):
iptables -I FORWARD -i eth1 -o eth0 -p tcp --sport 80 -j DROP
iptables -I FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j DROP
答案2
我相信您错过了“OUTPUT”指令。
请尝试以下操作:
iptables -A OUTPUT -p tcp --dport 80 -j DROP
这将丢弃端口 80 上的所有出站流量。