Вопрос или проблема
От публичного 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
-
openvpn
-
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 -
Nginx
stream { server { listen 100; set_real_ip_from 0.0.0.0/0; proxy_pass 101.101.101.101; }
}
-
IPTABLES POSTROUTING, PREROUTING
-
SOCAT
С каждым вариантом я пробовал разные настройки. Здесь все не описано.
ВСЕ РАБОТАЕТ, НО НЕ МОГУ ОТПРАВИТЬ РЕАЛЬНЫЙ ПУБЛИЧНЫЙ IP КЛИЕНТА.
Ответ или решение
Проблема с определением реального IP клиента для почтового сервера через прокси
Проблема, с которой вы столкнулись, связана с невозможностью передачи реального IP-адреса клиента к вашему почтовому серверу, который расположен внутри локальной сети (192.168.10.39), через прокси-сервер. Давайте подробно разберёмся в этом вопросе.
Структура сети
- Клиент — публичный IP xxx.xxx.xxx.xxx.
- Прокси-сервер в Италии — IP 91.91.91.91.
- OPNsense в Германии — IP 101.101.101.101.
- Локальный почтовый сервер — IP 192.168.10.39.
Таким образом, запросы от клиента проходят через несколько промежуточных узлов, прежде чем дойти до вашего почтового сервера.
Настройки, которые были применены
-
Настройки доверенных сетей:
auth_trusted_networks = 0.0.0.0/0 login_trusted_networks = 0.0.0.0/0 haproxy_trusted_networks = 0.0.0.0/0
-
Настройки 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
-
Настройки Nginx:
stream { server { listen 100; set_real_ip_from 0.0.0.0/0; proxy_pass 101.101.101.101; } }
-
Настройки iptables:
- Вы делали настройки в POSTROUTING и PREROUTING для обработки ingress и egress трафика.
-
Использование SOCAT:
- Ваша реализация с помощью Socat также не привела к желаемому результату.
Анализ проблемы
Основная причина, по которой реальный IP клиента не передаётся на почтовый сервер, может заключаться в нескольких факторах:
-
Необходимость использования
proxy_protocol
:
Убедитесь, что все компоненты вашего сетевого стека (HAProxy и любой прокси-сервер) корректно обрабатываютPROXY
заголовок. Проверьте, поддерживает ли ваш почтовый сервер этот заголовок. -
Настройки Nginx и HAProxy:
Убедитесь, что Nginx и HAProxy настроены друг с другом, и запросы корректно маршрутизируются. Это можно проверить с помощью журналов. -
iptable настройки:
Подумайте о возможных конфликтах в правилах iptables, которые могут блокировать или не пропускатьPROXY
заголовки. Убедитесь, что трафик с нестандартными заголовками корректно обрабатывается.
Рекомендации
-
Проверка настроек HAProxy:
- Проверьте, что
proxy_protocol
действительно включён и работает. Возможно, вам потребуется рассмотреть вариант с использованиемtcp-mode
, если у вас есть проблемы с заголовками.
- Проверьте, что
-
Обновление почтового сервера:
- Если ваш почтовый сервер не поддерживает
proxy_protocol
, подумайте о его обновлении или настройке, чтобы он мог правильно обрабатывать заголовки сX-Forwarded-For
.
- Если ваш почтовый сервер не поддерживает
-
Тестирование и отладка:
- Убедитесь в корректности настройки OpenVPN, если он используется.
- Используйте средства отладки, такие как
tcpdump
илиWireshark
, для анализа пакетов и выяснения, как заголовки передаются между узлами.
Заключение
Используйте описанные выше методы для устранения проблемы с передачей реального IP клиента. Проведение тестов и анализ логов позволит идентифицировать узкие места, что должно помочь в настройке сбора реальных IP-адресов в среде, имеющей несколько уровней проксирования.