如何使用 Firewalld 设置 Linux 防火墙

embedded/2024/12/31 3:23:21/

简介

在 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 updatesudo 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 --permanentsudo 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 --permanentsudo 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.ppmy.cn/embedded/149720.html

相关文章

vulhub-wordpress靶场

一.主题上传漏洞 来到靶场点击主题选择add new 这里有一个上传主题的地方 我们可以去网上找到wordpress主题下载一个 wordpress模板 网页设计模板 免费 免费下载 - 爱给网 下载完成后对我们有用的东西只有这一个目录,把它拖出来 点开moban目录后,创建…

不用swipe插件,用<component>组件实现H5的swipe切换

不引入 swipe 插件,使用vue自带组件实现swipe滑动切换页面功能 需求场景1. 引入组件2. 动态加载页面组件3. 使用component组件4. 组件属性及相关事件5. 触摸事件处理6. 动画和过渡控制7. 节流功能 完整代码 需求场景 不引入 swipe 插件,使用vue自带comp…

详细讲解axios封装与api接口封装管理

一、axios封装 axios是基于promise的http客户端,用于浏览器和nodejs发送http请求 ,对它进行封装主要是为了统一管理请求配置和处理请求和响应的通用逻辑等。以下是常用的封装逻辑和要点 1:引入axios相关依赖 首先引用项目中的axios库&…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下:2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

设计模式之模板方法模式:咖啡,茶,和代码

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 一、模板方法模式概述 \quad 在我们的日常生活中,经常会遇到这样的场景:不同的事物,却有着相似的处理流程。比如泡茶和冲咖啡,虽然最终的饮品不同…

用 ElementUI 的日历组件 Calendar 自定义渲染

文章目录 需求分析1. 页面渲染2. 获取页面上的开始日期和结束日期3. 总的代码 需求 之前实现过一版用 ElementPlus 的日历组件 Calendar 自定义渲染&#xff0c;是在 Vue3 项目中实现的&#xff0c;现在需求在 Vue2 中也实现一版 分析 1. 页面渲染 <el-calendar v-model&q…

【每日学点鸿蒙知识】Web请求支持Http、PDF展示、APP上架应用搜索问题、APP备案不通过问题、滚动列表问题

1、HarmonyOS Web不支持http请求&#xff0c;只支持https&#xff1f; Web组件http请求失败&#xff0c;改成https是好的&#xff0c;是否可以通过配置打开http的请求 参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-c…

《类和对象:基础原理全解析(中篇)》

目录 一、 类成员函数的 this 指针1. this 指针的使用2. this 指针的注意事项 二、const 成员函数1. const 关键字的添加位置2. const 成员函数的使用建议 三、析构函数1. 拷贝构造函数的使用2. 使用析构函数的注意事项 四、拷贝构造函数1. 使用默认拷贝构造函数的 Stack 类2. …