[Мануал] Блокировка IP адресов и подсететей в Nginx (защита сайта)

Тема в разделе "Bash", создана пользователем Артур, 14 ноя 2017.

  1. Артур

    Артур Активный участник

    Регистрация:
    6 ноя 2017
    Сообщения:
    31
    Симпатии:
    4
    В данной статье мы рассмотрим как можно методами nginx заблокировать доступ с определенных IP адресов или подсетей.


    В Nginx встроен простой модуль ngx_http_access_module, с помощью которого можно разрешать или запрещать доступ с IP адресов. Его синтаксис следующий:

    deny IP;
    deny subnet;
    allow IP;
    allow subnet;
    # block all ips
    deny all;
    # allow all ips
    allow all;
    Обратите внимание, правила проверяются до первого совпадения.

    Как настроить Nginx на блокировку IP?
    Отредактируем файл конфигурации nginx.conf (обратите внимание что у меня путь к nginx - /usr/local/nginx/, замените если у вас он отличается):

    # cd /usr/local/nginx/conf/
    # vi nginx.conf
    Добавьте следующую строку в секцию http:

    ## Block spammers and other unwanted visitors ##
    include blockips.conf;
    Сохраните и закройте файл. После этого создайте файл blockips.conf в директории /usr/local/nginx/conf/:

    # vi blockips.conf
    Добавьте следующие записи:

    deny 1.2.3.4;
    deny 91.212.45.0/24;
    deny 91.212.65.0/24;
    Сохраните и закройте файл. Протестируйте конфигурации, введя:

    # /usr/local/nginx/sbin/nginx -t
    Получите примерно такое сообщение, которое говорит нам что все в порядке:

    the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    configuration file /usr/local/nginx/conf/nginx.conf test is successful
    Примените новый конфиг:

    # /usr/local/nginx/sbin/nginx -s reload
    Как я могу запретить все адреса, кроме локальных?
    Отредактируйте конфиг следующим образом:

    location / {
    # block one workstation
    deny 192.168.1.1;
    # allow anyone in 192.168.1.0/24
    allow 192.168.1.0/24;
    # drop rest of the world
    deny all; }
    В результате мы дадим доступ всей подсети 192.168.1.0/24 кроме одного IP 192.168.1.1.

    Как модифицировать сообщение об ошибке HTTP 403?
    Создайте файл error403.html в корне nginx:

    # cd /usr/local/nginx/html
    # vi 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 webmaster@example.com
    </body>
    </html>
    Если включен SSI, вы можете легко отобразить IP заблокированного клиента на данной странице, изменив строку таким образом:

    Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.
    Сохраните и закройте файл. Отредактируйте nginx.conf:

    # vi nginx.conf
    # redirect server error pages to the static page
    error_page 403 /error403.html;
    location = /error403.html {
    root html;
    }
    Сохраните и закройте файл, перезагрузите nginx:

    # /usr/local/nginx/sbin/nginx -s reload
     

Партнеры