如何在 Linux 上开始使用 firewalld
已发表: 2022-07-08 如果您正在寻找一种现代的、功能强大的 Linux 防火墙,它易于在命令行上或使用其 GUI 界面进行配置,那么firewalld
可能就是您正在寻找的。
对防火墙的需求
网络连接有起点和终点。 源端的软件请求连接,而目标端的软件接受或拒绝它。 如果它被接受,数据包(通常称为网络流量)可以通过连接在两个方向上传递。 无论您是在自己家中的房间内共享,从家庭办公室远程连接到工作,还是使用远程的基于云的资源,这都是正确的。
良好的安全实践表明您应该限制和控制与计算机的连接。 这就是防火墙的作用。 它们按 IP 地址、端口或协议过滤网络流量,并拒绝不符合您已配置的一组预定义标准(防火墙规则)的连接。 他们就像一个专属活动中的安保人员。 如果你的名字不在名单上,你就不能进去。
当然,您不希望您的防火墙规则过于严格以至于您的正常活动受到限制。 配置防火墙越简单,您无意中设置冲突或严苛规则的可能性就越小。 我们经常听到用户说他们不使用防火墙,因为它太复杂而难以理解,或者命令语法太不透明。
firewalld
防火墙功能强大且易于设置,无论是在命令行上还是通过其专用的 GUI 应用程序。 在底层,Linux 防火墙依赖于内核端网络过滤框架netfilter
。 在用户领域,我们可以选择与netfilter
交互的工具,例如iptables
、 ufw
简单的防火墙和firewalld
。
在我们看来, firewalld
提供了功能、粒度和简单性的最佳平衡。
安装防火墙
firewalld
有两个部分。 有firewalld
,提供防火墙功能的守护进程,还有firewall-config
。 这是firewalld
的可选 GUI。 请注意, firewall-config
中没有“d”。
在 Ubuntu、Fedora 和 Manjaro 上安装firewalld
在所有情况下都很简单,尽管它们各自对预安装和捆绑的内容有自己的看法。
要在 Ubuntu 上安装,我们需要安装firewalld
和firewall-config
。
sudo apt install firewalld
sudo apt install firewall-config
在 Fedora 上,已经安装了firewalld
。 我们只需要添加firewall-config
。
sudo dnf install firewall-config
在 Manjaro 上,这两个组件都没有预先安装,但它们被捆绑到一个包中,因此我们可以使用一个命令安装它们。
sudo pacman -Sy firewalld
我们需要启用firewalld
守护程序以允许它在每次计算机启动时运行。
sudo systemctl 启用防火墙
我们需要启动守护程序,以便它现在运行。
sudo systemctl 启动防火墙
我们可以使用systemctl
来检查firewalld
是否已经启动并且运行没有问题:
sudo systemctl status firewalld
我们也可以使用firewalld
来检查它是否在运行。 这使用带有--state
选项的firewall-cmd
命令。 请注意, firewall-cmd
中没有“d”:
须藤防火墙-cmd --state
现在我们已经安装并运行了防火墙,我们可以继续配置它。
区域的概念
firewalld
防火墙基于区域。 区域是防火墙规则和相关网络连接的集合。 这使您可以定制不同的区域和一组不同的安全限制,您可以在这些区域下进行操作。 例如,您可能定义了一个用于常规日常运行的区域,另一个用于更安全运行的区域,以及一个“无进无出”的完全锁定区域。
要从一个区域移动到另一个区域,并有效地从一个安全级别移动到另一个安全级别,您需要将您的网络连接从它所在的区域移动到您希望在其下运行的区域。
这使得从一组定义的防火墙规则移动到另一组的速度非常快。 使用区域的另一种方法是让您的笔记本电脑在您在家时使用一个区域,而在您外出并使用公共 Wi-Fi 时使用另一个区域。
firewalld
带有九个预配置的区域。 可以编辑这些区域并添加或删除更多区域。
- drop :所有传入的数据包都被丢弃。 允许传出流量。 这是最偏执的设置。
- block :所有传入的数据包都被丢弃,并且
icmp-host-prohibited
消息被发送给发起者。 允许传出流量。 - 受信任:所有网络连接都被接受,其他系统受信任。 这是最值得信赖的设置,应该限制在非常安全的环境中,例如强制测试网络或您的家中。
- public :此区域用于公共网络或其他任何其他计算机都不可信的网络。 接受一小部分常见且通常安全的连接请求。
- external :此区域用于启用了 NAT 伪装(端口转发)的外部网络。 您的防火墙充当路由器,将流量转发到您的私有网络,该网络仍然可以访问,但仍然是私有的。
- internal :当您的系统充当网关或路由器时,此区域旨在用于内部网络。 该网络上的其他系统通常是受信任的。
- dmz :此区域适用于位于外围防御之外的“非军事区”的计算机,并且对您网络的访问受限。
- 工作:该区域用于工作机器。 此网络上的其他计算机通常是受信任的。
- home :此区域用于家用机器。 此网络上的其他计算机通常是受信任的。
家庭、工作和内部区域在功能上非常相似,但是将它们分成不同的区域允许您根据自己的喜好微调区域,为特定场景封装一组规则。
一个好的起点是找出默认区域是什么。 这是安装firewalld
时添加网络接口的区域。
sudo firewall-cmd --get-default-zone
我们的默认区域是公共区域。 要查看区域的配置详细信息,请使用--list-all
选项。 这列出了为区域添加或启用的任何内容。
sudo firewall-cmd --zone=public --list-all
我们可以看到该区域与网络连接 enp0s3 相关联,并且允许与 DHCP、mDNS 和 SSH 相关的流量。 由于至少有一个接口已添加到该区域,因此该区域处于活动状态。
firewalld
允许您添加您希望接受来自区域的流量的服务。 然后该区域允许该类型的流量通过。 例如,这比记住 mDNS 使用端口 5353 和 UDP 协议并手动将这些详细信息添加到区域更容易。 虽然你也可以这样做。
如果我们在带有以太网连接和 Wi-Fi 卡的笔记本电脑上运行前面的命令,我们会看到类似的东西,但有两个接口。
sudo firewall-cmd --zone=public --list-all
我们的两个网络接口都已添加到默认区域。 该区域具有与第一个示例相同的三个服务的规则,但 DHCP 和 SSH 已添加为命名服务,而 mDNS 已添加为端口和协议配对。
要列出所有区域,请使用--get-zones
选项。
sudo firewall-cmd --get-zones
要一次查看所有区域的配置,请使用--list-all-zones
选项。 您需要将其通过管道传输到less
中。
sudo firewall-cmd --list-all-zones | 较少的
这很有用,因为您可以滚动浏览列表,或使用搜索工具来查找端口号、协议和服务。
在我们的笔记本电脑上,我们要将以太网连接从公共区域移动到家庭区域。 我们可以使用--zone
和--change-interface
选项来做到这一点。
sudo firewall-cmd --zone=home --change-interface=enp3s0
让我们看一下 home zone,看看我们是否进行了更改。
sudo firewall-cmd --zone=home --list-all
它有。 我们的以太网连接被添加到主区域。
然而,这不是永久性的改变。 我们更改了防火墙的运行配置,而不是其存储的配置。 如果我们重新启动或使用--reload
选项,我们将恢复到以前的设置。
要使更改永久化,我们需要使用恰当命名的--permanent
选项。
这意味着我们可以根据一次性需求更改防火墙,而无需更改防火墙的存储配置。 我们还可以在将更改发送到配置之前对其进行测试。 为了使我们的更改永久化,我们应该使用的格式是:
sudo firewall-cmd --zone=home --change-interface=enp3s0 --permanent
如果您进行了一些更改但忘记在其中一些上使用--permanent
,您可以使用--runtime-to-permanent
选项将防火墙当前运行会话的设置写入配置。
sudo firewall-cmd --runtime-to-permanent
相关:什么是 DHCP(动态主机配置协议)?
添加和删除服务
firewalld
知道很多服务。 您可以使用--get-services
选项列出它们。
sudo firewall-cmd --get-services
我们的firewalld
版本列出了 192 个服务。 要在区域中启用服务,请使用--add-service
选项。
我们可以使用--add-service
选项将服务添加到区域。
sudo firewall-cmd --zone=public --add-service=http
服务的名称必须与其在firewalld
的服务列表中的条目相匹配。
要删除服务,请使用--remove-service
替换--add-service
service
添加和删除端口和协议
如果您更愿意选择添加哪些端口和协议,您也可以这样做。 您需要知道要添加的流量类型的端口号和协议。
让我们将 HTTPS 流量添加到公共区域。 它使用端口 443,是 TCP 流量的一种形式。
sudo firewall-cmd --zone=public --add-port=443/tcp
您可以通过在第一个和最后一个端口之间使用连字符“ -
”来提供一系列端口,例如“400-450”。
要删除端口,请将--add-port
替换为--remove-port
。
相关: TCP 和 UDP 有什么区别?
使用图形用户界面
按“超级”键并开始输入“防火墙”。 您将看到firewall-config
应用程序的砖墙图标。
单击该图标以启动应用程序。
使用 GUI 将服务添加到firewalld
就像从区域列表中选择一个区域并从服务列表中选择服务一样简单。
您可以通过从“配置”下拉菜单中选择“运行时”或“永久”来选择修改正在运行的会话或永久配置。
要对正在运行的会话进行更改并仅在测试它们工作后才提交更改,请将“配置”菜单设置为“运行时”。 进行更改。 一旦您对他们正在做您想做的事情感到满意,请使用“选项”>“运行时到永久”菜单选项。
要将端口和协议条目添加到区域,请从区域列表中选择区域,然后单击“端口”。 单击添加按钮可让您提供端口号并从菜单中选择协议。
要添加协议,请单击“协议”,单击“添加”按钮,然后从弹出菜单中选择协议。
要将接口从一个区域移动到另一个区域,请双击“连接”列表中的接口,然后从弹出菜单中选择区域。
冰山一角
您可以使用firewalld
做更多事情,但这足以让您启动并运行。 利用我们为您提供的信息,您将能够在您的区域中创建有意义的规则。