Как разрешить/ограничить доступ по IP-адресу в NGINX

Для обеспечения безопасности и лучшего контроля веб-доступа в 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

Ниже приведен результат выполнения вышеуказанной команды.

Поделитесь с друзьями

Добавить комментарий

0 комментариев
Новіші
Старіші Найпопулярніші
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x