跳至内容

4 防火墙设置

在本章中,您必须是 root 用户或能够使用 sudo 成为 root 用户。

与任何服务器一样,您必须确保它免受外部世界和您的 LAN 的攻击。您的示例服务器只有一个 LAN 接口,但它可以有两个接口,每个接口分别面向您的 LAN 和 WAN 网络。

防火墙设置 - firewalld

对于 firewalld 规则,您需要使用 此基本步骤 或熟悉这些概念。假设 LAN 网络为 192.168.1.0/24,桥接名为 incusbr0。为了清楚起见,您的 Incus 服务器上可能有多个接口,其中一个面向您的 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=incusbr0 --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: incusbr0
  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

继续使用 firewall-cmd --zone=local --list all 列出“local”区域,以确保您的规则在那里,这将显示

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