【CentOS】中的Firewalld:全面介绍与实战应用(上)

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

[1、iptables 时代](#1、iptables 时代)

[2、firewalld 时代](#2、firewalld 时代)

[3、 从 iptables 迁移到 firewalld](#3、 从 iptables 迁移到 firewalld)

二、Firewalld基础概念

1、什么是Firewalld

[2、Firewalld 的特性](#2、Firewalld 的特性)

3、Firewalld与iptables的区别

[1. 设计理念和管理方式](#1. 设计理念和管理方式)

[2. 使用方式](#2. 使用方式)

[3. 规则管理和灵活性](#3. 规则管理和灵活性)

[4. 性能和适用场景](#4. 性能和适用场景)

三、安装与配置Firewalld

1、Firewalld的安装(对于未预装的系统)

四、Firewalld的区域(Zones)管理

1、区域的概念与作用

2、如何查看当前区域设置

3、更改默认区域与接口绑定


一、引言

在 CentOS 系统中,防火墙管理工具经历了从 iptables 到 firewalld 的演变。了解这一变迁过程有助于更好地理解和使用当前的防火墙管理工具。

1、iptables 时代

简介

  • iptables 是 Linux 内核中 Netfilter 项目的用户空间实用程序,用于配置 IPv4 数据包过滤规则。它允许用户定义规则以控制网络流量的进出。

功能

  1. **数据包过滤:**根据源地址、目标地址、端口等条件过滤数据包。
  2. **NAT:**网络地址转换,主要用于互联网共享。
  3. **状态检测:**跟踪连接状态,允许基于状态的规则。
  4. **丰富的规则集:**支持复杂的规则和链结构,允许用户自定义网络流量控制。

配置

iptables 规则通过命令行工具 iptables 进行管理,通常规则配置会保存在 /etc/sysconfig/iptables 文件中。重启系统时,可以通过这个文件加载规则。

2、firewalld 时代

简介

  • firewalld 是一个动态管理防火墙的守护进程,提供基于区域的网络流量管理。它是在 CentOS 7 及以后版本中引入的,旨在简化防火墙管理,提供更灵活和动态的控制。

功能

  1. **动态管理:**支持在不中断现有连接的情况下动态更改规则。
  2. **区域概念:**基于信任级别定义不同的区域,每个区域有不同的规则。
  3. **服务管理:**可以通过服务名称而不是端口号来配置规则。
  4. **接口绑定:**可以将网络接口绑定到特定的区域。
  5. **丰富的接口:**提供命令行工具 firewall-cmd 和图形界面工具(如 firewall-config)进行管理。

3、 从 iptables 迁移到 firewalld

迁移原因

  1. **简化管理:**firewalld 提供更高级的抽象,简化了复杂规则的管理。
  2. **动态配置:**firewalld 可以在不中断现有连接的情况下应用新的规则。
  3. **区域和服务管理:**通过区域和服务的概念,提供了更直观的规则管理方式。

迁移过程

  1. **学习 firewalld:**理解区域、服务和接口的概念。
  2. **转换规则:**将 iptables 规则翻译成 firewalld 规则。
  3. **测试和验证:**在迁移过程中测试新规则以确保网络服务不受影响。
  4. **逐步切换:**可以在测试环境中逐步切换,验证一切正常后再在生产环境中切换。

二、Firewalld基础概念

1、什么是Firewalld

firewalld 是一个用于 Linux 系统的动态防火墙管理工具,旨在简化和增强防火墙的配置和管理。它在 CentOS 7 及以后版本中作为默认防火墙管理工具,取代了传统的 iptables。

2、Firewalld 的特性

动态管理

  • firewalld支持在不中断现有连接的情况下动态地更改防火墙规则。这意味着可以在系统运行时即时应用新的规则,无需重启防火墙服务。

区域概念

firewalld 引入了区域的概念,每个区域代表一组不同的信任级别,可以绑定到一个或多个网络接口。常见的区域包括:

  1. **public:**适用于公共网络,信任较低,只开放少量服务。
  2. **home:**适用于家庭网络,信任较高,开放更多服务。
  3. **work:**适用于工作网络,信任度介于家庭和公共网络之间。
  4. **internal:**适用于内部网络,信任度最高,开放所有内部服务。

3、Firewalld与iptables的区别

firewalld 和 iptables 是两种用于管理 Linux 防火墙的工具,它们在设计理念、功能和使用方式上有显著的区别。

1. 设计理念和管理方式

iptables

  1. **静态规则:**iptables 使用静态规则集,所有规则在启动时加载到内核并在运行时保持不变。任何更改都需要重新应用整个规则集,这可能导致短暂的网络中断。
  2. **命令行界面:**通过命令行界面手动配置规则,每条规则需要单独添加和管理。
  3. **链和表:**iptables 使用链(chain)和表(table)的概念,分别为 filter、nat、mangle 和 raw 表,每个表包含多个链,如 INPUT、OUTPUT、FORWARD 等。

firewalld

  1. **动态规则:**firewalld 支持动态添加、修改和删除规则,而无需重启防火墙服务或重新应用整个规则集,因此不会中断现有连接。
  2. **区域概念:**引入区域(zone)的概念,每个区域表示一组防火墙规则,可以根据网络接口或源地址分配到不同的区域。
  3. **服务管理:**允许通过服务名称来配置规则,而不仅仅是端口号,使配置更直观和易于管理。
  4. **图形界面和命令行工具:**除了命令行工具 firewall-cmd,还提供图形界面工具 firewall-config,方便用户管理防火墙。

2. 使用方式

iptables

  1. **手动配置:**需要手动编写和维护防火墙规则,规则语法相对复杂。
  2. **配置文件:**可以通过脚本或配置文件(如 /etc/sysconfig/iptables)来加载规则集,但需要重启服务或手动重新加载。

firewalld

  1. **区域和服务配置:**通过区域和服务进行高层次管理,配置更加简单。
  2. **动态调整:**支持即时生效的临时规则和持久化的永久规则,不会中断现有连接。

3. 规则管理和灵活性

iptables

  1. **细粒度控制:**提供对每个数据包的细粒度控制,适合高级用户和复杂的防火墙配置需求。
  2. **固定规则集:**一旦规则集加载到内核中,任何更改都需要重新加载整个规则集。

firewalld

  1. **灵活管理:**支持动态调整规则,适合需要频繁更改防火墙规则的环境。
  2. **高层抽象:**通过区域和服务提供高层抽象,简化配置和管理。

4. 性能和适用场景

iptables

  1. **高性能:**直接操作内核的 netfilter 框架,性能较高,适合高流量环境。
  2. **单一节点:**适用于单个节点或简单网络环境的防火墙管理。

firewalld

  1. **现代网络环境:**适应现代动态网络环境,特别是云计算和虚拟化环境,提供更好的灵活性和易用性。
  2. **综合管理:**适合需要综合管理多个网络接口和复杂网络配置的场景。

三、安装与配置Firewalld

1、Firewalld的安装(对于未预装的系统)

1. 更新系统

首先,确保系统的软件包是最新的。运行以下命令更新系统:

bash 复制代码
sudo yum update -y

2. 安装 Firewalld

使用 yum 包管理器安装 firewalld:

bash 复制代码
sudo yum install firewalld -y

3. 启动和启用 Firewalld

安装完成后,启动 firewalld 服务并设置开机自启动:

bash 复制代码
sudo systemctl start firewalld
sudo systemctl enable firewalld

4. 验证 Firewalld 状态

确保 firewalld 正常运行,可以使用以下命令检查其状态:

bash 复制代码
sudo systemctl status firewalld

如果 firewalld 正在运行,应该会看到类似以下的输出:

bash 复制代码
● 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)来定义不同网络接口的安全性和规则。每个区域都有一组预定义的规则,这些规则决定了哪些流量允许进出系统。

区域的概念

  1. **区域(Zone):**区域是防火墙规则的集合。每个区域都有不同的安全级别,适用于特定的网络接口或连接。
  2. **默认区域:**系统默认的区域。所有未指定区域的网络接口或连接会使用默认区域的规则。
  3. **动态和持久配置:**firewalld 支持动态配置(即时生效但重启后失效)和持久配置(重启后依然生效)。

常见的预定义区域

firewalld 提供了几种预定义的区域,每种区域适用于不同的安全场景:

  1. **trusted:**信任所有网络流量。所有传入和传出流量都允许。
  2. **home:**适用于家庭网络,允许常见的网络服务(如共享文件和打印机)。
  3. **work:**适用于工作网络,与 home 类似,但更加安全。
  4. **public:**适用于公共网络(如咖啡店的 Wi-Fi),仅允许最小的传入流量。
  5. **block:**阻止所有传入流量,只有出站流量允许。
  6. **dmz:**适用于受保护的公开访问区,允许外部访问特定服务。
  7. **external:**适用于外部网络,使用网络地址转换(NAT)保护内部网络。
  8. **internal:**适用于内部网络,信任内部网络的流量。
  9. **drop:**丢弃所有传入流量,不返回任何响应,仅允许出站流量。

2、如何查看当前区域设置

查看当前区域设置,可以通过以下 firewalld 命令来实现。这些命令允许查看当前活跃的区域、特定接口的区域分配以及默认区域设置。

查看当前活动的区域和接口

查看当前活动的区域以及每个区域内包含的网络接口:

bash 复制代码
sudo firewall-cmd --get-active-zones

该命令会输出类似如下的信息:

bash 复制代码
public
  interfaces: eth0
home
  interfaces: eth1

这表示 eth0 接口被分配到 public 区域,而 eth1 接口被分配到 home 区域。

查看特定区域的详细信息

查看特定区域的详细信息,包括该区域的所有规则和设置:

bash 复制代码
sudo firewall-cmd --zone=public --list-all

该命令会输出类似如下的信息:

bash 复制代码
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 区域:

bash 复制代码
sudo firewall-cmd --set-default-zone=home

验证默认区域是否已更改:

bash 复制代码
sudo firewall-cmd --get-default-zone

将接口绑定到特定区域

假设有一个网络接口 eth0,希望将其绑定到 home 区域:

临时更改接口的区域绑定

将 eth0 接口临时分配到 home 区域(重启后更改会失效):

bash 复制代码
sudo firewall-cmd --zone=home --change-interface=eth0

验证更改:

bash 复制代码
sudo firewall-cmd --get-active-zones

应该能看到类似如下的输出:

bash 复制代码
home
  interfaces: eth0

永久更改接口的区域绑定

将 eth0 接口永久分配到 home 区域(重启后更改依然有效):

bash 复制代码
sudo firewall-cmd --zone=home --add-interface=eth0 --permanent

为了使永久更改生效,需要重新加载 firewalld:

bash 复制代码
sudo firewall-cmd --reload

再次验证更改:

bash 复制代码
sudo firewall-cmd --get-active-zones

应该能看到类似如下的输出:

bash 复制代码
home
  interfaces: eth0

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

相关推荐
wellnw2 分钟前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
不爱学习的YY酱4 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
DC_BLOG5 分钟前
Linux-Nginx虚拟主机
linux·运维·nginx
坐公交也用券8 分钟前
使用Python3实现Gitee码云自动化发布
运维·gitee·自动化
XY.散人39 分钟前
初识Linux · 信号处理 · 续
linux·信号处理
1900431 小时前
linux复习5:C prog
linux·运维·服务器
猫猫的小茶馆1 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件
朝九晚五ฺ1 小时前
【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变量
linux·运维·学习
ernesto_ji2 小时前
Jenkins下载安装、构建部署到linux远程启动运行
linux·servlet·jenkins
李迟2 小时前
某Linux发行版本无法使用nodejs程序重命名文件问题的研究
java·linux·服务器