Skip to main content

Выкарыстанне nginx http_referer_module для абароны адмінку сайта ад брутфорсу



Чытаючы дакументацыю вэб-сервера nginx, наткнуўся на цікавы модуль пад назвай http referer module . Ён дазваляе блакаваць доступ да сайта, альбо яго раздзелах, калі ў запыце адсутнічае карэктны загаловак referer.

Гэты модуль можна ўжыць для абароны адмінку любога сайта ад брутфорсу. Напрыклад, сайт працуе на вордпресс, але блакаванне доступу па ip будзе недарэчнай, калі на сайце ёсць зарэгістраваныя карыстальнікі. Ім жа таксама трэба аўтэнтыфікавацца, а збіраць іх ip - занятак бессэнсоўнае. :)



Прынцып працы просты: на сайце выводзім спасылку на старонку ўваходу wp-login.php, а ў канфігурацыйным файле nginx задаём праверку запытаў да wp-login.php і / wp-admin / на наяўнасць адрасы нашага сайта ў загалоўку рэферэрам.

Перш за ўсё ствараем выдзелены локейшн для патрэбных старонак. Напрыклад, так:


  server {
 ...
 location ~ * (wp-login \ .php | wp-admin (. *)) $ {
  try_files $ uri = 404;
  fastcgi_pass unix: /run/php-www.sock;
  location ~ \ .php $ {
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
   fastcgi_ignore_client_abort off;
   fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
   fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
  }
 }
 ...
 }

Як бачым, тут пазначаны яшчэ і параметры апрацоўкі php скрыптоў (інакш названыя ў локейшн скрыпты не будуць працаваць).

Канфігурацыю модуля можна прапісаць адразу пасля location ~* (wp-login\.php|wp-admin(.*))$ { .

Першы радок:


  valid_referers server_names 

Яна паказвае, што карэктным полем referer павінен лічыцца дамен сайта.

А таксама прапісваем праверачны ўмова. Калі поле referer некарэктна, сервер адлюструе памылку 403 (доступ забаронены).

  if ($ invalid_referer) {
     return 403;
 }

У выніку канфігурацыя будзе выглядаць так:

  server {
 ...
 location ~ * (wp-login \ .php | wp-admin (. *)) $ {
 valid_referers server_names
 if ($ invalid_referer) {
     return 403;
 }
 (Параметры fastcgi)
 }
 ...
 }

Напрыканцы на сайце дадаем спасылку на старонку ўваходу (wp-login.php ці нешта там яшчэ). Калі наведвальнік клікае па гэтай спасылцы, то атрымлівае форму аўтарызацыі. Але калі бот будзе стукацца наўпрост да гэтага файлу, то атрымае памылку доступу.

Так, варта адзначыць, што загаловак referer можна падрабіць. Але асабіста мне боты з карэктна запоўненым полем referer трапляліся вельмі рэдка і банились па ip. :) Так што гэты метад можа быць цалкам дарэчны.



Як вы ацэніце артыкул?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 адзнак, сярэдняе: 1,00 з 5)
Загрузка ...

Дадаць каментар

Ваш e-mail не будзе апублікаваны.