# Архитектура защиты
## Поток трафика
```mermaid
flowchart TB
internet["Интернет"]
mt["MikroTik / периметр"]
hap["HAProxy 192.168.160.117
порты 25 80 443"]
acl["HAProxy ACL
SNI / Host allowlist"]
backends["Бэкенды 192.168.160.0/24"]
internet --> mt
mt -->|DNAT публичный IP| hap
hap --> acl
acl --> backends
```
Если блок выше не рисуется (старый кеш браузера / Gitea), та же схема текстом:
```text
Интернет → MikroTik (DNAT) → HAProxy .117 (25/80/443) → ACL (SNI/Host) → бэкенды .160.0/24
```
## Два контура
### 1. Публичный вход (через HAProxy)
Клиент → публичный IP → **HAProxy** → (проверки) → один бэкенд.
На HAProxy уже есть:
- **443/TCP**: отклонение неизвестного SNI; allowlist для git, sac-web, rds, erp, syno.
- **80/HTTP**: только `Host: zabbix.kalinamall.ru` + `zabbix-allowed`.
- **25/SMTP**: passthrough на KSMG без IP-фильтра на frontend.
### 2. Внутренняя сеть (LAN / VPN)
Трафик **мимо HAProxy** возможен, если:
- есть VPN в `192.168.160.0/24`;
- бэкенд слушает на LAN без host firewall;
- RDP/RDP Gateway по внутренним адресам.
Защита: **UFW на бэкендах** + политика «сервисный порт только с `.117`», админ-доступ — отдельные правила.
## IP HAProxy (источник для бэкендов)
| Имя | IP |
|-----|-----|
| haproxy.kalinamall.ru | **192.168.160.117** |
Health-check HAProxy и прокси идут **с этого IP**. Правила на бэкендах должны разрешать его явно.
## Матрица: кто фильтрует что
| Угроза | MikroTik | UFW HAProxy | HAProxy cfg | UFW бэкенд | Приложение |
|--------|----------|-------------|-------------|------------|------------|
| Сканирование портов | ✓ | ✓ | — | ✓ | — |
| Неверный SNI / Host | — | — | ✓ | — | — |
| Доступ не из allowlist | — | — | ✓ | — | ✓ |
| Прямой удар в бэкенд | ✓ | — | — | ✓ | — |
| Brute SSH на HAProxy | ✓ | ✓ | — | — | fail2ban |
| DDoS L4 | ✓ | частично | conn limits* | — | — |
\* Опционально: `maxconn`, rate-limit на frontend (Enterprise / custom); на 2.8 — sysctl, MikroTik, внешний scrubbing.
## Принципы
1. **Default deny** на вход (UFW `incoming deny`, бэкенды — только HAProxy + admin).
2. **Минимум открытых портов** с интернета: 25, 80, 443 на одном хосте.
3. **Не дублировать** смысл правил без нужды: allowlist в HAProxy для HTTP/SNI; UFW — транспорт и админ.
4. **Сначала dry-run**, потом `--apply`; для SSH — **console/IPMI** или сессия, которую UFW не оборвёт.
5. **Логи**: HAProxy + UFW + fail2ban; алерты на аномалии (Zabbix уже в инфраструктуре).