如何使用 Firewalld 设置 Linux 防火墙

news2025/2/7 6:29:32

简介

在 Linux 中,防火墙是一个应用程序或服务,它使用预定的规则集来过滤或控制进出 Linux 服务器的网络流量。通常将防火墙配置为允许所需的流量通过,同时阻止其余的外部流量。

Firewalld 是一个用于 Linux 系统的防火墙管理解决方案。它是一个服务守护进程,提供可自定义的基于主机的防火墙,以及 D-Bus 接口和一套全面的防火墙规则,用于控制网络接口之间的流量。

Firewalld 使用区域的概念来管理网络流量。区域是预定义的规则集,可以将网络接口分配给这些规则集。你可以配置 firewalld 以允许或阻止与应用程序关联的服务或端口。

在本教程中,我们将演示如何使用 firewalld 守护进程设置 Linux 防火墙。我们将在 Red Hat Enterprise 9 (RHEL 9) 服务器上演示此操作。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

  • 到此为止,我们的云服务器就远程连接上了。

开始安装和启用 Firewalld

默认情况下,firewalld 已安装在基于 RHEL 的发行版中,例如 RHEL、AlmaLinux、CentOS、Rocky Linux 和 Fedora。但是,如果 firewalld 碰巧没有安装,你可以按如下方式安装它。

sudo dnf install firewalld -y

在 Ubuntu 和 Debian 发行版上,运行以下命令:

sudo apt update

sudo apt install firewalld -y

安装完成后,启用它以便在启动时启动。

sudo systemctl enable firewalld

接下来,启动 firewalld 服务或守护进程。

sudo systemctl start firewalld

现在应该启动防火墙,并带有默认的防火墙区域和规则。要验证防火墙服务是否正在运行,请执行以下命令:

sudo systemctl status firewalld

或者,你可以运行以下命令:

sudo firewall-cmd --state

以上输出确认防火墙已启动并正在运行。

Firewalld 区域

在你学习如何设置 firewalld 防火墙之前,最好先熟悉与该工具相关的一些概念。

firewalld 守护进程使用区域来管理流量。区域只是一组预定义的规则,这些规则根据对你网络信任级别的程度来决定应允许哪些流量。让我们快速浏览一下预定义的区域。

block - 所有传入连接都将被丢弃,并显示 icmp-host-prohibited 消息。只有从系统内部发起的网络连接才有可能。

drop - 这是信任度最低的区域。所有传入连接都将被丢弃,不进行回复,并且只允许传出连接。

public - 这表示不受信任的网络。当你对网络上的其他服务器不信任时,将实施此操作。当你有一个托管在云或本地网络上的服务器时,建议使用此设置。

external - 当你希望将防火墙配置为 NAT 网关时使用。外部区域用于 NAT 伪装,以便你的内部网络保持私有,但可以从外部系统访问。

internal - 当你信任 LAN 上的其他计算机或服务器时,用于内部网络。

dmz - 用于 DMZ(非军事区)中的服务器或计算机。这些将无法访问你网络上的系统,并且只允许特定的传入连接。

work - 在你信任大多数计算机和同事 PC 的工作场所使用。

home - 在家庭环境中使用,尤其是在 LAN 上台式机和笔记本电脑上。这意味着你信任家庭 LAN 上的大多数设备,并且允许某些服务。

trusted - 接受所有连接。

你可以通过在终端上运行以下命令来获取所有区域的列表。

sudo firewall-cmd --get-zones

此外,每个区域都有其关联的 .xml 文件,存储在 /usr/lib/firewalld/zones/ 目录中。你可以按如下方式列出这些文件。

ls -l /usr/lib/firewalld/zones/

要获取当前分配给你的网络接口的默认区域,请运行以下命令:

firewall-cmd --get-default-zone

在不更改防火墙的情况下,默认区域是 public 区域,它恰好也是开箱即用的唯一活动区域。默认情况下,所有网络接口都绑定到此区域。为了说明这一点,我们的 RHEL 系统附加了两个活动的网络接口 - ens160ens224

