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 не буде опублікований.