Linux系统之firewalld防火墙指北

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ 

只会用scp?那也太Low了

很多人安装了Ubuntu第一步就做错了

服了!新来的运维3个操作把我整蒙了

Docker容器镜像的本质是什么?

不会吧!Linux系统磁盘分区只会fdisk吗?



CentOS 7中多种防火墙是共同存在的,默认是使用firewalld来管理netfilter子系统。
概述

firewalld(Dynamic Firewall Manager of Linux systems),是Linux系统的动态防火墙管理器,是CentOS 7的一大特性,firewalld同时拥有命令行终端和图形化界面的配置工具,相较于iptables对火墙的管理更加容易便捷,但没有iptables控制精准。

firewalld可以动态地修改单条规则,使规则即时生效,而iptables在修改规则后必须重新读取才能够生效。需要注意的是,firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现。简而言之,firewalld和iptables的作用是维护防火墙规则,而真正遵循规则进行工作的是netfilter。

firewalld加入了防火墙的区域(zone)概念,以分配对一个网络及其相关链接和界面一定程度的信任。不仅支持以太网桥并有分离运行时间及永久配置选择,还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。也就是说,firewalld预先准备了几套防火墙策略模板,用户可以根据生产场景的不同而选择合适的策略模板,实现了防火墙策略之间的快速切换。

firewalld有两种类型的配置:永久类型和运行时类型。运行时类型的规则配置会在防火墙被重启后失效,而永久类型的规则配置会永久保留且生效的。

对应于上面两种类型的配置,firewalld有两个相应的目录,针对运行时类型配置的目录是/usr/lib/firewall/,针对永久类型配置的目录是/etc/firewall/。

区域管理
firewalld将网卡对应到不同的区域(zone),通常有9个区域:block、dmz、drop、external、home、internal、public、trusted与work。每个区域对数据包的默认处理方式不同,根据区域名称用户可以很直观地了解这些区域的特征。在CentOS 7系统中,默认区域被设置为public。
各区域的作用:
1、阻塞区域(block):阻止所有数据包。
2、工作区域(work):信任其他计算机。
3、家庭区域(home):信任其他计算机。
4、公共区域(public):不信任任何计算机,只接收经过选择的网络连接。
5、隔离区域(DMZ):隔离区域也称为非军事区域,是处于内网与公网之间的一层网络,起到缓冲作用。对于隔离区域,只接收经过选择的网络连接。
6、信任区域(trusted):接受所有网络连接。
7、丢弃区域(drop):拒绝所有网络连接。
8、内部区域(internal):信任其他计算机,只接收经过选择的网络连接。
9、外部区域(external):不信任其他计算机,只接收经过选择的网络连接。
firewalld默认提供了9个区域的配置文件,分别是block.xml、dmz.xml、drop.xml、external.xml、home.xml、internal.xml、public.xml、trusted.xml与work.xml,它们都保存在/usr/lib/firewalld/zones/目录下。
默认情况下,在/etc/firewalld/zones/目录中只有一个public.xml文件。如果给另外一个区域做一些改动并保存,那么就会自动生成对应的配置文件。
firewalld配置

firewalld的配置方法主要有三种,分别是firewall-config、firewall-cmd和直接编辑xml文件。其中,firewall-config是图形化工具,firewall-cmd是命令行工具。对于多数Linux用户来说,更加习惯使用命令行方式的操作。

firewalld默认配置文件有两个,分别是/usr/lib/firewalld/与/etc/firewalld/。/usr/lib/firewalld/是系统配置,尽量不要随意修改,/etc/firewalld/是用户配置文件。

firewall-cmd命令常用参数:

--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使永久生效的配置规则立即生效,覆盖当前的配置

示例

(1) 查看版本
[root@localhost ~]# firewall-cmd --version0.5.3
由上述示例可知,当前的firewalld防火墙的版本是0.5.3。
(2) 显示状态
[root@localhost ~]# firewall-cmd --staterunning
由上述结果可知,当前firewalld防火墙正在运行状态。
(3) 查看活动区域信息
[root@localhost ~]# firewall-cmd --get-active-zonesonespublic interfaces: ens33
由上述结果可知,当前firewalld防火墙的活动区域只有一个public,接口信息显示为ens33。
(4) 查看ens33接口所属区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33public
由上述结果可知,ens33接口的所属区域是public。
(5) 拒绝所有包
[root@localhost ~]# firewall-cmd --panic-on
上述命令执行之后,服务器将拒绝所有数据包,但建议不要轻易尝试,否则SSH远程连接也将无法使用。
(6) 取消拒绝状态
[root@localhost ~]# firewall-cmd --panic-off
当firewalld防火墙拒绝所有数据包时,可以通过上述命令取消拒绝状态。
(8) 查看是否拒绝
当不确定当前firewalld防火墙是否拒绝所有数据包时,可通过以下命令查看,示例代码如下。
[root@localhost ~]# firewall-cmd --query-panicno
由上述结果可知,当前firewalld防火墙没有拒绝所有数据包。
(9) 查看firewalld是否开机自启
[root@localhost ~]# systemctl is-enabled firewallddisabled
由上述结果可知,当前firewalld防火墙没有配置开机自启。
(10) 完全重启防火墙
[root@localhost ~]# firewall-cmd --complete-reloadsuccess
以root用户的身份执行上述命令,重新加载防火墙并中断用户连接。

来不及解释了,快上车!(进群看公告)(已经入群的小伙伴无需重复添加)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

               点个在看,无需赞赏!

请使用浏览器的分享功能分享到微信等