Files
reverse-proxy/README.md
T
PTah ade8e4cafa fix(haproxy): Autodiscover на :80 и точный fail2ban для Zabbix
Outlook при настройке ext.kalinamall.ru слал GET /autodiscover/autodiscover.xml на порт 80; старый fe_http_zabbix отвечал 403 всем не-zabbix Host, fail2ban банил клиента на сутки. fe_http проксирует Autodiscover на Exchange :80, 403 только для zabbix вне allowlist, ignoreregex для /autodiscover/.
2026-06-20 16:58:32 +10:00

5.4 KiB
Raw Blame History

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 и веб-SACgit-sac-allowed; RDSrds-allowed (RU ipdeny + static); 1С1c-allowed; Zabbix (HTTP) — zabbix-allowed; Synology (heap, exchange) — syno-allowed. Seacasac-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.

Документация