e3201ae41b
Уточнено: порт 25 с интернета не проброшен; inbound-почта не через HAProxy.
68 lines
3.5 KiB
Markdown
68 lines
3.5 KiB
Markdown
# Архитектура защиты
|
||
|
||
## Поток трафика
|
||
|
||

|
||
|
||
Схема в SVG — без Mermaid, чтобы Gitea/Firefox не ломали рендер из‑за `<br>` в XML.
|
||
|
||
Та же схема текстом:
|
||
|
||
```text
|
||
Интернет → MikroTik (DNAT 80/443) → HAProxy .117 → ACL (SNI/Host) → бэкенды .160.0/24
|
||
```
|
||
|
||
**Периметр MikroTik:** с интернета на HAProxy проброшены только **80** и **443**. Порт **25** (и прочие) на HAProxy снаружи **недоступны** — DNAT не настроен.
|
||
|
||
## Два контура
|
||
|
||
### 1. Публичный вход (через HAProxy)
|
||
|
||
Клиент → публичный IP → **MikroTik (DNAT 80/443)** → **HAProxy** → (проверки) → один бэкенд.
|
||
|
||
На HAProxy с интернета доступны только:
|
||
|
||
- **443/TCP**: отклонение неизвестного SNI; allowlist для git, sac-web, rds, erp, syno.
|
||
- **80/HTTP**: только `Host: zabbix.kalinamall.ru` + `zabbix-allowed`.
|
||
|
||
**25/SMTP** в `haproxy.cfg` слушает на хосте, но **с интернета не проброшен** (MikroTik DNAT только 80/443). Inbound-почта на KSMG идёт **не через** HAProxy:25 с периметра.
|
||
|
||
### 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. **Минимум открытых портов** с интернета на HAProxy: **80** и **443** (DNAT на MikroTik).
|
||
3. **Не дублировать** смысл правил без нужды: allowlist в HAProxy для HTTP/SNI; UFW — транспорт и админ.
|
||
4. **Сначала dry-run**, потом `--apply`; для SSH — **console/IPMI** или сессия, которую UFW не оборвёт.
|
||
5. **Логи**: HAProxy + UFW + fail2ban; алерты на аномалии (Zabbix уже в инфраструктуре).
|