Довольно часто 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, если что-то не получается, вы можете задавать вопросы в комментариях, так же вы можете помочь развитию нашего проекта, поделившись ссылкой в соц. сети с друзьями!
Как на php добавлять блокировки в динамике?
Без нарушений в безопасности (без reload nginx)