第 4 章:防火墙设置¶
在本章中,您需要具有 root 权限或能够使用 sudo
获取 root 权限。
与任何服务器一样,您需要确保它在外部世界和您的 LAN 上都是安全的。您的示例服务器只有一个 LAN 接口,但完全可能有两个接口,一个朝向您的 LAN 网络,一个朝向 WAN 网络。
关于 Rocky Linux 9.x 和 iptables
的说明
从 Rocky Linux 9.0 开始,iptables
和所有相关实用程序都已正式弃用。这意味着在操作系统的未来版本中,它们将完全消失。本文档的先前版本包含有关 iptables
设置的说明,但现在已将其删除。
对于所有当前版本的 Rocky Linux,推荐使用 firewalld
。
防火墙设置 - firewalld
¶
对于 firewalld 规则,您需要使用 此基本过程 或熟悉这些概念。我们的假设是:LAN 网络为 192.168.1.0/24,桥接名称为 lxdbr0。需要明确的是,您的 LXD 服务器上可能有许多接口,其中一个可能面向您的 WAN。您还将为桥接和本地网络创建一个区域。这仅仅是为了区域的清晰度。其他区域名称实际上并不适用。此过程假定您已经了解 firewalld 的基础知识。
firewall-cmd --new-zone=bridge --permanent
添加区域后,您需要重新加载防火墙
firewall-cmd --reload
您想允许桥接网络的所有流量。只需添加接口,并将目标从“default”更改为“ACCEPT”
警告
更改 firewalld
区域的目标必须使用 --permanent
选项完成,所以我们也最好在其他命令中输入该标志,而省略 --runtime-to-permanent
选项。
注意
如果您需要创建一个区域,您想允许对接口或源的所有访问,但又不想指定任何协议或服务,那么您必须将目标从“default”更改为“ACCEPT”。对于您拥有自定义区域的特定 IP 块,“DROP”和“REJECT”也是如此。需要明确的是,只要您不使用自定义区域,“drop”区域就会为您处理好。
firewall-cmd --zone=bridge --add-interface=lxdbr0 --permanent
firewall-cmd --zone=bridge --set-target=ACCEPT --permanent
假设没有错误且一切正常,只需重新加载
firewall-cmd --reload
如果您现在使用 firewall-cmd --zone=bridge --list-all
列出规则,您将看到
bridge (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: lxdbr0
sources:
services:
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
请注意,您还想允许本地接口。同样,包含的区域命名不适用于此。创建一个区域,并使用本地接口的源 IP 范围来确保您拥有访问权限
firewall-cmd --new-zone=local --permanent
firewall-cmd --reload
添加本地接口的源 IP,并将目标更改为“ACCEPT”
firewall-cmd --zone=local --add-source=127.0.0.1/8 --permanent
firewall-cmd --zone=local --set-target=ACCEPT --permanent
firewall-cmd --reload
继续列出“local”区域,以确保您的规则存在,使用 firewall-cmd --zone=local --list all
,这将显示
local (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 127.0.0.1/8
services:
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
您想允许来自受信任网络的 SSH。我们将在这里使用源 IP 和内置的“trusted”区域。此区域的目标默认情况下已经是“ACCEPT”。
firewall-cmd --zone=trusted --add-source=192.168.1.0/24
将服务添加到区域
firewall-cmd --zone=trusted --add-service=ssh
如果一切正常,请将规则移至永久,然后重新加载规则
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
列出您的“trusted”区域将显示
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24
services: ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
默认情况下,“public”区域处于启用状态,并允许 SSH。为了安全起见,您不希望在“public”区域中允许 SSH。确保您的区域正确,并且您对服务器的访问是通过 LAN IP(在我们的示例中)之一进行的。如果您在继续之前不验证这一点,您可能会将自己锁在服务器之外。当您确定可以从正确的接口访问时,请从“public”区域中删除 SSH
firewall-cmd --zone=public --remove-service=ssh
测试访问并确保您没有被锁定。如果没有,请将规则移至永久,重新加载,然后列出区域“public”以确保已删除 SSH
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all
您的服务器上可能还有其他接口需要考虑。您可以在适当的情况下使用内置区域,但如果名称不合逻辑,您可以添加区域。请记住,如果您不需要特别允许或拒绝任何服务或协议,您将需要更改区域目标。如果使用接口(如桥接网络),您可以这样做。如果您需要更精细的服务访问,请改用源 IP。
作者:Steven Spencer
贡献者:Ezequiel Bruni, Ganna Zhyrnova