2026/05/30(土)このブログにやってくる海外IPのBOTの挙動を軽く調べた
アクセス解析にノイズが出て鬱陶しいので、海外IPのUAを幾らか調べてみたまとめ。
今年の1月末付近と、5月末に調査を実施している。
集計条件
https://blog.lycolia.info/配下にHTTPリクエストが来た時で、そのURLにファイルが存在しない場合に、海外IP判定が出たものについて次の基準で集計している。
- 2026-01-29 19:30:25 -> 2026-02-03 07:23:22
- UAに次を含まない
bot | curl | wget | google | bing | mastodon | misskey | pleroma | akkoma | lemmy | activitypub | hatena | github | tumblr
- 日本、韓国、台湾のIP以外
- UAに次を含まない
- 2026-05-25 20:15:52 -> 2026-05-29 23:19:00
- UAに次を含まない
bot | curl | wget | google | bing | mastodon | misskey | pleroma | akkoma | lemmy | activitypub | hatena | github | tumblr | meta
- 日本のIP以外
- UAに次を含まない
IPの国判定にはその月のDBIP-City.mmdbを使用した。
2026-01-29 19:30:25 -> 2026-02-03 07:23:22
UA別
meta-externalagent/1.1はFacebookやInstagramのOGP収集クローラーらしいが、異常にアクセスが多い。無害なので5月のログでは許可しているBaiduspiderは百度のクローラー、個人的にいい印象はない。NULL、UA未設定。まともなアクセスでない可能性が高い。PHPのfile_get_contents()だとデフォは空。curlはcurl/8.19.0みたいなのがデフォルトで入る。FaradayはRubyのHTTPクライアントらしいTwingly Recon-Sjostromは何かしらのフィードリーダーの可能性がある
| UserAgent | 件数 |
|---|---|
| meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler) | 975 |
| Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) | 490 |
| NULL | 273 |
| Faraday v1.10.4 | 104 |
| Chrome Privacy Preserving Prefetch Proxy | 58 |
| Apache-HttpClient/4.5.2 (Java/1.8.0_161) | 40 |
| Apache-HttpClient/4.5.2 (Java/1.8.0_151) | 40 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36 | 21 |
| Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 | 20 |
| node | 19 |
| Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 | 18 |
| Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 | 17 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36 | 12 |
| Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 | 11 |
| facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) | 10 |
| Twingly Recon-Sjostrom/1.0 (+https://app.twingly.com/public-docs/crawler) | 10 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F | 10 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 | 8 |
| Mozilla/5.0 (compatible; crawler) | 7 |
| NotionEmbedder | 6 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 | 6 |
| python-requests/2.32.4 | 5 |
| Python/3.9 aiohttp/3.10.6 | 5 |
| Go-http-client/2.0 | 5 |
| Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0 | 3 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 | 3 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 | 3 |
| Go-http-client/1.1 | 3 |
| Fedineko (crabo/0.3.1; +https://fedineko.org/about) | 3 |
| python-httpx/0.28.1 | 2 |
| imgproxy/3.30.0 | 2 |
| Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user) | 2 |
| Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 | 2 |
| Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:114.0) Gecko/20100101 Firefox/114.0 | 2 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 | 2 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 | 2 |
| ALittle Client | 2 |
| undici | 1 |
| ktor-client | 1 |
| aria2/1.36.0 | 1 |
| Python/3.11 aiohttp/3.13.3 | 1 |
| Mozilla/5.0 (compatible; VulnScanner/1.0; +https://example.com/) | 1 |
| Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0 | 1 |
| Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:128.3) Gecko/20100101 Firefox/128.3 | 1 |
| Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:79.0) Gecko/20100101 Firefox/79.0 | 1 |
| Mozilla/5.0 (X11; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0 | 1 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 | 1 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 | 1 |
| Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 | 1 |
| Mozilla/5.0 (X11; Linux i686; rv:1.9.7.20) Gecko/5137-01-18 15:15:18.309540 Firefox/6.0 | 1 |
| Mozilla/5.0 | 1 |
| More Internet Explorer 8.0 user agents strings -->> | 1 |
| Iframely/1.3.1 (+https://iframely.com/docs/about) Atlassian | 1 |
| BaiduSpider | 1 |
国別
アメリカが最多で、中国、インドと続いた。
| 国 | 件数 |
|---|---|
| US | 1,329 |
| CN | 575 |
| IN | 125 |
| VN | 67 |
| JM | 19 |
| BR | 15 |
| SG | 14 |
| IE | 9 |
| CA | 8 |
| MX | 6 |
| IQ | 6 |
| NL | 5 |
| BD | 5 |
| UA | 3 |
| AR | 3 |
| ZA | 2 |
| PL | 2 |
| GB | 2 |
| FR | 2 |
| EE | 2 |
| DE | 2 |
| TR | 1 |
| TN | 1 |
| TM | 1 |
| SE | 1 |
| PY | 1 |
| PT | 1 |
| ID | 1 |
| HK | 1 |
| GE | 1 |
| ES | 1 |
| DZ | 1 |
| CO | 1 |
| CL | 1 |
| BH | 1 |
| BE | 1 |
| AT | 1 |
| AD | 1 |
UAがNULLの国別
アメリカにNULLのUAが多く、意外と中国にはなかった。偽装UAであれ設定してるだけまともといえる。
| 国 | 件数 |
|---|---|
| US | 143 |
| IN | 124 |
| IE | 4 |
| SG | 2 |
アクセス先URL
ほとんどが公開URLへのアクセスで有害なURLへのアクセスは思ったよりなかった。
| URL | 件数 |
|---|---|
| 無害なURL | 1,196 |
| 有害なURL | 467 |
2026-05-25 20:15:52 -> 2026-05-29 23:19:00
UA別
metaを弾くようにした結果NULLがトップに上がってきたBaiduspiderが来なくなったFaradayがrururu.appからのクロールであることが判明した(rururu.appに出た瞬間にログを確認したところ、これしかいなかったため)- Fediverse系のUAが増えた気がする
| UserAgent | 件数 |
|---|---|
| NULL | 801 |
| python-httpx/0.28.1 | 109 |
| Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) | 105 |
| Faraday v2.14.2 | 99 |
| amazon-Quick-on-behalf-of-e1871480 | 85 |
| Chrome Privacy Preserving Prefetch Proxy | 62 |
| Mozilla/5.0 three-stage-hot-model-probe/2.0 | 45 |
| Go-http-client/2.0 | 35 |
| Apache-HttpClient/4.5.2 (Java/1.8.0_161) | 20 |
| facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) | 18 |
| Twingly Recon-Sjostrom/1.0 (+https://app.twingly.com/public-docs/crawler) | 14 |
| Python/3.12 aiohttp/3.13.3 | 6 |
| Mozilla/5.0 | 6 |
| Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.86 Safari/537.36 | 4 |
| fediway-ingest/0.1 | 3 |
| Mozilla/5.0 (compatible; NuxtFyi/0.1; +https://nuxt.fyi) | 3 |
| ALittle Client | 3 |
| facebookexternalhit/1.1 | 2 |
| Ruby | 2 |
| Python/3.11 aiohttp/3.9.5 | 2 |
| PubkyWebIndex/0.1 (+https://pubky.app) | 2 |
| Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Claude-User/1.0; +claude-user@anthropic.com) | 2 |
| Mozilla/5.0 (compatible; LinkRing/1.0; +https://linkring.lol) | 2 |
| Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 | 2 |
| Iframely/1.3.1 (+https://iframely.com/docs/about) Atlassian | 2 |
| Amethyst/1.08.0 | 2 |
| Amethyst/0.94.3 | 2 |
| python-httpx/0.27.2 | 1 |
| git/2.34.1 | 1 |
| SubstackContentFetch/1.0 (https://substack.com/) | 1 |
| Python/3.9 aiohttp/3.13.5 | 1 |
| Python/3.12 aiohttp/3.13.5 | 1 |
| Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Bluesky Cardyb/1.1; +mailto:support@bsky.app) Chrome/W.X.Y.Z Safari/537.36 | 1 |
| Mozilla/5.0 (compatible; crawler) | 1 |
| Mozilla/5.0 (compatible; InternetMeasurement/1.0; +https://internet-measurement.com/) | 1 |
| Mozilla/5.0 (compatible; ClarityPlatformCrawler/1.0; +https://clarity.microsoft.com) | 1 |
| Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/) | 1 |
| Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 | 1 |
| Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 | 1 |
| Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 | 1 |
| Java/25.0.3 | 1 |
| Hello from Palo Alto Networks, find out more about our scans in https://docs-cortex.paloaltonetworks.com/r/1/Cortex-Xpanse/Scanning-activity | 1 |
国別
前回15件しかなかったブラジルが425件に増えてトップに躍り出た。ブラジルに何があるんだ…。AWSのデータセンター?
そしてアメリカ、カナダ、中国、台湾と次ぐ。アメリカはAWSとかが多い気がする。カナダは知らん。中国は多分人間が来ている気がしているがよくわかっていない。台湾は今回ログの範囲に含めたため初登場。韓国からのアクセスはなかったようだ。
| 国 | 件数 |
|---|---|
| BR | 425 |
| US | 358 |
| CA | 282 |
| CN | 276 |
| TW | 62 |
| SE | 16 |
| SG | 8 |
| NL | 4 |
| GB | 4 |
| DE | 4 |
| UA | 2 |
| SI | 2 |
| RU | 2 |
| MG | 2 |
| BE | 2 |
| VN | 1 |
| LU | 1 |
| BD | 1 |
| AD | 1 |
UAがNULLの国別
ブラジルからのアクセスに悪質なものが多かったことが推測できる。
| 国 | 件数 |
|---|---|
| BR | 424 |
| CA | 282 |
| US | 94 |
| UA | 1 |
アクセス先URL
圧倒的に有害なアクセスが増えていた。
| URL | 件数 |
|---|---|
| 無害なURL | 207 |
| 有害なURL | 1,075 |
集計クエリ
事後分析するためにデータをSQLiteに保存していたので、そのクエリ。実は1月のデータはTSVだったので、地味にコンバートに苦労したが、SQLiteクライアントがTSVからのインポートをサポートしていたので、引っかかったのはTSVのタイムスタンプがSat May 30 00:50:56 2026だったのを、DBのタイムスタンプのYYYY-MM-DD HH:mm:ssに変えるくらいだった。これはLLMに変換SQLを出してもらって良しなにしてもらった。
集計テーブルのDDL
CREATE TABLE "deny_log" (
"id" INTEGER,
"url" TEXT,
"country" TEXT,
"remote_addr" TEXT,
"user_agent" TEXT,
"timestamp" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
)
UA別
SELECT
T.UA,
COUNT(T.UA)
FROM
(
SELECT
CASE
WHEN user_agent IS NULL
THEN "NULL"
ELSE user_agent
END AS UA
FROM
deny_log
WHERE
timestamp < '2026-05-20'
) T
GROUP BY
UA
ORDER BY
COUNT(T.UA) DESC
国別
SELECT
country,
COUNT(country)
FROM
deny_log
WHERE
timestamp < '2026-05-20'
GROUP BY
country
ORDER BY
COUNT(country) DESC
UAがNULLの国別
SELECT
country,
COUNT(country)
FROM
deny_log
WHERE
timestamp < '2026-05-20'
AND user_agent IS NULL
GROUP BY
country
ORDER BY
COUNT(country) DESC
アクセス先URL
URLの善悪分類はエクセルを使って手動。
無害=robot.txtや記事URLなどの公開URL、有害=管理画面や何かのスクリプトのURLを叩いているもの。
SELECT
url,
COUNT(url)
FROM
deny_log
WHERE
timestamp < '2026-05-20'
AND (
url != '/'
AND url NOT LIKE '/0%'
)
GROUP BY
url
ORDER BY
COUNT(url) DESC
あとがき
元々はアクセス解析に出ないようにブロックするために集計していたが(robot.txtが尊重されるとか思ってないので)、善良なBOTの大半が海外IPで対応が面倒なのでいったんブロックはやめることにした。
将来的にはAnubis辺りを導入してWAFを掛けることで対応したいと思う。
あとこれをやってて思ったこととしてUAの中に自分が何者かを入れてくれてるクライアントは凄く親切だなと思った。
2026/05/26(火)直近でやりたいことリスト
投稿日:
やりたいことが多すぎて消化が追い付かない!
サイト運営周り
自作サーバー近隣
- 監視周りの整備
- OpenWrtのメトリクス集め
- データソースのセットアップはしたものの整備されてないGrafanaのダッシュボード整理
- 発報体制の整備
- 外形監視とステータスページの導入
- 自宅サーバーのリプレース
- Ubuntu -> Debian
- WAF(Anubis)の導入
- Claudflareより自由ソフトウェアだろ!
- かわいいし!
CMS開発回り
まずは何が欲しいのかの要件整理からしていかないといけない奴ら。
- adiary代替CMSの作成
- adiaryの基本機能は保ったままプラガブルでメンテナンスがしやすいCMSの作成
- MCP対応もしたい
- パフォーマンスはadiaryほどギチギチに詰めない予定
- CGI動作
- Markdown parserの全面刷新
- Wikiの作成
- 上記CMSの基盤を転用して整備したい
- PukiwikiがMarkdownで書けず、既存の改造品もしっくりこないため
- ブログには日々のログを、Wikiにはあとで見返す情報の集約を、というので役割分担をしたい
書きたいけど書けてない日記のネタを書く
全部書くかどうかはわからないが書いてないと忘れてしまいそうなのと、発生日が不明だと日付ベースで管理している行動メモから引き出せないのでメモっておく。
| ネタの発生日 | 内容 |
|---|---|
| 2025-10-25 | ゾンビランドサガ現地鑑賞 |
| 2025-10-31 | ゾンビランドサガ マンホール巡礼 |
| 2025-11-15 | 神戸→川崎のスーパー映画館はしご、チネチッタ突貫記 |
| 2025-11-21 | 伊万里湾大花火大会2025+マンホール回収 |
| 2025-11-29 | 去年、香川漆器を修理に出した話の続き、修理を受け取ってきたときの旅行記 |
| 2026-05-02 | 超かぐや姫!を観に高知に行った話 |
| 2026-05-02 | 超かぐや姫!感想2 |
| 2026-05-23 | 須磨浦山上遊園に行った話 |
ゾンサガの鑑賞録も書いてないが、これについては書くかどうかがとても怪しい。
旅行回り
それ以前にやりたいことが多すぎるため、いずれも優先度は低い。
- 姫路市立水族館でナマコを触りたい
- ナマコ触れる場所では恐らく三宮から最も近く、他だと和歌山や豊岡、玉野になってくる
- 冬雨文庫に行ってみる
- 岡山市・オランダ通りの古書店「よつば文庫」
- 鷲羽山ハイランドでバンジージャンプをする