Ограничение Количества Попыток Ввода Пароля В Форме Веб-Входа С Использованием Nginx Или Haproxy На Примере Wordpress.

На примере WordPress давайте рассмотрим способ повышения безопасности за счет ограничения количества HTTP-запросов к форме ввода пароля.

Это защитит публикуемый блог от перебора (поиска и взлома пароля путем перебора всех теоретически возможных вариантов из определенного набора символов или подбора словаря распространенных паролей).

Этот метод, в принципе, можно использовать для защиты других веб-приложений.

Задачу можно реализовать в Nginx с помощью модуля ngx_http_limit_req_module[ 1 ] выступая в качестве внешнего интерфейса для Apache или веб-сервера FastCGI, или используя HAProxy [ 2 , 3 ], действуя как балансировщик нагрузки перед веб-серверами.

В обоих случаях алгоритм работы следующий.

При аутентификации браузер обращается к адресу, содержащему подстроку «/wp-login.php».

Необходимо это отслеживать и ограничивать количество запросов с одного IP, не затрагивая запросы на все остальные адреса.

Параметры блокировки необходимо выбирать таким образом, чтобы не создавать неудобств обычным пользователям.

Особенно внимательно следует быть при настройке блокировки в случаях, когда формой авторизации пользуется большое количество пользователей с одного IP-адреса.

Способ №1: Nginx Конфигурационный файл исправлен по советам из комментариев.

Спасибо ВБарт И J_o_k_e_R !

  
   

http { <.

> limit_req_zone $binary_remote_addr zone= login:10m rate=15r/m; server { listen 80; server_name frontend.example.org; location ~* /wp-login.php { limit_req zone=login burst=4; proxy_pass http://backend:8080 ; <.

> } location / { proxy_pass http://backend:8080 ; <.

> } }

Варианты блокировки: limit_req_zone $binary_remote_addr зона=логин:10м ставка=15р/м; Устанавливает параметры для зоны общей памяти, в которой хранится состояние разных IP-адресов.

В нашем случае состояния хранятся в зоне «login» размером 10 мегабайт, а средняя скорость обработки запросов для этой зоны не может превышать 15 запросов в минуту.

Скорость обработки может быть указана в запросах в секунду (r/s) или запросах в минуту (r/m).

limit_req зона = вход в систему = 4; устанавливает зону входа и максимальный размер пакета запросов.

Если скорость поступления запросов превышает описанную в зоне, то их обработка задерживается, чтобы запросы обрабатывались с заданной скоростью.

Лишние запросы задерживаются до тех пор, пока их количество не превысит максимальный размер пакета.

В случае превышения запрос завершается с ошибкой 503. Способ №2: HAProxy В бэкэнд-разделе, который обслуживает наш блог, добавьте следующие строки [ 2 ]:

tcp-request inspect-delay 10s tcp-request content accept if HTTP # brute force protection acl wp_login path_beg -i /wp-login.php stick-table type binary len 20 size 500 store http_req_rate(20s) peers local tcp-request content track-sc2 base32+src if METH_POST wp_login stick store-request base32+src if METH_POST wp_login acl bruteforce_detection sc2_http_req_rate gt 5 acl flag_bruteforce sc1_inc_gpc0 gt 0 http-request deny if bruteforce_detection flag_bruteforce

При обнаружении POST-запроса на странице /wp-login.php сохраняется хеш из трех элементов: заголовок HTTP-хоста, путь URL-адреса и исходный IP-адрес.

Пользователь, идентифицированный по хешу, сможет сделать пять запросов за 20 секунд; шестой запрос будет заблокирован.

Литература

  1. Модуль ngx_http_limit_req_module -nginx.org
  2. WordPress CMS защита от перебора с помощью HAProxy —blog.haproxy.com
  3. Лучшее ограничение скорости для всех с HAProxy - blog.serverfault.com
Теги: #Nginx #wordpress #haproxy #безопасность веб-приложений #безопасность #информационная безопасность
Вместе с данным постом часто просматривают: