深夜の「手動ハードニング」という悪夢
こんな状況を想像してみてください。午前2時、セキュリティ監査部門から緊急メールが届きます。20個のサーバークラスタを今すぐ CIS Benchmarks Level 1 に準拠させろという指示です。従来の方法なら、300ページを超えるPDFをダウンロードして一行ずつ読み込み、/etc/sysctl.conf から sshd_config まで, 膨大な設定ファイルを必死に修正しなければなりません。
私自身、Ubuntu 22.04のVPSを5台手動で設定するだけで丸一日費やしたことがあります。このプロセスは時間がかかるだけでなく、非常にミスが発生しやすいものです。SSHのパラメータを一つ打ち間違えるだけで、システムから締め出されてしまいます。そこで救世主として登場するのが Ubuntu Security Guide (USG) です。複雑なセキュリティプロセスをわずか数行のコマンドに凝縮してくれます。
Ubuntu Security Guide (USG)とは?
以前のUbuntuユーザーには compliance-itg というツールが馴染み深かったかもしれません。しかし、20.04 LTS以降、Canonicalはそれを USG に置き換えました。これはUbuntu Proパッケージに含まれる公式ツールです。CISやDISA STIGといった厳格な基準に基づいた監査(audit)と自動修正(remediate)を行うために設計されています。
USGの最大の特徴は、非常にインテリジェントである点です。単にエラーをリストアップするだけでなく、適切なプロファイル(Profile)を選択していれば、重要なサービスを停止させることなく安全な設定を適用する方法を熟知しています。
実施前の準備
USGを使用するには、サーバーで Ubuntu Pro を有効化する必要があります。嬉しいことに、Canonicalは個人利用であれば最大5台まで無料で提供しています。公式のコミュニティメンバーであれば、その数は50台にまで増えます。
まず、システムでのUbuntu Proのステータスを確認します:
pro status
システムが未アクティブと表示される場合は、Ubuntuの公式サイトからトークンを取得し、次のコマンドを実行してください:
sudo pro attach [あなたのトークン]
マシンの準備ができたら、USGのインストールは30秒ほどで完了します:
sudo apt update && sudo apt install usg -y
実践:プロのように監査とハードニングを行う
1. 現状評価(Audit)
どこに問題があるか把握せずにシステムを修正してはいけません。私はいつも、まず監査コマンドを実行して現状のレポートを取得します。Ubuntu 22.04において最も一般的なプロファイルは cis_level1_server です。
sudo usg audit --profile cis_level1_server --output report.html
SCP経由で report.html ファイルをローカルにダウンロードし、ブラウザで開いてみてください。不合格項目が「真っ赤」に並んでいるのが見えるはずです。心配しないでください。デフォルトのUbuntuのセキュリティスコアは、通常CIS基準の30〜40%程度です。
2. 自動修正(Remediation)
ここでUSGの真価が発揮されます。ファイルを一つずつ修正する代わりに、次のコマンドでシステム全体を基準に従って自動的に再設定します:
sudo usg fix --profile cis_level1_server
重要な注意: このコマンドを本番環境(Production)で直接実行しないでください。必ずステージング(Staging)環境でテストしてください。USGは、古いプロトコル(DCCP、SCTP)の無効化、詳細な auditd ログの設定、/etc/shadow ファイルの権限再設定など、厳格なルールを適用します。
3. 結果の確認
fix プロセスが完了したら、再度監査コマンドを実行します。すると、ほとんどの項目が緑色(Pass)に変わっているはずです。エラーのないクリーンなレポートを見るのは、本当に満足感があります。
プロファイルのカスタマイズ(Tailoring)で「自分の首を絞めない」ようにする
CIS基準が実際のニーズに対して厳しすぎることがあります。例えば、CISは PasswordAuthentication の無効化を要求しますが、チームでSSHパスワード認証が必要な場合もあります。盲目的に適用すると、即座にサーバーから締め出されてしまいます。
これを解決するには、カスタマイズファイル(Tailoring file)を作成します:
sudo usg generate-fix --profile cis_level1_server --output my_custom_policy.xml
このXMLファイルを編集して、競合するルールを削除できます。これが、セキュリティと開発チームの利便性のバランスを取るための最善の方法です。
実体験:貴重な教訓
以前、USGが iptables を自動的に再設定したせいで、VPNサーバーへのアクセス権を失いかけたことがあります。同じ過ちを繰り返さないために、以下の3つの黄金律を覚えておいてください:
- 常に2つのSSHセッションを維持する: 一つはコマンド実行用、もう一つは万が一接続が切断された場合の予備用です。
- 構文チェック: 修正後、サービスを再起動する前に
sshd -tを使用してSSH設定ファイルをチェックしてください。 - ログの確認:
/var/log/syslogを注意深く監視し、権限不足でクラッシュしているサービスがないか早期に発見してください。
最後に
USGは単なるツールではなく、あなたが安眠するためのソリューションです。何週間もドキュメントを読み漁る代わりに、わずか15分でサーバーを国際的なセキュリティ基準に適合させることができます。管理するマシンが1台でも100台でも、ハードニングプロセスの自動化を優先してください。問題が発生してからセキュリティを心配するのではなく、今日、あなたのラボ環境でUSGを試してみてください!

