【CentOS】中的Firewalld:全面介绍与实战应用(下)
🐇明明跟你说过:个人主页
🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、iptables 时代
2、firewalld 时代
二、服务管理
1、Firewalld中的服务定义
2、查看已定义的服务
3、启用/禁用特定服务
启用服务
禁用服务
4、自定义服务配置
1. 创建服务配置文件
2. 编辑服务配置文件
3. 重新加载 Firewalld 配置
4. 验证自定义服务
5. 启用自定义服务
三、端口管理
1、开放特定端口
2、关闭特定端口
3、查看当前开放的端口
4、端口转发设置
1. 启用 IP 转发
2. 设置端口转发规则
3. 使端口转发规则永久生效
5、使用 firewall-cmd 的常见选项
四、IP地址与MAC地址过滤
1、基于IP地址的访问控制
1. 查看当前区域设置
2. 允许特定 IP 地址访问特定端口
3. 拒绝特定 IP 地址访问特定端口
4. 允许或拒绝整个子网
5. 查看现有的规则
6. 删除现有的规则
2、MAC地址绑定与过滤
1. 查看当前区域设置
2. 允许特定 MAC 地址访问网络
3. 拒绝特定 MAC 地址访问网络
4. 查看现有的规则
5. 删除现有的规则
一、引言
在 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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!