我知道启动 UFW 的两种方法:通过 systemctl 和通过 ufw 本身。例如,当我使用 时systemctl enable ufw
,我得到以下状态:
systemctl status ufw
● ufw.service - CLI Netfilter Manager
Loaded: loaded (/usr/lib/systemd/system/ufw.service; enabled; vendor preset:>
Active: active (exited) since Sun 2019-12-01 12:34:29 +05; 6min ago
但 ufw 自己说:
ufw status verbose
Status: inactive
我无法通过它看到规则,GUFW 实用程序说 UFW 不活动。但如果我这样做:
systemctl disable ufw
systemctl stop ufw
ufw enable
ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
然后我可以使用 GUFW 并查看 UFW 实用程序中的详细状态和规则。
那么通过 systemctl 启动和 ufw 本身启动有什么区别以及正确的方法是什么?
答案1
如果这样做ufw enable
,systemctl disable ufw
然后重新启动系统,ufw status verbose
重新启动后的输出是什么?
我猜一定会的inactive
。
如果这是真的,那么解释如下:
ufw enable
= 立即启用防火墙规则,并记录所需状态是从现在开始启用防火墙。 (如果需要防火墙管理守护进程,这也会自动启动它。)ufw disable
= 立即禁用防火墙规则,并记录所需的状态是禁用防火墙,直到另有命令为止。systemctl start ufw
= 恢复之前记录的防火墙所需状态(如果所需状态是禁用防火墙,则无需执行任何操作)。另外,如果需要,启动任何防火墙管理守护进程,以便管理进程将被识别为systemd
不属于任何用户会话的后台进程。如果您希望永久启用防火墙,您将希望在启动时自动发生这种情况,并且还已ufw enable
设置。systemctl stop ufw
= 停止防火墙管理守护进程;也可能会或可能不会禁用任何现有的防火墙规则(使用iptables -vnL
或nft list tables
检查内核中有效的实际规则,独立于ufw
)。systemctl enable ufw
= 在任何后续重新启动时,systemctl start ufw
作为启动过程的一部分自动运行。systemctl disable ufw
= 在任何后续重新启动时,不要执行任何操作来恢复防火墙状态,也不要自动启动防火墙管理守护进程:采用完全没有防火墙规则的内核默认值。
例如,如果您需要远程设置新的防火墙规则,并且必须确保自己不会将自己锁在外面,您可以设置systemctl disable ufw
,设置在 15 分钟左右自动重新启动,然后添加您的规则并使用ufw enable
。如果仍然可以连接到系统,则就远程访问而言,规则是正确的;您可以设置systemctl enable ufw
(以便规则在重新启动后也有效)并删除定时重新启动作业。
但是,如果您犯了一个错误,导致您无法访问,只需等待重新启动作业触发,系统将不会出现任何防火墙规则(因为systemctl disable ufw
),您将能够重新登录以修复规则配置。