0


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

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

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

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

一、引言

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

启用服务

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

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

  1. 编辑服务配置文件

在编辑器中,定义你的自定义服务。下面是一个示例配置文件,用于创建一个名为 "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>

  1. 重新加载 Firewalld 配置

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

sudo firewall-cmd --reload

  1. 验证自定义服务

验证新服务是否已添加:

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

  1. 设置端口转发规则

通过 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

  1. 拒绝特定 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

  1. 允许或拒绝整个子网

如果需要允许或拒绝整个子网的访问,可以指定子网地址。比如允许整个 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

  1. 查看现有的规则

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

sudo firewall-cmd --zone=public --list-rich-rules

  1. 删除现有的规则

假设需要删除先前添加的允许 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

  1. 拒绝特定 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

  1. 查看现有的规则

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

sudo firewall-cmd --zone=public --list-rich-rules

  1. 删除现有的规则

假设需要删除先前添加的允许 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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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

标签: centos linux 运维

本文转载自: https://blog.csdn.net/weixin_53269650/article/details/143676349
版权归原作者 明明跟你说过 所有, 如有侵权,请联系我们删除。

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

还没有评论