fail2ban — снижаем нагрузку блокировкой сканеров уязвимости и бесполезных ботов


Зачастую владельцы сайтов обращаются с проблемой, что сайт сильно «тормозит» — грешат на DDOS, просят разобраться и помочь.

Анализ логово обычно показывает дополнительную нагрузку от ботов — когда сразу несколько ботов «заходит в гости», а так же частенько попадаются на глаза сканеры уязвимостей, которые тоже прилично грузят систему.

Для блокировки подобных «гостей» на уровне сервера логично использовать уровень фаервола, а в качестве средства для анализа и создания правил для фаервола — fail2ban.

Итак, кратко:

  1. Если fail2ban ещё не стоит — ставим. Этот пункт описывать не буду — инфы много.
  2. Создаём кастомные фильтры /etc/fail2ban/filter.d/nginx-block-page.conf и /etc/fail2ban/filter.d/nginx-block-bots.conf (код ниже)
  3. Создаём кастомный jail /etc/fail2ban/jail.d/custom.conf в котором используем созданные фильтры (код ниже)
  4. Перезапускаем fail2ban
  5. Смотрим статистику
    sudo fail2ban-client status nginx-block-page
    sudo fail2ban-client status nginx-badbots

Код nginx-block-page.conf

Для отлова сканеров я использовал самые распространённые запросы (тут можно значительно расширить, но я думаю этого будет достаточно)

[Definition]
failregex = ^.»(GET|POST|HEAD) /admin.php.»
^.»(GET|POST|HEAD) /wp-login.php.»
^.»(GET|POST|HEAD) /wp-.»
^.»(GET|POST|HEAD) /phpinfo.php.»
^.»(GET|POST|HEAD) /(vendor|api|config).»
^.»(GET|POST|HEAD) .env.»
^.»(GET|POST|HEAD) .git.»
ignoreregex =

Код nginx-block-bots.conf

Тут я использовал список ботов который у меня раньше был + глянул по логам и довольно существнно расширил

[Definition]
failregex = ^.«(GET|POST|HEAD) .«.«.» «.(PetalBot|AhrefsBot|SemrushBot|Bytespider|DotBot|Applebot|MJ12bot|Amazonbot|PerplexityBot|DataForSeoBot|OAI-SearchBot|LinkpadBot|SputnikBot|Crowsnest|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JS-Kit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier).«
ignoreregex =

Код конфигурационного файла

[nginx-block-page]
enabled = true
port = http,https
filter = nginx-block-page
logpath = /var/www/clients/client1/web4/log/access.log
maxretry = 1
findtime = 1h
bantime = 30d
banaction = iptables-allport

[nginx-block-bots]
enabled = true
port = http,https
filter = nginx-block-bots
logpath = /var/www/clients/client1/web4/log/access.log
maxretry = 1
findtime = 1h
bantime = 30d
banaction = iptables-allport

Внимание — путь до логов нужно подставить свой!

Перед включением jail нужно обязательно протестировать фильтры sudo

fail2ban-regex /var/www/clients/client1/web4/log/access.log /etc/fail2ban/filter.d/nginx-block-page.conf

sudo fail2ban-regex /var/www/clients/client1/web4/log/access.log /etc/fail2ban/filter.d/nginx-block-bots.conf


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *