Files
reverse-proxy/docs/security/architecture.md
T
Andrey Lutsenko 8e2a4ac1b9 docs(security): периметр 80/443→HAProxy, 25→KSMG; UFW на .117
Переписаны docs/security под текущий этап: SSH/stats из SSH_ALLOWED,
80/443 для всех. Скрипт UFW дополнен правилом 8404.
2026-06-13 22:34:57 +10:00

65 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Архитектура защиты
## Периметр (MikroTik)
| С интернета | DNAT на | Порт |
|-------------|---------|------|
| HTTP/HTTPS | **HAProxy** `192.168.160.117` | **80**, **443** |
| SMTP | **KSMG** `192.168.160.57` | **25** |
На HAProxy с интернета **только 80 и 443**. Порт **25** на HAProxy **не проброшен**.
## Потоки
![Поток трафика](architecture-flow.svg)
```text
Интернет ──80/443──► MikroTik ──► HAProxy .117 ── ACL (SNI/Host) ──► бэкенды .160.0/24
Интернет ──25──────► MikroTik ──► KSMG .57
```
### Через HAProxy (80/443)
- **443**: reject неизвестного SNI; allowlist — git, sac-web, rds, erp, syno; без allowlist — Exchange, sac-api.
- **80**: только `Host: zabbix.kalinamall.ru` + `zabbix-allowed`.
Прокси и health-check идут **с IP `.117`**. Бэкенды должны разрешать этот источник (UFW на бэкендах — **позже**, см. [backend-hosts.md](backend-hosts.md)).
### Мимо HAProxy
- **Почта**: inbound SMTP → **напрямую KSMG** (не через `fe_smtp` на `.117`).
- **LAN/VPN**: прямой доступ к бэкендам, RDP, SSH — если нет host firewall.
## Текущий этап: UFW на HAProxy
Сейчас внедряем только [haproxy-host.md](haproxy-host.md) — UFW на `.117`:
| Порт | Кому |
|------|------|
| **22** | `SSH_ALLOWED`: `5.100.81.121`, `192.168.128.0/17` |
| **8404** (stats) | тот же список (если frontend включён) |
| **80**, **443** | все |
| остальное | deny (в т.ч. **25** на HAProxy) |
## Матрица фильтрации
| Угроза | MikroTik | UFW HAProxy | HAProxy cfg | UFW бэкенд* | Приложение |
|--------|----------|-------------|-------------|-------------|------------|
| Лишние порты с интернета | ✓ | ✓ | — | — | — |
| Неверный SNI / Host | — | — | ✓ | — | — |
| Не из allowlist | — | — | ✓ | — | ✓ |
| Прямой удар в бэкенд | частично | — | — | ✓ | — |
| Brute SSH | — | ✓ | — | — | fail2ban† |
| SMTP-спам на KSMG | — | — | — | ✓‡ | KSMG |
\* Бэкенды — следующий этап.
† Рекомендуется, не в scope текущего UFW.
‡ KSMG — периметровый хост для **25**, отдельный план.
## Принципы
1. **Default deny** на вход (UFW `incoming deny`).
2. Периметр на MikroTik — источник истины для DNAT; UFW на HAProxy — defense in depth + SSH.
3. Allowlist в `haproxy.cfg` для 443/80; UFW не дублирует SNI/Host.
4. UFW: сначала dry-run, потом `--apply`; держать вторую SSH-сессию.