iptables 将端口 80/443 重定向到 8080/8181

iptables 将端口 80/443 重定向到 8080/8181

在 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 进行重定向?

答案1

您的规则中没有任何内容会丢弃任何数据包。您可以通过将INPUT链的默认策略设置为来实现这一点DROP。默认情况下,它是ACCEPT

iptables -P INPUT DROP

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

您可以在链顶部添加规则,INPUT以便ACCEPT重新引入已经建立的流量。

使用以下命令进行操作:

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

RELATED部分允许其他相关流量通过(例如,由于连接中发生某些事情而发送的 ICMP 数据包ESTABLISHED

答案2

我最好创建一个新的链,然后将我的规则添加到这个链中。你可以这样做:首先删除传入/转发/传出流量

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

然后创建一个带有判断ACCEPT的链,并在里面添加规则:

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

然后,添加重定向规则:

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

答案3

服务器上是否有多个 NIC?您可以通过这种方式锁定它。您还可以通过源 IP 轻松锁定它,这样您就可以只允许来自特定 IP 的那些端口的“INPUT”规则,以及来自其他 IP 的所有“FORWARD”或“PREROUTING”规则。

相关内容