Сервер Nginx: Как ограничить доступ к сайту по IP адресам
Один из способов уменьшение вектора атаки на веб сайт, это ограничение доступа к служебным страницам по 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
После выполнения этой команды, новый файл конфигурации будет применен, без перезапуска сервера, при условии, что новый файл конфигурации не содержит ошибок