Я пытался автоматически добавить правила UFW, чтобы разрешить доступ SSH во время установки 16.04 при использовании файла preseed. Однако ни один из документированных методов не приводит к открытию порта 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 не загружен, что привело к ошибке.
Возможно ли это сделать в рамках предварительного файла? Или я должен просто сдаться и включить брандмауэр при загрузке с помощью хака?
Я пытался получить эту работу некоторое время, также. Ничто, кажется, не работает. Пока я наконец не сдался, и я зафиксировал его с простым 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 сценарий, который выполняется ufw allow ssh
на первом запуске, который затем уничтожит себя путем переименования исходного rc.local сценария назад к исходному месту. Это, кажется, работает.