场景:CentOS7中执行启动关闭或开启防火墙命令 service iptables start/stop 会报错
Failed to start iptables.service: Unit iptables.service failed to load: No such file or directory.
原因:iptables是CentOS7以下版本的管理方式
解决办法:在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理。
语法命令格式如下:启用区域端口和协议组合
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
上述端口可以是一个单独的端口 <port> 或者是一个端口范围 <port>-<port> 。协议可以是 tcp 或 udp。
下面以单独开放80端口为例:
#添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
#重新载入(添加后必须重新载入)
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=80/tcp
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
如果要添加范围例外端口 如 8080-8090
#添加
firewall-cmd --zone=public --add-port=8080-8888/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
#重新载入(添加后必须重新载入)
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=8080-8888/tcp
#删除
firewall-cmd --zone=public --remove-port=8080-8888/tcp --permanent
当然你可以还原传统的管理方式,执行一下命令:
#暂停使用firewalld管理
systemctl stop firewalld
systemctl mask firewalld
#并且安装iptables-services:
yum install iptables-services
#设置开机启动:
systemctl enable iptables
#启动防火墙
systemctl stop iptables
systemctl start iptables
systemctl restart iptables
systemctl reload iptables
#保存设置
service iptables save
#开放某个端口 在/etc/sysconfig/iptables里添加(如:8080)
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT