我一直在嘗試自動新增 UFW 規則,以允許在使用預置檔案安裝 16.04 期間進行 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
該腳本將:
將原始檔案備份
rc.local
為rc.local.orig
(使用mv
)然後
rc.local
創建新的——這是一個將在系統第一次啟動時執行的腳本新腳本將:
- 使用啟用 SSH 訪問
ufw
- 恢復原來的
rc.local
(透過移動rc.local.orig
到rc.local
,刪除自身) - 測試原始檔案是否
rc.local
可執行並運行它 - 退出成功
- 使用啟用 SSH 訪問