首页 > 系统相关 >如何使用 Firewalld 设置 Linux 防火墙

如何使用 Firewalld 设置 Linux 防火墙

时间:2024-12-28 19:30:28浏览次数:8  
标签:cmd -- sudo 防火墙 Firewalld firewall 区域 Linux

简介

在 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

标签:cmd,--,sudo,防火墙,Firewalld,firewall,区域,Linux
From: https://blog.csdn.net/weixin_53510183/article/details/144793684

相关文章

  • RK3568平台开发系列讲解(Linux文件系统篇)UBI均衡(Wear-leveling)
    ......
  • 【Linux】ubuntu开启web服务
    1.利用python3自带的服务httpserver模块开启服务python3-mhttp.server8081缺点:客户端http协议的版本不对的时候就会报错采用https访问会报错然后服务就被中止了,从而异常了。报错的代码如下:47.100.190.74--[20/Jun/202105:15:06]code400,messageBadHTTP/0.9......
  • 【Linux探索学习】第二十四弹——软硬链接:Linux 中的软链接与硬链接详解
    Linux探索学习:https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482前言:在Linux文件系统中,链接是管理文件的一种重要机制。链接允许我们创建指向文件的引用,有助于节省存储空间和提高数据管理的灵活性。根据链接的性质,Linux中的链接可以......
  • odoo12环境搭建(linux系统)
    1.准备环境Centos7.6.1810:Postgresql12:Centos7下安装Postgresql12-CSDN博客python3.6.7:Centos7下搭建python3.6.7环境-CSDN博客odoo12:https://github.com/odoo/odoo/archive/refs/heads/12.0.zip2.odoo12环境配置odoo12源码解压,我放置在 /home/soft/odoo12路径下配......
  • Linux文本处理的利剑:grep、sed和awk的深度解析与应用
    前言:在Linux系统管理与开发工作中,文本处理是一项核心技能。面对海量日志文件、配置文件或数据文件,如何快速提取、分析或修改所需信息,成为衡量一个Linux用户熟练度的重要标准。Linux系统中的grep、sed和awk工具,因其强大且灵活的文本处理能力,被冠以“文本处理三剑客”的美誉。它们不......
  • 【Linux系列】Linux 命令行中的`cat`与`/dev/null`:清空文件
    ......
  • systemd服务(一):Linux程序崩溃自启动方法
     linux进程挂掉后,可以通过配置systemd来自动启动服务1.创建systemd服务文件,例如:huyang.service,需要放置在系统文件夹/etc/systemd/system2.编辑文件,填写详细信息3.操作systemd服务[Unit]Description=huyangSCRSserver#对服务的描述After=netw......
  • Linux实时查看网卡流量为多少?如何查看历史网卡流量?
    在Linux中,你可以使用多种工具来实时查看网卡流量以及检查历史网卡流量数据。下面我将列出一些常见的方法:1.实时查看网卡流量iftopiftop是一个实时流量监控工具,它显示类似于top命令的输出。你需要先安装它:sudoapt-getinstalliftop#Debian/Ubuntusudoyuminstallif......
  • Kali Linux 如何安装.
    首先,下载Kali镜像文件,这里推荐Weekly镜像版本,最新版本不容易出错,这里使用虚拟机搭建,安装在实体机上是一样的.打开kali.org网站,点击下载按钮.点击InstallerImages.下拉,选择x86_64平台,选择Weekly,点击下载.下载完成.这里使用virtualbox进行安装,新建虚拟机,选择刚......
  • Linux内核蓝牙子系统有什么(9)
    接前一篇文章:Linux内核蓝牙子系统有什么(8) 本文内容参考:Linux之蓝牙相关代码浅析|DD'Notes蓝牙驱动相关代码_蓝牙驱动代码-CSDN博客linux蓝牙驱动代码阅读笔记_bt-sco.c-CSDN博客Linux内核的蓝牙子系统架构-CSDN博客BlueZ-Linux平台上的蓝牙协议栈-CSDN博客蓝牙模......