• UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепропетровск
  • +38(062) 210-24-93  Донецк
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 449-04-21  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 007-72-35  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

Простая защита от ботов (брутфорса админ-панели) при помощи nginx

Хостинг Украина FAQ Выделенные сервера и VPS Простая защита от ботов (брутфорса админ-панели) при помощи nginx

Защитить сайт от взлома брутфорсом (подобором пароля к админ-панели сайта) и снизить нагрузку создаваемую ботами-взломщиками можно при помощи nginx, установленного фронтэндом на сервере, модифицировав конфигурационный файл nginx (чаще всего он находится в /etc/nginx/nginx.conf) вот таким образом: 

сразу после строки http { добавьте

#антибот
limit_req_zone $binary_remote_addr zone=antibot:16m rate=6r/m;
limit_req_log_level warn;
limit_req_status 403;

Далее найдите блок описывающий конкретный защищаемый сайт. Он начинается с server { и содержит директиву server_name с адресом сайта. Что-то вроде: 

server {
server_name sitename.com www.sitename.com;
listen xxx.xxx.xxx.xxx;
и дальше ряд location описывающих правила обработки запросов к server
 
В server добавьте новый location вот с таким содержимым: 
location = /wp-login.php {
limit_req   zone=antibot burst=2 nodelay;
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}

где, 

/wp-login.php - путь к защищаемой странице. Для Opencart нужно его заменить на /admin , для Joomla - на /administrator
127.0.0.1:81 - заменить на IP-адрес:порт веб-сервера на котором размещен сайт. (можно подсмотреть в соседних директивах location)
 
После всех изменений сохраните изменения и проверьте правильность конфига выполнив в консоли сервера: 
nginx -t

если результат проверки  - syntax is ok, то перезапустите nginx: 

service nginx restart

Принцип работы: 

Этот конфиг задаёт зону разделяемой памяти с названием antibot, объёмом 16МБ  и скоростью обработки запросов - 6 запросов/минута или 1 обращение к /wp-login.php в 10 секунд  (ещё можно указывать этот параметр в запросах/сек - r/s). Если количество поступающих запросов больче чем значение rate - их обработка откладывается до тех пор, пока их количество не превысит значение заданное в limit_req....burst (в нашем случае - 2), после чего все последующие запросы будут получать в ответ ошибку 403 (можно задать любой другой код ошибки в строке limit_req_status , например 423 как более точный для определения ситуации) отдаваемую нжинксом, что значительно более экономно в плане потребляемых сервером ресурсов, чем отлов той же ситуации и блокировка на уровне apache.
 
Более подробную информацию о настройке модуля ngx_http_limit_req_module, который использовался в этой заметке, можно найти в официальной документации nginx: http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Проверка работы системы:

С помощью утилиты ab (apache benchmark)  можно создать http флуд на определенную страницу, например wp-login.php и посмотреть при этом error лог nginx:

$ ab -n 100 -c 1 http://.../wp-login.php

 

Как можно проверить работу этой настройки?
А то что-то не могу понять, работает она или нет.
Написал toxi 27.09.2016 в 17:59 Ответить
Имя:
E-mail:

Обновить картинку
Ваш комментарий будет добавлен после проверки администратором
Есть утилита ab (apache benchmark) с ее помощью можно создать http флуд на определенную страницу, например wp-login.php и посмотреть при этом error лог nginx.
$ ab -n 100 -c 1 http://.../wp-login.php
Написал Илья 29.09.2016 в 00:43 Ответить
Имя:
E-mail:

Обновить картинку
Ваш комментарий будет добавлен после проверки администратором
Спасибо за ответ.
Может дополнить эту статью тем, как можно проверить данную настройку, чтобы не искать в комментариях ответ?)

Например, после главы "Принцип работы", написать следующую главу "Как проверить" или "Тестирование конфигурации" и дальше уже написать Ваш ответ )
Написал toxi 29.09.2016 в 10:28 Ответить
Имя:
E-mail:

Обновить картинку
Ваш комментарий будет добавлен после проверки администратором
Готово
Написал Андрей 29.09.2016 в 10:31 Ответить
Имя:
E-mail:

Обновить картинку
Ваш комментарий будет добавлен после проверки администратором

Добавить комментарий
Хотите ответить на существующий комментарий - воспользуйтесь кнопкой Ответить под комментарием на который даёте ответ.
Имя:
E-mail:

Обновить картинку
Ваш комментарий будет добавлен после проверки администратором.
Внимание! Чтобы ответить на существующий комментарий, пожалуйста, нажмите на кнопку Ответить, которая находится под соответствующим комментарием.

Другие полезные статьи:

Горячая линия
(044)
392 74 33
другие города