源包中的 README 内容如下:
When installing ufw from source, you will also need to integrate it into your
boot process for the firewall to start when you restart your system. Depending
on your needs, this can be as simple as adding the following to a startup
script (eg rc.local for systems that use it):
# /lib/ufw/ufw-init start
For systems that use SysV initscripts, an example script is provided in
doc/initscript.example. See doc/upstart.example for an Upstart example. Consult
your distribution's documentation for the proper way to modify your boot
process.
在我的系统上有这个:
# /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
那么,为什么简单的 iptables 规则管理器需要在启动时启动呢?这其中有什么秘诀吗,还是它只是检查所有规则是否都已到位?
答案1
系统启动时,没有防火墙规则。内核不会将这些规则保存到任何地方。
如果您不启动 UFW(或其他防火墙管理器),您的 iptables 是空的。此外,每个链(FORWARD、INPUT、OUTPUT)的默认规则是 ACCEPT,因此一切都是允许的。
因此,UFW 不仅仅是检查,它实际上还在实施这些规则,并创建用于规则管理的额外链。
答案2
当您运行 iptables(Linux 中用于操作 netfilter 防火墙规则的低级工具)时,规则仅加载到内核中,因此位于 RAM 中。当您关机或重启时,内核会重新初始化,因为 RAM 不是持久内存,并且它默认对所有表(或无防火墙)都采用“接受”状态。
因此,要在启动后使用防火墙,您必须将 iptables 规则加载到内核中。您可以通过将 iptables 规则添加到启动时运行的脚本(例如 /etc/rc.local)来手动执行此操作,或者使用工具为您执行此操作。ufw 就是这样一种工具,当启用时,如果它集成到启动过程中(如 README 所述),它将负责在启动时为您加载防火墙规则。如果 ufw 针对您的发行版打包,就像在 Ubuntu 中一样,那么打包将为您处理该问题。简而言之,在 Ubuntu 中通过 apt-get 安装 ufw 后,除了运行“sudo ufw enable”之外,您无需执行任何其他操作即可将其集成到系统中。
答案3
要保存 ufw 状态,您必须运行此命令:
sudo invoke-rc.d iptables-persistent save
然后您的规则将被保存并在重启后加载。