Как забанить ботов на сервере nginx

Вопросы без привязки к версии. Установлена авточистка (2 года).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3417
Стаж: 14 лет 1 месяц
Благодарил (а): 702 раза
Поблагодарили: 172 раза

Как забанить ботов на сервере nginx

Сообщение southklad »

Приветствую, количество гостей и там же новых ботов уже просто достало, подскажите как в nginx равилом забанить ботов по названию или по агенту, например вот бот Barkrowler . Заранее спасибо.
Изображение
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5510
Стаж: 21 год 1 месяц
Откуда: Питер
Благодарил (а): 185 раз
Поблагодарили: 769 раз

Re: Как забанить ботов на сервере nginx

Сообщение Siava »

southklad, примерно как в моём примере. Я использую не только nginx для ловли ботов, но некоторых блокирую именно так, по user-agent:

Код: Выделить всё

http {
...
	map $http_user_agent $bad_bots {
		default 0;
		~*(AhrefsBot|SemrushBot|MJ12bot|magpie|trendictionbot|DotBot|Riddler|AwarioRssBot|BLEXBot|Adsbot|MegaIndex|xpymep|Bytespider|Amazonbot|serpstatbot|ImagesiftBot|ClaudeBot|DataForSeoBot|GPTBot|OAI\-SearchBot|keys\-so\-bot) 1;
		"~*(Mozilla/5\.0 \(X11; Ubuntu; Linux x86_64; rv:72\.0\) Gecko/20100101 Firefox/72\.0)" 1;
		# и т.д.
	}

	server {
		...
		# вставить перед location
		if ($bad_bots = 1) {
			return 444;
		}
	}
}
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3417
Стаж: 14 лет 1 месяц
Благодарил (а): 702 раза
Поблагодарили: 172 раза

Re: Как забанить ботов на сервере nginx

Сообщение southklad »

Совсем забыл, что у меня вот так реализовано

Код: Выделить всё

if ($http_user_agent ~ SputnikBot|Crowsnest|Barkrowler|GPTBot|DataForSeoBot|claudebot|meta-externalagent|Bytespider|VKRobotRB|OAI-SearchBot|SPAMDDOS|keys-so-bot|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JS-Kit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|AhrefsBot|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier|ltx71|SemrushBot|SMUrlExpander|xpymep|AhrefsBot) {
		return 444;
	}
Это вообще норм вариант?

Отправлено спустя 33 минуты 41 секунду:
Или вот так правильнее?

Код: Выделить всё

if ($http_user_agent ~* (SputnikBot|Crowsnest|Barkrowler|GPTBot|DataForSeoBot|claudebot|meta-externalagent|Bytespider|DotBot|VKRobotRB|MBCrawler|YaK|OAI-SearchBot|SPAMDDOS|keys-so-bot|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JS-Kit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|AhrefsBot|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier|ltx71|SemrushBot|SMUrlExpander|xpymep|AhrefsBot) ){
		return 444;
	}
И как лучше, в основной конфиг сайта добавить или я создал файл block_bots.conf по пути /etc/nginx/ и там это же прописал
Изображение
Аватара пользователя
Kuskow
phpBB 2.0.0
Сообщения: 249
Стаж: 9 лет 9 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 19 раз
Поблагодарили: 18 раз

Re: Как забанить ботов на сервере nginx

Сообщение Kuskow »

southklad писал(а): 01.10.2024 19:23GPTBot
А зачем банить ChatGPT? Им сейчас очень многие пользуются, и будет хорошо, если информация с форума, которой когда-то поделились живые и явно компетентные люди, будет учтена в знаниях, и на её основе будут делаться выводы.
Аватара пользователя
Kuskow
phpBB 2.0.0
Сообщения: 249
Стаж: 9 лет 9 месяцев
Откуда: 🇰🇿 Караганда
Благодарил (а): 19 раз
Поблагодарили: 18 раз

Re: Как забанить ботов на сервере nginx

Сообщение Kuskow »

И ещё, кажется, забыли из активных: Petal, Python, Twitter, Facebook, Perplexity, DuckDuckGo, Apple, Sogou, FAST-WebCrawler, msnbot, Ask Jeeves.

Отправлено спустя 26 минут 9 секунд:
southklad писал(а): 01.10.2024 19:23 Или вот так правильнее?
Заходим в Google в режиме ИИ, вставляем первый вариант, получаем ответ, вставляем второй вариант - сразу говорит, что так, что не так, на что обратить внимание, как улучшить, ускорить, сократить, кого вырезать, кого добавить. Ну просто прелесть какая-то. Тут же предлагаю выполнить консольную команду, которая выдаст самых загружающих ботов (путь к log-файлу будет другой - он предложит варианты, если команда не сработает):

Код: Выделить всё

tail -n 50000 /var/log/nginx/domains/navimba.com.log | awk -F\" '{print $6}' | sort | uniq -c | sort -nr | head -n 50
Затем выведенный список копируем туда же в вопросы к Google-ИИ, получаем ответ:

Вот компактный анализ вашего лога (на основе 50 000 запросов).
Для удобства я сгруппировал «ботов из будущего» (Chrome 140+) и явных ИИ-агентов.
Итоги активности (Топ-50)

Код: Выделить всё

