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