# План развёртывания защиты Оценка: **2–4 рабочих дня** с окнами обслуживания на бэкендах (по одному хосту). ## Фаза 0 — Подготовка (без изменений на проде) - [ ] Зафиксировать **публичный IP** HAProxy и правила DNAT на MikroTik. - [ ] Убедиться, что **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. - [ ] Проверить SMTP 25 с внешнего MTA (если используется). **Откат:** `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://:` **не** отвечает; с HAProxy — работает. --- ## Фаза 4 — MikroTik и мониторинг - [ ] На MikroTik: с интернета на HAProxy только **25, 80, 443** (не пробрасывать 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).