Для обеспечения безопасности и лучшего контроля веб-доступа в NGINX вы можете разрешить и ограничить определенные IP-адреса, диапазоны, поддомены и URL-адреса в конфигурации NGINX.
Веб-сервер NGINX предоставляет вам ряд конфигураций для обеспечения безопасности вашего веб-сервера, веб-приложения и т.д.
В том числе контроль доступа пользователей на основе IP-адреса.
Вы можете легко разрешить/белый список IP-адресов и запретить/ограничить/черный список IP-адресов в NGINX на основе IP-адреса, диапазона IP-адресов, поддомена и URL из файла конфигурации.
В этом руководстве вы узнаете, как разрешить или ограничить определенный IP-адрес или диапазон IP-адресов, поддоменов и URL-адресов в веб-сервере NGINX.
Причина разрешения/ограничения доступа по IP-адресу
Может быть множество причин для разрешения и ограничения доступа по IP-адресу.
И одна из причин, которая сейчас крутится у меня в голове, заключается в том, что если вы планируете создать точку доступа API для разработчиков, вы можете разрешить определенному IP-адресу или ряду IP-адресов иметь доступ к точке API.
Другими вариантами использования могут быть ограничение доступа к URL-адресу администратора или внесение ряда IP-адресов в черный список для предотвращения атак на веб-приложения, таких как DDOS.
Как разрешить/ограничить доступ по IP-адресу в NGINX
Разрешение или ограничение доступа пользователей к веб-приложению требует указания IP-адресов в директивах allow и deny.
Директива allow разрешает доступ к указанному IP-адресу, сети или сокету UNIX, а директива deny запрещает доступ к указанному IP-адресу, сети или сокету UNIX.
Обе директивы могут быть настроены в конфигурационном файле NGINX в зависимости от дистрибутива. В моем случае я использую последние выпуски дистрибутива Ubuntu и Fedora в качестве альтернативы.
Шаг 1. Откройте файл конфигурации NGINX
Если вы используете стандартную конфигурацию NGINX без виртуального хоста, то выполните следующую команду в терминале:
$ sudo nano /etc/nginx/nginx.conf
Если у вас есть отдельный файл конфигурации или ваш дистрибутив размещает конфигурацию в /etc/nginx/sites-enabled/default, то откройте его конфигурацию следующей командой:
$ sudo nano /etc/nginx/sites-enabled/default
Шаг 2: Разрешение или запрещение IP-адреса
Существует несколько способов разрешить или запретить доступ к веб-приложению на основе IP-адреса, как показано ниже.
- Разрешение или запрещение IP-адресов в NGINX для домена
- Разрешение или запрещение IP-адресов в NGINX для субдоменов
- Разрешение или запрещение диапазона IP-адресов в NGINX
- Разрешение или запрещение IP-адресов в NGINX для URL-адресов
- Разрешение или запрещение нескольких IP-адресов в NGINX
Для этого обратите внимание на IP-адрес, который вам нужно разрешить или запретить, и определите его в директивах NGINX. Ниже приведены возможные примеры, которые могут понадобиться вам при изменении конфигурационного файла.
allow 192.168.108.252; # Only Allow 192.168.108.252 IP Address
deny 192.168.108.153; # Only Deny 192.168.108.153 IP Address
##################################################################
allow all; # Allow All IP Address
deny all; # Deny All IP Address
##################################################################
allow 192.168.108.0/24; # Allow IPs range from 192.168.108.0 to 192.168.108.255
deny 192.168.108.0/24; # Deny IPs range from 192.168.108.0 to 192.168.108.255
Приведенные выше директивы будут использоваться для контроля доступа пользователей на основе IP-адреса или диапазона IP-адресов, определенных в конфигурационном файле NGINX.
Разрешение или запрещение IP-адресов в NGINX для домена
Теперь мы разрешим доступ к IP-адресу 192.168.108.252 и запретим все запросы со всех IP-адресов для всего нашего домена, используя приведенную ниже директиву.
allow 192.168.108.252;
deny all;
Поместите вышеуказанные директивы в середину блока server в файле конфигурации NGINX, как показано ниже.
Если вы хотите разрешить все IP-адреса и запретить 192.168.108.252, то добавьте следующие директивы в конфигурационный файл NGINX.
allow all;
deny 192.168.108.252;
Наконец, вы можете перезагрузить веб-сервер NGINX, чтобы применить изменения.
Разрешение или запрещение IP-адресов в NGINX для поддоменов
Ситуация меняется, когда у вас есть два поддомена для вашего сайта.
Например, blog.example.com и shop.example.com с их конфигурационными файлами в /etc/nginx/sites-enabled/blog.conf и /etc/nginx/sites-enabled/shop.conf, и вы хотите разрешить доступ к IP-адресу 192.168.108.252 и запретить все запросы со всех IP-адресов для вашего поддомена blog.example.com.
Для этого вам нужно открыть конфигурационный файл blog.conf и поместить следующие директивы в блок server.
allow 192.168.108.252;
deny all;
Ниже приведен результат вышеуказанных изменений.
Если вы хотите применить изменения к обоим поддоменам, отредактируйте конфигурационные файлы blog.conf и shop.conf для обоих поддоменов и добавьте директивы, упомянутые ранее.
Наконец, вы можете перезагрузить веб-сервер NGINX, чтобы применить изменения.
Разрешение или запрещение диапазона IP-адресов в NGINX
Если вы хотите разрешить диапазон IP-адресов от 192.168.108.0 до 192.168.108.255 и запретить все остальные IP-адреса, то вы можете использовать формат CIDR для диапазона IP-адресов.
Вы можете проверить инструменты IP to CIDR, чтобы найти формат CIDR для определенного диапазона IP-адресов.
Как только вы узнаете формат CIDR для вашего диапазона IP-адресов, в моем случае это будет 192.168.108.0/24, чтобы разрешить IP-адреса от 192.168.108.0 до 192.168.108.255 и запретить все остальные IP-адреса, вы можете определить его в директиве, как показано ниже.
allow 192.168.108.0/24;
deny all;
Добавьте вышеуказанные директивы в блок server в конфигурационном файле NGINX, как показано ниже.
Если вы хотите запретить диапазон IP-адресов от 192.168.108.0 до 192.168.108.255 и разрешить все остальные, используйте следующие директивы.
allow all;
deny 192.168.108.0/24;
Наконец, вы можете перезагрузить веб-сервер NGINX, чтобы применить изменения.
Разрешение или запрещение IP-адреса в NGINX для URL-адреса
Если у вас есть URL example.com/api на вашем сайте для разработки и вы хотите разрешить доступ только к определенному IP-адресу.
Например, если я хочу разрешить доступ к IP-адресу 192.168.108.252 и запретить все запросы со всех IP-адресов для URL /api, то вы можете создать новое местоположение для URL /api и добавить блок местоположения в конфигурационный файл NGINX.
location /api {
allow 192.168.108.252;
deny all;
}
Ниже приведен результат вышеуказанных изменений.
Приведенные выше изменения ограничат доступ к URL /api, а не ко всему сайту. Другой пример — если у вас есть URL /admin, который обычным пользователям не нужно вводить.
Вы можете создать новое местоположение для URL /admin и добавить блок местоположения в конфигурационный файл NGINX.
location /admin {
allow 192.168.108.252;
deny all;
}
Ниже приведен результат вышеуказанных изменений.
Наконец, вы можете перезагрузить веб-сервер NGINX, чтобы применить изменения.
Разрешение или запрет доступа к нескольким IP-адресам в NGINX
Если вы хотите разрешить доступ к нескольким IP-адресам и запретить доступ ко всем остальным адресам, то вы можете указать оба IP-адреса в двух отдельных директивах allow, как показано ниже.
allow 192.168.108.153;
allow 192.168.108.252;
deny all;
Он будет разрешать доступ только к 192.168.108.153 и 192.168.108.252 и запрещать доступ к остальным IP-адресам. Теперь добавьте его в блок сервера или блок местоположения для определенного URL, как показано ниже.
Наконец, вы можете перезагрузить веб-сервер NGINX, чтобы применить изменения.
Шаг 3: Перезапустите NGINX и проверьте журнал
Выполните следующую команду, чтобы убедиться, что конфигурация обновлена без ошибок:
$ sudo nginx -t
Если ошибок нет, то выполните следующую команду для перезагрузки сервера NGINX:
$ sudo systemctl reload nginx
Вы можете проверить файл /var/log/nginx/error.log, чтобы найти записи о входящих и исходящих соединениях, чтобы убедиться, что ограничение и разрешение работают правильно, как показано ниже.
$ sudo cat /var/log/nginx/error.log debug
Ниже приведен результат выполнения вышеуказанной команды.