IP-адрес клиента за обратным прокси-сервером Nginx

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

Я использую обратный прокси nginx, чтобы иметь возможность запускать несколько серверов за своим файерволом. Я заметил, что на моем почтовом сервере (Kerio) журнал ошибок заполнен записями “неудачный вход с < локальный IP nginx >”, и мне было интересно, как я могу настроить это так, чтобы получать удаленный IP человека/бота, который пытается войти, чтобы я мог использовать эту информацию для автоматической блокировки этих адресов (например)?

Это моя текущая конфигурация:

server {
    listen 8443 ssl http2;
    server_name mail.domain.com;

    location / {
        proxy_set_header Host $host;
        proxy_pass https://<internal ip>/;
        client_max_body_size 0;
        proxy_connect_timeout 3600;
        proxy_send_timeout 3600;
        proxy_read_timeout 3600;
        send_timeout 3600;
    }
}

Добавление следующих строк приводит к тому же результату:

proxy_set_header   X-Real-IP          $remote_addr;
proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;

X-Forwarded-For — это функция, которая вам нужна, и она добавит HTTP-заголовок, содержащий оригинальный IP-адрес клиента. Судя по вашему описанию, приложение Kerio игнорирует это и просто использует исходный IP (который является nginx) в журналах. Возможно, есть опция, позволяющая проанализировать и использовать это, которую можно настроить в приложении.

Я только что узнал, что мой почтовый сервер (Kerio) ничего не делает с информацией, переданной обратным прокси, так что единственное, что я могу сделать, это надеяться на обновление, которое что-то с этим сделает.

Вы смогли решить эту проблему?

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

Как получить IP-адрес клиента за Nginx обратным прокси

Если вы используете Nginx в качестве обратного прокси для нескольких серверов и сталкиваетесь с проблемой определения реального IP-адреса клиента на вашем сервере (например, Kerio), важно понимать, как правильно настроить заголовки, передаваемые Nginx, чтобы ваш сервер мог корректно обрабатывать эту информацию.

Проблема

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

Решение

Чтобы передать реальный IP-адрес клиента через Nginx, необходимо выполнить несколько шагов:

  1. Обновите конфигурацию Nginx: Вы уже сделали шаг в правильном направлении, добавив заголовки X-Real-IP и X-Forwarded-For. Однако их необходимо правильно настроить и убедиться, что они верно обрабатываются на вашем сервере.

    Вот как должна выглядеть ваша конфигурация:

    server {
       listen 8443 ssl http2;
       server_name mail.domain.com;
    
       location / {
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;  # Отправляем реальный IP клиента
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # Отправляем дополнительные IP адреса
           proxy_pass https://<internal ip>/;
           client_max_body_size 0;
           proxy_connect_timeout 3600;
           proxy_send_timeout 3600;
           proxy_read_timeout 3600;
           send_timeout 3600;
       }
    }
  2. Настройка Kerio для использования заголовков: Вы отметили, что Kerio не использует заголовки, установленные Nginx. Вы можете быть ограничены в своем решении, если ваше приложение (в данном случае Kerio) не поддерживает возможность обработки этих заголовков. В этом случае вам следует обратиться к документации Kerio или в службу поддержки, чтобы выяснить, есть ли возможность конфигурации, позволяющая игнорировать IP-адрес отправителя и использовать переданные заголовки.

  3. Проверка журналов: После применения изменений вам следует протестировать систему, проверяя журналы на предмет того, получает ли Kerio правильный IP-адрес клиента. Убедитесь, что у вас включено детализированное ведение журналов, чтобы вам было проще выявлять возможные проблемы.

  4. Ответ на обновления: Если Kerio не поддерживает данный функционал, вы можете рассмотреть возможность поиска альтернативных решений или приложений, которые позволяют использовать заголовки X-Real-IP и X-Forwarded-For. Постоянно проверяйте обновления от Kerio, так как они могут ввести поддержку этого функционала в будущих версиях.

Заключение

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

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

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