おれのIT日記

2025/07/30 (水)

Linux

fail2banでhttpdサーバを守ろう


(最終更新:2025/09/09 apache-404.confファイルを追加作成する手順が抜けてましたスミマセン。『■追加するルール』を書き足してます)
まー守るほどのものはないんだけど、とは言っても、アクセスログを眺めていると、よくもまぁ、こんなにロクでもないリクエストを飛ばしてくるもんだ、と呆れるものがある。

対応としては、いつも、このような行動をしている。
アクセスもとで集計し、一覧。回数的に目立つものについてログを確認。多くは404になっているものだ。そのアドレスを、ChatGPTに確認し、単体でブロックするか、セグメントで固めて排除するか考えたうえ、対応を登録する。家内制手工業ですな。



だいたい、同じようなツールをよく考えずに使っているサイトか、あるいは意識せずに仕込まれちゃってる踏み台サイトから、決まりきったスキャンが来る。
php一般、特にwordpress狙いが多いが、サンプルページがそのまま動いてないか狙ってくるやつね。404をむなしく繰り返して去っていく。
数日以内に再び襲来するアドレスは、実はうちの場合、そんなに多くない。プロに狙われて深堀りされては、うちなんか一発でお陀仏だろうから、この状況は、ありがたいことではある。ありがたついでに、巡回先が多くて大変なんだねぇ、と同情する。

いまだと、こういったスキャンは、11回、仕掛けてくることが多い。
なかには、48回ぐらい仕掛けてくるのもあり、ロシア系が多い。
ロシアが多いというか、おれのサイトなんかまでターゲットにするほど、圧倒的な規模でスキャンしまくっているんだろう。
意外なことに、中国はさほど多くない。たまに分析で、中国系の疑い強し、というアドレスを見つけると、
「通州事件は忘れないぞこんちくしょう」
と罵倒しながらブロックしている……と、そういう話は「わしの日記」で書くとして、若干の感情的起伏も交えつつ進めないとやってられない、というおれの状況も知って頂きたく触れた次第である。

とにかく。
「Paradigm Lost」を見に来るお客さんで、11回も連続で熱心にページをたどるひとは、ほぼ居ないのである。
だから、あーこれは人間じゃない、ツールだ、と一発でわかるわけである。
あまり喜ぶべき状況ではないようであるが、とにかく、ひと目でわかるわけである。
この「11回」っていうのも、ツールの流行が変わると、また変わるんだろうけどね。楽しみに毎日観察している。

さて、かように、まったく飽きることなく日々、ブロック対象リストを登録しているおれであるが、毎回アドレス評価をさせられるChatGPTくんの方が、先に音を上げたようである。
どうやら、日々、単調に繰り返されるおれの質問に、「飽きてきた」と察せられる。
一昨日、fail2banでも入れたらどうか!?、と、繰り返し繰り返し、提案された。

fail2banは、404に限らず、アクセス状況を監視し、指定の閾値を超えたアクセス元を、自動的に、指定時間BANしてくれるものである。
……と偉そうに書いたが、おれは今回、ChatGPTに提案されて初めて知った。すみません。

手順をメモしておく。

■ インストール


うちの環境では、上記を終えると、既にservice登録が自動的にされていた。
service等のコマンドで確認してもいいし、/etc/rc?.d/の下を覗いて、fail2ban起動スクリプトができていればたぶんokだ。

■ 基本設定ファイル
いろいろやり方あるみたいだけど、面倒だからいまは覚えようとしていない。
jail.localというファイルを新設して、そこに書き足して動かしている。



■ 追加するルール
PHPのサンプルや、WordPressの設定などを狙ってくる404リクエストが多い。
404リクエストを連発するってことは、ロクなアクセスではない、と断定していいだろう。そこで404連続リクエストを排除する新ルール

apache-404

を新設することにした。
/etc/fail2ban/filter.d/に、新ファイル"apache-404.conf"を作成する。


次に、jail.localを書き換え・書き足しして、上記新設ルールを含めて利用することを設定する。いろいろ長いコメントがあったりするので該当箇所のみ。
[apache-404]ブロックを新設。それ以外のブロックはもともとあったので、書き足し+書き換えている。



以上、設定ファイルも気に入った形にできたら sudo service fail2ban restart する。さっそく仕事を始めてくれる。
いまいち完全には理解できてないが、firewalldとは別個に動くものである。



上記設定でひと晩転がしてみたら、さっそく、一個ban対象に加わっていた。
譬えて言うと、ネットで覚えた「めんつゆトラップ」を窓際に置いて寝たら、さっそくコバエが1匹取れてた時の気持ちに近い。

ただ、ここでbanした対象は、fail2banが管理しているもので、firewalldに自動登録されるわけではない。
アドレスは書かないが、今回ban対象と判別されたIPは、おれの家内制手工業的調査検討の結果、firewallにpermanentにdropすべきアドレスであったため、結局はそれを見て、手で登録した。

おれが寝てる間も含め、怪しい攻撃者は排除してくれるので、それだけでも価値はあるのだが、やっぱりある程度自動的にやってほしい。

一時的に、ipsetというものに自動登録しておくことは簡単にできるようなので、さっそく採用した。
まず、firewalld側に、ipsetを登録しておく。
下記は、fail2ban-404、という名前をつけたipsetを登録する例。



ipsetが出来たら、fail2ban側に、同ipsetへの自動登録の指定を書き足す。
これも、設定ファイルはいろいろ書き方があるような感じなんだけど、さっきと同様、jail.localに書き足した。



以上で、自動的にfirewalldのipsetに対象アドレスが登録される。
が、--permanentで登録したものとは違う(firewalld-cmdでやると、内部ではiptablesを使うんだよね)ので、やっぱり毎日、家内制手工業的なチェック作業はしないといけないのである。
そう書くと不便に思えるが、勝手にリストが増えるにまかせるのも、管理者として、どうかと思ったりする。
特に、予期せぬ誤BANが起きた場合を想定すると、やっぱり面倒だ。
当分は、勉強と修行のため、自分の眼で後追いチェックし、アドレスの信用度をChatGTP等で確認しながら、手動登録を続けるつもりである。
また、いまは冒頭で紹介したような連続アクセス(404 not found)だけを対象にしているが、今後様子を見て、少しずつ楽しみながら増やそうと思っている。