VPNサーバーの設定を安全にロールバックする方法
ロールバックが戻すのは既知の良好なネットワークポリシーであり、見つかる最も古いファイルではありません。失効情報を最新に保ち、管理経路はトンネルの外に確保してください。
サーバーをロールバックするとは、どの層が壊れたかを見極める判断であり、ファイルをコピーする作業ではありません。設定、資格情報、パッケージのバージョンはそれぞれ別の時計で動いており、一つだけ戻して他を最新のままにすると、健全に見えて挙動がちぐはぐなホストが出来上がります。以下の手順は、変更がすでに失敗していることを前提に、最小限の整合した状態へ戻すよう求めます。順番に進め、帯域外アクセスの確認は誰も飛ばしてはならない手順と考えてください。
本当に復元できるチェックポイントを取る
サービスが起動時に読む設定を、最後にそれを解釈したバージョンと一緒に記録します。古いリリースで問題なく読み込めたファイルでも、アップグレード後には拒否されたり黙って無視されたりするため、バージョンは同じ記録に含めます。設定が参照する材料——秘密鍵、証明書のパス、待ち受けの定義、そしてサービスを到達可能にするDNSとファイアウォールの項目——も集めます。復元に保存していないファイルが必要になるなら、そのチェックポイントは不完全です。
システムが健全なうちに、各設定の所有者を書き留めます。提供事業者のパネルが入れる経路、ホストのファイアウォールが加える経路、クライアントへ配る経路は三つの別物であり、間違ったものを戻すと残り二つはそのまま残ります。設定、所有者、ファイルパスの短い表で十分です。
失効情報は設定とは別に保つ
意図して外した機器を静かにつなぎ直しかねない古い設定は、復旧をセキュリティの後退に変えてしまいます。ネットワークポリシーを戻す間も現在の失効リストと無効化したアカウントを保持し、サービスがクライアントを受け入れる前に再適用してください。
身元の状態は、独自の証拠を持つ独立したロールバックとして扱います。証明書の失効ファイル、アカウントの無効化、MFAの登録は、デーモンの設定と同じ場所にあることはまれで、設定の復元では触れられません。まず現在の状態を確認し、何を残すべきかを把握します。復元後、外した身元が今も接続できないことを確かめてください。
トンネルが落ちたときにホストへ届く
変更する構成要素に依存しない経路を開きます。ハイパーバイザーのコンソール、別インターフェースの管理アドレス、シリアルコンソールはいずれも該当しますが、トンネル越しのSSHセッションは該当しません。入る手段が再起動しようとしているVPNしかないなら、誤った経路やファイアウォール規則が修正する力を奪います。代替経路は変更の前に試し、後回しにしないでください。一度それ経由でログインし、sudoが動くことを確かめ、使った正確なアドレスを控えます。
試験は単純です——代替経路で接続したままトンネルを落とし、セッションが生き残るかを見てください。切れたなら、行き詰まる前に障害を捕まえたことになります。
一つの改訂だけを適用し、いつ効くのかを知る
サービスのreloadやrestartの文書を読み、どの指示がどの時点で読まれるかを確かめます。reloadで効く値もあれば、新しいセッションやプロセスが始まるときだけ効く値もあり、ファイルを編集しても稼働状態の証明にはなりません。新しいファイルと古い実行状態を混ぜず、単一の改訂を戻します。迷ったら、部分的なreloadよりサービス全体の再起動のほうが筋道立てて考えられます。
選ぶ前にユニット定義を確認してくださいsystemctl show -p ExecReload openvpn@server は、reloadのフックがそもそも存在するかを教えてくれます。その後で改訂を適用し、他を変える前に最初の新しいエラーをジャーナルで読みます。
検証し、記録し、その後で調査する
認可されたクライアントを一つ接続し、名前解決、再接続、そして失敗したアプリケーションというサービスの用途を試します。失効した身元が今も拒否されることを確かめます。戻した改訂、時刻、理由は、次の運用者に三つとも必要になるので記録します。誰も記録しなかったロールバックは、次にサービスが不調になったとき謎になります。
systemctl status openvpn@server --no-pager
journalctl -u openvpn@server -n 50 --no-pager
サービスが安定したら、捨ててよいホストやスナップショットで失敗した変更を再現します。これで悪い設定と、悪いパッケージや期限切れの証明書を切り分けられます。復元した設定はバージョン管理下に置き、次のチェックポイントが既知のコミットから始まるようにします。この演習の目的は記録された終点であり、恒久的なダウングレードではありません。