[Linux] Linux防火墙之firewalld

一、firewalld的简介

firewalld防火墙是Centos7系统默认的防火墙管理工具。 它取代了以前的iptables防火墙。 它也工作在网络层,属于数据包过滤防火墙。

firewalld和iptables是用来管理防火墙的工具,用来定义防火墙的各种规则功能,内部结构指向netfilter网络过滤子系统(属于内核态)来实现数据包过滤防火墙功能。

firewalld提供动态防火墙管理工具,支持网络区域中定义的网络链接和接口的安全级别。 它支持Ipv4,Ipv6防火墙设置和以太网网桥(可能被一些高级服务如云计算使用),并具有2种配置模式:运行时配置和持久配置。

二、iptables与firewalld的联系与区别

联系:

firewalld提供daemon和服务以及命令行和图形界面配置工具。 它只替换Iptv服务的一部分。 底层将继续使用iptv作为防火墙规则管理的入口点。 firewalld本身没有防火墙的功能,但需要通过内核的netfilter来实现。firewalld意味着它与iptables相同。 它们的作用是维护规则,而规则的实际使用是内核的netfilter,只不过firewalld和iptables有不同的结构和用途。

区别一:

iptables主要基于用于设置规则以确定网络安全性的接口。

firewalld以地域为基础,根据不同地域设置不同的规则,保证网络安全。此设置类似于硬件防火墙设置。

区别二:

iptables 在 /etc/sysconfig/iptables 中储存配置,
firewalld 将配置储存在 /etc/firewalld/(优先加载)和 /usr/lib/firewalld/(默认的配置文件)中的各种 XML 文件里。

区别三:

使用 iptables 每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables 里读取所有新的规则
使用 firewalld 却不会再创建任何新的规则,仅仅运行规则中的不同之处。因此firewalld 可以在运行时间内,改变设置而不丢失
现行连接。

三、firewalld区域

3.1 firewalld区域的概念

为了简化管理,firewalld防火墙将所有网络流量拆分为多个区域(zone)。然后,根据数据包的源IP地址或传入网络接口等条件,将流量传递到相应的区域。每个区域都定义了自己打开或关闭的端口和服务列表。

这些区域配置文件存在于/usr/lib/firewalld/zones目录中,还有一个目录/etc/firewalld/zones。firewalld使用规则时,会首先到/etc/firewalld/目录中查找,如果可以找到就直接使用,找不到会继续到/usr/lib/firewalld/目录中查找。

3.2 firewalld的九个区域

|----------------------|---------------------------------------------------------------|
| 区域 | 作用 |
| trusted(信任区域) | 允许所有的传入流量。 |
| public(公共区域) | 允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。 |
| external(外部区域) | 允许与ssh预定义服务匹配的传入流量其余均拒绝。 |
| home(家庭区域) | 允许与ssh、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其他均拒绝。 |
| internal(内部区域) | 默认值与home区域相同。 |
| work(工作区域) | 允许与ssh、dhcpv6-client预定义服务匹配的传入流量,其他均拒绝 |
| dmz(隔离区域也称非军事区域) | 允许与ssh预定义服务匹配的传入流量,其他均拒绝。 |
| block(限制区域) | 拒绝所有传入流量。 |
| drop(丢弃区域) | 丢弃所有传入流量,并且不产生包含icmp的错误响应。 |

3.3 firewalld区域介绍和区域优先级

firewalld区域介绍

最后一个区域的安全程度取决于该区域的管理员已设置的规则。

该地区就像一个安全门的主机。 每个区域都有不同级别限制的规则,只允许符合规则的流量通过。

根据网络的大小,可以使用一个或多个区域,但任何活动区域必须至少与源地址或接口相关联。

默认情况下,公共区域是默认区域,包括所有接口(网卡)。

firewalld数据处理流程

检查数据来源的源地址:

如果源地址与特定区域相关联,则执行该区域中指定的规则

如果源地址未与特定区域相关联,则使用传入网络接口的区域,并执行在该区域中指定的规则。

如果网络接口未与特定区域关联,则使用默认区域并执行该区域中指定的规则。

区域优先级:源地址绑定的区域 > 网卡绑定的区域 > 默认区域(只要没有绑定过指定区域的网卡,都适用于于默认区域的规则。默认区域可自定义,不修改则为public)

3.4 firewalld防火墙的配置方法

1、使用firewall-cmd 命令行工具。
2、使用firewall-config 图形工具。

3、编写/etc/firewalld/中的配置文件。

Firewalld 会优先使用/etc/firewalld/中的配置,如果不存在配置文件,则使用/usr/lib/firewalld/中的配置。

/etc/firewalld/:用户自定义配置文件,需要时可通过从/usr/lib/firewalld/ 中拷贝

/usr/lib/firewalld/ :默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/ 中的配置

四、 fiewall-cmd命令行使用

4.1 默认区域的查看与设置

不指定区域时,则对默认区域进行操作(默认区域可自定义,不修改则为public)

格式:

firewall-cmd:

--get-default-zone :显示当前默认区域
--set-default-zone=<zone> :设置默认区域

bash 复制代码
[root@IKUN3 ~]#firewall-cmd --get-default-zone
public
[root@IKUN3 ~]#firewall-cmd --set-default-zone=work
success
[root@IKUN3 ~]#firewall-cmd --get-default-zone
work
[root@IKUN3 ~]#

4.2 对指定网卡进行操作

格式:

firewall-cmd:

--get-active-zones :显示当前正在使用的区域及其对应的网卡接口
--get-zones :显示所有可用的区域

--get-zone-of-interface=<interface> :显示指定接口绑定的区域
--zone=<zone> --add-interface=<interface> :为指定接口绑定区域
--zone=<zone> --change-interface=<interface> :为指定的区域更改绑定的网络接口
--zone=<zone> --remove-interface=<interface> :为指定的区域删除绑定的网络接口

