Centos7 默认启用 firewall 替代原来的 iptables。firewall 与 iptables 一个明显的区别是: firewall 属于动态防火墙,它拥有运行时配置和永久配置选项,它支持允许服务或者应用程序直接添加防火墙规则的接口,而 iptables 属于静态防火墙,任何操作都需要重启 iptables 服务。
这里整理一些常用的 firewall 基本操作。
1. 查看 firewall 启动停止状态
#查看状态
systemctl status firewalld
#启动
systemctl start firewalld
#停止
systemctl stop firewalld
2. 查看开启端口
firewall-cmd --list-all
输出
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
可以看到 ports 这个节点, 我这里只开启了80端口。
3. 增加需要开放的端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
--permanent: 永久增加
--zone=public: 增加到一个名字叫 public 的 zone 里面
--add-port: 增加tcp 8080端口
zone是什么意思? zone(网络区域)定义了网络连接的可信等级。这是一个 一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。
重启防火墙
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 80/tcp 8080/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
我们可以看到在 ports 节点已经添加了 8080 端口。在篇头我们已经讲到了 firewall 是动态防火墙,这里添加完端口需要重启服务是因为加了 --permanent。
这里我们加一个临时的 8088 端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=8088/tcp
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 80/tcp 8080/tcp 8088/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
可以只是临时增加端口不需要重启服务。
4.移除端口号
firewall-cmd --permanent --zone=public --remove-port=80/tcp
--remove-port: 移除端口号
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-port=80/tcp
success
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
可以看到 80 端口已经被移除
5.firewall 配置文件
以上操作都是通过命令来实现的,其实最终都反应到它的配置文件。
打开 zone 下面的 public.xml 文件
vi /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<port protocol="tcp" port="8080"/>
</zone>
可以看到刚才加的 8080 端口还是配置文件中。