🐇明明跟你说过:个人主页
🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅
🔖行路有良友,便是天堂🔖
一、引言
在 CentOS 系统中,防火墙管理工具经历了从 iptables 到 firewalld 的演变。了解这一变迁过程有助于更好地理解和使用当前的防火墙管理工具。
1、iptables 时代
简介
- iptables 是 Linux 内核中 Netfilter 项目的用户空间实用程序,用于配置 IPv4 数据包过滤规则。它允许用户定义规则以控制网络流量的进出。
功能
- 数据包过滤:根据源地址、目标地址、端口等条件过滤数据包。
- NAT:网络地址转换,主要用于互联网共享。
- 状态检测:跟踪连接状态,允许基于状态的规则。
- 丰富的规则集:支持复杂的规则和链结构,允许用户自定义网络流量控制。
配置
iptables 规则通过命令行工具 iptables 进行管理,通常规则配置会保存在 /etc/sysconfig/iptables 文件中。重启系统时,可以通过这个文件加载规则。
2、firewalld 时代
简介
- firewalld 是一个动态管理防火墙的守护进程,提供基于区域的网络流量管理。它是在 CentOS 7 及以后版本中引入的,旨在简化防火墙管理,提供更灵活和动态的控制。
功能
- 动态管理:支持在不中断现有连接的情况下动态更改规则。
- 区域概念:基于信任级别定义不同的区域,每个区域有不同的规则。
- 服务管理:可以通过服务名称而不是端口号来配置规则。
- 接口绑定:可以将网络接口绑定到特定的区域。
- 丰富的接口:提供命令行工具 firewall-cmd 和图形界面工具(如 firewall-config)进行管理。
3、 从 iptables 迁移到 firewalld
迁移原因
- 简化管理:firewalld 提供更高级的抽象,简化了复杂规则的管理。
- 动态配置:firewalld 可以在不中断现有连接的情况下应用新的规则。
- 区域和服务管理:通过区域和服务的概念,提供了更直观的规则管理方式。
迁移过程
- 学习 firewalld:理解区域、服务和接口的概念。
- 转换规则:将 iptables 规则翻译成 firewalld 规则。
- 测试和验证:在迁移过程中测试新规则以确保网络服务不受影响。
- 逐步切换:可以在测试环境中逐步切换,验证一切正常后再在生产环境中切换。
二、Firewalld基础概念
1、什么是Firewalld
firewalld 是一个用于 Linux 系统的动态防火墙管理工具,旨在简化和增强防火墙的配置和管理。它在 CentOS 7 及以后版本中作为默认防火墙管理工具,取代了传统的 iptables。
2、Firewalld 的特性
动态管理
- **firewalld **支持在不中断现有连接的情况下动态地更改防火墙规则。这意味着可以在系统运行时即时应用新的规则,无需重启防火墙服务。
区域概念
firewalld 引入了区域的概念,每个区域代表一组不同的信任级别,可以绑定到一个或多个网络接口。常见的区域包括:
- public:适用于公共网络,信任较低,只开放少量服务。
- home:适用于家庭网络,信任较高,开放更多服务。
- work:适用于工作网络,信任度介于家庭和公共网络之间。
- internal:适用于内部网络,信任度最高,开放所有内部服务。
3、Firewalld与iptables的区别
firewalld 和 iptables 是两种用于管理 Linux 防火墙的工具,它们在设计理念、功能和使用方式上有显著的区别。
1. 设计理念和管理方式
iptables
- 静态规则:iptables 使用静态规则集,所有规则在启动时加载到内核并在运行时保持不变。任何更改都需要重新应用整个规则集,这可能导致短暂的网络中断。
- 命令行界面:通过命令行界面手动配置规则,每条规则需要单独添加和管理。
- 链和表:iptables 使用链(chain)和表(table)的概念,分别为 filter、nat、mangle 和 raw 表,每个表包含多个链,如 INPUT、OUTPUT、FORWARD 等。
firewalld
- 动态规则:firewalld 支持动态添加、修改和删除规则,而无需重启防火墙服务或重新应用整个规则集,因此不会中断现有连接。
- 区域概念:引入区域(zone)的概念,每个区域表示一组防火墙规则,可以根据网络接口或源地址分配到不同的区域。
- 服务管理:允许通过服务名称来配置规则,而不仅仅是端口号,使配置更直观和易于管理。
- 图形界面和命令行工具:除了命令行工具 firewall-cmd,还提供图形界面工具 firewall-config,方便用户管理防火墙。
2. 使用方式
iptables
- 手动配置:需要手动编写和维护防火墙规则,规则语法相对复杂。
- 配置文件:可以通过脚本或配置文件(如 /etc/sysconfig/iptables)来加载规则集,但需要重启服务或手动重新加载。
firewalld
- 区域和服务配置:通过区域和服务进行高层次管理,配置更加简单。
- 动态调整:支持即时生效的临时规则和持久化的永久规则,不会中断现有连接。
3. 规则管理和灵活性
iptables
- 细粒度控制:提供对每个数据包的细粒度控制,适合高级用户和复杂的防火墙配置需求。
- 固定规则集:一旦规则集加载到内核中,任何更改都需要重新加载整个规则集。
firewalld
- 灵活管理:支持动态调整规则,适合需要频繁更改防火墙规则的环境。
- 高层抽象:通过区域和服务提供高层抽象,简化配置和管理。
4. 性能和适用场景
iptables
- 高性能:直接操作内核的 netfilter 框架,性能较高,适合高流量环境。
- 单一节点:适用于单个节点或简单网络环境的防火墙管理。
firewalld
- 现代网络环境:适应现代动态网络环境,特别是云计算和虚拟化环境,提供更好的灵活性和易用性。
- 综合管理:适合需要综合管理多个网络接口和复杂网络配置的场景。
三、安装与配置Firewalld
1、Firewalld的安装(对于未预装的系统)
1. 更新系统
首先,确保系统的软件包是最新的。运行以下命令更新系统:
sudo yum update -y
2. 安装 Firewalld
使用 yum 包管理器安装 firewalld:
sudo yum install firewalld -y
3. 启动和启用 Firewalld
安装完成后,启动 firewalld 服务并设置开机自启动:
sudo systemctl start firewalld
sudo systemctl enable firewalld
4. 验证 Firewalld 状态
确保 firewalld 正常运行,可以使用以下命令检查其状态:
sudo systemctl status firewalld
如果 firewalld 正在运行,应该会看到类似以下的输出:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-11-07 12:34:56 UTC; 5min ago
Docs: man:firewalld(1)
四、Firewalld的区域(Zones)管理
1、区域的概念与作用
firewalld 使用区域(Zones)来定义不同网络接口的安全性和规则。每个区域都有一组预定义的规则,这些规则决定了哪些流量允许进出系统。
区域的概念
- 区域(Zone):区域是防火墙规则的集合。每个区域都有不同的安全级别,适用于特定的网络接口或连接。
- 默认区域:系统默认的区域。所有未指定区域的网络接口或连接会使用默认区域的规则。
- 动态和持久配置:firewalld 支持动态配置(即时生效但重启后失效)和持久配置(重启后依然生效)。
常见的预定义区域
firewalld 提供了几种预定义的区域,每种区域适用于不同的安全场景:
- trusted:信任所有网络流量。所有传入和传出流量都允许。
- home:适用于家庭网络,允许常见的网络服务(如共享文件和打印机)。
- work:适用于工作网络,与 home 类似,但更加安全。
- public:适用于公共网络(如咖啡店的 Wi-Fi),仅允许最小的传入流量。
- block:阻止所有传入流量,只有出站流量允许。
- dmz:适用于受保护的公开访问区,允许外部访问特定服务。
- external:适用于外部网络,使用网络地址转换(NAT)保护内部网络。
- internal:适用于内部网络,信任内部网络的流量。
- drop:丢弃所有传入流量,不返回任何响应,仅允许出站流量。
2、如何查看当前区域设置
查看当前区域设置,可以通过以下 firewalld 命令来实现。这些命令允许查看当前活跃的区域、特定接口的区域分配以及默认区域设置。
查看当前活动的区域和接口
查看当前活动的区域以及每个区域内包含的网络接口:
sudo firewall-cmd --get-active-zones
该命令会输出类似如下的信息:
public
interfaces: eth0
home
interfaces: eth1
这表示 eth0 接口被分配到 public 区域,而 eth1 接口被分配到 home 区域。
查看特定区域的详细信息
查看特定区域的详细信息,包括该区域的所有规则和设置:
sudo firewall-cmd --zone=public --list-all
该命令会输出类似如下的信息:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
3、更改默认区域与接口绑定
更改默认区域
更改默认区域为 home 区域:
sudo firewall-cmd --set-default-zone=home
验证默认区域是否已更改:
sudo firewall-cmd --get-default-zone
将接口绑定到特定区域
假设有一个网络接口 eth0,希望将其绑定到 home 区域:
临时更改接口的区域绑定
将 eth0 接口临时分配到 home 区域(重启后更改会失效):
sudo firewall-cmd --zone=home --change-interface=eth0
验证更改:
sudo firewall-cmd --get-active-zones
应该能看到类似如下的输出:
home
interfaces: eth0
永久更改接口的区域绑定
将 eth0 接口永久分配到 home 区域(重启后更改依然有效):
sudo firewall-cmd --zone=home --add-interface=eth0 --permanent
为了使永久更改生效,需要重新加载 firewalld:
sudo firewall-cmd --reload
再次验证更改:
sudo firewall-cmd --get-active-zones
应该能看到类似如下的输出:
home
interfaces: eth0
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!
版权归原作者 明明跟你说过 所有, 如有侵权,请联系我们删除。