【CentOS】中的Firewalld:全面介绍与实战应用(下)
本文深入探讨了CentOS操作系统中Firewalld防火墙的全面功能与实战应用。首先,文章概述了Firewalld的基本概念,强调了它在现代Linux系统中作为动态管理防火墙规则的重要工具的地位。与传统的iptables相比,Firewalld提供了更为直观和用户友好的界面,支持区域(zones)概念,能够根据网络信任级别定义不同的安全策略。接着,文章详细解析了Firewalld的核心组件,包括
🐇明明跟你说过:个人主页
🏅个人专栏:《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)进行管理。
二、服务管理
1、Firewalld中的服务定义
在 Firewalld 中,服务定义是指预定义的服务配置,这些配置包括服务的名称、描述以及服务所需的开放端口和协议。服务定义使得管理防火墙规则更加简便,因为我们可以直接通过服务名称来允许或禁止网络流量,而无需手动指定每个端口和协议。
2、查看已定义的服务
我们可以查看 Firewalld 中所有已定义的服务:
sudo firewall-cmd --get-services
3、启用/禁用特定服务
在 Firewalld 中,可以通过命令启用或禁用特定的服务。这些操作可以是临时的(当前运行时有效)或者永久的(重启后依然有效)。
启用服务
启用服务(临时)
要在指定区域中临时启用某个服务,可以使用以下命令:
sudo firewall-cmd --zone=<区域名> --add-service=<服务名>
例如,在 public 区域中启用 HTTP 服务:
sudo firewall-cmd --zone=public --add-service=http
启用服务(永久)
要永久启用某个服务,可以添加 --permanent 参数:
sudo firewall-cmd --zone=<区域名> --add-service=<服务名> --permanent
例如,在 public 区域中永久启用 HTTP 服务:
sudo firewall-cmd --zone=public --add-service=http --permanent
启用服务后,通常需要重新加载 Firewalld 配置以应用更改:
sudo firewall-cmd --reload
禁用服务
禁用服务(临时)
要在指定区域中临时禁用某个服务,可以使用以下命令:
sudo firewall-cmd --zone=<区域名> --remove-service=<服务名>
例如,在 public 区域中禁用 HTTP 服务:
sudo firewall-cmd --zone=public --remove-service=http
禁用服务(永久)
要永久禁用某个服务,可以添加 --permanent 参数:
sudo firewall-cmd --zone=<区域名> --remove-service=<服务名> --permanent
例如,在 public 区域中永久禁用 HTTP 服务:
sudo firewall-cmd --zone=public --remove-service=http --permanent
同样,禁用服务后,通常需要重新加载 Firewalld 配置以应用更改:
sudo firewall-cmd --reload
验证服务状态
我们可以使用以下命令验证某个服务在指定区域中是否启用:
sudo firewall-cmd --zone=<区域名> --query-service=<服务名>
例如,查询 HTTP 服务是否在 public 区域中启用:
sudo firewall-cmd --zone=public --query-service=http
该命令将返回 yes 或 no,表示服务是否已启用。
4、自定义服务配置
在 Firewalld 中,自定义服务配置可以让你添加特定的服务,这些服务可能不包含在默认的 Firewalld 服务列表中。
1. 创建服务配置文件
自定义服务配置文件存储在 /etc/firewalld/services/ 目录下。文件名应以 .xml 结尾。例如,创建一个名为 my-custom-service.xml 的文件:
sudo nano /etc/firewalld/services/my-custom-service.xml
2. 编辑服务配置文件
在编辑器中,定义你的自定义服务。下面是一个示例配置文件,用于创建一个名为 "My Custom Service" 的服务,它使用 TCP 端口 12345:
<?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 以应用新的服务配置:
sudo firewall-cmd --reload
4. 验证自定义服务
验证新服务是否已添加:
sudo firewall-cmd --get-services | grep my-custom-service
如果配置正确,你应该能看到 my-custom-service 列在输出中。
5. 启用自定义服务
现在我们可以像管理其他服务一样启用或禁用你的自定义服务。例如,启用它:
sudo firewall-cmd --zone=public --add-service=my-custom-service
或永久启用它:
sudo firewall-cmd --zone=public --add-service=my-custom-service --permanent
sudo firewall-cmd --reload
验证服务状态
验证自定义服务是否启用:
sudo firewall-cmd --zone=public --query-service=my-custom-service
三、端口管理
1、开放特定端口
临时开放端口
要在当前区域(默认是 public)中临时开放一个特定端口(例如 TCP 端口 8080),请使用以下命令:
sudo firewall-cmd --zone=public --add-port=8080/tcp
这将在当前会话中开放该端口,但不会在重启后保留。
永久开放端口
要永久开放一个端口,请添加 --permanent 选项,然后重新加载 Firewalld 配置:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
2、关闭特定端口
临时关闭端口
要在当前区域中临时关闭一个端口(例如 TCP 端口 8080),请使用以下命令:
sudo firewall-cmd --zone=public --remove-port=8080/tcp
这将在当前会话中关闭该端口,但不会在重启后保留。
永久关闭端口
要永久关闭一个端口,请添加 --permanent 选项,然后重新加载 Firewalld 配置:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload
3、查看当前开放的端口
要查看当前区域中所有开放的端口,可以使用以下命令:
sudo firewall-cmd --zone=public --list-ports
4、端口转发设置
在 Firewalld 中设置端口转发(也称为端口重定向)可以通过以下步骤完成。假设我们希望将外部访问的某个端口重定向到另一台服务器的端口。
示例:设置端口转发
转发所有到本机 8080 端口的流量到内网的 192.168.1.100 的 80 端口
1. 启用 IP 转发
首先需要在系统中启用 IP 转发。编辑 /etc/sysctl.conf 文件并添加以下行:
net.ipv4.ip_forward = 1
使更改生效:
sudo sysctl -p
2. 设置端口转发规则
通过 firewall-cmd 命令来设置端口转发规则:
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100
以上命令将会在当前会话中生效。
3. 使端口转发规则永久生效
要使上述端口转发规则永久生效,可以添加 --permanent 选项并重新加载配置:
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. 查看当前区域设置
首先,查看当前系统使用的防火墙区域,以便在该区域下进行配置:
sudo firewall-cmd --get-active-zones
假设返回结果为 public,那么接下来的配置将针对 public 区域进行。
2. 允许特定 IP 地址访问特定端口
假设我们希望允许 IP 地址 192.168.1.10 访问服务器的 22 端口(SSH),可以使用以下命令:
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 --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),可以使用以下命令:
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 --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 端口,可以使用以下命令:
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 --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 规则,可以使用以下命令:
sudo firewall-cmd --zone=public --list-rich-rules
6. 删除现有的规则
假设需要删除先前添加的允许 IP 地址 192.168.1.10 访问 22 端口的规则,可以使用以下命令:
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 --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. 查看当前区域设置
首先,查看当前系统使用的防火墙区域,以便在该区域下进行配置:
sudo firewall-cmd --get-active-zones
假设返回结果为 public,那么接下来的配置将针对 public 区域进行。
2. 允许特定 MAC 地址访问网络
假设我们希望允许 MAC 地址 00:11:22:33:44:55 的设备访问网络,可以使用以下命令:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept'
要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:
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 的设备访问网络,可以使用以下命令:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:66" drop'
要使该规则永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:
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 规则,可以使用以下命令:
sudo firewall-cmd --zone=public --list-rich-rules
5. 删除现有的规则
假设需要删除先前添加的允许 MAC 地址 00:11:22:33:44:55 的规则,可以使用以下命令:
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source mac="00:11:22:33:44:55" accept'
要使该删除操作永久生效,可以加上 --permanent 参数,并重新加载防火墙规则:
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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!
更多推荐
所有评论(0)