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/.
This commit is contained in:
PTah
2026-06-20 16:58:09 +10:00
parent 900749457f
commit ade8e4cafa
7 changed files with 66 additions and 16 deletions
+23 -8
View File
@@ -1,7 +1,7 @@
# HAProxy — периметровый reverse-proxy для kalinamall.ru
# Config version: 0.7.7
# Config version: 0.7.8
# Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты на бэкендах)
# HTTP на 80: zabbix.kalinamall.ru → 192.168.160.53 (allowlist zabbix-allowed)
# HTTP на 80: Exchange Autodiscover (ext/autodiscover) + zabbix.kalinamall.ru (allowlist)
#
# Проверка синтаксиса: haproxy -c -f haproxy.cfg
# Установка: скопируйте в /etc/haproxy/haproxy.cfg
@@ -115,23 +115,38 @@ backend be_syno_exchange
server syno_exch 192.168.160.35:5001 check check-ssl check-sni exchange.kalinamall.ru verify none
# -----------------------------------------------------------------------------
# HTTP (80): Zabbix — только HTTP на бэкенде, снаружи http://zabbix.kalinamall.ru
# Allowlist: /etc/haproxy/zabbix-allowed
# HTTP (80): Exchange Autodiscover (Outlook) + Zabbix UI
# Autodiscover: autodiscover.kalinamall.ru, ext.kalinamall.ru/autodiscover/* → Exchange :80
# Zabbix: только Host zabbix.kalinamall.ru + allowlist /etc/haproxy/zabbix-allowed
# Прочие Host на :80 → 404 (не 403), чтобы fail2ban не путал с атакой на Zabbix
# -----------------------------------------------------------------------------
frontend fe_http_zabbix
frontend fe_http
bind *:80
mode http
option httplog
option forwardfor except 127.0.0.0/8
acl host_zabbix hdr(host) -i zabbix.kalinamall.ru
acl host_autodiscover hdr(host) -i autodiscover.kalinamall.ru
acl host_ext hdr(host) -i ext.kalinamall.ru
acl path_autodiscover path_beg /autodiscover
acl src_zabbix_allowed src -f /etc/haproxy/zabbix-allowed
http-request deny deny_status 403 unless host_zabbix
http-request deny deny_status 403 if !src_zabbix_allowed
# Zabbix: 403 только при неверном IP (fail2ban haproxy-zabbix-403)
http-request deny deny_status 403 if host_zabbix !src_zabbix_allowed
default_backend be_zabbix
use_backend be_exchange_http if host_autodiscover
use_backend be_exchange_http if host_ext path_autodiscover
use_backend be_zabbix if host_zabbix
http-request deny deny_status 404 if !host_zabbix !host_autodiscover !(host_ext path_autodiscover)
backend be_exchange_http
mode http
option forwardfor
# fifth.kalinamall.ru (192.168.160.42) — IIS Autodiscover / редирект на HTTPS OWA
server exch 192.168.160.42:80 check
backend be_zabbix
mode http