SCROLL
Среднее время на прочтение: 1 мин.

Как запретить прямой IP-доступ к веб-серверу Nginx

Nginx по умолчанию не блокирует доступ к вашему веб-серверу, если он осуществляется напрямую по IP-адресу вашего сервера. Рассмотрим как можно изменить это поведение, чтобы запретить прямой IP-доступ.

Если оставить прямой доступ по IP-адресу, то это может привести к нежелательному доступу со стороны поисковых ботов и сторонних доменов. Чтобы ограничить доступ и принимать запросы только для разрешённых доменов, нужно выполнить соответствующую настройку виртуального хоста.

Создайте конфигурацию заглушки

Откройте файл /etc/nginx/sites-available/default (или создайте новый) и добавьте для протокола HTTP следующий блок:

/etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    
    return 444;
}

Для HTTPS добавьте аналогичный блок:

/etc/nginx/sites-available/default
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;    
    server_name _;
    ssl_reject_handshake on;
    
    return 444;
}
В Nginx 1.19.4 была добавлена директива ssl_reject_handshake on;, которая позволяет отклонять TLS-запросы, если они не соответствуют заданному доменному имени.

В случае если используется версия Nginx старше 1.19.4, то вам необходимо будет создать самоподписанный SSL-сертификат и использовать его в конфигурации заглушки.

Генерируем самоподписной сертификат:

openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/default.key -x509 -days 3650 -out /etc/ssl/default.pem -subj "/CN=nginx" -addext "subjectAltName=DNS:nginx" -addext "basicConstraints=CA:FALSE" -addext "subjectKeyIdentifier=hash"

На выходе получим файлы:

  • /etc/ssl/default.key
  • /etc/ssl/default.pem

Для HTTPS блок описания будет выглядеть следующим образом:

/etc/nginx/sites-available/default
server {
  listen 443 default_server;
  listen [::]:443 default_server;
  ssl_certificate /etc/ssl/default.pem;
  ssl_certificate_key /etc/ssl/default.key;
  server_name _;
  
  return 444;
}

Примените изменения

Перезапустите Nginx:

systemctl restart nginx

Теперь сервер будет игнорировать запросы, поступающие напрямую на его IP-адрес, возвращая код 444 (разрыв соединения). Это повысит безопасность и исключит нежелательный трафик.

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.