Инженер пожаловался, что его новый сайт Brain Baking, который размещался на небольшом сервере, вывели из строя боты, занимающиеся парсингом.
Когда разработчик попытался получить доступ к сайту, то столкнулся с необычной задержкой, которая побудила его войти в систему и посмотреть, что происходит. Он выяснил, что экземпляр Gitea и сервер Fail2ban поглощают почти все ресурсы процессора. Закрытие Gitea не повлияло на Fail2ban, поскольку журналы доступа Nginx были переполнены такими записями:
47.79.216.157 — — [27/Oct/2025:13:05:34 +0100] «GET /wgroeneveld/brainbaking/src/commit/4359ae68930de084df09e1cfa05ffd4520fb7e40/content/links.md?display=source HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.217.151 — — [27/Oct/2025:13:05:34 +0100] «GET /wgroeneveld/brainbaking/rss/commit/5911666cf0b30236cdc7590abb4e171534faf972/content/museum.md HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.217.32 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/src/commit/7b46fd682f36af81d4852b8ee2ee9970c638cac6/layouts HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.218.157 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/src/commit/4359ae68930de084df09e1cfa05ffd4520fb7e40/content/404.md HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.216.205 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/src/commit/590574b17b0e1bb068d442d309341e98762fd55d/content/about.md HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.217.95 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/rss/commit/25674d6de08a667926aab89362fa7bb585cd35c5/content/links.md HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.218.191 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/src/commit/590574b17b0e1bb068d442d309341e98762fd55d/themes HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36» 47.79.216.116 — — [27/Oct/2025:13:05:35 +0100] «GET /wgroeneveld/brainbaking/rss/commit/b4eac0fb71b056cb44fe062b8f2c0949dbb08af6/content/museum.md HTTP/1.1» 502 568 «-» «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36»
Инженер отмечает, что у него достаточно отказоустойчивых систем для блокировки вредоносных ботов, но пользовательский агент Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/140.0.0.0 Safari/537.36 не сразу распознаётся как «вредный», поскольку HTTP-заголовок легко подделать.
Кроме того, владелец сайта временно блокировал отдельные IP-адреса ботов. Тем не менее, базовые диапазоны атакующих IP-адресов остались прежними: 47.79. Инженер воспользовался сайтом ipinfo.io, чтобы выявить источник угрозы, и вышел на AS45102 Alibaba (US) Technology Co. В итоге инженер заблокировал весь диапазон адресов.
Он отмечает, что Fail2ban с трудом справлялся с ботами, так как использует файл access.log Nginx для применения правил, а передача cat access.log | grep /commit/ | cut -d » » -f 1 для мгновенной блокировки всех, кто пытается получить доступ к журналам коммитов Git, не работала достаточно быстро. Добиться нужного эффекта получилось благодаря применению sudo iptables -I INPUT -s 47.79.0.0/16 -j DROP.
Инженер также заметил рост трафика с заголовками Referer, поступающими со странных сайтов, таких как bioware.com, mcdonalds.com и microsoft.com.
«Этот экземпляр Gitea нужно перенести за пределы сайта, а ещё лучше — перенести миграцию на Codeberg в начало моего списка дел. И всё же грустно видеть, что людей, которые любят возиться со своими маленькими серверами, всё чаще за это наказывают, что вынуждает многих переходить на централизованное решение, что в долгосрочной перспективе только усугубляет ситуацию. Интернет больше не является безопасным убежищем для любителей программного обеспечения. Я мог бы привести ссылки на десятки других блогеров, сообщавших о подобных проблемах», — пишет он.
Разработчик отмечает, что это уже не первый подобный инцидент, и он всерьёз рассматривает применение более агрессивных контрмер, в том числе инструмента Anubis. Anubis — это проверка доказательства работы обратного прокси, которая должна быть пройдена, прежде чем запросы будут допущены к серверу Git. Он блокирует ботов, но пропускает браузеры, управляемые людьми.
Между тем другой разработчик ранее выпустил специальный лабиринт с открытым исходным кодом, чтобы заманивать в ловушку обучающих ИИ веб-сканеров в бесконечно и случайно генерируемую серию страниц. Программу под названием Nepenthes могут развернуть владельцы ресурсов.
Источник: habr.com