iptables将端口80/443redirect到8080/8181

在Centos 6.4上,我想阻塞除了22,80和443之外的所有传入端口。80(外部)应该被redirect8080(内部)。 443(外部)应该被redirect到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,仍然有内部开放的redirect从80和443?

你的规则没有任何东西丢弃任何数据包。 您可以通过将INPUT链的默认策略设置为DROP来实现此目的。 默认情况下它是ACCEPT

 iptables -P INPUT DROP 

当你这样做,你可能会开始注意到你的传出连接不再工作了。

您可以在INPUT链的顶部添加规则,以便ACCEPT已build立的stream量。

这样做使用以下内容:

 iptables -A INPUT -m state --state ESTABLISHED,RELATED 

RELATED部分允许其他相关stream量通过(例如,由于在ESTABLISHED连接中发生的事件而发送的ICMP分组)

我会更好地创build一个新的链,然后将我的规则添加到这个链中。 您可以通过以下方式实现:首先删除传入/转发/传出stream量

 iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 

然后用判断ACCEPT创build一个链,并在里面添加规则:

 iptables -N myrules # Create a new chain iptables -A myrules -m state --state ESTABLISHED,RELATED iptables -A myrules -j LOG --log-prefix="Myrules: " # Just a log prefix iptables -A myrules -j ACCEPT # Packets matching this rule will be ACCEPTed iptables -A INPUT -i eth0 -p tcp --dport 22 -j myrules 

然后,添加redirect规则:

 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 

服务器上是否有多个NIC? 你可以用这种方法locking它。 您也可以轻松地通过源IP将其locking,因此您只能将“input”规则允许来自特定IP的端口,而只允许来自其他端口的所有“前向”或“预谋”规则。