導入
公開鍵認証を使えるようにしただけでは、まだ半分です。パスワードでのログインの扉が開いたままでは、鍵を持たない攻撃者もパスワード総当たりを試し続けられます。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で反映する