SSHサーバーの堅牢化
sshd_configを編集してSSHサーバーを強化します。rootログインとパスワードログインを無効にし、危険なデフォルト設定を変更し、ユーザーを制限して多層的な保護を適用し、信頼できるクライアントだけが接続できるようにします。
「SSHサーバーの堅牢化」はCoddyKit上の無料Linux Server Deployment & SSH Masteryレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Server Deployment & SSH Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
SSHを強化する理由
インターネットに公開されたSSHサーバーは、自動化された攻撃の標的になり続けます。デフォルト設定のままでは、ボットが絶えず探し回る侵入口がいくつも残っています。
強化とは、サーバー側の設定を厳格にし、攻撃者にサーバーを見つけられてもブルートフォースで侵入できないようにすることです。
sshd_configファイル
サーバー側のSSHの動作は/etc/ssh/sshd_configで制御します。これは、以前設定したクライアント設定(~/.ssh/config)とは異なります。
必ずrootとして編集し、変更前にバックアップを取ってください。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configrootログインを無効にする
rootアカウントは、攻撃者が最初に試す対象です。rootでの直接ログインを無効にすると、有効なユーザー名も推測しなければならなくなります。
PermitRootLoginをnoに設定します。管理者は通常のユーザーとしてログインし、sudoを使用してください。
PermitRootLogin noパスワード認証を無効にする
鍵ベースの認証が機能することを確認したら、パスワード認証を完全に無効にします。これによりブルートフォース攻撃を完全に無効化できます。推測すべきパスワードがなくなるためです。
警告:この設定を適用する前に鍵でログインできることを確認してください。確認しないと、自分自身を締め出してしまう可能性があります。
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yesログインできるユーザーを制限する
AllowUsersまたはAllowGroupsを使って、SSHを使用できるアカウントを正確にホワイトリスト化できます。リストにないユーザーは、有効な鍵を持っていても拒否されます。
これは、複数のユーザーが利用するサーバーにおける、強力でシンプルな制御方法です。
AllowUsers deploy admin
# or by group:
AllowGroups sshusersデフォルトポートを変更する(任意)
SSHをポート22から移動しても実際のセキュリティは向上しませんが、ログに記録される自動スキャナーのノイズを大幅に減らせます。
標準以外のポートを選び、ファイアウォールでそのポートを開くことと、クライアントにポート番号を伝えることを忘れないでください。
Port 2222ログイン試行とセッションを制限する
いくつかのディレクティブによって、攻撃者に与えられる時間枠を短くできます。
MaxAuthTries— 切断するまでに許可する失敗試行回数LoginGraceTime— 認証に許可する秒数MaxSessions— 1つの接続あたりの同時セッション数
MaxAuthTries 3
LoginGraceTime 30
MaxSessions 2安全に変更を適用する
編集後は、再起動する前にsshd -tで構文を検証してください。入力ミスがあるとサービスが起動せず、接続できなくなる可能性があります。
その後、サービスをリロードします。現在のセッションは開いたままにし、新しい接続をテストしてから現在のセッションを閉じてください。
sudo sshd -t
sudo systemctl restart sshFail2banでブルートフォース攻撃から保護する
Fail2banは認証ログを監視し、失敗回数が多すぎるIPアドレスを一時的に禁止します。sshdの設定に加えて、動的なファイアウォール層を追加します。
インストールしてSSH jailを有効にしてください。ほとんどのサーバーでは、デフォルト設定で問題ありません。
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdセキュリティ強化を確認する
無効にした機能をサーバーが実際に拒否することを確認してください。詳細な出力を有効にして接続し、サーバーが提供している認証方式を確認します。
セキュリティを強化したサーバーは、publickeyのみを提示し、パスワードログインとrootログインを拒否する必要があります。
ssh -v deploy@server
# Look for: 'Authentications that can continue: publickey'ベストプラクティス
SSHサーバーを長期的に安全に保つには、次の点に注意してください。
- 鍵によるログインをテストする前に、
PasswordAuthentication noを決して適用しない - 設定を変更している間は、1つのセッションを開いたままにする
- 編集するたびに
sshd -tを実行する - sshdのセキュリティ強化をファイアウォールおよびFail2banと組み合わせる
クイックチェック
SSHのセキュリティ強化に関する知識を確認しましょう。
まとめ
/etc/ssh/sshd_configを通じて、SSHサーバーのセキュリティを強化しました。
- rootログインとパスワードログインを無効にした
AllowUsersでユーザーを許可リストに登録したMaxAuthTriesとLoginGraceTimeを調整した- ブルートフォース攻撃を動的に防ぐFail2banを追加した
sshd -tで検証し、セッションを閉じる前には必ずテストしてください。
よくある質問
「SSHサーバーの堅牢化」レッスンは無料ですか?
はい。「SSHサーバーの堅牢化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Server Deployment & SSH Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
「SSHサーバーの堅牢化」で何を学びますか?
sshd_configを編集してSSHサーバーを強化します。rootログインとパスワードログインを無効にし、危険なデフォルト設定を変更し、ユーザーを制限して多層的な保護を適用し、信頼できるクライアントだけが接続できるようにします。 ブラウザで直接実行するハンズオンコードでLinux Server Deployment & SSH Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Server Deployment & SSH Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Server Deployment & SSH Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「SSHサーバーの堅牢化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Server Deployment & SSH Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Server Deployment & SSH Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SSHプロトコルを理解する
- SSHクライアントの設定
- SSH鍵ベース認証
- SSHサーバーの堅牢化