# HAProxy — периметровый reverse-proxy для kalinamall.ru # Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты GlobalSign wildcard на бэкендах) # # Проверка синтаксиса: haproxy -c -f haproxy.cfg # Установка: скопируйте в /etc/haproxy/haproxy.cfg global log stdout format raw local0 maxconn 50000 # Раскомментируйте на Linux с syslog: # log /dev/log local0 defaults log global mode tcp option dontlognull option tcplog timeout connect 10s timeout client 3600s timeout server 3600s # Для ActiveSync / больших вложений Exchange при необходимости увеличьте client/server # ----------------------------------------------------------------------------- # HTTPS (443): маршрутизация по SNI → внутренние серверы с wildcard на 443 # Клиенты: ext, autodiscover (Exchange) / rds / erp / git.kalinamall.ru (Git — только с allowlist IP) # Бэкенды: Exchange, RDS, 1С, Git (см. README) # Пути URL ( /owa, /ecp, /ews/, /mapi/ … ) HAProxy не разбирает — они внутри TLS; достаточно SNI ext.kalinamall.ru # ----------------------------------------------------------------------------- frontend fe_https_sni bind *:443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } # SNI должен быть из списка (несколько acl с одним именем — логическое ИЛИ) acl sni_known req_ssl_sni -i ext.kalinamall.ru acl sni_known req_ssl_sni -i autodiscover.kalinamall.ru acl sni_known req_ssl_sni -i rds.kalinamall.ru acl sni_known req_ssl_sni -i erp.kalinamall.ru acl sni_known req_ssl_sni -i git.kalinamall.ru # Git (git.kalinamall.ru → 192.168.160.129): снаружи только с перечисленных IP; на бэкенде свой TLS-сертификат acl sni_git req_ssl_sni -i git.kalinamall.ru acl src_git_allowed src 5.100.81.121 # tcp-request обрабатываются до use_backend — reject ставим ДО use_backend, иначе предупреждение парсера tcp-request content reject if !sni_known tcp-request content reject if sni_git !src_git_allowed # OWA: https://ext.kalinamall.ru/owa — тот же поток, отдельное правило не требуется use_backend be_exchange if { req_ssl_sni -i ext.kalinamall.ru } use_backend be_exchange if { req_ssl_sni -i autodiscover.kalinamall.ru } use_backend be_rds if { req_ssl_sni -i rds.kalinamall.ru } use_backend be_erp if { req_ssl_sni -i erp.kalinamall.ru } use_backend be_git if { req_ssl_sni -i git.kalinamall.ru } backend be_exchange # fifth.kalinamall.ru (192.168.160.42) — внешние имена HTTPS: ext.kalinamall.ru, autodiscover.kalinamall.ru server exch 192.168.160.42:443 check ssl verify none backend be_rds # k6a-dc3.b26.kalinamall.ru (192.168.160.40) — RDS слушает TLS на 4430; снаружи клиенты идут на rds.kalinamall.ru:443 server rds 192.168.160.40:4430 check ssl verify none backend be_erp # hp-serv.b26.kalinamall.ru (192.168.160.150) server erp 192.168.160.150:443 check ssl verify none backend be_git # git.kalinamall.ru (192.168.160.129) — внешнее имя совпадает; TLS-сертификат выдаёт сам Git-сервер server git 192.168.160.129:443 check ssl verify none # ----------------------------------------------------------------------------- # SMTP (25): почтовый шлюз KSMG # Внешнее имя: ksmg.kalinamall.ru # ----------------------------------------------------------------------------- frontend fe_smtp bind *:25 default_backend be_ksmg_smtp backend be_ksmg_smtp server ksmg 192.168.160.57:25 check # ----------------------------------------------------------------------------- # Опционально: статистика (раскомментируйте и задайте пароль) # ----------------------------------------------------------------------------- # frontend fe_stats # bind *:8404 # mode http # stats enable # stats uri /stats # stats refresh 10s # stats auth admin:CHANGEME