firewalld基础实验
Firewalld 的简介
firewalld 是一个更高层次的防火墙管理工具,旨在简化防火墙的配置和管理。它使用区域(zones)和服务(services)的概念,使得用户能够更加方便地管理防火墙规则。
该防火墙同时支持 IPv4 和 IPv6 的防火墙配置,还支持以太网桥接和 IP 地址设置。Firewalld 将运行时配置与永久性配置分开管理。此外,它还提供了相应的接口,方便各种服务或应用程序直接添加防火墙规则。
我的理解是:
firewalld 提供一个 zones 的区域和 services 的概念,定义一个 zone 空间,把 service 放入这个空间中,即可实现外部的服务进入不了
使用 firewalld 的好处
- 在运行时环境中,可以进行即时更改。无需重启服务或后台进程
- 通过 firewalld 的 D-Bus 接口,各种服务、应用程序以及用户都可以轻松地调整防火墙设置。该接口功能完备,被防火墙配置工具 firewall-cmd、firewall-config 和 firewall-applet 所使用。
- 将运行时配置与永久性配置分开,使得在运行时进行评估和测试成为可能。运行时配置仅在下一次服务重新加载、重启或系统重启时失效。之后,永久性配置会再次被加载。利用运行时环境,可以设置那些只需在有限时间内有效的配置。如果某项运行时配置经过评估后证明是有效且可用的,那么就可以将其保存到永久性配置中。
我的理解是:
无需重启服务,直接通过 firewalld 的命令即可把新添加的防火墙的规则生效
谁在用它?
在以下 Linux 发行版中,firewalld 被用作默认的防火墙管理工具:
- RHEL 系列
- SUSE 系列
- OpenSUSE 系列
- 其它
那些将 firewalld 作为防火墙管理工具来使用的应用程序和库包括:
- NetworkManager
- libvirt
- podman
- Docker(仅限 iptables 后端)
- fail2ban
区域原则
- 流量仅进入一个区域。
- 流量只能从一个区域流出。
- 区域用于定义不同的信任级别。
- 默认情况下,同一区域内的传输是允许的。
- 默认情况下,禁止跨区域传输。
使用 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

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

浙公网安备 33010602011771号