Иногда вам может понадобиться заблокировать IP-адреса, чтобы защитить свой сайт от вредоносных атак, таких как DOS и DDOS. Вот как легко заблокировать IP-адрес в NGINX, чтобы ограничить IP-адреса или заблокировать доступ. Вы можете использовать эти шаги для блокировки/разрешения IP-адресов в NGINX.
Как заблокировать IP-адрес в NGINX
Здесь описаны шаги по блокировке IP-адресов в NGINX.
Вы можете легко заблокировать IP-адреса, подсети и диапазоны IP-адресов с помощью директивы deny. Аналогично, вы можете разрешить IP-адреса, подсети и диапазоны IP-адресов с помощью директивы allow. Директивы deny и allow можно размещать в контексте http, сервера или местоположения. Можно даже использовать комбинацию директив deny и allow.
Мы рассмотрим каждый из этих вариантов использования отдельно.
Откройте файл конфигурации NGINX
Если вы используете основной конфигурационный файл NGINX nginx.conf без виртуальных хостов, то выполните следующую команду
1 | sudo nano /etc/nginx/nginx.conf |
Если вы настроили отдельные виртуальные хосты для вашего сайта (например, www.website.com), например, /etc/nginx/sites-enabled/website.conf, то откройте его конфигурацию следующей командой
1 | sudo nano /etc/nginx/sites-enabled/website.conf |
Блокировка IP-адреса в NGINX
Существует несколько способов заблокировать IP-адрес в NGINX. Мы рассмотрим каждый из них. Если вы хотите заблокировать IP-адрес 45.43.23.21 для домена или всего вашего сайта, вы можете добавить следующие строки в файл конфигурации.
1 | deny 12.34.56.21; |
Приведенные выше строки заставят NGINX запретить IP 12.34.56.21.
Блокировка IP-адреса в NGINX для веб-сайта или домена
Добавьте приведенные выше строки в любой из блоков http, server или location /, как показано ниже
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | http{ ... deny 12.43.23.21; ... } server{ ... deny 12.43.23.21; ... } location / { deny 12.43.23.21; } |
Блокировка IP-адреса в NGINX для субдомена
Допустим, у вас есть два поддомена (blog.website.com и articles.website.com) с их конфигурационными файлами NGINX по адресам /etc/nginx/sites-enabled/blog.conf и /etc/nginx/sites-enabled/articles.conf.
Если вы хотите заблокировать IP-адрес в NGINX только для 1 поддомена (например, blog.website.com), поместите вышеупомянутую строку в файл blog.conf этого поддомена
1 | sudo nano /etc/nginx/sites-enabled/blog.conf |
1 2 3 4 | server { server website.com; deny 12.43.23.21; } |
Если вы хотите заблокировать IP-адреса в обоих поддоменах, то добавьте строку в файлы blog.conf и articles.conf.
Блокировка диапазона IP-адресов в NGINX
Если вы хотите разрешить диапазон IP-адресов, например 45.43.23.0 - 45.43.23.255, то используйте формат CIDR для вашего диапазона IP-адресов, поскольку NGINX принимает только IP-адреса и форматы CIDR. Вы можете получить CIDR для вашего диапазона IP-адресов с помощью инструментов преобразования IP в CIDR.
1 2 3 | location / { deny 12.43.23.0/24; } |
Блокировка IP-адреса в NGINX для URL
Если вы хотите заблокировать IP-адрес только для одного URL (например, /accounts/login), добавьте приведенную выше директиву deny в блок location этого URL.
1 2 3 | location /accounts/login { deny 12.43.23.21; } |
Блокировка нескольких IP-адресов в NGINX
Если вы хотите заблокировать несколько IP-адресов в NGINX, чтобы ограничить доступ к нескольким IP-адресам, просто добавьте несколько директив deny, как показано ниже, по одной на каждый IP
1 2 3 | deny 12.43.23.21; deny 13.23.13.10; allow all; |
Приведенный выше код заблокирует IP-адреса 45.43.23.21 и 44.23.13.10 и разрешит другие.
Вы также можете объединить диапазоны IP-адресов и CIDR, как показано ниже
1 2 3 | deny 44.23.13.10; deny 45.43.23.0/24; allow all; |
Перезапустите NGINX
Наконец, выполните следующую команду, чтобы проверить синтаксис обновленного файла конфигурации.
1 | sudo nginx -t |
Если ошибок нет, выполните следующую команду для перезапуска сервера NGINX.
1 | sudo service nginx reload |
или
1 | systemctl restart nginx |
Вот и все! Теперь NGINX будет блокировать доступ к тем IP-адресам и диапазонам, которые указаны в вашем конфигурационном файле.