Nginx: Ограничить доступ к каталогам сайта по IP адресам

25 май 2020, Понедельник
34
0
+ 0 -
К вопросам безопасности информационных систем в целом и веб сайтов в частности, с каждым годом относятся все серьезнее. Покупаются аппаратные или программные firewallы (WAF, NGFW и другие), а также настраиваются модули безопасности на веб-серверах. Один из способов уменьшение вектора атаки на веб сайт, это ограничение доступа кслужебным страницам по ip адресам (сетям), чтобы, например, ограничить возможности попасть впанель администрирования сайта только с корпоративных сетей. Ниже описан как раз такой модуль для nginx, который позволяет заблокировать доступ с определенных IP адресов или подсетей. Этот модуль называется ngx_http_access_module, именно с помощью него можно разрешать или запрещать доступ с IP адресов. 

Описание синтаксиса 

Настройки, которые определяют, разрешено или запрещено с того или иного IP-адреса получать доступ к сайту, описываются в конфигурации сайтов nginx в секции location, для каждой описанной директории сайта (если в этом есть необходимость). По умолчанию, доступ разрешен всем ip адресам. разрешение или запрет указываются директивами allow (разрешить) и deny (запретить).Обход описанных директив выполнятеся последовательно сверху вниз и первая сработавшая директива будет определять разрешен доступ или нет. Ниже показан пример:
location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

В этом примере, доступ к сайту разрешен только для сетей: 192.168.1.0/24, 10.1.1.0/16 и 2001:0db8::/32, но при этом запрещен доступ для хоста 192.168.1.1 (не смотря на разрешающее правило для сети). Подключения с сетей, которые не описаны разрешающими правилами выше, будут запрещены финальной директивой deny all.

Как заблокировать доступ к сайту для определенных IP

Чтобы заблокировать доступ к сайту для определенных IP адресов или IP сетей, в конфигурации сайтов nginx в секции location необходимо перечислить IP-адреса и сети, для которых необходимо запретить доступ. Например,
location / {
   deny 1.2.3.4;
   deny 5.6.7.0/25;
 }
В этом примере, для 1.2.3.4 и 5.6.7.0/25 доступ к сайту будет запрещен.

Как разрешить доступ к каталогу сайта только с определенных IP

Например, на сайте установлен phpMyAdmin — веб-приложение для администрирования СУБД MySQL, которая доступна по пути /phpMyAdmin. Чтобы не дать возможность злоумешленникам использовать вдруг обнаруженную уязвимость, целесообразно ограничить доступ к каталогу сайта /phpMyAdmin только определенным IP-адресам администраторов. В этом случае, раздел конфигурации location может выглядеть так:
location /phpMyAdmin  {
   allow 9.8.7.6;
   allow 2.3.4.5/28;
   deny all;
 }
 В примере, IP адрес 9.8.7.6 и сеть 2.3.4.5/28 - это адреса только для которых будет разрешен доступ к /phpMyAdmin.

Применение настроек nginx без перезагрузки

Чтобы послать сигнал веб серверу Nginx перечитать и применить актуальную конфигурацию, достаточно в консоли выполнить команду:
nginx -s reload
После выполнения этой команды, новый файл конфигурации будет применен, без перезапуска сервера, при условии, что новый файл конфигурации не содержить ошибок, в этом случае новый файл конфигурации не будет применен, подробнее описано в статье: ​Как применить обновление конфигурации Nginx без перезапуска сервера?​​​

Комментарии:
Прокомментировать
При использовании материалов ссылка на сайт UserMan.ru обязательна.
UserMan.ru © 2017-2021
Мы в Соцсетях: VK