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

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

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

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

目录

一、引言

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

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

二、服务管理

1、Firewalld中的服务定义

2、查看已定义的服务

3、启用/禁用特定服务

启用服务

禁用服务

4、自定义服务配置

[1. 创建服务配置文件](#1. 创建服务配置文件)

[2. 编辑服务配置文件](#2. 编辑服务配置文件)

[3. 重新加载 Firewalld 配置](#3. 重新加载 Firewalld 配置)

[4. 验证自定义服务](#4. 验证自定义服务)

[5. 启用自定义服务](#5. 启用自定义服务)

三、端口管理

1、开放特定端口

2、关闭特定端口

3、查看当前开放的端口

4、端口转发设置

[1. 启用 IP 转发](#1. 启用 IP 转发)

[2. 设置端口转发规则](#2. 设置端口转发规则)

[3. 使端口转发规则永久生效](#3. 使端口转发规则永久生效)

[5、使用 firewall-cmd 的常见选项](#5、使用 firewall-cmd 的常见选项)

四、IP地址与MAC地址过滤

1、基于IP地址的访问控制

[1. 查看当前区域设置](#1. 查看当前区域设置)

[2. 允许特定 IP 地址访问特定端口](#2. 允许特定 IP 地址访问特定端口)

[3. 拒绝特定 IP 地址访问特定端口](#3. 拒绝特定 IP 地址访问特定端口)

[4. 允许或拒绝整个子网](#4. 允许或拒绝整个子网)

[5. 查看现有的规则](#5. 查看现有的规则)

[6. 删除现有的规则](#6. 删除现有的规则)

2、MAC地址绑定与过滤

[1. 查看当前区域设置](#1. 查看当前区域设置)

[2. 允许特定 MAC 地址访问网络](#2. 允许特定 MAC 地址访问网络)

[3. 拒绝特定 MAC 地址访问网络](#3. 拒绝特定 MAC 地址访问网络)

[4. 查看现有的规则](#4. 查看现有的规则)

[5. 删除现有的规则](#5. 删除现有的规则)


一、引言

在 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)进行管理。

二、服务管理

1、Firewalld中的服务定义

在 Firewalld 中,服务定义是指预定义的服务配置,这些配置包括服务的名称、描述以及服务所需的开放端口和协议。服务定义使得管理防火墙规则更加简便,因为我们可以直接通过服务名称来允许或禁止网络流量,而无需手动指定每个端口和协议。

2、查看已定义的服务

我们可以查看 Firewalld 中所有已定义的服务:

sudo firewall-cmd --get-services

3、启用/禁用特定服务

在 Firewalld 中,可以通过命令启用或禁用特定的服务。这些操作可以是临时的(当前运行时有效)或者永久的(重启后依然有效)。

启用服务

启用服务(临时)

要在指定区域中临时启用某个服务,可以使用以下命令:

bash 复制代码
sudo firewall-cmd --zone=<区域名> --add-service=<服务名>

例如,在 public 区域中启用 HTTP 服务:

bash 复制代码
sudo firewall-cmd --zone=public --add-service=http

启用服务(永久)

要永久启用某个服务,可以添加 --permanent 参数:

bash 复制代码
sudo firewall-cmd --zone=<区域名> --add-service=<服务名> --permanent

例如,在 public 区域中永久启用 HTTP 服务:

bash 复制代码
sudo firewall-cmd --zone=public --add-service=http --permanent

启用服务后,通常需要重新加载 Firewalld 配置以应用更改:

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

禁用服务

禁用服务(临时)

要在指定区域中临时禁用某个服务,可以使用以下命令:

bash 复制代码
sudo firewall-cmd --zone=<区域名> --remove-service=<服务名>

例如,在 public 区域中禁用 HTTP 服务:

bash 复制代码
sudo firewall-cmd --zone=public --remove-service=http

禁用服务(永久)

要永久禁用某个服务,可以添加 --permanent 参数:

bash 复制代码
sudo firewall-cmd --zone=<区域名> --remove-service=<服务名> --permanent

例如,在 public 区域中永久禁用 HTTP 服务:

bash 复制代码
sudo firewall-cmd --zone=public --remove-service=http --permanent

同样,禁用服务后,通常需要重新加载 Firewalld 配置以应用更改:

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

验证服务状态

我们可以使用以下命令验证某个服务在指定区域中是否启用:

bash 复制代码
sudo firewall-cmd --zone=<区域名> --query-service=<服务名>

例如,查询 HTTP 服务是否在 public 区域中启用:

bash 复制代码
sudo firewall-cmd --zone=public --query-service=http

该命令将返回 yes 或 no,表示服务是否已启用。

4、自定义服务配置

在 Firewalld 中,自定义服务配置可以让你添加特定的服务,这些服务可能不包含在默认的 Firewalld 服务列表中。

1. 创建服务配置文件

自定义服务配置文件存储在 /etc/firewalld/services/ 目录下。文件名应以 .xml 结尾。例如,创建一个名为 my-custom-service.xml 的文件:

bash 复制代码
sudo nano /etc/firewalld/services/my-custom-service.xml

2. 编辑服务配置文件

在编辑器中,定义你的自定义服务。下面是一个示例配置文件,用于创建一个名为 "My Custom Service" 的服务,它使用 TCP 端口 12345:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>My Custom Service</short>
  <description>A custom service for demonstration purposes.</description>
  <port protocol="tcp" port="12345"/>
</service>

3. 重新加载 Firewalld 配置

保存并关闭文件后,重新加载 Firewalld 以应用新的服务配置:

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

4. 验证自定义服务

验证新服务是否已添加:

XML 复制代码
sudo firewall-cmd --get-services | grep my-custom-service

如果配置正确,你应该能看到 my-custom-service 列在输出中。

5. 启用自定义服务

现在我们可以像管理其他服务一样启用或禁用你的自定义服务。例如,启用它:

XML 复制代码
sudo firewall-cmd --zone=public --add-service=my-custom-service

或永久启用它:

XML 复制代码
sudo firewall-cmd --zone=public --add-service=my-custom-service --permanent
sudo firewall-cmd --reload

验证服务状态

验证自定义服务是否启用:

XML 复制代码
sudo firewall-cmd --zone=public --query-service=my-custom-service

三、端口管理

1、开放特定端口

临时开放端口

要在当前区域(默认是 public)中临时开放一个特定端口(例如 TCP 端口 8080),请使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-port=8080/tcp

这将在当前会话中开放该端口,但不会在重启后保留。

永久开放端口

要永久开放一个端口,请添加 --permanent 选项,然后重新加载 Firewalld 配置:

XML 复制代码
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

2、关闭特定端口

临时关闭端口

要在当前区域中临时关闭一个端口(例如 TCP 端口 8080),请使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --remove-port=8080/tcp

这将在当前会话中关闭该端口,但不会在重启后保留。

永久关闭端口

要永久关闭一个端口,请添加 --permanent 选项,然后重新加载 Firewalld 配置:

XML 复制代码
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

3、查看当前开放的端口

要查看当前区域中所有开放的端口,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --list-ports

4、端口转发设置

在 Firewalld 中设置端口转发(也称为端口重定向)可以通过以下步骤完成。假设我们希望将外部访问的某个端口重定向到另一台服务器的端口。

示例:设置端口转发

转发所有到本机 8080 端口的流量到内网的 192.168.1.100 的 80 端口

1. 启用 IP 转发

首先需要在系统中启用 IP 转发。编辑 /etc/sysctl.conf 文件并添加以下行:

XML 复制代码
net.ipv4.ip_forward = 1

使更改生效:

XML 复制代码
sudo sysctl -p

2. 设置端口转发规则

通过 firewall-cmd 命令来设置端口转发规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100

以上命令将会在当前会话中生效。

3. 使端口转发规则永久生效

要使上述端口转发规则永久生效,可以添加 --permanent 选项并重新加载配置:

XML 复制代码
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100 --permanent
sudo firewall-cmd --reload

5、使用 firewall-cmd 的常见选项

  • **--zone=<zone>:**指定区域,默认为 public。
  • **--add-port=<port>/<protocol>:**添加要开放的端口和协议(例如 8080/tcp)。
  • **--remove-port=<port>/<protocol>:**删除要关闭的端口和协议。
  • **--permanent:**使更改永久生效,需要重新加载配置。
  • **--reload:**重新加载 Firewalld 配置以应用永久更改。
  • **--list-ports:**列出当前区域中开放的所有端口。

四、IP地址与MAC地址过滤

1、基于IP地址的访问控制

在 Firewalld 中,基于 IP 地址的访问控制可以通过创建特定的规则来允许或拒绝特定 IP 地址的访问。

基于 IP 地址的访问控制配置步骤

1. 查看当前区域设置

首先,查看当前系统使用的防火墙区域,以便在该区域下进行配置:

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

假设返回结果为 public,那么接下来的配置将针对 public 区域进行。

2. 允许特定 IP 地址访问特定端口

假设我们希望允许 IP 地址 192.168.1.10 访问服务器的 22 端口(SSH),可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept'

要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept' --permanent
sudo firewall-cmd --reload

3. 拒绝特定 IP 地址访问特定端口

假设我们希望拒绝 IP 地址 192.168.1.20 访问服务器的 80 端口(HTTP),可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.20" port protocol="tcp" port="80" reject'

要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.20" port protocol="tcp" port="80" reject' --permanent
sudo firewall-cmd --reload

4. 允许或拒绝整个子网

如果需要允许或拒绝整个子网的访问,可以指定子网地址。比如允许整个 192.168.1.0/24 子网访问服务器的 80 端口,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept'

要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept' --permanent
sudo firewall-cmd --reload

5. 查看现有的规则

要查看当前区域中的所有 rich 规则,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --list-rich-rules

6. 删除现有的规则

假设需要删除先前添加的允许 IP 地址 192.168.1.10 访问 22 端口的规则,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept'

要使该删除操作永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="22" accept' --permanent
sudo firewall-cmd --reload

2、MAC地址绑定与过滤

在 Firewalld 中,MAC 地址绑定与过滤可以通过创建特定的规则来限制或允许基于 MAC 地址的访问。这种方式可以用于网络访问控制,确保只有特定设备能够访问某些资源。

1. 查看当前区域设置

首先,查看当前系统使用的防火墙区域,以便在该区域下进行配置:

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

假设返回结果为 public,那么接下来的配置将针对 public 区域进行。

2. 允许特定 MAC 地址访问网络

假设我们希望允许 MAC 地址 00:11:22:33:44:55 的设备访问网络,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept'

要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept' --permanent
sudo firewall-cmd --reload

3. 拒绝特定 MAC 地址访问网络

假设我们希望拒绝 MAC 地址 00:11:22:33:44:66 的设备访问网络,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:66" drop'

要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:66" drop' --permanent
sudo firewall-cmd --reload

4. 查看现有的规则

要查看当前区域中的所有 rich 规则,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --list-rich-rules

5. 删除现有的规则

假设需要删除先前添加的允许 MAC 地址 00:11:22:33:44:55 的规则,可以使用以下命令:

XML 复制代码
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept'

要使该删除操作永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:

XML 复制代码
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept' --permanent
sudo firewall-cmd --reload

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

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

相关推荐
想见感3 小时前
自定义集成ESXI网卡驱动
linux
IT19954 小时前
Linux笔记-对Linux环境变量的进一步认识(2024-08-09)
linux·运维·笔记·运维开发
Yanbin_Q5 小时前
Vagrant 没了 VirtualBox 的话可以配 Qemu
运维·ruby·vagrant
zkf01000076 小时前
ISAAC SIM踩坑记录--ROS2相机影像发布
linux
fivestar20097 小时前
一台服务器最大能打开的文件数
运维·服务器
看山还是山,看水还是。7 小时前
Oracle的字符串函数
运维·数据库·安全·oracle
很楠不爱7 小时前
Linux网络——自定义协议与序列化
linux·服务器·网络
姝孟7 小时前
LInux——环境基础开发工具使用(正在更新中...)
linux·运维·centos
Genius Kim7 小时前
Knife4j调试全局对象参数自动化
运维·python·自动化
大耳朵土土垚7 小时前
【Linux】ELF可执行程序和动态库加载
linux·运维·服务器