3.4 Linux默认防火墙firewalld
在CentOS 7.5中,系统安装了两个防火墙:firewalld和iptables,默认使用firewalld。本节我们先介绍firewalld的特性和使用方法,下一节再介绍iptables。
3.4.1 firewalld特性
1.firewalld和iptables的关系
firewalld仅仅是替代了iptables service部分,底层还是使用iptables作为防火墙规则管理入口。firewalld使用Python语言编写,提供了一个daemon和service,还提供命令行和图形界面配置工具。
2.静态防火墙和动态防火墙
iptables一般称为静态防火墙,也就是即使只修改一条规则也要把所有规则都重新载入,这样做会在修改规则的时候对整个系统的网络造成影响。firewalld一般称为动态防火墙,它的出现就是为了解决iptables的这一问题,任何规则的变更都只需要将变更部分保存并更新到运行中的iptables就可以了,这样也不会影响到整个系统的网络,只会影响到使用规则的应用的网络。
3.采用xml作为配置文件
firewalld的配置文件被放置在不同的xml文件当中,这使得对规则的维护变得更加容易和可读、有条理。相比于iptables的规则配置文件而言,这显然可以算作是一个进步。
4.区域模型定义
有点类似Windows的防火墙,firewalld通过对iptables自定义链的使用,抽象出一个区域模型的概念。针对各种规则统一成一套默认的标准使用规范和流程,使得防火墙在易用性和通用性上得到提升。
3.4.2 firewalld基本术语
1.网络区域zone
网络区域zone定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。firewalld将网卡对应到不同的区域(zone)。zone默认共有9个:block、dmz、drop、external、home、internal、public、trusted、work。不同区域之间的差异,是其对待数据包的默认行为不同。
根据区域名字,我们可以很直观地知道该区域的特征。在CentOS 7.5系统中,默认区域被设置为public。
所有可用zone的xml配置文件被保存在/usr/lib/firewalld/zones/目录,该目录中的配置为默认配置,不允许管理员手动修改。
自定义zone配置需保存到/etc/firewalld/zones/目录。
2.服务service
服务service是端口和/或协议入口的组合。服务所使用的TCP/UDP端口的配置文件存放在/usr/lib/firewalld/services/目录中,如SSH服务等。最新版本的firewalld中默认已经定义了70多种服务供我们使用。
当默认提供的服务不够用或者需要自定义某项服务的端口时,需要将service配置文件放置在/etc/firewalld/services/目录中。
service配置的优势:
- 通过服务名字来管理规则更加人性化。
- 通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。每加载一项service配置就意味着开放了对应的端口访问。
3.4.3 firewalld使用
1.管理firewalld服务
#设置开机启动服务 [root@CentOS ~]# systemctl enable firewalld.service #设置开机禁用服务 [root@CentOS ~]# systemctl disable firewalld.service #开启服务 [root@CentOS ~]# systemctl start firewalld.service #停止服务 [root@CentOS ~]# systemctl stop firewalld.service #查看firewalld状态 [root@CentOS ~]# systemctl status firewalld # 查看版本 [root@CentOS ~]# firewall-cmd --version # 查看帮助 [root@CentOS ~]# firewall-cmd --help # 显示状态 [root@CentOS ~]# firewall-cmd --state
2.zone管理
#列出所有支持的 zone [root@CentOS ~]# firewall-cmd --get-zones #查看当前的默认 zone [root@CentOS ~]# firewall-cmd --get-default-zone
3.service管理
# 分别列出所有支持的service [root@CentOS ~]# firewall-cmd --get-services # 查看当前zone中加载的service [root@CentOS ~]# firewall-cmd --list-services
4.基本操作
#查看所有打开的端口 [root@CentOS ~]# firewall-cmd --zone=public --list-ports # 更新防火墙规则 [root@CentOS ~]# firewall-cmd --reload # 查看区域信息 [root@CentOS ~]# firewall-cmd --get-active-zones # 查看指定接口所属区域 [root@CentOS ~]# firewall-cmd --get-zone-of-interface=eth0 # 拒绝所有包 [root@CentOS ~]# firewall-cmd --panic-on # 取消拒绝状态 [root@CentOS ~]# firewall-cmd --panic-off # 查看是否拒绝 [root@CentOS ~]# firewall-cmd --query-panic
5.添加端口
# 添加80端口 [root@CentOS ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数,重启后失效) # 重新载入 [root@CentOS ~]# firewall-cmd --reload # 查看80端口 [root@CentOS ~]# firewall-cmd --zone= public --query-port=80/tcp # 删除端口 [root@CentOS ~]# firewall-cmd --zone= public --remove-port=80/tcp --permanent # 为 public 区添加持久性的 HTTP 和 HTTPS 规则 [root@CentOS ~]# firewall-cmd --zone=public --add-service=http --permanent [root@CentOS ~]# firewall-cmd --zone=public --add-service=https --permanent # 列出所有的规则 [root@CentOS ~]# firewall-cmd –list-all