问题:服务器重启后iptables重置为默认设置。

我试图设置如下规则:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT



service iptables save

,它写回这样的内容

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

,之后我就跑了(这一次完成):

chkconfig iptables on(我已经读到必须执行此操作才能在重启后恢复设置)

之后,我重启并运行以下命令:

systemctl list-unit-files | grep iptables

,我看到iptables.service已启用,但是规则(打开端口3000)不再起作用。

如何我要保留这些设置吗?

评论

您为什么不只使用firewalld?它可能仍在运行。

可能是因为firewalld不适合服务器环境...

#1 楼

CentOS 7现在正在使用FirewallD!使用--permanent标志保存设置。
示例:
firewall-cmd --zone=public --add-port=3000/tcp --permanent

然后重新加载规则:
firewall-cmd --reload


评论


不知道为什么来自AWS AMI的centos7映像没有firewallD。

– Saad Masood
2015年9月7日在8:32

或者,您可以禁用firewalld并安装“ iptables-services”软件包以实现接近本机的iptables兼容性:)

–vagarwal
16年6月22日在15:12

我尝试使用firewalld-cmd为lo(--zone = trusted)配置端口转发80-> 8180,但是它不起作用(在--zone = public中有效)iptables sudo / sbin / iptables -t nat-我预选-p tcp --dport 80 -j REDIRECT --to-port 8180; sudo / sbin / iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180可以工作(但是每个firewalld --reload都将撤消此操作)

– djb
17年4月25日在13:37

@saad:由于aws已经提供了防火墙服务,因此可以将ami保持很小

– sgohl
18 Mar 27 '14:57



它不是!我已经订购了Centos 7 VPS,并且默认情况下它具有iptables!操作系统版本:7.5.1804(Core)

– codezombie
18-09-28在19:30



#2 楼

通过以下命令禁用防火墙:

systemctl disable firewalld


,然后通过以下命令安装iptables-service:

yum install iptables-services


然后启用iptables作为服务:

systemctl enable iptables


现在您可以通过以下命令保存iptable规则:

service iptables save


评论


工作请客,谢谢

– pcdev
20年4月8日在9:51

#3 楼

在CentOS 7 Minimal上,您可能需要安装iptables-services软件包(建议使用@RichieACC):

sudo yum install -y iptables-services


,然后使用systemd启用服务:

sudo systemctl enable iptables.service


并运行初始化脚本以保存您的防火墙规则:

sudo /usr/libexec/iptables/iptables.init save


#4 楼

iptables-save > /etc/sysconfig/iptables

将保存当前配置,而无需安装任何其他库或服务。

评论


从其联机帮助页:iptables-save-将iptables规则转储到stdout。除非您将其重定向到某个文件,否则它不会保存任何内容。

–Skippy le Grand Gourou
20年6月30日在13:50

#5 楼

您可以直接修改/ etc / sysconfig / iptables文件。
重新加载iptables服务以从该文件重新加载规则。
但是,正如您已经知道的那样,firewalld是Centos的新默认防火墙系统,这是学习使用方法的好机会,您不觉得吗?

评论


在CentOS7中,不再有/ etc / sysconfig / iptables文件

– sgohl
2014年9月6日上午9:07

抱歉@roothahn,但是它确实存在...除非您当然错过了一些包裹。在/usr/lib/systemd/system/iptables.service中,您可以看到实际启动的是“ /usr/libexec/iptables/iptables.init start”,这是寻找旧的旧配置文件的旧的和昂贵的脚本在/ etc / sysconfig中

–扔石头
2014年9月6日15:52



是的,/ etc / sysconfig / iptables对我也不存在。但是,/ etc / sysconfig / iptables-config确实存在。但是它没有iptables文件以前的防火墙规则。

–肯特格雷夫
2014年9月30日19:03在

我发现该文件在默认的最小安装目录中也不存在。看来CentOS 7默认不安装iptables.service。 “ yum install -y iptables.service”安装了该服务,并为我创建了默认的/ etc / sysconfig / iptables。

– RichieACC
2014年12月4日上午8:33

那应该是“ yum install iptables-services”

– qris
2015年1月4日在17:15

#6 楼

像这样的脚本可能对任何人都有用吗?
yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup


如果IPv6流量可能会(现在或以后的任何时间)访问您的系统,我想您也希望这样做:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup