О web-разработке
и даже немного больше...

Блокирование ботов в Nginx

Довольно часто Nginx используется в качестве проксирующего сервера, либо в качестве основного веб-сервера для сайта. Кроме его прямого назначения так же стоит вопрос безопасности, а именно возможность заблокировать каких-либо нежелательных спам-ботов, парсеров, и прочему злу штатными средствами, делать это можно по нескольким известным уже нам признакам, это User Agent, IP-адрес, источник перехода – Referer, и др. Мы рассмотрим несколько способов и реализаций, которые приглянулись мне.

Для удобства мы создадим отдельный файл с конфигурацией блокировки, который в последующем мы сможем подключать в нужных местах секции server { посредством команды:

include /etc/nginx/block.conf

Как вы уже поняли файл с настройками блокировки будет именоваться block.conf, теперь давайте рассмотрим какое содержимое может быть в этом файле.

Блокировка по User Agent
Правило указанное ниже будет блокировать посетителей, у которых в заголовке запроса будет встречаться строка, которая есть в условии фильтрации.

if ($http_user_agent ~ (ZmEu|libwww-perl|wget)){
	return 403;
}

Пополнять список нежелательных User Agent-ов вы можете самостоятельно, разделяя их символом | между собой.

Блокировка по IP-адресу
Блокировка по IP-адресу является одним и популярных методов блокировки нежелательных хостов. В Nginx заблокировать хост или диапазон хостов по IP-адресу довольно просто, делается это так:

deny 88.88.88.88;

Для диапазона IP-адресов:

deny 192.168.10.0/24;

Блокировка по Referer-у
Данный способ тоже хорош в своем роде, потому-то позволяет блокировать трафик с некоторых нежелательных ресурсов, по заголовку Referer.

if ($http_referer ~* (viagra|cialis|levitra) ) {
	return 403;
}

Блокировка по GeoIP
Более масштабный метод блокировки это блокировка по географическому признаку, в некоторых случаях может быть весьма необходимой задачей. Для работы данного метода необходимо чтобы в Nginx предварительно был подключен модуль GeoIP.

geoip_country /etc/nginx/GeoIP.dat;
if ($geoip_country_code ~ (BR|CN|KR|RU)){
	return 403;
}

Каждый из этих методов может быть использован для блокировки нежелательного трафика на ваш сайт.

Так же хотел поделиться ещё другим способом блокировки, который оказался очень удобным наглядным и удобным в использовании.
Блокировка по User Agent и IP-адресам – 2 способ
В отличии от примеров описанных выше эти настройки прописываются в секции http { главного файла конфигурации Nginx.

http {
       map $http_user_agent $blocked_ua {
           ~(?i)ZmEu 1;
           ~(?i)libwww-perl 1;
           ~(?i)wget 1;
           default 0;
       }
       map $remote_addr $blocked_ip {
		  88.88.88.88 1;
          74.3.170.33 1;
          default 0;
       }
       server {
           listen 80;
           if ($blocked_ua) { return 403; }
           if ($blocked_ip) { return 403; }
           # ...
       }
   }

Для удобства эти настройки (содержимое секции http { ) так же можно вынести в отдельный файл, после чего подключить его к основному файлу конфигурации Nginx. Есть и другие способы блокировки, они могут немного отличаться, но принцип похожий.
Надеюсь у вас получилось с настройками блокировки в Nginx, если что-то не получается, вы можете задавать вопросы в комментариях, так же вы можете помочь развитию нашего проекта, поделившись ссылкой в соц. сети с друзьями!

Опубликован: 05.08.2017 г.

См. также:

Преимущества и недостатки веб-серверов Nginx и Apache
Перенаправление с HTTP на HTTPS в Nginx
Тестирование файла конфигурации Nginx
Как отключить журнал запросов в Nginx?
Как включить сжатие GZip в Nginx?
Конвертация htaccess в Nginx
Не работает вебвизор, что делать?
Настройка заголовков Expires в Nginx

Комментарии

  1. Александр пишет:

    Как на php добавлять блокировки в динамике?
    Без нарушений в безопасности (без reload nginx)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта