Files
reverse-proxy/docs/security/architecture.md
T
Andrey Lutsenko 905c762acc fix: совместимый синтаксис Mermaid в architecture.md
Gitea не парсил узлы с <br/> и кириллицей без кавычек; добавлен текстовый fallback.
2026-06-13 21:56:54 +10:00

75 lines
3.3 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.
# Архитектура защиты
## Поток трафика
```mermaid
flowchart TB
internet["Интернет"]
mt["MikroTik / периметр"]
hap["HAProxy 192.168.160.117<br>порты 25 80 443"]
acl["HAProxy ACL<br>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 уже в инфраструктуре).