Сейчас смотрю лог запросов и блокирую ip через firewall-cmd:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=X.X.X.X reject' --permanent
Приходится "вручную" искать в логе "плохие" запросы, содержащие ключевые слова: bingbot, petalsearch, semrush, mj12bot.
Например,
40.77.167.211 - - [27/Mar/2023:04:08:46 +0300] "GET /library/?section=prezentatsii HTTP/1.1" 200 42148 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/103.0.5060.134 Safari/537.36"
Как можно это автоматизировать? Может можно настроить фаервол, чтобы он смотрел тело запроса и отклонял, если в нём есть ключевое слово? Или это можно сделать в nginx, но не хотелось бы чтобы запрос доходил даже до nginx? Поэтому хочется блокировать на уровне фаервола.
Пока есть только идея через крон сканировать файл лога и на этом создавать правила для фаервола. Но тут тоже не особо в этом разбираюсь. Буду и за эту подсказку весьма благодарен.