跳过内容

第四章: 防火墙设置

在本章中,您需要以 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