Як дозволити/обмежити доступ за 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