在预安装期间添加 ufw 规则

在预安装期间添加 ufw 规则

我一直尝试在使用预置文件安装 16.04 期间自动添加 UFW 规则以允许 SSH 访问。但是,所有记录的方法均无法在首次启动后打开端口 22。

具体来说,我尝试了以下几行的变体:

ufw     ufw/enable      boolean true
ufw     ufw/allow_custom_ports  string 22/tcp
ufw     ufw/allow_known_ports  string 22/tcp
ufw     ufw/allow_known_ports   string  SSH

但似乎都没有什么效果。另外,我尝试在安装后部分添加规则,但由于 iptables 内核模块未加载,导致出现错误。

这可以在预置文件中实现吗?还是我应该放弃,并通过黑客手段在启动时启用防火墙?

答案1

我也尝试过一段时间让它工作。但似乎没有什么效果。直到我最终放弃,并使用一个简单的 rc.local 解决方法修复了它:

d-i preseed/late_command string \
    mv /target/etc/rc.local /target/etc/rc.local.orig; \
    echo '#!/bin/sh -e' > /target/etc/rc.local; \
    echo '/usr/sbin/ufw allow ssh' >> /target/etc/rc.local; \
    echo 'mv -f /etc/rc.local.orig /etc/rc.local' >> /target/etc/rc.local; \
    echo 'test -x /etc/rc.local && /etc/rc.local' >> /target/etc/rc.local; \
    echo 'exit 0' >> /target/etc/rc.local; \
    chmod +x /target/etc/rc.local

解决方法是添加一个自定义rc.local脚本,preseed/late_command该脚本将:

  1. 将原件备份rc.localrc.local.orig(使用mv

  2. 然后rc.local创建新的脚本——它将在系统第一次启动时执行

  3. 新脚本将:

    1. 使用以下方式启用 SSH 访问ufw
    2. 恢复原始内容rc.local(通过移动rc.local.origrc.local,删除自身)
    3. 测试原始文件是否rc.local可执行并运行它
    4. 成功退出

相关内容