На примере WordPress давайте рассмотрим способ повышения безопасности за счет ограничения количества HTTP-запросов к форме ввода пароля.
Это защитит публикуемый блог от перебора (поиска и взлома пароля путем перебора всех теоретически возможных вариантов из определенного набора символов или подбора словаря распространенных паролей).
Этот метод, в принципе, можно использовать для защиты других веб-приложений.
Задачу можно реализовать в Nginx с помощью модуля ngx_http_limit_req_module[ 1 ] выступая в качестве внешнего интерфейса для Apache или веб-сервера FastCGI, или используя HAProxy [ 2 , 3 ], действуя как балансировщик нагрузки перед веб-серверами.
В обоих случаях алгоритм работы следующий.
При аутентификации браузер обращается к адресу, содержащему подстроку «/wp-login.php».
Необходимо это отслеживать и ограничивать количество запросов с одного IP, не затрагивая запросы на все остальные адреса.
Параметры блокировки необходимо выбирать таким образом, чтобы не создавать неудобств обычным пользователям.
Особенно внимательно следует быть при настройке блокировки в случаях, когда формой авторизации пользуется большое количество пользователей с одного IP-адреса.
Способ №1: Nginx Конфигурационный файл исправлен по советам из комментариев.
Варианты блокировки: limit_req_zone $binary_remote_addr зона=логин:10м ставка=15р/м; Устанавливает параметры для зоны общей памяти, в которой хранится состояние разных IP-адресов.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 ; <.
> } }
В нашем случае состояния хранятся в зоне «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 секунд; шестой запрос будет заблокирован.
Литература
- Модуль ngx_http_limit_req_module -nginx.org
- WordPress CMS защита от перебора с помощью HAProxy —blog.haproxy.com
- Лучшее ограничение скорости для всех с HAProxy - blog.serverfault.com
-
Живые Образы Tizen Sdk На Базе Ubuntu
19 Oct, 24 -
Рынок Серверов Идет На Поправку
19 Oct, 24 -
Firefox — Один Профиль Для Разных Ос
19 Oct, 24 -
Опасности Обучения По Книгам
19 Oct, 24