你可以使用以下命令列出网络接口:

ip link

或者

ip link show

要验证活动区域,请运行以下命令:

firewall-cmd --get-active-zones

在这里,你可以看到两个接口 - ens160ens224 - 由公共区域关联和管理。

要打印默认区域的配置,请运行以下命令。

sudo firewall-cmd --list-all

从输出中我们可以看到,我们只有一个活动区域,名为 public,它也是与两个网络接口关联的默认区域。

更改网络接口的区域

启动防火墙后,每个网络接口都绑定到默认区域,这也恰好是唯一的活动区域。如果需要,你可以在会话期间使用 --zone= 标志与 --change-interface= 标志结合使用,将接口绑定到另一个区域。

例如,要将 ens160 接口移动到 internal 区域,请执行以下命令:

sudo firewall-cmd --change-interface=ens160 --zone=internal

要确认接口已移动,请使用以下命令查询活动区域。

sudo firewall-cmd --get-active-zones

从输出中,你可以看到我们现在有两个活动区域:internalpublicens160 接口现在已移动到 internal 区域。

你可以使用我们在前面看到的 --list-all 命令中的 --zone= 标志来浏览与不同区域关联的特定配置。例如,要检查与 internal 区域关联的配置,请运行以下命令:

sudo firewall-cmd --list-all --zone=internal

你可以使用 --list-all-zones 参数打印所有区域配置,如下所示。

sudo firewall-cmd --list-all-zones

显示的输出非常大。为了更易于查看,你可以将输出管道传输到 less,这将允许你在滚动浏览配置时更易于查看。

sudo firewall-cmd --list-all-zones | less

注意:

将接口移动到新区域时,应谨慎操作,因为某些与一个区域关联的服务可能在另一个区域中不存在。例如,将接口移动到 trusted 区域将删除你的 SSH 连接,因为默认情况下,该区域未启用 SSH。因此,你将注销服务器。

调整默认区域

  • -set-default-zone= 参数允许你更改默认区域。在此示例中,我们将默认区域设置为 work
sudo firewall-cmd --set-default-zone=work

要确认这是默认区域,请运行以下命令:

sudo firewall-cmd --list-all

Firewalld 服务管理

服务只是在后台运行的守护进程。每个服务都与一个特定端口关联。例如,SSH 在端口 22 上运行,HTTP 在端口 80 上运行,而 cockpit 在端口 9090 上运行,仅举几例。

要列出与活动防火墙区域关联的所有服务,请运行以下命令:

sudo firewall-cmd --list-all

要缩小范围并列出绑定到特定区域的服务,请使用 --zone= 标志,如所示。以下命令列出了与 home 防火墙区域关联的服务。

sudo firewall-cmd --list-all --zone=home

如果你足够敏锐,你会注意到某些服务在某些区域中默认已允许。其中包括 cockpit、SSH 和 dhcpv6-client。

如何列出 Firewalld 支持的服务

要显示 Firewalld 支持的所有服务,请运行以下命令:

sudo firewall-cmd --get-services

此外,你可以将搜索范围缩小到特定服务。以下命令将突出显示所列服务中的 MongoDB 服务。

sudo firewall-cmd --get-services | grep -i mongodb

如何在 Firewalld 上添加/删除服务

将服务/端口添加到防火墙时,它们会绑定到默认活动区域,除非明确配置为其他区域。要为区域启用服务,请使用 --add-service= 参数。使用 --zone= 参数指定区域。

假设你正在运行一个运行常规 HTTP 服务的 Web 服务器。要在默认的公共区域的防火墙上允许 HTTP 服务,请运行以下命令。

sudo firewall-cmd --add-service=http --zone=public --permanent
  • -permanent 选项使更改持久化。为了使所做的更改即使在重新启动后也适用,请重新加载防火墙。
sudo firewall-cmd --reload

你应该获得 success 作为每个命令的输出,指示所有命令都已成功执行。你的公共区域现在应该允许 HTTP 服务通过防火墙,你可以使用以下命令确认这一点。

