NAT、iptables 和有问题的端口

NAT、iptables 和有问题的端口

我正在使用虚拟机构建一个小型办公网络。我的架构如下:

  • 计算机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 上的所有出站流量。

相关内容