Centos 7保存iptables设置


58

问题:服务器重启后,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不适合服务器环境...
Juan Jimenez

Answers:


67

CentOS 7 现在正在使用FirewallD

例:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

重新加载规则:

firewall-cmd --reload

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

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

1
我尝试--zone=trusted使用firewalld-cmd 为lo()配置端口转发80-> 8180,但它不起作用(在中起作用--zone=public)iptables sudo /sbin/iptables -t nat -I PREROUTING -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

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

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

66

通过以下命令禁用firewalld:

systemctl disable firewalld

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

yum install iptables-services

然后启用iptables作为服务:

systemctl enable iptables

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

service iptables save

22

在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

2

像这样的脚本可能对任何人都有用吗?

请注意,您将丢失当前配置的所有内容,因为它会删除Firewalld并刷新INPUT表中的所有当前规则

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

1

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


7
在CentOS7没有更多的/ etc / SYSCONFIG / iptables的文件
roothahn

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

1
是的/etc/sysconfig/iptables,对我来说也不存在。但是,/etc/sysconfig/iptables-config确实存在。但是它内部没有防火墙规则,就像以前的iptables文件一样。
Kentgrav

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

3
那应该是“ yum install iptables-services”
qris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.