bash 复制代码
[root@CXK3 ~]#firewall-cmd --get-zones #获取全部的区域
 
[root@CXK3~]#firewall-cmd --get-active-zones #显示当前工作的区域信息
 
[root@CXK3 ~]#firewall-cmd  --get-zone-of-interface=ens33 #显示指定接口的区域
 
[root@CXK3 ~]#firewall-cmd  --zone=home --add-interface=ens33  #为指定的区域增加指定的网卡接口
 
[root@CXK3 ~]#firewall-cmd  --get-zone-of-interface=ens33
 
[root@CXK3 ~]#firewall-cmd  --zone=work --add-interface=ens33
 
[root@CXK3 ~]#firewall-cmd  --get-zone-of-interface=ens33
 
[root@CXK3 ~]#firewall-cmd  --zone=home --change-interface=ens33  #为接口更改指定的区域
 
 
[root@CXK3 ~]#firewall-cmd  --get-zone-of-interface=ens33
 
[root@CXK3 ~]#firewall-cmd  --zone=home --remove-interface=ens33 #删除指定区域的接口
 
 
[root@CXK3 ~]#firewall-cmd  --get-zone-of-interface=ens33  #恢复成默认状态

4.3 对源地址进行操作

格式:

firewall-cmd:

--add-source=xxxxxx --zone=<zone> //增加源地址指定区域

--remove-source=xxxxxx --zone=<zone> //删除源地址指定区域

bash 复制代码
[root@CXK3 ~]#firewall-cmd --add-source=2.2.2.2  --zone=home #增加源地址指定区域
 
[root@CXK3 ~]#firewall-cmd --get-active-zone
 
[root@CXK3 ~]#firewall-cmd --remove-source=2.2.2.2  --zone=home  #删除源地址指定的区域
 
[root@CXK3 ~]#firewall-cmd --get-active-zone

4.4 查看指定区域的所有规则

不指定区域时,则对默认区域进行操作(默认区域可自定义,不修改则为public)

firewall-cmd --list-all-zones:显示所有区域及其规则

firewall-cmd --list-all : 不指定区域时,查看的是默认区域

firewall-cmd --list-all --zone=work:显示work区域的所有规则

bash 复制代码
firewall-cmd  --list-all-zones 
bash 复制代码
[root@CXK3  ~]#firewall-cmd  --list-all #查看默认区域的所有规则
 
	
[root@CXK3  ~]#firewall-cmd  --list-all --zone=work #指定区域为work的配置

4.5 服务管理

1. 查看默认区域内允许访问的所有服务

bash 复制代码
firewall-cmd --list-service  #指定的区域显示可用服务

2. 添加服务

bash 复制代码
[root@CXK3 ~]#firewall-cmd  --add-service=http  #单个服务的添加
 
[root@CXK3 ~]#firewall-cmd  --add-service={ftp,https}  #多个服务的添加

注意后面不跟指定的区域,就会添加到默认区域中

指定区域添加 :

bash 复制代码
[root@CXK3 ~]#firewall-cmd  --add-service={ftp,https}   --zone=work
 
[root@CXK3 ~]#firewall-cmd --list-service --zone=work

3. 查看public 区域已配置规则

bash 复制代码
firewall-cmd --list-all --zone=public

4. 删除public 区域的http服务

bash 复制代码
firewall-cmd --remove-service=http --zone=public
firewall-cmd --list-service --zone=public

4.6 端口管理

1. 允许TCP的443端口到internal 区域

bash 复制代码
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal

2. 从internal 区域将TCP的443端口移除

bash 复制代码
firewall-cmd --zone=internal --remove-port=443/tcp

3. 允许UDP的2048~2050端口到默认区域

bash 复制代码
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all

4.7 永久保存设置

方式一:

在命令的结尾加入 --permanent 设置成永久生效,需要重启服务或重新加载 后才生效。

bash 复制代码
firewall-cmd --add-service=http --add-service=https --permanent  #永久添加,但是不会实时生效需要firewalld重载才能进行生效
firewall-cmd --reload	
firewall-cmd --list-all	

方式二:

--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

bash 复制代码
root@CXK3 ~]#firewall-cmd  --add-service={ftp,https} 
 
[root@CXK3 ~]#firewall-cmd   --list-service
 
[root@CXK3 ~]#firewall-cmd  --runtime-to-permanent
 
[root@CXK3 ~]#systemctl restart firewalld
[root@CXK3 ~]#firewall-cmd   --list-service
相关推荐
2401_8401922710 分钟前
k8s的crd、operator、cr分别是什么?
运维·分布式·kubernetes·prometheus
草木深雨纷纷11 分钟前
mt管理器手机版下载2026最新版更新下载分享
linux·运维·网络·智能手机
扛枪的书生13 分钟前
ELK 学习总结
linux
lifejump18 分钟前
Dede(织梦)CMS渗透测试(all)
前端·网络·安全·web安全
OYangxf26 分钟前
对TinyRedis中主从复制的理解
运维·服务器
Irene199129 分钟前
大数据开发面试常问的 Linux 命令 总结
大数据·linux
銳昊城30 分钟前
项目六: 配置与管理DNS服务器(2) C2
运维·服务器
辰尘_星启34 分钟前
【Linux】Python Socket编程指南
linux·python·socket·系统·通信
星幻元宇VR43 分钟前
VR文旅大空间|沉浸式体验重塑文旅新场景
科技·学习·安全·vr·虚拟现实
紫金桥软件1 小时前
组态软件新势力,安全可靠高性能经多行业认证紫金桥软件RealSCADA
安全·scada·组态软件·国产工业软件·监控组态软件