跳至内容

4 防火墙设置

在本章中,您必须以 root 用户身份操作,或者能够使用 sudo 切换到 root 用户。

与任何服务器一样,您必须确保它免受外部世界的侵扰,并保护您的局域网。您的示例服务器只有一个局域网接口,但也可以有两个接口,分别面向您的局域网和广域网。

防火墙设置 - firewalld

对于 firewalld 规则,您需要使用 此基本流程 或熟悉这些概念。假设的局域网为 192.168.1.0/24,桥接名为 incusbr0。为了清楚起见,您的 Incus 服务器上可能有很多接口,其中一个面向您的广域网。您还将为桥接和本地网络创建一个区域。这只是为了区域命名的清晰。其他区域名称不适用。此流程假定您已经了解 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

继续列出“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。确保您的区域正确,并且您访问服务器是通过局域网 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