【実践】fail2banとrecidiveでSSH攻撃を防御してみた

Linux

はじめに

今回は、自分のVPS環境に対して実際に行われているSSH攻撃をログから分析し、fail2banとrecidiveによる防御の仕組みを理解しました。

単なる設定だけでなく、「実際にどう動いているか」を確認できたので、その内容をまとめます。


環境

  • OS:Ubuntu(さくらVPS)
  • SSHポート:2222(22から変更済み)
  • 認証方式:公開鍵認証(パスワード無効)
  • セキュリティ:
    • UFW
    • fail2ban
    • recidive

攻撃ログの確認

まずはSSHログを確認します。

sudo grep sshd /var/log/auth.log | tail

実際のログ

Connection closed by authenticating user root 188.166.189.101 port 47150 [preauth]

ログの読み取り

項目意味
rootrootユーザーでログイン試行
IPアドレス攻撃元
port接続元ポート
preauth認証前に切断

ポイント

preauth = 認証処理に入る前に接続終了

👉 鍵認証によりログイン処理が成立していない


攻撃回数の可視化

特定IPの攻撃回数を確認します。

sudo grep "188.166.189.101" /var/log/auth.log | wc -l

結果

1576

分析

  • 同一IPから1500回以上のアクセス
  • 手動ではなく自動ツール(ボット)による攻撃

fail2banの状態確認

sudo fail2ban-client status sshd

結果

Total failed: 3063
Currently banned: 1
Total banned: 111

意味

  • 3000回以上の攻撃を検知
  • 111個のIPを自動BAN
  • 現在も攻撃IPをブロック中

fail2banの動作

① 攻撃発生
② auth.logに記録
③ fail2banが検知
④ 条件一致でBAN
⑤ iptablesで通信遮断

fail2banログの確認

sudo tail -f /var/log/fail2ban.log

実際のログ

Found 47.253.135.170
already banned
Unban 47.253.135.170

読み取れること

  • 攻撃を検知(Found)
  • すでにBAN済み(already banned)
  • 一定時間後に解除(Unban)

recidive(再犯対策)

状態確認

sudo fail2ban-client status recidive

結果

Currently banned: 2
Total banned: 8

recidiveの役割

何度もBANされるIPを長期間ブロックする

動作の流れ

① 攻撃
② sshd jailで短期BAN
③ 解除後に再攻撃
④ recidiveが検知
⑤ 長期BAN

防御の階層構造

攻撃
↓
fail2ban(短期BAN)
↓
再攻撃
↓
recidive(長期BAN)

セキュリティ評価

攻撃回数:3000回以上
侵入成功:0

👉 防御成功


学び

今回の学習で重要だと感じたポイントは以下です。

  • 攻撃は常に発生している
  • 防御によって侵入は防げる
  • ログを見ることで状況を正確に把握できる
  • fail2banは「検知+遮断」を行うツール
  • recidiveで継続的な攻撃にも対応できる

まとめ

攻撃は止められないが、侵入は防げる

この一言がセキュリティの本質だと感じました。


おわりに

今回のように「実際の攻撃ログを元に学ぶ」ことで、理解が一気に深まりました。

今後はさらに、

  • 不要サービスの停止
  • ログから侵入検知
  • ネットワークの理解

などを進めていきたいと思います。