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