在 Centos 6.4 上,我想阻止除 22、80 和 443 之外的所有传入端口。80(外部)应该重定向到 8080(内部)。443(外部)应该重定向到 8181(内部)。我使用了以下命令:
service iptables stop
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8181
service iptables save
service iptables restart
但是,我仍然可以访问端口 8080 和 8181。有没有办法在外部阻止端口 8080 和 8181,并且仍然在内部打开以从 80 和 443 重定向?
您的规则中没有任何内容会丢弃任何数据包。您可以通过将
INPUT
链的默认策略设置为DROP
. 默认情况下是ACCEPT
:当您这样做时,您可能会开始注意到您的传出连接不再有效。
您可以在
INPUT
链的顶部添加规则以ACCEPT
返回已经建立的流量。使用以下方法执行此操作:
该
RELATED
部分允许其他相关流量通过(例如,由于ESTABLISHED
连接中发生某些事情而发送的 ICMP 数据包)我最好创建一个新链,然后将我的规则添加到该链中。您可以通过以下方式做到这一点:首先 DROP 传入/转发/传出流量
然后创建一个带判断ACCEPT的链,在里面添加规则:
然后,添加重定向规则:
服务器上是否有多个 NIC?你可以这样锁定它。您还可以通过源 IP 轻松锁定它,这样您就只能允许来自特定 IP 的那些端口的“INPUT”规则,以及来自其他 IP 的所有“FORWARD”或“PREROUTING”规则。