Linux 防火墙:Firewalld



Firewalld 概述

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

firewalldiptables 都是用户态的防火墙管理工具,内部结构都指向内核态的 netfilter 网络过滤子系统,用来实现包过滤防火墙的功能。

firewalld 提供了一种动态防火墙管理工具,支持网络区域的定义、网络连接的安全等级管理。它支持 IPv4、IPv6 防火墙设置以及以太网桥(一些高级服务会用到,比如云计算)。它拥有两种配置模式:运行时配置和永久配置。

Firewalld 与 Iptables 的区别

  1. 基于接口 vs. 基于区域

    iptables 是基于接口来设置规则,以判断网络的安全性;

    firewalld 是基于区域,根据不同的区域设置不同的规则,类似于硬件防火墙的设置。

  2. 配置文件位置

    iptables 的配置储存在 /etc/sysconfig/iptables 中;

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

  3. 规则应用方式

    使用 iptables 时,每一次单独更改都需要清除所有旧有规则并从 /etc/sysconfig/iptables 重新读取新的规则(规则修改后立即生效);(需全部刷新策略,丢失连接)

    而使用 firewalld 不会创建任何新的规则,仅会运行规则中的不同之处。因此,firewalld 可以在运行时动态改变设置而不丢失现行连接。(不需全部刷新策略)

  4. 防火墙类型

    iptables 是静态防火墙,所有规则都是配置在指定的表链之中,只能通过修改规则配置来更改防护策略;

    firewalld 是动态防火墙,可在不同的区域配置不同的规则,通过更换区域来更改防护策略。

Firewalld 区域的概念

firewalld 为了简化管理,将所有网络流量分为多个区域(zone)。

  • 根据数据包的源 IP 地址或传入的网络接口等条件,流量会传入相应的区域。
  • 每个区域都定义了自己打开或关闭的端口和服务列表。
  • 要激活一个区域的规则,区域必须要关联绑定一个网卡或源地址。
  • 默认情况下,public区域是默认区域,包含所有接口(网卡)。
  • 源地址优先级更高。

区域安全级别的决定因素

每个区域的安全程度取决于管理员在该区域中设置的规则。区域就像主机的安全门,每个区域具有不同限制程度的规则,只允许符合规则的流量传入。

管理员可以根据网络规模使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口。默认情况下,public 区域是默认区域,包含所有接口(网卡)。

Firewalld 防火墙预定义的 9 个区域

  1. trusted(信任区域):允许所有的传入流量。
  2. public(公共区域):允许与 sshdhcpv6-client 预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
  3. external(外部区域):允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的 IPv4 传出流量进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
  4. home(家庭区域):允许与 sshmdnssamba-clientdhcpv6-client 预定义服务匹配的传入流量,其余均拒绝。
  5. internal(内部区域):默认情况下与 home 区域相同。
  6. work(工作区域):允许与 sshdhcpv6-client 预定义服务匹配的传入流量,其余均拒绝。
  7. dmz(隔离区域,也称为非军事区域):允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。
  8. block(限制区域):拒绝所有传入流量。
  9. drop(丢弃区域):丢弃所有传入流量,并且不产生包含 ICMP 的错误响应。

Firewalld 数据处理流程

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

Firewalld 检查数据包源地址的规则:

  1. 源地址关联到特定的区域:如果源地址或接口绑定的区域有冲突,执行该区域的规则。
  2. 源地址未关联到特定的区域:如果源地址或接口绑定的区域没有冲突,使用传入网络接口的区域并执行该区域的规则。
  3. 网络接口也未关联到特定的区域:如果源地址和接口都没有绑定特定区域,使用默认区域并执行该区域的规则。

Firewalld 防火墙的配置方法

  1. 使用 firewall-cmd 命令行工具。
  2. 使用 firewall-config 图形工具。
  3. 编辑 /etc/firewalld/ 目录下的配置文件。

Firewalld 服务的启动命令

启动 firewalld 服务:

systemctl start firewalld.service

常用的 firewall-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>] --remove-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 类型。
  • --get-icmptypes:显示所有 ICMP 类型。

区域管理

显示和设置默认区域

  1. 显示当前系统中的默认区域

    firewall-cmd --get-default-zone
    
  2. 显示默认区域的所有规则

    firewall-cmd --list-all
    
  3. 显示当前正在使用的区域及其对应的网卡接口

    firewall-cmd --get-active-zones
    
  4. 设置默认区域

    firewall-cmd --set-default-zone=home
    firewall-cmd --get-default-zone
    

服务管理

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

    firewall-cmd --list-service
    
  2. 添加 HTTP 服务到 public 区域

    firewall-cmd --add-service=http --zone=public
    
  3. 查看 public 区域已配置的规则

    firewall-cmd --list-all --zone=public
    
  4. 删除 public 区域的 HTTP 服务

    firewall-cmd --remove-service=http --zone=public
    
  5. 同时添加 HTTP 和 HTTPS 服务到默认区域,设置成永久生效

    firewall-cmd --add-service=http --add-service=https --permanent
    firewall-cmd --add-service={http,https,ftp} --zone=internal
    firewall-cmd --reload   # 重新加载防火墙规则
    firewall-cmd --list-all # 查看所有规则
    

    说明:使用 --permanent 选项表示设置成永久生效,需要重新启动 firewalld 服务或执行 firewall-cmd --reload 命令重新加载防火墙规则时才会生效。若不带有此选项,表示用于设置运行时规则,这些规则在系统或 firewalld 服务重启、停止时配置将失效。

  6. 将当前的运行时配置写入规则配置文件中,使之成为永久性配置

    firewall-cmd --runtime-to-permanent
    

端口管理

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

    firewall-cmd --zone=internal --add-port=443/tcp
    firewall-cmd --list-all --zone=internal
    
  2. 从 internal 区域将 TCP 的 443 端口移除

    firewall-cmd --zone=internal --remove-port=443/tcp
    
  3. 允许 UDP 的 2048~2050 端口到默认区域

    firewall-cmd --add-port=2048-2050/udp
    firewall-cmd --list-all
    

设置地址转换

  1. 设置 SNAT

    firewall-cmd --zone=public --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.80.0/24 -j SNAT --to-source 12.0.0.1
    
  2. 设置 DNAT

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

配置生效方式(临时和永久)

永久配置后,配置会写入/etc/firewalld/zones/xxx.xml 配置文件中,若没有配置过,会自动生成区域配置文件。

  • 运行时配置(会立即生效,但 firewalld 服务重启或重载配置后会失效):

    firewall-cmd ...
    
  • 将运行时配置转换成永久配置

    firewall-cmd --runtime-to-permanent
    
  • 永久配置(不会立即生效,需要重新加载配置或重启 firewalld 服务):

    firewall-cmd ... --permanent
    
  • 重新加载防火墙配置

    firewall-cmd --reload
    # 或
    systemctl reload firewalld
    

富规则

firewalld 支持更加复杂的富规则,可以指定源地址、目标地址、服务名称及操作类型(如接受、拒绝等)进行更精细的控制。

例如:

firewall-cmd --add-rich-rule="rule family='ipv4|ipv6' source address='<源地址>' destination address='<目的地址>' service name='<服务名>' action=<reject|drop|accept...>"

可以定义 IP 协议类型(IPv4 或 IPv6)、来源和目标地址、服务名称以及操作类型(如 rejectdropaccept 等)来灵活控制网络流量。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值