firewalld基础实验

Firewalld 的简介

firewalld 是一个更高层次的防火墙管理工具,旨在简化防火墙的配置和管理。它使用区域(zones)和服务(services)的概念,使得用户能够更加方便地管理防火墙规则。

该防火墙同时支持 IPv4 和 IPv6 的防火墙配置,还支持以太网桥接和 IP 地址设置。Firewalld 将运行时配置与永久性配置分开管理。此外,它还提供了相应的接口,方便各种服务或应用程序直接添加防火墙规则。

我的理解是:

firewalld 提供一个 zones 的区域和 services 的概念,定义一个 zone 空间,把 service 放入这个空间中,即可实现外部的服务进入不了

使用 firewalld 的好处

  1. 在运行时环境中,可以进行即时更改无需重启服务或后台进程
  2. 通过 firewalld 的 D-Bus 接口,各种服务、应用程序以及用户都可以轻松地调整防火墙设置。该接口功能完备,被防火墙配置工具 firewall-cmd、firewall-config 和 firewall-applet 所使用。
  3. 将运行时配置与永久性配置分开,使得在运行时进行评估和测试成为可能。运行时配置仅在下一次服务重新加载、重启或系统重启时失效。之后,永久性配置会再次被加载。利用运行时环境,可以设置那些只需在有限时间内有效的配置。如果某项运行时配置经过评估后证明是有效且可用的,那么就可以将其保存到永久性配置中。

我的理解是:

无需重启服务,直接通过 firewalld 的命令即可把新添加的防火墙的规则生效

谁在用它?

在以下 Linux 发行版中,firewalld 被用作默认的防火墙管理工具:

  • RHEL 系列
  • SUSE 系列
  • OpenSUSE 系列
  • 其它

那些将 firewalld 作为防火墙管理工具来使用的应用程序和库包括:

  • NetworkManager
  • libvirt
  • podman
  • Docker(仅限 iptables 后端)
  • fail2ban

区域原则

  1. 流量仅进入一个区域。
  2. 流量只能从一个区域流出。
  3. 区域用于定义不同的信任级别。
  4. 默认情况下,同一区域内的传输是允许的。
  5. 默认情况下,禁止跨区域传输

使用 firewalld

安装 firewalld

# 安装
yum install firewalld

# 启动
sudo systemctl start firewalld
sudo systemctl enable firewalld

安装补全命令

RHEL 系列 最小化安装时,默认不会安装*bash-completion* 包,因此命令的参数和选项无法通过 Tab 键自动补全

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion

Firewalld 区域 (Zones)

**Firewalld** 使用“区域”的概念来定义不同的安全策略。每个区域代表一个网络环境,并具有预定义的规则集,控制进出该区域的网络流量。默认区域为 **public**,其他常用区域包括:

区域名称 描述 默认策略
public 公共区域,不信任外部网络,仅允许选定的入站连接。 drop
drop 最低信任级别,所有入站连接都被丢弃。 drop
block drop
类似,但会返回 ICMP 错误消息。
drop
external 通常用于启用 NAT 伪装的外部网络,不信任外部网络,仅允许选定的入站连接。 drop
internal 内部网络,信任内部网络中的其他计算机,仅允许选定的入站连接。 accept
home 家庭网络,信任家庭网络中的其他计算机,仅允许选定的入站连接。 accept
work 工作网络,信任工作网络中的其他计算机,仅允许选定的入站连接。 accept
dmz 隔离区,允许有限的外部访问。 drop
trusted 最高信任级别,允许所有网络连接。 accept

查看区域

查看对应的区域

# 查看所有的区域
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

# 查看默认的区域
[root@localhost ~]# firewall-cmd --get-default-zone
public

查看所有区域的详细信息:

[root@localhost ~]# firewall-cmd --list-all -v
No zone specified, using default zone, i.e. 'public'
public (active)
  summary: Public
  description: For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

查看已经允许的服务

[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh

查看已允许的端口:

firewall-cmd --list-ports

添加和修改区域

创建新的区域

firewall-cmd --permanent --new-zone=myzone
# --permanent表示的是永久生效

设置默认区域:

firewall-cmd --set-default-zone=myzone

# 重新加载配置
firewall-cmd --reload

添加端口到区域

firewall-cmd --permanent --add-port=8080/tcp --zone=myzone

添加对应的服务

firewall-cmd --zone=myzone --add-service=ssh --permanent

移除服务或端口

使用 --remove-service--remove-port 命令,语法与添加类似。

区域绑定与源地址控制

firewalld 允许通过 源地址 直接将流量路由到非默认区域,即使接口在默认区域。

# 将来自 192.168.100.0/24 的流量强制分配到 internal 区域
firewall-cmd --permanent --add-source=192.168.100.0/24 --zone=internal
firewall-cmd --reload

服务 (Services)

**Firewalld** 使用“服务”的概念来表示特定的网络服务(例如 HTTP, SSH, DNS)。每个服务都有一个预定义的端口和协议。可以使用 **firewall-cmd --get-services** 命令查看所有可用的服务。

通过 xml 文件自定义服务

firewalld 的配置文件主要存放在两个目录中。当两个目录存在同名配置时,**/etc/firewalld** 优先级更高,会覆盖 **/usr/lib/firewalld** 的配置

/usr/lib/firewalld/    ← 系统默认配置
/etc/firewalld/        ← 用户自定义配置

如果你的应用不属于预定义的服务,可以手动创建 XML 文件:

# 复制模板到用户配置目录
cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/myapp.xml

# 修改myapp.xml
vi /etc/firewalld/services/myapp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>MyApp</short>
  <description>My Custom Application Service</description>
  <port protocol="tcp" port="9000"/>
  <port protocol="tcp" port="9001"/>
</service>
# 重新加载配置
firewall-cmd --reload
# 验证自定义服务是否被识别
firewall-cmd --get-services | grep myapp
# 添加自定义服务到区域
firewall-cmd --permanent --add-service=myapp --zone=public
firewall-cmd --reload

实战案列

 yum -y install httpd
 systemctl start httpd
 firewall-cmd --add-service=http --permanent --zone=myzone
 firewall-cmd --reload

image

image

【1】红帽官网:https://docs.redhat.com/zh-cn/documentation/red_hat_enterprise_linux/8/html/system_design_guide/using-and-configuring-firewalld_system-design-guide

【2】firewalld 官方文档:https://firewalld.org

【3】博客:https://www.cnblogs.com/zjzhen/articles/18539625

posted @ 2026-07-25 16:15  心识-坤  阅读(1)  评论(0)    收藏  举报