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

Dis*_*tum 3 linux iptables centos centos6.4

在 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
Run Code Online (Sandbox Code Playgroud)

但是,我仍然可以访问端口 8080 和 8181。有没有办法从外部阻止端口 8080 和 8181,并且仍然在内部打开以从 80 和 443 重定向?

gpa*_*ent 6

您的规则中没有任何内容会丢弃任何数据包。您可以通过将INPUT链的默认策略设置为 来完成此操作DROP。默认情况下它是ACCEPT

iptables -P INPUT DROP
Run Code Online (Sandbox Code Playgroud)

当您这样做时,您可能会开始注意到您的传出连接不再有效。

您可以将INPUT链顶部的规则添加到ACCEPT已经建立的流量中。

使用以下方法执行此操作:

iptables -A INPUT -m state --state ESTABLISHED,RELATED
Run Code Online (Sandbox Code Playgroud)

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