firewalld防火墙

239 阅读9分钟

firewalld概述

firewalld防火墙是centos7系统默认的防火墙管理工具,取代之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙

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

firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具

它支持IPV4、IPV6防火墙设置以及以太网桥(在某些高级服务可能会用到,比如云计算),并且拥有两种配置模式:运行是配置与永远配置

firewalld和iptables的区别

1.对规则设置不同

  • iptables主要是基于接口,来设置规则,从而判断网络的安全性
  • firewalld是基于区域,根据不同的区域来设置不同的规则,从而保证网络安全,与硬件防火墙的设置相类似

2.配置文件的不同

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

3.对规则的修改

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

4.防火墙类型不同

iptables防火墙类型为静态防火墙 ,firewalld防火墙类型为动态防火墙

firewalld区域

firewalld区域的概念

firewalld防火墙为了简化管理,将所有网络流量分为多个区域(zone),然后根据数据包的源IP地址或传入的网络接口等条件将

流量传入相应区域,每个区域都定义了自己打开或者关闭的端口和服务列表

firewalld防火墙9大区域

区域说明
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的错误响应

注:

要想激活区域,必须把区域和某个数据包的源地址或者网络接口进行关联

firewalld区域介绍

最终一个区域的安全程度是取决于管理员在此区域中设置的规则 区域如同进入主机的安全门, 每个区 域都具有不同限制程度的规则,只会允许符合规则的流量传入 可以根据网络规模, 使用—个或多个区域,但是任何一个 活跃区域 至少需要关联源地却或接口 默认情况下,public区域是默认区域,包含所有接口 (网卡)

firewalld数据处理流程

firewalld对于进入系统的数据包, 会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则,对于进入系统的数据包,首先检查的就是其源地址:

若源地址关联到特定的区域(即源地址或接 口绑定的区域有冲突), 则执行该区域所制定的规则

若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突),则使用传入网络接口的区域并执行该区域所制定的规则

若网络接口也未关联到特定的区域 (即源地址或接口都没有绑定特定的某个区域), 则使用默认区域并执行该区域所制定的规则

区域优先级:源地址绑定的区域 > 网卡绑定的区域 > 默认区域

firewalld检查数据包的匹配顺序

先看数据包的源地址是否关联某个特定区域,如果有关联则使用这个关联源地址的区域的工作进行过滤数据包

如果源地址没有关联某个特定区域,在看数据包入站网站网卡是否关联某个特定区域,如果有关联则使用这个关联网卡的区域的规划进行过滤数据包

如果既没有关联源地址的区域也没有关联入站网卡的区域,则使用当前默认区域的规则进行过滤数据包

firewalldiptables
基于区域内的防火墙规则来过滤数据包基于网络接口的规则来过滤数据包
不会修改当前服务配置,不会现有连接修改完配置会立即生效,有可能会中断当前连接
/etc/firewalld /usr/lib/firewalld/etc/stsconfig/iptables
动态防火墙静态防火墙

firewalld防火墙的配置方法

配置方法

使用firewalld-cmd命令行工具

使用firewalld-config图形工具

编写/etc/firewalld/中的配置文件

firewalld命令行

使用命令之前开启firewalld服务

systemctl start firewalld

常用firewalld-cmd命令选项

##默认区域
--get-default-zone ##显示当前默认区域
--set-default-zone=<zone>  ##设置默认区域
​
--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> #为指定的区域删除绑定的网络接口##源地址
--zone=<zone> --add-source=<source> [/<mask>] #为指定源地址绑定区域
--zone=<zone> --change-source=<source> [/<mask>] #为指定的区域更改绑定的源地址
--zone=<zone> --remove-source=<source>[/ <mask>] #为指定的区域删除绑定的源地址##指定区域的所有规则 
--list-all-zones :显示所有区域及其规则
[--zone=<zone>] --list-all ##显示所有指定区域的所有规则,省略--zone=<zone>时表示仅对默认区域操作##服务管理 
[--zone=<zone>] --list-services ##显示指定区域内允许访问的所有服务
[--zone=<zone>] --add-service=<service> ##为指定区域设置允许访问的某项服务
[--zone=<zone>] --remcve-service=<service> ##删除指定区域已设置的允许访问的某项服务##端口管理
[--zone=<zone>] --list-ports ##显示指定区域内允许访问的所有端口号
[--zone=<zone>] --add-port=<portid> [-<portid>]/<protocol> ##为指定区域设置允许访问的某个/某段端口号(包括协议名)
[--zone=<zone>] --remove-port=<portid> [-<portid>]/<protocol> ##删除指定区域已设置的允许访问的端口号( 包括协议名)##icmp协议
[--zone=<zone>] --list-icmp-blocks ##显示指定区域内拒绝访问的所有ICMP 类型
[--zone=<zone>] --add- icmp-block=<icmptype> ##为指定区域设置拒绝访问的某项ICMP 类型
[--zone=<zone>] --remove-icmp-block=<icmptype> ##删除 指定区域已设置的拒绝访问的某项ICMP类型
 