sudo firewall-cmd --list-services --zone=public

要从区域中删除该服务,请使用 --remove-service 标志并重新加载防火墙。

sudo firewall-cmd --remove-service=http --zone=public --permanent

sudo firewall-cmd --reload

当你检查防火墙上允许的服务时,这一次,列表中将缺少 HTTP 服务。

如何在 Firewalld 上打开/阻止端口

Firewalld 为你可能想要允许访问的常用应用程序提供服务。在大多数情况下,这些服务对应于应用程序正在侦听的端口。例如,HTTP Web 流量的相应端口是端口 80,而 MySQL 服务的相应端口是端口 3306。

但是,在某些情况下,你可能找不到与你的应用程序正在侦听的端口相对应的服务。例如,如果你的应用程序侦听端口 5000,你可以使用 --add-port= 标志打开此端口。端口可以是 TCP 或 UDP。

sudo firewall-cmd --add-port=5000/tcp --zone=public --permanent

要使更改即使在重新启动后也保持持久,请重新加载防火墙。

sudo firewall-cmd --reload

要验证该端口是否已在区域中打开,请运行以下命令。

sudo firewall-cmd --zone=public --list-ports

此外,你可以通过在范围内的起始端口和结束端口之间使用连字符来指定端口范围。例如,要在公共区域中打开 5000 到 6000 之间的端口范围,请运行以下命令:

sudo firewall-cmd --add-port=5000-6000/tcp --zone=public --permanent

sudo firewall-cmd --reload

同样,你可以通过运行以下命令来确认这一点:

sudo firewall-cmd --zone=public --list-ports

要拒绝或阻止端口,请使用 --remove-port= 参数。例如,要阻止公共区域上的 TCP 端口 5000,请运行以下命令:

sudo firewall-cmd --remove-port=5000/tcp --zone=public --permanent

然后重新加载防火墙以使更改持久。

sudo firewall-cmd --reload

结论

到目前为止,你应该清楚地了解如何在 Linux 系统上配置 firewalld 服务,以根据你的偏好管理流量。防火墙服务提供了一组丰富的规则,这些规则可以应用于接口和区域,从而为管理员提供管理网络流量的灵活性和自主性。

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

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

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

相关文章

财务域——业财一体设计

摘要 本文讨论了业财一体化的概念、背景、目标、技术推动因素以及企业经营环境的复杂化。业财一体化旨在通过信息化手段实现业务与财务数据的实时共享与联动,提升管理效率和决策能力。文章还概述了业财一体化在销售管理、成本核算、预算管理和风险管控等方面的应用…

【时间之外】IT人求职和创业应知【80】-特殊日子

目录 北京冬季招聘会 OpenAI CEO炮轰马斯克 英伟达推出全新AI芯片B300 莫欢喜,总成空。本周必须要谨行慎言。 感谢所有打开这个页面的朋友。人生不如意,开越野车去撒野,会害了自己,不如提升自己。提升自己的捷径就是学习和思考…

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中,咖啡早已不仅仅是提神醒脑的饮品,更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计,通过将咖啡与情感、魔法元素相结合,创造出一个充满想象力和治愈感…

Docker使用——国内Docker的安装办法

文章目录 参考资料前言Mac安装办法Homebrew 安装1. 直接下报错2. 安装homebrew, 用国内镜像3. 安装Docker4. 启动docker服务5. 测试是否安装成功 参考资料 鸣谢大佬文章。 macOS系统中:Docker的安装:https://blog.csdn.net/sulia1234567890…

python opencv的sift特征检测(Scale-Invariant Feature Transform)

sift 官方文档地址:https://docs.opencv.org/4.10.0/da/df5/tutorial_py_sift_intro.html 创建SIFT实例cv2.SIFT.create()特征检测sift.detect描述子sift.compute/sift.detectAndCompute画特征cv2.drawKeypoints 原图 特征点 代码 import cv2first ./12.pngsif…

