HAProxy 0.7.2: sac-api для Seaca, check-ssl на всех HTTPS-бэкендах.

Веб-SAC остаётся за allowlist; sac-api.kalinamall.ru открыт для мобильных клиентов. Документация по connection coalescing Git+SAC.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
PTah
2026-06-13 12:01:06 +10:00
parent ed77ec1e56
commit f802a5ac46
4 changed files with 142 additions and 37 deletions
+15 -15
View File
@@ -2,32 +2,32 @@
Периметровая конфигурация **HAProxy** для сети **kalinamall.ru**: Exchange, RDS (веб/шлюз по HTTPS), 1С, Git, SAC, почтовый шлюз KSMG. Прямой RDP (3389) через HAProxy не используется — клиенты идут через RDS на **443** (`rds.kalinamall.ru`).
TLS: на целевых серверах в основном **wildcard-сертификаты GlobalSign**; **Git** (`git.kalinamall.ru`) и **SAC** (`sac.kalinamall.ru`) используют **свои** сертификаты на **192.168.160.129** и **192.168.160.145**. HAProxy на **443** работает в режиме **TCP + SNI** и **не терминирует** TLS — сертификаты остаются на бэкендах.
TLS: HAProxy на **443** в режиме **TCP + SNI**, **не терминирует** TLS — сертификаты на бэкендах.
Доступ снаружи по allowlist: **Git** и **SAC** — файл `git-sac-allowed`; **1С** (`erp.kalinamall.ru`) — файл `1c-allowed`.
Доступ снаружи по allowlist: **Git** и **веб-SAC** (`sac.kalinamall.ru`) — файл `git-sac-allowed`; **1С** (`erp.kalinamall.ru`) — `1c-allowed`. **Seaca****`sac-api.kalinamall.ru`** без IP-фильтра (аутентификация на SAC).
Репозиторий: [https://git.kalinamall.ru/PapaTramp/reverse-proxy](https://git.kalinamall.ru/PapaTramp/reverse-proxy)
## Соответствие имён и адресов
| Служба | Внешнее имя (клиенты) | Внутренний хост / IP | Порт снаружи |
|--------|------------------------|----------------------|--------------|
| Microsoft Exchange (OWA `https://ext.kalinamall.ru/owa`, EWS, MAPI/HTTPS и т.д.) | `ext.kalinamall.ru` | fifth.kalinamall.ru — **192.168.160.42** | 443 (TCP/SNI) |
| Autodiscover | `autodiscover.kalinamall.ru` | тот же Exchange — **192.168.160.42** | 443 (TCP/SNI) |
| RDS | `rds.kalinamall.ru` (**443** на HAProxy) | k6a-dc3.b26.kalinamall.ru**192.168.160.40**, служба **4430** | 443 (SNI → внутр. **4430**) |
| 1С | `erp.kalinamall.ru` | hp-serv.b26.kalinamall.ru**192.168.160.150** | 443 (снаружи только IP из **`1c-allowed`**) |
| Git (HTTPS) | `git.kalinamall.ru` | git.kalinamall.ru — **192.168.160.129** (свой TLS-сертификат; снаружи только IP из **`git-sac-allowed`**) | 443 (TCP/SNI) |
| SAC | `sac.kalinamall.ru` | sac.kalinamall.ru — **192.168.160.145** (свой TLS-сертификат; снаружи только IP из **`git-sac-allowed`**) | 443 (TCP/SNI) |
| Почтовый шлюз (KSMG) | `ksmg.kalinamall.ru` | ksmg.kalinamall.ru — **192.168.160.57** | 25 |
| Служба | Внешнее имя (клиенты) | Внутренний хост / 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 | нет |
| RDS | `rds.kalinamall.ru` | k6a-dc3**192.168.160.40**, служба **4430** | 443 → 4430 | нет |
| 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 | **нет** |
| Почтовый шлюз (KSMG) | `ksmg.kalinamall.ru` | **192.168.160.57** | 25 | нет |
DNS: записи **A** для `ext`, **`autodiscover`**, `rds`, `erp`, **`git`**, **`sac`**, `ksmg` должны указывать на **публичный IP** хоста с HAProxy. Имя `autodiscover.kalinamall.ru` должно быть в **SAN** wildcard `*.kalinamall.ru` или отдельно в сертификате на Exchange.
DNS: **A** для `ext`, `autodiscover`, `rds`, `erp`, `git`, `sac`, **`sac-api`**, `ksmg` → публичный IP HAProxy.
Доступ по **SSH** к внутренним хостам (например Ubuntu **192.168.160.85**) в этом репозитории **не** настраивается через HAProxy — организуйте отдельно (прямой проброс, VPN, бастион и т.д.).
В режиме **TCP + SNI** отдельные строки в HAProxy для путей вроде `/owa` **не нужны**: после согласования TLS клиент шлёт HTTP внутри шифрования, разбор путей делает **IIS/Exchange** на `192.168.160.42`.
Если после **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)
- [Let's Encrypt / ACME через HAProxy (порт 80)](docs/letsencrypt-acme.md)