0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fail2banを入れただけで満足してた話と、その後やったこと

0
Last updated at Posted at 2026-03-27

複数台のクラウドサーバー(顧客専用のクラウドシステムや当社で運用しているGenbaFlow というデジタル日報管理)を運用していて、ひさしぶりにfail2banのログをちゃんと見てみたんです。そしたら……思ってたよりずっとヤバいことになってて。焦って設定を見直したときの記録をまとめました。


まず、ログを数字にしてみた

grep '2026-03-26' /var/log/fail2ban.log | grep ' Ban ' | awk '{print $6}' | sort | uniq -c | sort -rn

結果はこんな感じ。

179 [sshd]
 34 [nginx-bad-useragent]
  8 [nginx-exploit]
  1 [nginx-env-scan]

1日200件超のBan!? SSHへの辞書攻撃がダントツなのは想定内だったけど、nginx系への攻撃も思った以上に……というか、めちゃくちゃ来てるじゃん!

攻撃の種類をざっくり整理すると:

  • SSH辞書攻撃:ubuntuadminrootdeploy とかをひたすら試してくる
  • 不審なUserAgent:スキャナーやボットが使う文字列でWebをノック
  • Webエクスプロイト:既知の脆弱性を突くパスへの直接アクセス
  • .env ファイルや設定ファイルを探し回るやつ

これ、全部自動化されたボットなんですよね。止める理由がないから、24時間、今この瞬間も動き続けてる。ほんと恐ろしい……。


bantimeが10分になってた……

デフォルトの設定を確認したら bantime = 10m になってました。

10分でUnbanされるとどうなるか。同じIPが1日25回以上もBanと解除を繰り返してたんですね。

Ban [攻撃元IP] → 10分後Unban → また攻撃 → またBan → 10分後Unban → …

これが1日中。fail2banは一応動いてるけど、これじゃ完全にイタチごっこじゃないか。

同じサブネット(/24)から複数のIPが組織的に攻撃してくるパターンもあった。個別IPをBanしても別のIPに切り替えてくるから、そのままじゃキリがない。というか、全然追いつかない!


やったこと

1. bantimeを伸ばす

/etc/fail2ban/jail.local のsshdセクションに追記。

[sshd]
enabled  = true
filter   = sshd
bantime  = -1
maxretry = 5
action   = iptables-multiport[name=sshd, port="ssh", protocol=tcp]

bantime = -1 で永久Ban。誤検知が怖いなら 48h あたりから試すのが無難かも。

2. 自分のIPをignoreipに登録

自分のIPもBanされたらシャレにならないので、先に登録しておきましょう。

[sshd]
enabled   = true
filter    = sshd
bantime   = -1
maxretry  = 5
ignoreip  = 127.0.0.1/8 [自分のIP]
action    = iptables-multiport[name=sshd, port="ssh", protocol=tcp]

3. しつこいサブネットをiptablesでDROP

同じサブネットから繰り返し来る場合は、fail2banのサイクルを待たずにパケットごと捨てちゃう。
このコマンドラインも、

ログ /var/log/fail2ban.logからサブネット単位でDropさせるコマンドラインを作って。

とclaude-codeとかに頼むのが楽。

sudo iptables -I INPUT -s [攻撃元サブネット]/24 -j DROP

再起動後も有効にするには:

sudo netfilter-persistent save

netfilter-persistent がないなら:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

4. fail2banを再起動して確認

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

やってみてわかったこと

fail2banは入れるだけでも効果はある。でも「デフォルトのまま動かしてるから大丈夫!」っていうのは半分しか正しくない。というか、むしろ危険だな、って。

特に bantime = 10m のまま放置してたのは、本当にまずかった。今すぐ bantime を伸ばすべきですよ。 Ban数のカウントはされてるけど、同じIPがその日のうちに何十回でも再挑戦できちゃう状態だった。ザルすぎる……。

あと、nginx系への攻撃はSSHほど目立たないけど、.env ファイルや既知の脆弱性を狙ったアクセスが着実にきてる。Webアプリ側の設定も今すぐ見直した方がいいです。

ログを眺めてみると、自分のサーバーが思ってるより、はるかに多く叩かれてることがわかる。面倒だけど、今すぐ数字にしてみるべき。 対処の優先順位がはっきりして、マジで血の気が引くから。

フィルタは、LLMにログを食わせて作成するのが最善ですよ。 攻撃手法はどんどん進化してフィルタもすぐ陳腐化するから、人間が手書きするのは今の時代、無駄な時間を浪費するだけ。一刻を争う事態ならなおさら、LLMに任せてガシガシ改版していくべきです!


参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?