В Nginx есть простой модуль ngx_http_access_module который управляет доступом. У него достаточно простой синтаксис:
deny IP; deny subnet; allow IP; allow subnet; # block all ips deny all; # allow all ips allow all;
Важно помни что правила проверяются по очереди.
Для того, что бы Nginx начал блокировать IP адреса необходимо зайти в файл nginx.conf и добавить следующую строку%
include blockips.conf;
После этого создадим файл blockips.conf в котором добавим:
deny 2.2.2.2
deny 3.3.3.3
где 1.1.1.1 2.2.2.2 и 3.3.3.3 адреса которые необходимо заблокировать. Сохраняем и перезапускаем Nginx.
Как я говорил раньше, конфиг считывается последовательно, то есть, если вам например нужно запретить доступ определенной подсети, но исключить один IP адрес, то выглядеть это будет так:
location / { allow 192.168.1.1; deny 192.168.1.0/24; }
И последнее, создадим свой HTTP 403 Сообщение об ограниченном доступе. Заходим в папку /usr/local/nginx/html и редактируем файл error403.html:
<html> <head><title>Error 403 - IP Address Blocked</title> </head> <body> Your IP Address is blocked. If you this an error, please contact webmaster with your IP at [email protected] </body> </html>
Если включен SSL то вы можете так же показать IP клиента:
Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.
Поле этого добавьте в nginx.conf:
# redirect server error pages to the static page error_page 403 /error403.html; location = /error403.html { root html; }
перещзапустите nginx