我有以下networking架构:
所以我应用这个来获得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的连接,并且如果与外部stream量无关,则忽略外部stream量。 允许的连接应该是从计算机C到外部,而不是从外部到计算机C(我的意思是 – 计算机C不托pipe任何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
最后一条规则(丢弃与这些规则不同的任何其他stream量)是在configuration的末尾,所以-A应该正常工作。
事情是…它不工作。 如果我把这样的最后一条规则:
iptables -A FORWARD -i eth2 -o eth0 -j DROP
它只是放弃一切,例如,端口21(以前打开,你可以看到上面)是不是工作。
你能告诉我我做错了什么吗? 我一直在努力解决这个问题一段时间,我无法解决这个问题。 谢谢!
您允许传出TCP / IP 21的新的/build立的连接,并且允许传入build立的TCP 21连接。但是,您将每个通信都丢弃在前向链路中。
我认为这个问题来自于这里,你应该添加一个前进的规则,允许传出和传入的交通。