Процент	Название / Тип агента	Примечание
19.5%	GPTBot (OpenAI)	ИИ-краулер
4.7%	Amazonbot	Сбор данных для Amazon
3.6%	YandexBot	Поисковик
3.6%	trendictionbot	Маркетинговый агрегатор
2.2%	python-requests	Скрипты/Парсеры (не браузер)
2.0%	Chrome 10.0 (Legacy)	Древний бот (версии 15 лет)
1.6%	PetalBot (Huawei)	Поисковик Huawei
1.1%	ClaudeBot (Anthropic)	ИИ-краулер
0.9%	OAI-SearchBot (OpenAI)	Поисковый ИИ
0.8%	bingbot	Поиск Microsoft
0.7%	DataForSeoBot	SEO-парсер
0.6%	DotBot / MJ12bot	SEO-аналитика
0.5%	meta-externalagent	ИИ-бот Facebook/Meta
0.5%	Googlebot	Поисковик (единственный полезный)
32.8%	Прочие Chrome/Safari	Смесь реальных людей и мелких ботов

Можно выводить статистику по процентам прямо в SSH-терминале:

Код: Выделить всё

LOG_FILE="/var/log/nginx/domains/navimba.com.log"; \
TOTAL=$(tail -n 50000 $LOG_FILE | wc -l); \
tail -n 50000 $LOG_FILE | awk -F\" '{print $6}' | sort | uniq -c | sort -nr | head -n 20 | \
awk -v total=$TOTAL '{ printf "%5.1f%%  |  %s\n", ($1/total)*100, substr($0, index($0,$2)) }'

Так как Amazon и ChatGPT можно обрезать в robots.txt, то лезть в NGINX нет смысла, я считаю.
MasterX
phpBB 1.4.4
Сообщения: 134
Стаж: 5 лет 11 месяцев
Благодарил (а): 22 раза
Поблагодарили: 13 раз

Re: Как забанить ботов на сервере nginx

Сообщение MasterX »

В свое время добавлял в .htaccess

# Блокировка GigaExplorator
RewriteCond %{HTTP_USER_AGENT} GigaExplorator [NC]
RewriteRule ^ - [F,L]

# Блокировка SERanking Backlinks Bot
RewriteCond %{HTTP_USER_AGENT} SERankingBacklinksBot [NC]
RewriteRule ^ - [F,L]

##############################
# !!! БАН FIREFOX 72 !!!
##############################
RewriteCond %{HTTP_USER_AGENT} Firefox/72\. [NC]
RewriteRule ^ - [F,L]

##############################
# 0a) Блокировка известных скраперских подсетей
##############################
RewriteCond %{REMOTE_ADDR} ^5\.75\. [OR]
RewriteCond %{REMOTE_ADDR} ^5\.161\. [OR]
RewriteCond %{REMOTE_ADDR} ^65\.109\. [OR]
RewriteCond %{REMOTE_ADDR} ^116\.202\. [OR]
RewriteCond %{REMOTE_ADDR} ^128\.140\. [OR]
RewriteCond %{REMOTE_ADDR} ^135\.181\. [OR]
RewriteCond %{REMOTE_ADDR} ^136\.243\. [OR]
RewriteCond %{REMOTE_ADDR} ^148\.251\. [OR]
RewriteCond %{REMOTE_ADDR} ^157\.90\. [OR]
RewriteCond %{REMOTE_ADDR} ^162\.55\. [OR]
RewriteCond %{REMOTE_ADDR} ^167\.235\. [OR]
RewriteCond %{REMOTE_ADDR} ^168\.119\. [OR]
RewriteCond %{REMOTE_ADDR} ^176\.9\. [OR]
RewriteCond %{REMOTE_ADDR} ^178\.63\. [OR]
RewriteCond %{REMOTE_ADDR} ^188\.40\. [OR]
RewriteCond %{REMOTE_ADDR} ^193\.43\.108\. [OR]
RewriteCond %{REMOTE_ADDR} ^195\.201\. [OR]
RewriteCond %{REMOTE_ADDR} ^198\.244\.200\. [OR]

# Alibaba Cloud / Aliyun (массовые псевдогости)
RewriteCond %{REMOTE_ADDR} ^8\.160\.
RewriteRule ^ - [F,L]

##############################
# 1) Белый список полезных ботов
##############################
RewriteCond %{HTTP_USER_AGENT} (Googlebot|YandexBot|YandexMetrika|YaDirectFetcher|AdsBot|Mediapartners-Google|bingbot|Slurp|DuckDuckBot|Applebot) [NC]
RewriteRule ^ - [L]

##############################
# 2) Жёсткая защита от скраперов
##############################
RewriteCond %{HTTP_USER_AGENT} (curl|python|wget|libwww|java|perl|php|axios|requests|scrapy|httpclient|go-http-client|node-fetch) [NC]
RewriteRule ^ - [F,L]

##############################
# 3) Блокировка старых Chrome (<=101)
##############################
RewriteCond %{HTTP_USER_AGENT} Chrome/(?:[0-9]|[1-9][0-9]|100|101)\. [NC]
RewriteRule ^ - [F,L]

Помогало.
Советую поюзать ИИ, он актуализирует данную инфу.

Вернуться в «phpBB-пространство»