nginx: ограничить доступ проксированных IP-адресов?

Вопрос или проблема

Мы используем прокси Cloudflare, поэтому реальный IP скрыт. Но если вы узнаете реальный IP, вы все равно можете получить доступ к сайту, используя его. Существует ли способ ограничить доступ по этому IP?

Я имею в виду:


по домену: https://some-domain.com -> ОК
по прокси IP: https://1.2.3.4 -> ОК
по реальному IP: https://5.6.7.8 -> ограничить.

Или нет смысла пытаться это ограничивать?

Пример блоков сервера nginx.conf:

    server {
        listen 80 default_server;
        server_name some-domain.com;
        return 301 https://$host$request_uri;
    }
    charset utf-8;
    server {
        server_name some-domain.com;
        listen 443 ssl http2;
        ...
        ...
    }

Ответ или решение

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

Стратегия ограничения доступа через Nginx

  1. Обновление конфигурации сервера:

    В вашем конфигурационном файле Nginx вы можете добавить директивы для фильтрации доступа исходя из IP-адреса. Используйте $remote_addr для проверки IP-адреса клиента:

    server {
       listen 80;
       server_name some-domain.com;
       if ($remote_addr = 5.6.7.8) {
           return 403;
       }
       return 301 https://$host$request_uri;
    }
    
    server {
       listen 443 ssl http2;
       server_name some-domain.com;
       if ($remote_addr = 5.6.7.8) {
           return 403;
       }
       # дальнейшие конфигурации...
    }
  2. Проверка заголовков Cloudflare:

    Так как Cloudflare работает как прокси, он добавляет специфичные заголовки, такие как CF-Connecting-IP, которые можно использовать для проверки реального IP-адреса пользователя. Вы можете ограничить доступ на основе этого заголовка:

    map $http_cf_connecting_ip $real_ip {
       default $http_cf_connecting_ip;
    }
    
    server {
       listen 443 ssl http2;
       server_name some-domain.com;
       if ($real_ip = 5.6.7.8) {
           return 403;
       }
       # настройка продолжения...
    }

    Исследуйте и используйте директиву http_realip_module для обработки истинного IP через заголовки Cloudflare:

    http {
       real_ip_header CF-Connecting-IP;
       set_real_ip_from 0.0.0.0/0;
       # другие настройки...
    }
  3. Настройка Firewall:

    Ограничьте доступ на уровне firewall, используя доступные инструменты на вашем сервере, такие как iptables на Linux. Это позволит ограничить прямые соединения к вашему реальному IP и оставит доступ только через Cloudflare, блокируя все прямые входящие подключения, не прошедшие через Cloudflare.

  4. Регулярное обновление настраиваемых IP Cloudflare:

    Периодически проверяйте и обновляйте разрешенные IP-адреса Cloudflare, поскольку они могут меняться. Это поможет убедиться, что все легитимные запросы проходят только через Cloudflare.

Заключение

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

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

Капча загружается...