精读DeepSeek v3技术文档的心得感悟

最近宋大宝同学读完了DeepSeekv3的文档,心中颇多感慨,忍不住想在这里记录一下对这款“业界有望启示未来低精度训练走向”的开源大模型的观察与思考。DeepSeek v3的亮点绝不仅仅是“Float8”或“超长上下文”这么简单,而是贯穿了从数值精度、注…

yarn install 安装报错:Workspaces can only be enabled in private projects.

在本地运行项目的时候,使用yarn install 安装模块依赖的时候,遇到报错:Workspaces can only be enabled in private projects. 一、原因分析 报这个错误是因为你使用了yarn的workspace,但并未将工程标记为private。 二、解决办法 …

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解

随着深度学习技术的不断发展,神经网络架构变得越来越复杂,而这些复杂网络在训练时常常遇到梯度消失、梯度爆炸以及计算效率低等问题。为了克服这些问题,研究者们提出了多种网络架构,包括 残差网络(ResNet)、…

Excel将混乱的多行做成1列

目标是将数据按从左到右,再从上到下排成一列。 公式法 首先用textjoin函数将文本包起来,做成一个超长文本。 然后用公式 截取文本 Mid(m1,n,3),意思就是对m1单元格,从第n个字符开始,截取3个字符出来。 这个公式如何自…

在vscode的ESP-IDF中使用自定义组件

以hello-world为例,演示步骤和注意事项 1、新建ESP-IDF项目 选择模板 从hello-world模板创建 2、打开项目 3、编译结果没错 正在执行任务: /home/azhu/.espressif/python_env/idf5.1_py3.10_env/bin/python /home/azhu/esp/v5.1/esp-idf/tools/idf_size.py /home…

基于springboot校园招聘系统源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 使用旧方法对校园招聘系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在校园招聘系统的管理上面可以解决许多信息管理上面的难题,比…

PaddleOCR文字识别模型的FineTune

一、paddleOCR paddle框架为百度开发的深度学习框架,其中对于文字检测、识别具有较为便利的开发条件。同时PaddleOCR文字识别工具较为轻量化,并可按照任务需求进行model的finetune,满足实际的业务需求。 源码来源:githubOCR 在gi…

【数据库初阶】Ubuntu 环境安装 MySQL

🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 Ubuntu 系统安装 MySQL 的相关内容。 如果看到最后您觉得这篇…

MoH:将多头注意力(Multi-Head Attention)作为头注意力混合(Mixture-of-Head Attention)

摘要 https://arxiv.org/pdf/2410.11842? 在本文中,我们对Transformer模型的核心——多头注意力机制进行了升级,旨在提高效率的同时保持或超越先前的准确度水平。我们表明,多头注意力可以表示为求和形式。鉴于并非所有注意力头都具有同等重…

AI助力古诗视频制作全流程化教程

AI助力古诗视频制作全流程化教程 目录 1. 制作视频的原材料(全自动) 2.文生图:图像生成(手动) 3.文生音频:TTS技术(全自动) 4.视频编辑(手动) 5.自动发…

基于SSM的“快递管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“快递管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登陆页面 注册页面 快递员页面 派单员订单管理页面 派单员订单添…

AWTK 在全志 tina linux 上支持 2D 图形加速

全志 tina linux 2D 图形加速插件。 开发环境为 全志 Tina Linux 虚拟机。 1. 准备 下载 awtk git clone https://github.com/zlgopen/awtk.git下载 awtk-linux-fb git clone https://github.com/zlgopen/awtk-linux-fb.git下载 awtk-tina-g2d git clone https://github.co…

Unity游戏环境交互系统

概述 交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人…

线性直流电流

电阻网络的等效 等效是指被化简的电阻网络与等效电阻具有相同的 u-i 关系 (即端口方程),从而用等效电阻代替电阻网络之后,不 改变其余部分的电压和电流。 串联等效: 并联等效: 星角变换 若这两个三端网络是等效的,从任…

攻防世界web第二题unseping

这是题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {cal…