UFW 不会在启动时启动。我的/etc/ufw/ufw.conf
文件如下所示:
# /etc/ufw/ufw.conf
#
# Set to yes to start on boot. If setting this remotely, be sure to add a rule
# to allow your remote connection before starting ufw. Eg: 'ufw allow 22/tcp'
ENABLED=yes
# Please use the 'ufw' command to set the loglevel. Eg: 'ufw logging medium'.
# See 'man ufw' for details.
LOGLEVEL=low
所以看起来它应该可以正常启动。但是启动后我总是得到这个:
$ sudo ufw status
Status: inactive
使用“服务”脚本启动它似乎不起作用:
$ sudo service ufw start
$ sudo ufw status
Status: inactive
如果我强制重新加载,它将正常工作:
$ sudo ufw reload
Firewall reloaded
$ sudo ufw status
Status: active
此后,“服务”脚本就可以正常工作了:
$ sudo ufw status
Status: active
$ sudo service ufw stop
$ sudo ufw status
Status: inactive
$ sudo service ufw start
$ sudo ufw status
Status: active
如何让 ufw 在启动时启动?
编辑:
我正在使用 Ubuntu 18.04,因此正在使用 systemd。systemctl is-enabled
报告如下:
$ sudo ufw status verbose
Status: inactive
$ sudo systemctl is-enabled ufw.service
enabled
我也尝试过这个:
$ sudo systemctl enable ufw
Synchronizing state of ufw.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ufw
$ sudo ufw status verbose
Status: inactive
重启后它仍处于非活动状态。journalctl -p err
报告没有什么有趣的东西。journalctl -u ufw
报告:
$ journalctl -u ufw
...<snip>...
-- Reboot --
May 26 12:53:36 matt-laptop systemd[1]: Started Uncomplicated firewall.
因此,显然尝试启动 ufw...它似乎实际上并没有做它!
答案1
我想到了一个解决方案。我做了以下编辑/lib/systemd/system/ufw.service
:
$ diff -u ufw.service.orig ufw.service
--- ufw.service.orig 2018-05-26 13:45:48.696356561 +0100
+++ ufw.service 2018-05-26 13:46:04.443673265 +0100
@@ -2,7 +2,7 @@
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
-Before=network.target
+After=network.target
[Service]
Type=oneshot
因此,这会导致ufw
在网络启动后而不是网络启动前启动。这似乎可以解决问题 - ufw 总是在我启动后启用。我不知道这是不是最好的做法。我担心网络启动和防火墙启动之间会有一个短暂的时间间隔......但至少它启动了,这比以前要好!
也许有人能想出更好的解决方案。或者也许这是做事的正确方法——在这种情况下,默认在网络之前启动是一个错误吗?
编辑:
一个更好的解决方案是:
$ diff -u ufw.service.orig ufw.service
--- ufw.service.orig 2018-05-26 13:45:48.696356561 +0100
+++ ufw.service 2018-05-26 14:17:22.030681670 +0100
@@ -2,7 +2,7 @@
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
-Before=network.target
+After=network-pre.target
[Service]
Type=oneshot
根据此页面
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
有network-pre.target
这个目的:
其主要目的是用于希望在任何网络接口启动之前建立防火墙的防火墙服务。
这让我很疑惑为什么它没有默认设置为这个。将它设置为这个值似乎解决了我所有的问题。
答案2
修复很简单;我们需要告诉操作系统在 netfilter-persistent 之后加载 ufw
运行此命令:
sudo nano /lib/systemd/system/ufw.service
并添加以下文字:
[Unit]
Description=Uncomplicated firewall
Documentation=man:ufw(8)
DefaultDependencies=no
Before=network.target
After=netfilter-persistent.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/lib/ufw/ufw-init start quiet
ExecStop=/lib/ufw/ufw-init stop
[Install]
WantedBy=multi-user.target
答案3
我使用的是 Debian 的 vanilla 版本,不是 Ubuntu,但这是我能找到的关于如何在启动时加载 ufw 的最佳帖子。这里的建议对我来说不起作用,但为我提供了足够的线索,最终使它工作正常。
到底我只需要改变一行. 其他一切都我都保留了下来。
- 编辑文件中的 UNIT 部分
ufw.service
。 - 改成
Before=network.target
After=network-online.target
保存后重启,ufw 即可运行
注意,如果你禁用 ufw 并重启,它将被禁用。如果启用了 ufw 并重启,它将被启用。
答案4
只有这个解决方案有效(添加到 crontab):
@reboot sleep 120 && /usr/sbin/ufw reload