Почтовый сервер не может получить реальный IP-адрес клиента через прокси.

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

От публичного IP клиента xxx.xxx.xxx.xxx —> (91.91.91.91 Италия) —> (OPNsense 101.101.101.101 Германия) —> 192.168.10.39 (сервер электронной почты OPNsense lan)

Я пробую:

auth_trusted_networks = 0.0.0.0/0
login_trusted_networks = 0.0.0.0/0
haproxy_trusted_networks = 0.0.0.0/0

  1. openvpn

  2. Haproxy

    inet_listener pop3 {
    address = *
    port = 110
    haproxy = yes но proxy_protocol = yes не работает, не знаю почему. }

    frontend pop3_frontend bind *:110 default_backend pop3_backend
    backend pop3_backend server server1 101.101.101.101 send-proxy check

  3. Nginx

     stream {
     server {
         listen 100; 
         set_real_ip_from 0.0.0.0/0;
         proxy_pass 101.101.101.101; 
     }
    

    }

  4. IPTABLES POSTROUTING, PREROUTING

  5. SOCAT

С каждым вариантом я пробовал разные настройки. Здесь все не описано.

ВСЕ РАБОТАЕТ, НО НЕ МОГУ ОТПРАВИТЬ РЕАЛЬНЫЙ ПУБЛИЧНЫЙ IP КЛИЕНТА.

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

Проблема с определением реального IP клиента для почтового сервера через прокси

Проблема, с которой вы столкнулись, связана с невозможностью передачи реального IP-адреса клиента к вашему почтовому серверу, который расположен внутри локальной сети (192.168.10.39), через прокси-сервер. Давайте подробно разберёмся в этом вопросе.

Структура сети

  1. Клиент — публичный IP xxx.xxx.xxx.xxx.
  2. Прокси-сервер в Италии — IP 91.91.91.91.
  3. OPNsense в Германии — IP 101.101.101.101.
  4. Локальный почтовый сервер — IP 192.168.10.39.

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

Настройки, которые были применены

  1. Настройки доверенных сетей:

    auth_trusted_networks = 0.0.0.0/0
    login_trusted_networks = 0.0.0.0/0
    haproxy_trusted_networks = 0.0.0.0/0
  2. Настройки HAProxy:

    inet_listener pop3 {
        address = *
        port = 110
        haproxy = yes 
        proxy_protocol = yes
    }
    
    frontend pop3_frontend 
        bind *:110 
        default_backend pop3_backend
    
    backend pop3_backend 
        server server1 101.101.101.101 send-proxy check
  3. Настройки Nginx:

    stream {
        server {
            listen 100; 
            set_real_ip_from 0.0.0.0/0;
            proxy_pass 101.101.101.101; 
        }
    }
  4. Настройки iptables:

    • Вы делали настройки в POSTROUTING и PREROUTING для обработки ingress и egress трафика.
  5. Использование SOCAT:

    • Ваша реализация с помощью Socat также не привела к желаемому результату.

Анализ проблемы

Основная причина, по которой реальный IP клиента не передаётся на почтовый сервер, может заключаться в нескольких факторах:

  1. Необходимость использования proxy_protocol:
    Убедитесь, что все компоненты вашего сетевого стека (HAProxy и любой прокси-сервер) корректно обрабатывают PROXY заголовок. Проверьте, поддерживает ли ваш почтовый сервер этот заголовок.

  2. Настройки Nginx и HAProxy:
    Убедитесь, что Nginx и HAProxy настроены друг с другом, и запросы корректно маршрутизируются. Это можно проверить с помощью журналов.

  3. iptable настройки:
    Подумайте о возможных конфликтах в правилах iptables, которые могут блокировать или не пропускать PROXY заголовки. Убедитесь, что трафик с нестандартными заголовками корректно обрабатывается.

Рекомендации

  1. Проверка настроек HAProxy:

    • Проверьте, что proxy_protocol действительно включён и работает. Возможно, вам потребуется рассмотреть вариант с использованием tcp-mode, если у вас есть проблемы с заголовками.
  2. Обновление почтового сервера:

    • Если ваш почтовый сервер не поддерживает proxy_protocol, подумайте о его обновлении или настройке, чтобы он мог правильно обрабатывать заголовки с X-Forwarded-For.
  3. Тестирование и отладка:

    • Убедитесь в корректности настройки OpenVPN, если он используется.
    • Используйте средства отладки, такие как tcpdump или Wireshark, для анализа пакетов и выяснения, как заголовки передаются между узлами.

Заключение

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

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

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