无法在 Google 云虚拟机实例 (CentOS 7) 上保存 iptables 规则

Can't save iptables rule on Google Cloud VM instance (CentOS 7)

我在 CentOS7 上 运行ning Tomcat8 端口 8080 上的 Google VM 实例中。 我设置了 iptables 规则以将所有外部连接映射到端口 80 到 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

之后我用

保存规则
service iptables save

Tomcat 工作正常,可以通过端口 80 从外部访问。 规则保存在 /etc/sysconfig/iptables.

...
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
...

但在服务器重新启动后,规则未应用。 它仍在文件 /etc/sysconfig/iptables 中,但当我 运行

iptables-save

iptables 规则好像是从别的地方恢复过来的。

我如何正确地保留规则以在重启后保留它?

要解决 IPtables 问题,您可以执行以下操作:

yum install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl enable ip6tables
systemctl stop firewalld
systemctl start iptables
systemctl start ip6tables

不过,Centos7 现在改用 FirewallD。为了应用防火墙,您需要先检查哪些可用区域以及哪些区域在 FirewallD 上处于活动状态,方法是 运行 执行以下命令:

firewall-cmd --list-all-zones
firewall-cmd --get-active-zones

例如,如果 public 区域处于活动状态,您可以 运行 这些命令来启用端口转发(在您的情况下是端口 80 到 8080):

firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent

完成后,您可以通过 运行 执行以下命令重新加载规则以确保一切正常:

firewall-cmd --reload

您可以查看 man firewall-cmd 了解更多信息。