我需要知道如何修复丢失的“/etc/init.d/ufw”文件,是某些包还是某些命令?
我使用它gufw
来启用它,但重新启动时我的防火墙仍然关闭......
我创建了一个符号链接/etc/init.d/ufw -> /lib/init/upstart-job
,但无法使其工作start ufw
(重启后也无法工作)。
我找到了这个文件/lib/ufw/ufw-init
,它看起来像一个 init.d 文件!我可以将它复制或符号链接到那里吗?
其他(可选)问题:
如何找到哪个包中有该文件?apt-cache search
没用。
我们可以安全地创建这样的脚本吗?
知道为什么它不见了吗?
注意:
我的/etc/ufw/ufw.conf
有ENABLED=yes
(但似乎没用)。
iptables -L
在我之后变得不同ufw enable
,所以 ufw 规则不会在启动时通过任何其他方式应用。
附言:这个脚本也不起作用
sudo ln -s /lib/ufw/ufw-init /usr/sbin/ufw-init
sudo ln -s /lib/init/upstart-job /etc/init.d/ufw-init
#sudo update-rc.d -f ufw-init remove
sudo update-rc.d ufw-init defaults 99
sudo -k
答案1
我也没有 /etc/init.d/ufw,ufw 不会在重启时自动启动。但我这样做了
sudo apt-get install iptables-persistent
重新启动时我检查了
sudo ufw status
它显示为活动状态,在之前的重启中它总是显示为非活动状态,我以前不得不这样做
sudo ufw enable
我没有安装 gufw,我是初级桌面用户,所以我不知道它为什么起作用以及它是否对你有用,但它看起来更简单,也许它会对某些人有所帮助。
答案2
[查看这首先(我有时间会验证它),正确配置 ufw 可能是最好的选择,这里的答案只是一个后备。]
exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file
exec 1>&2 # send stdout to the same log file
#set -x # tell sh to display commands before execution
# this wont exit until successful!
while ! ufw enable;do
if ufw status |grep "Status: active";then
break
fi
echo "Failed to apply ufw rules at `date`" >>/dev/stderr;
sleep 10;
done
到/etc/rc.local
之前为止exit 0
,现在它可以在启动时正确加载 ufw 规则!
但这只是用户的解决方法,而不是系统修复……
我还选择“更改”规则,而不是将其应用为默认规则,正如建议的那样回答,因为我不完全确定我的自定义规则是否没有问题。
重要提示:“if”代码一次都没有起作用,因此我创建了“while”代码,到目前为止,该代码没有造成麻烦。
答案3
对于为找到解决方案所付出的努力来说,答案出奇的简单。
在 /etc/init/ufw.conf 中:
1) 注释掉第 9 - 11 行
2) 在第 11 行后插入: start on startup
修复整个问题,包括记录到 /var/log/ufw.log。
笔记
如果已iptables-persistent
安装,则必须禁用它。移出iptables-persistent
/etc/init.d 并重命名所有符号链接rc0.d
-rcS.d
将第一个字母(S 或 K)改为小写。(或将其移出。)
答案4
UFW 只是 iptables 的包装器,它只处理过滤表。因此,您可以同时使用 UFW 和 iptables-persistant,但从 /etc/iptables/rules.v4 中删除过滤规则,并保留其他规则(如果有的话)(nat 表、raw 等)