# 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](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](docs/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](docs/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**: ```bash 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](docs/sac-access.md). ## Документация - [Установка HAProxy и развёртывание конфигурации](docs/haproxy-install.md) - [SAC: веб vs sac-api, Seaca, Git+SAC в браузере](docs/sac-access.md) - [Работа с Git: clone, pull, push, ключи и PAT](docs/git.md) - [Политика: Gitea — основной, GitHub — резерв без секретов](docs/repo-policy.md) - [Let's Encrypt / ACME через HAProxy (порт 80)](docs/letsencrypt-acme.md) - [Безопасность: UFW, бэкенды, план внедрения](docs/security/README.md)