RHEL 8系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
常用的区域名称及策略规则
参数 | 作用 |
---|---|
--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 | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on | 开启应急状况模式 |
--panic-off | 关闭应急状况模式 |
与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且会随着系统的重启而失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加--permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。
Runtime:当前立即生效,重启后失效。
Permanent:当前不生效,重启后生效。
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
systemctl restart firewalld #重启防火墙
systemctl status firewalld #查看防火墙状态
示例
1.查看firewalld服务当前所使用的区域。
这是一步非常重要的操作。在配置防火墙策略前,必须查看当前生效的是哪个区域,否则配置的防火墙策略将不会立即生效。
[root@53 ~]# firewall-cmd --get-default-zone
public
2.查询指定网卡在firewalld服务中绑定的区域。
在生产环境中,服务器大多不止有一块网卡。一般来说,充当网关的服务器有两块网卡,一块对公网,另外一块对内网,那么这两块网卡在审查流量时所用的策略肯定也是不一致的。因此,可以根据网卡针对的流量来源,为网卡绑定不同的区域,实现对防火墙策略的灵活管控。
[root@53 ~]# firewall-cmd --get-zone-of-interface=ens160
public
3.把网卡默认区域修改为external,并在系统重启后生效。
[root@53 ~]# firewall-cmd --permanent --zone=external --change-interface=ens160
The interface is under control of NetworkManager, setting zone to 'external'.
success
[root@53 ~]# firewall-cmd --permanent --get-zone-of-interface=ens160
external
4.把firewalld服务的默认区域设置为public。
默认区域也叫全局配置,指的是对所有网卡都生效的配置,优先级较低。在下面的代码中可以看到,当前默认区域为public,而ens160网卡的区域为external。此时便是以网卡的区域名称为准。
[root@53 ~]# firewall-cmd --set-default-zone=public
Warning: ZONE_ALREADY_SET: public
success
[root@53 ~]# firewall-cmd --get-default-zone
public
[root@53 ~]# firewall-cmd --get-zone-of-interface=ens160
externa
5.启动和关闭firewalld防火墙服务的应急状况模式。
如果想在1s的时间内阻断一切网络连接,有什么好办法呢?panic紧急模式在这个时候就派上用场了。使用--panic-on参数会立即切断一切网络连接,而使用--panic-off则会恢复网络连接。切记,紧急模式会切断一切网络连接,因此在远程管理服务器时,在按下回车键前一定要三思。
[root@53 ~]# firewall-cmd --panic-on
success
[root@53 ~]# firewall-cmd --panic-off
success
6.查询SSH和HTTPS协议的流量是否允许放行。
在工作中可以不使用--zone参数指定区域名称,firewall-cmd命令会自动依据默认区域进行查询,从而减少用户输入量。但是,如果默认区域与网卡所绑定的不一致时,就会发生冲突,因此规范写法的zone参数是一定要加的。
[root@53 ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@53 ~]# firewall-cmd --zone=public --query-service=https
no
7.把HTTPS协议的流量设置为永久允许放行,并立即生效。
默认情况下进行的修改都属于Runtime模式,即当前生效而重启后失效,因此在工作和考试中尽量避免使用。而在使用--permanent参数时,则是当前不会立即看到效果,而在重启或重新加载后方可生效。于是,在添加了允许放行HTTPS流量的策略后,查询当前模式策略,发现依然是不允许放行HTTPS协议的流量:
[root@53 ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@53 ~]# firewall-cmd --zone=public --query-service=https
no
不想重启服务器的话,就用--reload参数吧:
[root@53 ~]# firewall-cmd --reload
success
[root@53 ~]# firewall-cmd --zone=public --query-service=https
yes
8.把HTTP协议的流量设置为永久拒绝,并立即生效。
由于在默认情况下HTTP协议的流量就没有被允许,所以会有“Warning: NOT_ENABLED: http”这样的提示信息,因此对实际操作没有影响。
[root@53 ~]# firewall-cmd --permanent --zone=public --remove-service=http
Warning: NOT_ENABLED: http
success
[root@53 ~]# firewall-cmd --reload
success
9.把访问8080和8081端口的流量策略设置为允许,但仅限当前生效。
[root@53 ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@53 ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
[root@53 ~]#
10.把原来访问本机的888端口的流量转发到22端口,要求当前和长期有效
如果想让用户通过其他端口号也能访问ssh服务,就可以试试端口转发技术了。通过这项技术,新的端口号在收到用户请求后会自动转发到原本服务的端口上,使得用户能够通过新的端口访问到原本的服务。
--语法格式--
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
[root@53 ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.1.116 ##192.168.1.116本机IP
success
[root@53 ~]# firewall-cmd --reload
success
11.富规则的设置
富规则也叫复规则,表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。比如,我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口):
[root@53 ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
[root@53 ~]# firewall-cmd --reload
success
测试用192.168.10.0网段的机器访问本机22端口
[root@dosbat ~]# ssh 192.168.1.116
Connecting to 192.168.1.116:22...
Could not connect to '192.168.1.116' (port 22): Connection failed.