# HAProxy — периметровый reverse-proxy для kalinamall.ru # Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты GlobalSign wildcard на бэкендах) # # Проверка синтаксиса: haproxy -c -f haproxy.cfg # Установка: скопируйте в /etc/haproxy/haproxy.cfg и подставьте пути к trusted/*.lst 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.kalinamall.ru # Бэкенды: Exchange, RDS, 1С (см. 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 # tcp-request обрабатываются до use_backend — reject ставим ДО use_backend, иначе предупреждение парсера tcp-request content reject if !sni_known # 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 } 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 # ----------------------------------------------------------------------------- # 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 # ----------------------------------------------------------------------------- # RDP (3389): itis.b26.kalinamall.ru → 192.168.160.198 # Доступ только с адресов из trusted/rdp.lst (одна сеть или IP на строку) # ----------------------------------------------------------------------------- frontend fe_rdp bind *:3389 acl trusted_rdp src -f /etc/haproxy/trusted/rdp.lst tcp-request connection reject if !trusted_rdp default_backend be_rdp backend be_rdp server itis 192.168.160.198:3389 # ----------------------------------------------------------------------------- # Опционально: статистика (раскомментируйте и задайте пароль) # ----------------------------------------------------------------------------- # frontend fe_stats # bind *:8404 # mode http # stats enable # stats uri /stats # stats refresh 10s # stats auth admin:CHANGEME