事前シードインストール中に ufw ルールを追加する

事前シードインストール中に ufw ルールを追加する

プレシード ファイルを使用しながら、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

  1. 元のファイルのバックアップを( を使用)rc.localとして作成します。rc.local.origmv

  2. rc.local次に、システムの最初の起動時に実行されるスクリプトである新しいスクリプトが作成されます。

  3. 新しいスクリプトは次のようになります。

    1. SSHアクセスを有効にするにはufw
    2. 元の状態に戻す(にrc.local移動し、 自体を削除する)rc.local.origrc.local
    3. オリジナルrc.localが実行可能かどうかをテストし、実行する
    4. 正常に終了しました

関連情報