第四章: 防火墙设置¶
在本章中,您需要以 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 (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:
默认情况下,“公共”区域处于启用状态,并允许 SSH。出于安全考虑,您不希望在“公共”区域上允许 SSH。确保您的区域正确,并且您访问服务器的方式是通过其中一个 LAN IP(以我们的示例为例)。如果您在继续之前没有验证这一点,您可能会把自己锁定在服务器之外。当您确定从正确的接口访问时,请从“公共”区域删除 SSH
firewall-cmd --zone=public --remove-service=ssh
测试访问并确保您没有被锁定。如果没有,将您的规则移动到永久性,重新加载并列出区域“公共”以确保删除 SSH
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all
您的服务器上可能还有其他接口需要考虑。您可以在适当的情况下使用内置区域,但如果名称看起来不合理,您可以肯定地添加区域。只需记住,如果您没有需要专门允许或拒绝的服务或协议,则需要更改区域目标。如果使用接口(如桥接)有效,您可以这样做。如果您需要更细粒度的服务访问,请使用源 IP 而不是。
作者:Steven Spencer
贡献者:Ezequiel Bruni,Ganna Zhyrnova