@russeljo

Как автоматически в centos 7 и nginx блокировать ip по содержимому запроса на основе ключевых слов?

Сейчас смотрю лог запросов и блокирую 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? Поэтому хочется блокировать на уровне фаервола.

Пока есть только идея через крон сканировать файл лога и на этом создавать правила для фаервола. Но тут тоже не особо в этом разбираюсь. Буду и за эту подсказку весьма благодарен.
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
идея ... сканировать файл лога и на этом создавать правила для фаервола
идея хорошая, и вы не первый, кому она пришла.

Самый известный, пожалуй, fail2ban ну и множество других, по запросу "firewall automation tool", или вот так.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В location / сделайте:
if ($http_user_agent ~* "(bingbot|petalsearch|semrush|mj12bot)") {
    return 403;
}


Ну это если по быстрому, без fail2ban.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы