Исправлен синтаксис !(host_ext path_autodiscover) и порядок http-request/use_backend. Скрипт deploy сохраняет stats auth с сервера.
reverse-proxy
Периметровая конфигурация HAProxy для сети kalinamall.ru: Exchange, RDS (веб/шлюз по HTTPS), 1С, Git, SAC, почтовый шлюз KSMG. Прямой RDP (3389) через HAProxy не используется — клиенты идут через RDS на 443 (rds.kalinamall.ru).
TLS: HAProxy на 443 в режиме TCP + SNI, не терминирует TLS — сертификаты на бэкендах.
Доступ снаружи по allowlist: Git и веб-SAC — git-sac-allowed; RDS — rds-allowed (RU ipdeny + static); 1С — 1c-allowed; Zabbix (HTTP) — zabbix-allowed; Synology (heap, exchange) — syno-allowed. Seaca — sac-api.kalinamall.ru без IP-фильтра.
Репозиторий: https://git.kalinamall.ru/PapaTramp/reverse-proxy
Соответствие имён и адресов
| Служба | Внешнее имя (клиенты) | Внутренний хост / IP | Порт | Allowlist |
|---|---|---|---|---|
| Microsoft Exchange (OWA и т.д.) | ext.kalinamall.ru |
fifth.kalinamall.ru — 192.168.160.42 | 443 | нет |
| Autodiscover | autodiscover.kalinamall.ru |
тот же Exchange — 192.168.160.42 | 443; 80 (HTTP Autodiscover → Exchange) | нет |
| RDS | rds.kalinamall.ru |
k6a-dc3 — 192.168.160.40, служба 4430 | 443 → 4430 | rds-allowed |
| 1С | erp.kalinamall.ru |
hp-serv — 192.168.160.150 | 443 | 1c-allowed |
| Git (HTTPS) | git.kalinamall.ru |
192.168.160.129 | 443 | git-sac-allowed |
| SAC (веб) | sac.kalinamall.ru |
192.168.160.145 | 443 | git-sac-allowed |
| SAC / Seaca (mobile API) | sac-api.kalinamall.ru |
тот же 192.168.160.145 | 443 | нет |
| Zabbix (веб) | zabbix.kalinamall.ru |
192.168.160.53 | 80 (HTTP) | zabbix-allowed |
| Synology DSM | heap.kalinamall.ru |
192.168.160.185 | 443 → 5001 | syno-allowed |
| Synology DSM | exchange.kalinamall.ru |
192.168.160.35 | 443 → 5001 | syno-allowed |
| Почтовый шлюз (KSMG) | ksmg.kalinamall.ru |
192.168.160.57 | 25 | нет (с интернета на HAProxy не проброшен; см. security/architecture.md) |
DNS: A для ext, autodiscover, rds, erp, git, sac, sac-api, zabbix, heap, exchange → публичный IP HAProxy. Inbound SMTP (25) с интернета на HAProxy не пробрасывается; ksmg / MX — отдельная схема (см. security/architecture.md).
Снаружи Zabbix — http://zabbix.kalinamall.ru. Outlook при настройке почты на ext.kalinamall.ru шлёт HTTP Autodiscover на :80 (/autodiscover/autodiscover.xml) — HAProxy проксирует на Exchange 192.168.160.42:80, без allowlist (как HTTPS OWA). Synology DSM — https://heap.kalinamall.ru, https://exchange.kalinamall.ru (TLS на NAS, wildcard *.kalinamall.ru). Имя exchange.kalinamall.ru — NAS, не OWA (ext.kalinamall.ru).
Порт 80: Zabbix и Outlook (Autodiscover)
До 0.7.8 весь :80 обрабатывался как «только Zabbix»: любой другой Host (в т.ч. Autodiscover при настройке Outlook) получал 403, fail2ban jail haproxy-zabbix-403 банил IP на сутки через UFW — пользователь мог не знать про Zabbix.
С 0.7.8 frontend fe_http:
| Host / путь | Куда | Allowlist |
|---|---|---|
autodiscover.kalinamall.ru |
Exchange .42:80 |
нет |
ext.kalinamall.ru + /autodiscover/* |
Exchange .42:80 |
нет |
zabbix.kalinamall.ru |
Zabbix .53:80 |
zabbix-allowed |
| прочее | 404 (не 403) | — |
fail2ban haproxy-zabbix-403: только 403 на Zabbix с IP вне allowlist; в filter добавлен ignoreregex для /autodiscover/.
После деплоя на 192.168.160.117:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg && sudo systemctl reload haproxy
sudo cp ~/reverse-proxy/scripts/security/fail2ban/haproxy-zabbix-403.conf /etc/fail2ban/filter.d/
sudo fail2ban-client reload
sudo fail2ban-client set haproxy-zabbix-403 unbanip 5.143.32.177 # если ещё забанен
Если после Git в том же браузере SAC показывает Gitea — см. SAC, Seaca и coalescing.