Для забезпечення безпеки та кращого контролю веб-доступу в 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
Нижче наведено результат виконання вищевказаної команди.