mcpField
S
ssh-hardening

ssh-hardening

github.com/mikr13セキュリティ6247 回インストール2 週間前に更新
リポジトリ

ssh-hardening について

ssh-hardeningは、SSHサーバーの認証とアクセス制御を安全に強化するスキルです。管理者向けに、鍵ログインとポリシーの事前検証、適用前後の復旧手段を重視します。

主な機能

  1. 01デーモン、待受ポート、アクセス規則の確認
  2. 02管理者の鍵ログインとsudoの検証
  3. 03プレビューと上書き防止付きの鍵生成
  4. 04管理対象の鍵限定ポリシーの適用
  5. 05SSH設定の検証、テスト、復旧

活用シーン

  1. 01認証制限前のSSHアクセス準備
  2. 02実際のユーザー条件での条件付き規則の確認
  3. 03一般的な鍵限定ポリシーの適用
  4. 04障害後のアクセス検証と設定復旧

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mikr13/secure-server-setup-skills --skill ssh-hardening

インストール後、Claude Code で/ssh-hardeningを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
sshd-config.md
scripts/
generate-ssh-keys.sh
setup-ssh-hardening.sh

詳細

SSH のセキュリティ強化

認証を制限する前に、管理者としてアクセスできることを確認してください。変更後に新しいログインが成功するまで、現在のセッションとプロバイダーのコンソールを利用できる状態に保ってください。

アクセスを確認して確立する

  1. アクティブなデーモン/サービス/ソケット、実際のリスニングポート、管理者と自動化用の ID、Include の順序、関連する Match ルールを特定します。実際のユーザー、クライアントアドレス、ホスト名に対する sshd -T -C の結果を記録します。

  2. 既存の root 以外の管理者を使用します。アカウントの作成が必要な場合は、ディストリビューションのユーザー/グループ規則に従って別途作成し、公開鍵を登録したうえで、ロックダウンの前に別のセッションで鍵ログインと sudo を確認します。

  3. パスフレーズ付きの鍵またはハードウェア保護された鍵を、ローカルクライアント上で個人用に生成します。scripts/generate-ssh-keys.sh はプレビュー/上書き防止機能を提供します。--interactive モードは人が操作するターミナル用であり、--no-passphrase はサービス用の鍵として明示的に選択する場合に使用します。

  4. パスワードへのフォールバックなしで、特定の鍵をテストします。

    ssh -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -i ~/.ssh/server_admin [email protected]
    

    新しいセッションで、必要な sudo 操作を確認します。パスワードへのフォールバックや、すでに開いているセッションは、鍵でアクセスできることの証明にはなりません。

許可するポリシーを設定する

インクルード、条件付きアクセス、または有効化を編集する前に、references/sshd-config.md を読んでください。

セットアップヘルパー は、一般的な鍵のみのポリシーに対応しています。既存の root 以外の管理者が必要です。アカウントの作成、AllowUsers/AllowGroups の置き換え、ポートの変更、転送機能の削除は行いません。複数要素認証がすでに設定されている場合は、このヘルパーではなく、レビュー済みの手動ポリシーを使用してください。

sudo bash scripts/setup-ssh-hardening.sh --user administrator --client-address 203.0.113.10 --dry-run

鍵によるアクセスと sudo を確認し、設定/有効化する権限があることを確認した後に、次を実行します。

sudo bash scripts/setup-ssh-hardening.sh --user administrator --client-address 203.0.113.10 --key-access-confirmed --apply --activate

確認が必要な管理者については、--user を繰り返し指定します。ホスト名ベースの Match ルールが適用される場合は、--client-host を設定します。ヘルパーは指定されたクライアントコンテキストを検証しますが、関連するほかのネットワーク/ホスト名も確認してください。管理対象の早期読み込み用ドロップインを書き込み、先行する値や条件付きルールによって要求したポリシーが上書きされる場合は、成功として扱いません。ファイル名が早いだけでは、優先順位が高いことの証明にはなりません。

検証と復旧

  • 構文:sudo sshd -t。有効なファイルポリシー:sudo sshd -T -C user=administrator,host=client.example.com,addr=203.0.113.10。
  • 関連するすべてのコンテキストで、root、パスワード、キーボードインタラクティブ方式の制限を確認し、必要な鍵ログインと、意図した MFA がある場合はそれが引き続き可能であることを確認します。
  • 有効化後、特定の鍵を使って新しいログインを確立し、sudo を確認します。管理されたクライアントから、拒否される認証方式をテストします。これらのテストが通るまで、元のセッションを維持してください。
  • スクリプトが検証または有効化中に失敗した場合、以前の管理対象ドロップインを正確に復元し、必要に応じて復元したポリシーの再読み込みを試みます。後でロールバックする場合は、表示された保護されたバックアップディレクトリを使用します。保存されたファイルを復元するか、以前は存在しなかった場合は新しい管理対象ファイルを削除します。その後、維持しているセッション/コンソールから、実際のサービスを検証して再読み込みします。

ファイルの検証、設定の有効化、稼働中のアクセス確認は分けて報告してください。ClientAliveInterval をユーザーのアイドルタイムアウトとして説明したり、古くなったプロトコル/暗号設定を固定値で指定したりしないでください。

コメント