【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 数据包过滤规则。它允许用户定义规则以控制网络流量的进出。

功能

  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


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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能在智能家居中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 人工智能在智能家居中的应用 人工智能在智能家居中的应用 人工智能在智能家居中的应用 引言 人工智能概述 定义与原理 发展历程 …

qt QWidgetAction详解

1、概述 QWidgetAction是Qt框架中的一个类&#xff0c;它继承自QAction类。QWidgetAction允许开发者将自定义的小部件&#xff08;widget&#xff09;插入到基于QAction的容器中&#xff0c;如工具栏或菜单项中。这使得QWidgetAction成为创建复杂用户界面和自定义菜单项的强大…

一文了解什么是腾讯云开发

一文了解什么是腾讯云开发 关于云开发的猜想腾讯云开发腾讯云开发的优势无服务跨平台轻松托管节约成本 快速上手云开发环境快速搭建管理后台 云开发体验 关于云开发的猜想 说到云开发&#xff0c;作为开发者的大家是否大概就有了想法。比如说过去的开发工作都是在自己本地电脑…

2.操作系统常问面试题1

2.1 Linux 中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数是什么 1、查看进程运行状态的指令&#xff1a; ps aux 列出所有进程的详细信息。 ps aux | grep PID &#xff0c;查看具体某PID进程状态。 在 Linux 中&#xff0c;可以使用以下指令来查看进…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示&#xff08;LCD&#xff09;技术的电视类型&#xff0c;但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

多路转接之poll

多路转接之poll 一、关于poll认识poll基于poll实现的服务器的原理 二、基于poll实现的服务器main.cpppollServer.hppsock.hppLog.hpppublic.hpp 一、关于poll 认识poll #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout);struct pollfd {int …

# filezilla连接 虚拟机ubuntu系统出错“尝试连接 ECONNREFUSED - 连接被服务器拒绝, 失败,无法连接服务器”解决方案

filezilla连接 虚拟机ubuntu系统出错“尝试连接 ECONNREFUSED - 连接被服务器拒绝&#xff0c; 失败&#xff0c;无法连接服务器”解决方案 一、问题描述&#xff1a; 当我们用filezilla客户端 连接 虚拟机ubuntu系统时&#xff0c;报错“尝试连接 ECONNREFUSED - 连接被服务…

TCP编程API

这里写自定义目录标题 主要的 TCP 编程 API 函数1.1 socket()1.2 bind()1.3 listen()1.4 accept()1.5 connect()1.6 send()1.7 recv()1.8 close() 主要的 TCP 编程 API 函数 1.1 socket() 创建一个新的套接字。 int socket(int domain, int type, int protocol);domain&…

STM32WB55RG开发(1)----开发板测试

STM32WB55RG开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载产品特性参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32WB55 & SENSOR是一款基于STM32WB55系列微控制器的评估套件。该套件采用先进的无线通信技术&#xff0c;支…

人工智能、机器学习与深度学习:层层递进的技术解读

引言 在当今科技快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为一个热门话题&#xff0c;几乎渗透到了我们生活的方方面面。从智能手机的语音助手&#xff0c;到自动驾驶汽车&#xff0c;再到医疗诊断中的图像识别&#xff0c;人工智能的应用正在改变我…

【Java学习】电脑基础操作和编程环境配置

CMD 在Windows中用命令行的方式操作计算机。 打开CMD Win R输入CMD按下回车键 Win E 进入我的电脑 常用的CMD命令 盘符名称冒号 说明&#xff1a;盘符切换 举例&#xff1a;E:回车&#xff0c;表示切换到E盘 dir 说明&#xff1a;查看当前路径下的内容 cd目录 说明&a…

Mac中禁用系统更新

Mac中禁用系统更新 文章目录 Mac中禁用系统更新1. 修改hosts&#xff0c;屏蔽系统更新检测联网1. 去除系统偏好设置--系统更新已有的小红点标记 1. 修改hosts&#xff0c;屏蔽系统更新检测联网 打开终端&#xff0c;执行命令&#xff1a; sudo vim /etc/hosts127.0.0.1 swdis…

Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。 UI 双击和长按 上一篇文章实现了拖拽接口&#xff0c;这篇文章来实现 UI 的双击和长按。 双击 创建脚本 UIDoubleClick.cs&#xff0c;创建一个 Image&#xff0c;并把脚本挂载到它身上。 在脚本中&#xff0c;继承 IPointerClickHa…

sql专题 之 where和join on

文章目录 前言where介绍使用过滤结果集关联两个表 连接外连接内连接自然连接 使用inner join和直接使用where关联两个表的区别总结 前言 从数据库查询数据时&#xff0c;一张表不足以查询到我们想要的数据&#xff0c;更多的时候我们需要联表查询。 联表查询我们一般会使用连接…

LeetCode 热题100之 动态规划1

对于动态规划的问题&#xff0c;解题步骤有以下几部(总结为动态规划五部曲&#xff1a;参考代码随想录动态规划 确定dp数组以及下标的含义&#xff1b;确定递推公式&#xff1b;dp数组如何初始化&#xff1b;确定遍历顺序&#xff1b;举例推导dp数组 下面的解题思路分析都将从…

python可视化将多张图整合到一起(画布)

这周有点事忙着&#xff0c;没时间重温刚结束的Mathurcup数学建模&#xff0c;这两天也是再看了下&#xff0c;论文还是赶紧挺烂的&#xff0c;但比国赛又有进步&#xff08;说起国赛又不得不抱怨了&#xff0c;基本其余省份都发了&#xff0c;但江西......哎&#xff09;。哎&…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

vue 依赖注入(Provide、Inject )和混入(mixins)

Prop 逐级透传问题​ 通常情况下&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;会使用 props。想象一下这样的结构&#xff1a;有一些多层级嵌套的组件&#xff0c;形成了一棵巨大的组件树&#xff0c;而某个深层的子组件需要一个较远的祖先组件中的部分数据。…

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP&#xff1f;在某些特定情境下&#xff0c;用户可能需要切换手机的IP地址&#xff0c;以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例&#xff0c;将详细介绍手机IP地址切换的几种方法&#xff0c;帮助用户轻松实现这一目标。 一…

一个强大的Stable Diffusion comfyUI 工作流,能实现写真自由、各种风格融合、面部特征一致性等等

今天&#xff0c;我们将向您介绍一款非常实用的工具——Stable Diffusion comfyUI工作流。这款工作流基于Stable Diffusion技术&#xff0c;旨在为您提供一键式生成图像的便捷体验。无论您是AI绘画的新手还是专业人士&#xff0c;这个工作流都能为您带来极大的便利。 在这个教…