Files
reverse-proxy/docs/security/deployment-plan.md
T
Andrey Lutsenko e3201ae41b docs: периметр MikroTik — на HAProxy только 80/443
Уточнено: порт 25 с интернета не проброшен; inbound-почта не через HAProxy.
2026-06-13 22:24:48 +10:00

101 lines
5.1 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.
# План развёртывания защиты
Оценка: **24 рабочих дня** с окнами обслуживания на бэкендах (по одному хосту).
## Фаза 0 — Подготовка (без изменений на проде)
- [ ] Зафиксировать **публичный IP** HAProxy и правила DNAT на MikroTik (**только 80/443**).
- [ ] Убедиться, что **SSH** на `192.168.160.117` доступен с admin-IP (не только с одного ноутбука).
- [ ] Снимок/backup: `haproxy.cfg`, allowlist, `/etc/ssh/sshd_config`.
- [ ] Клонировать репозиторий на HAProxy: `git pull kalinamall main`.
- [ ] Прочитать [checklist.md](checklist.md).
**Критерий готовности:** есть консоль или второй admin-IP для отката UFW.
---
## Фаза 1 — HAProxy: базовый hardening (без UFW enable)
На **haproxy.kalinamall.ru**:
- [ ] `apt update && apt upgrade` (или unattended-upgrades).
- [ ] SSH: `PasswordAuthentication no`, `PermitRootLogin no`, только ключи (`/etc/ssh/sshd_config.d/`).
- [ ] Установить **fail2ban** (`sshd` jail), см. [haproxy-host.md](haproxy-host.md).
- [ ] Убедиться, что **stats :8404** не включены в prod (закомментированы в `haproxy.cfg`).
- [ ] Права: `/etc/haproxy/*-allowed``0644 root:root`; скрипты в `/usr/local/bin``0755`.
- [ ] `sysctl`: syncookies, rp_filter (см. [haproxy-host.md](haproxy-host.md)).
**Проверка:** `ss -tlnp` — только 22, 25, 80, 443 (+ systemd-resolved если локально).
---
## Фаза 2 — UFW на HAProxy
- [ ] `cp scripts/security/haproxy-ufw.env.example /etc/haproxy/security/haproxy-ufw.env`
- [ ] Заполнить **`SSH_ALLOWED`** (офис, VPN, admin; минимум ваш текущий IP + LAN).
- [ ] Dry-run: `bash scripts/security/haproxy-ufw-apply.sh`
- [ ] **Не закрывая SSH-сессию**, в second tab: `bash scripts/security/haproxy-ufw-apply.sh --apply`
- [ ] Проверить с admin-IP: `ssh haproxy.kalinamall.ru`, `curl` на 80/443 с allowlist.
- [ ] Убедиться, что **25** с интернета на HAProxy **не** доступен (ожидаемо: DNAT не настроен).
**Откат:** `ufw disable` (временно) или `ufw delete` по номерам правил; env-файл сохранить.
---
## Фаза 3 — UFW на бэкендах (по одному хосту)
Порядок рекомендуемый (от менее критичных к более):
1. Zabbix `.53:80`
2. Git `.129:443`
3. SAC `.145:443`
4. Synology `.185:5001`, `.35:5001`
5. ERP `.150:443`
6. RDS `.40:4430`
7. Exchange `.42:443`
8. KSMG `.57:25`**особый случай** (почта может идти не только с HAProxy); см. [backend-hosts.md](backend-hosts.md)
На каждом хосте:
- [ ] `cp backend-ufw.env.example``/etc/haproxy/security/backend-ufw.env` (или `/etc/security/`)
- [ ] Задать `BACKEND_PORT`, при необходимости `ADMIN_ALLOWED`, `EXTRA_ALLOWED`
- [ ] Dry-run → `--apply`
- [ ] Проверить сервис через HAProxy снаружи и health-check в логе HAProxy
**Критерий:** с другого LAN-хоста (не `.117`) `curl https://<backend-ip>:<port>` **не** отвечает; с HAProxy — работает.
---
## Фаза 4 — MikroTik и мониторинг
- [ ] На MikroTik: с интернета на HAProxy только **80, 443** (не пробрасывать 25, 3389, 5001, 4430 на внутренние IP).
- [ ] Raw/firewall: опционально drop obvious scanners (согласовать с `rds-allowed` / RU geo).
- [ ] Zabbix: триггеры на `ufw status`, `fail2ban`, рост `fe_https_sni` reject, backend DOWN.
- [ ] Ротация логов `/var/log/haproxy.log`.
---
## Фаза 5 — Усиление (по приоритету)
| Задача | Зачем |
|--------|--------|
| Allowlist или rate-limit для **Exchange** | Сейчас 443 без IP-фильтра |
| Ограничить **sac-api** (если бизнес позволяет) | Сейчас без allowlist |
| TLS verify на бэкендах HAProxy | Вместо `verify none` — внутренняя CA |
| Отдельный VLAN для DMZ / HAProxy | Сегментация |
| WAF / reverse proxy HTTP для Zabbix → HTTPS | Порт 80 только HTTP |
| 2FA на Git, OWA, RD Gateway | Учётные записи |
---
## Окна и коммуникация
| Фаза | Риск | Окно |
|------|------|------|
| 1 | Низкий | любое |
| 2 | **SSH lockout** | рабочее время + console |
| 3 | Обрыв сервиса при ошибке порта | вечер / по сервису |
| 4 | Ошибка NAT | согласование с сетью |
После каждой фазы — отметки в [checklist.md](checklist.md).