# HAProxy — периметровый reverse-proxy для kalinamall.ru # Режим: TCP + SNI на 443 (TLS end-to-end; на бэкендах — сертификаты GlobalSign wildcard *.kalinamall.ru, # в том числе на узле Gitea для git.kalinamall.ru). # # Добавлено к боевому периметру: SNI git.kalinamall.ru → 192.168.160.129:443; # Git по SSH: внешний порт 2222 → 192.168.160.129:2222 (порт SSH Gitea на хосте). # # Проверка синтаксиса: haproxy -c -f /etc/haproxy/haproxy.cfg # Установка: скопируйте в /etc/haproxy/haproxy.cfg (или подключите через include). # # stats: задайте свой пароль на сервере; значение ниже — заглушка для репозитория. 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 → внутренние серверы с TLS на бэкендах # Клиенты: ext, autodiscover (Exchange) / rds / erp / git.kalinamall.ru (Gitea) # Пути 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 # 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 } use_backend be_gitea 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_gitea # Gitea должен принимать HTTPS на :443 на этом IP (сертификат *.kalinamall.ru на узле Gitea или перед ним). # Если Gitea пока только HTTP :3000 — опубликуйте TLS на 443 отдельно или смените порт бэкенда и режим публикации. server gitea 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 # ----------------------------------------------------------------------------- # Git SSH: внешний 2222 → Gitea SSH на 192.168.160.129:2222 # ----------------------------------------------------------------------------- frontend fe_git_ssh bind *:2222 mode tcp option tcplog default_backend be_git_ssh backend be_git_ssh mode tcp server gitea_ssh 192.168.160.129:2222 check inter 10s rise 2 fall 3 # ----------------------------------------------------------------------------- # Опционально: статистика (задайте пароль на сервере) # ----------------------------------------------------------------------------- frontend fe_stats bind *:8404 mode http stats enable stats uri /stats stats refresh 10s stats auth admin:CHANGEME_STATS_PASSWORD