プレシード ファイルを使用しながら、16.04 のインストール中に SSH アクセスを許可する UFW ルールを自動的に追加しようとしています。ただし、文書化された方法のいずれも、最初の起動後にポート 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 カーネル モジュールがロードされていないため、エラーが発生して失敗しました。
これを preseed ファイル内で実現することは可能ですか? それともあきらめて、ハックを使用して起動時にファイアウォールを有効にするべきでしょうか?
答え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アクセスを有効にするには