4.3.5. Простая абарона ад ботаў (брутфорса адмін-панэлі) з дапамогай 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 example.com www.example.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, як больш дакладны для вызначэння сітуацыі), аддаваў nginx, што значна больш эканомна ў плане спажываных серверам рэсурсаў, чым адлоў той жа сітуацыі і блакаванне на ўзроўні Apache.
Больш падрабязную інфармацыю пра наладу модуля ngx_http_limit_req_module
можна знайсці ў афіцыйнай дакументацыі nginx.
Праверка працы сістэмы
З дапамогай утыліты ab (apache benchmark) можна стварыць HTTP-флуд на пэўную старонку, напрыклад /wp-login.php
, І паглядзець пры гэтым Error-лог nginx:
ab -n 100 -c 1 http://example.com/wp-login.php