本文へスキップ
BecomeCoder

サーバーコース · 第3章 サーバーを安全に整える · レッスン13

SSHを固める ― sshd_config でハードニング

ローカル実施

導入

公開鍵認証を使えるようにしただけでは、まだ半分です。パスワードでのログインの扉が開いたままでは、鍵を持たない攻撃者もパスワード総当たりを試し続けられます。SSH サーバー自体の設定を見直して、「攻撃の入り口をそもそも狭める」のがこのレッスンのテーマです。

説明

SSH サーバーの挙動は /etc/ssh/sshd_config という設定ファイルで決まります。現場でまず直す代表的な項目は、次の3つです。

# /etc/ssh/sshd_config(抜粋)
PermitRootLogin no          # root で直接ログインさせない
PasswordAuthentication no   # パスワード認証を禁止(鍵のみ許可)
Port 2222                   # 待ち受けポートを22番以外に変更(任意)
  • PermitRootLogin no … 万能権限を持つ root そのものでの直接ログインを禁止します。一般ユーザーでログインしてから sudo を使う(次のレッスン)流れに寄せることで、「誰が」「いつ」権限を使ったかの記録が残ります。
  • PasswordAuthentication no … パスワードでの認証を完全に止め、前のレッスンの公開鍵認証だけを受け付けます。総当たり攻撃がそもそも成立しなくなります。
  • Port(任意) … 22番はSSHの「お約束のポート」なので、攻撃botの標的になりやすい場所です。別ポートに変えると、無差別スキャンの多くを避けられます(ただし本質的な防御は前の2つです)。

さらに AllowUsers user1 user2 のように、ログインを許可する 特定のユーザーだけ に絞ることもできます。

flowchart TD
    A["外からのSSH接続の試み"] --> B{"PermitRootLogin no"}
    B -->|root宛て| X["拒否"]
    B -->|一般ユーザー宛て| C{"PasswordAuthentication no"}
    C -->|パスワードで挑戦| X
    C -->|公開鍵で挑戦| D["ログイン成立"]

設定ファイルを直しただけでは、SSH サーバーはまだ古い設定のまま動き続けています。反映するには再起動が必要です。

sudo systemctl restart ssh

前章で学んだ「設定を直す→ restart で反映→ status で確認」の定石が、ここでもそのまま使われます。

総当たり攻撃そのものを検知して、一定回数失敗した IP を自動でブロックしてくれる fail2ban というツールも定番です。sshd_config での「そもそも入れない」対策と、fail2ban の「怪しい相手を締め出す」対策は、組み合わせて使われることが多いです。

この章のまとめ

  • SSH の挙動は /etc/ssh/sshd_config で決まる
  • PermitRootLogin no(root直接禁止)と PasswordAuthentication no(鍵のみ)が最重要の2点
  • ポート変更や AllowUsers での絞り込みも、攻撃の入り口を狭める手段
  • 設定変更後は sudo systemctl restart ssh で反映する