NAT 端口 - 它们如何工作?

NAT 端口 - 它们如何工作?

我有以下网络模式:


  • 计算机 A:三个网卡:
    • NIC 1(eth0):dhcp,公共互联网
    • NIC 2(eth1):静态 192.168.1.1,计算机 B 的网关
    • NIC 3(eth2):静态 192.168.2.1,计算机 C 的网关

  • 计算机 B:静态 192.168.1.2,使用网关 192.168.1.1(NIC 2)。

  • 计算机 C:静态 192.168.2.2,使用网关 192.168.2.1(NIC 3)。

因此我应用这个来使 NAT 工作:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

现在每台计算机都可以连接到互联网。我已经对主计算机(计算机 A)应用了规则,例如断开与某些端口的连接,例如 ssh:

iptables -A INPUT -p tcp --dport 22 -j DROP

但例如现在我想仅有的允许计算机 C 的端口 20、21、22、53 和 80 的连接,如果外部流量与这些端口无关,则忽略它。允许的连接应该是从计算机 C 到外部,而不是从外部到计算机 C(我的意思是 - 计算机 C 没有托管任何 HTTP 或 SSH,但它将使用它们作为客户端)。

我想应该这样做:

iptables -A OUTPUT -i eth2 -o eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth2 -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

最后一条规则(删除任何不同于这些流量的其他流量)位于配置的末尾,因此 -A 应该可以正常工作。

问题是...它不起作用。如果我将最后一条规则设置为如下形式:

iptables -A FORWARD -i eth2 -o eth0 -j DROP

它只是放弃一切,例如,端口 21(之前已打开,如您上面所见)也不起作用。

你能告诉我我可能做错了什么吗?我已经被这个问题困扰了一段时间,但无法解决。谢谢!

答案1

您允许 TCP 21 发出新的/已建立的连接,并且允许 TCP 21 传入的已建立连接。但是您丢弃了前向链中的每个流量。

我认为问题出在这里,那么您应该添加转发规则以允许传出和传入流量。

相关内容