firewall-cmd --get-icmptypes ##显示所有ICMP 类型

Firewalld配置方案

运行时配置

不中断现有连接

不能修改服务配置

永久配置

不立即生效,除非firewalld重新启动或重新加载配置

中断现有连接

可以修改服务配置

运行时配置(临时配置)

运行时配置,实时生效,不会中断现有连接,但重启后会丢失

示例1 查看和设置默认区域

[root@localhost ~]#firewall-cmd --get-default-zone
public  #显示当前默认区域
[root@localhost ~]#firewall-cmd --get-active-zone
public  ##显示当前正在使用的区域及其对应的网卡接口
  interfaces: ens33
[root@localhost ~]#firewall-cmd --set-default-zone=home  #将默认区域设置为home
success
[root@localhost ~]#firewall-cmd --get-default-zone
home

Snipaste_2022-09-17_14-46-27.png

示例2 对指定网卡进行操作

add 增加绑定
firewall-cmd --get-active-zone  #显示当前正在使用的区域及其对应的网卡接口
firewall-cmd --zone=work --add-interface=ens33 ##将ens33绑定work区域

Snipaste_2022-09-17_14-55-39.png

change 修改
firewall-cmd --zone=home --change-interface=ens33 #修改ens33绑定区域

Snipaste_2022-09-17_14-59-40.png

remove 删除
firewall-cmd --zone=home --remove-interface=ens33 ##删除ens33与区域home的绑定关系

Snipaste_2022-09-17_15-03-31.png

示例3 对源地址进行操作

firewall-cmd --zone=work --add-source=6.6.6.6 ##源地址与work区域进行绑定
firewall-cmd --zone=work --remove=source=2.2.2.2 ##删除源地址与work区域绑定

Snipaste_2022-09-17_15-14-17.png

示例4 区域管理

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

firewall-cmd --list-all-zones ##显示所有区域和其规则
firewall-cmd --list-all ##不指定区域时 显示是默认区域和规则
firewall-cmd --list-all -zone=work ##显示work区域所有规则
Snipaste_2022-09-17_15-21-23.png Snipaste_2022-09-17_15-21-57.png Snipaste_2022-09-17_15-18-40.png

示例5 服务管理

删除、显示、添加指定区域中的某个服务

firewall-cmd --zone=work --list-services ##显示work区域的服务
firewall-cmd --zone=work --add-service=http ##在work区域中添加httpd服务
firewall-cmd --zone=work --remove-service=http ##删除work区域中http服务

Snipaste_2022-09-17_15-56-12.png

一次性添加多个服务

firewall-cmd --zone=work --add-service={https,ftp}

Snipaste_2022-09-17_15-57-19.png

示例6 端口管理

添加、删除某个协议的端口

firewall-cmd  --zone=work --add-port=443/tcp ##在work区域中添加tcp443端口
firewall-cmd  --zone=work --list-ports ##显示work区域所有端口
firewall-cmd  --zone=work --list-all
firewall-cmd  --zone=work --remod-port=443/tcp ##删除work区域中tcp443端口

Snipaste_2022-09-17_16-22-07.png

添加连续端口

firewall-cmd --zone=work --add-port=20-22/tcp

Snipaste_2022-09-17_16-23-23.png

永久配置

--permanent 设置成永久生效,需要重启服务或重新加载 后才生效

firewall-cmd --add-service={https,ftp} --permanent
firewall-cmd --reload

运行时配置转换成永久配置

firewall-cmd --runtime-to-permanent

设置SNAT规则和DNAT规则

SNAT策略

firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.46.0/24 -j SNAT --to-source 12.0.0.254

Snipaste_2022-09-17_16-47-27.png

DNAT策略

firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A PREROUTING -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.46.0

Snipaste_2022-09-17_16-48-35.png