2026年現在、世間を騒がせている不正アクセス/個人情報漏洩関連ニュース。試しに自分のwebサーバのアクセスログを見てみたら、/.aws、/.claude、/.env、/.git や /admin/ といった隠しファイルや管理画面URLへの大量のリクエストが来ていた。
[18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.aws/credentials HTTP/1.1" ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.aws/config HTTP/1.1" ... ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.claude/settings.local.json HTTP/1.1" ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.claude/settings.json HTTP/1.1" ... ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.docker/config.json HTTP/1.1" ... ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.env HTTP/1.1" ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.env.anthropic HTTP/1.1" ... ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.git-credentials HTTP/1.1" ... [18/Oct/2026:03:03:05 +0900] 35.241.178.74 "GET /.git/config HTTP/1.1" ... ...
当然、隠しファイルや管理画面は公開範囲には置いていないけれど、うちの非力なサーバに対して大量スキャンは困るしムカつく(↑のリクエスト、1秒間に100回くらい来てる)ので、変なアクセスをしてきたIPアドレスを一定時間BANさせる設定を組み込んだ。
使うソフトウェアは、この界隈ではディファクトスタンダードな fail2ban。
----
まず fail2ban 本体をインストール。OS は Alma Linux。
dnf install epel-release dnf install fail2ban
次に、/.git* にアクセスしに来たIPアドレスを抽出するフィルターを作成。
vim /etc/fail2ban/filter.d/apache-git-scan.conf
[Definition] # アクセスログの行からIPアドレスを抽出し、/.git を含むリクエストにマッチさせる正規表現 failregex = ^\[.*?\] <HOST> "GET /.*\.git.* HTTP/.*" ignoreregex =
作成したフィルターにマッチした場合に24時間BANする監視設定を作成。
vim /etc/fail2ban/jail.d/apache-git-scan.local
[apache-git-scan] enabled = true port = http,https filter = apache-git-scan # Apache のアクセスログのパス logpath = /var/log/httpd/ssl_access_log # 何回検知したらブロックするか maxretry = 1 # ブロックする秒(24時間 = 86400秒) bantime = 86400 # 過去何秒間のログを対象にするか findtime = 60
これで準備完了。まずは作成したフィルターを使って対象のアクセスログから /.git* のログを抽出できるかチェック。830件ヒット。全体のログ件数からするとそんな感じなので大丈夫そう。
fail2ban-regex /var/log/httpd/ssl_access_log /etc/fail2ban/filter.d/apache-git-scan.conf
Running tests ============= Use filter file : apache-git-scan, basedir: /etc/fail2ban Use log file : /var/log/httpd/ssl_access_log Use encoding : UTF-8 Results ======= Failregex: 830 total |- #) [# of hits] regular expression | 1) [830] ^\[.*?\] <HOST> "GET /.*\.git.* HTTP/.*" `- Ignoreregex: 0 total
fail2ban の自動起動設定および起動。
systemctl enable fail2ban systemctl start fail2ban
ちゃんと起動してるか確認。OK。
systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
Active: active (running) since Mon 2026-10-19 11:06:03 JST; 50min ago
----
試しに自サイト末尾に /.git/ を付けてアクセスしてみる。当然そんなファイルはないので 404 になる。うちの 404 ページはかわいいネコちゃんが登場します。犬ターネットなのに。

その後、/.git/ を外して通常通りにアクセス。レスポンスが返ってこずにタイムアウトになった。

どのIPアドレスがブロックされているかを以下コマンドで確認。Banned IP list に接続元IPアドレス(61.xxx.xxx.xxx)が入ってるのでちゃんと BAN されていることがわかる。
fail2ban-client status apache-git-scan
Status for the jail: apache-git-scan
|- Filter
| |- Currently failed: 0
| |- Total failed: 6
| `- File list: /var/log/httpd/ssl_access_log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 61.xxx.xxx.xxx
確認が取れたため、以下コマンドで「61.xxx.xxx.xxx」の BAN を解除。
fail2ban-client set apache-git-scan unbanip 61.xxx.xxx.xxx
再度、自サイトにアクセス、正常に表示されることを確認。
----
上記では /.git* へのGETリクエストだけを対象にしているけれど、例えば以下のように対象範囲を /.(git|env|claude|aws|docker)* へのGET、POST、HEAD リクエストまで広げてもいいんじゃないかと思う。
failregex = ^\[.*?\] <HOST> "(?:GET|POST|HEAD) /.*\.(git|env|claude|aws|docker).* HTTP/.*"
2026-10-18 ≫
1人ハーフマラソン大会