firewalld是CentOS 7和RHEL 7(Red Hat Enterprise Linux 7)的默认防火墙配置管理工具。
目录
区域(zone)
firewalld中常见的区域名称
firewall-cmd 命令行管理工具
一些防火墙配置实例
firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone)。然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。每个区域都定义了自己打开或者关闭的端口和服务列表。
其中默认区域是 public
[root@localhost ~]# firewall-cmd --get-default-zone
public
firewall-cmd是 firewalld 防火墙的命令行管理工具,其相关参数一般都是以“长格式”来提供的。
# 相关参数
--get-default-zone 查看默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域和网卡名称
--add-source= 将源自此IP或子网的流量导向指定的区域
--remove-source= 不再将源自此IP或子网的流量导向指定的区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
使用firewalld配置的防火墙策略默认为运行时模式(Runtime),又称为当前生效模式,系统重启会失效。
如果想让配置策略一直存在,就需要使用永久模式(Permanent),就是在 firewall-cmd 命令设置防火墙策略时添加 --permanent 参数。但是设置的策略只有在系统重启后才能自动生效,如果想让配置策略立即生效,需要手动执行 firewall-cmd --reload 命令。
(1)查询ens33网卡在firewalld服务中的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
(2)把firewalld服务的当前默认区域设置为public
[root@localhost ~]# firewall-cmd --set-default-zone=public
success
[root@localhost ~]# firewall-cmd --get-default-zone
public
(3)查询public区域是否允许请求SSH和HTTPS协议的流量
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
(4)把firwalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --reload
success
(5)把firwalld服务中请求HTTP协议的流量设置为永久拒绝,并立即生效
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=http
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --query-service=http
no
(6)把firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --list-ports
8080-8081/tcp
(7)把原本访问本机(192.168.58.165)的888端口的流量转发到22端口,要求当前和长期均有效
# 流量转发命令格式为:firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目的端口号>:toaddr=<目的IP地址>
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.58.165
success
[root@localhost ~]# firewall-cmd --reload
success
在另一台主机上使用ssh命令访问192.168.58.165主机的888端口
[root@huyuxuan ~]# ssh -p 888 192.168.58.165
[email protected]'s password:
Last login: Fri Jan 21 15:29:09 2022 from 192.168.58.1 # 远程登录成功
firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目的地址等信息进行更有针对性的策略配置,富规则的优先级也是所有防火墙策略中最高的。
# 举例
在firewalld服务中配置一条富规则,使其拒绝192.168.58.0/24网段的所有用户访问本机的ssh服务
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.58.0/24" service name="ssh" reject"