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

5.1 KiB
Raw Blame History

План развёртывания защиты

Оценка: 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.

Критерий готовности: есть консоль или второй 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.
  • Убедиться, что stats :8404 не включены в prod (закомментированы в haproxy.cfg).
  • Права: /etc/haproxy/*-allowed0644 root:root; скрипты в /usr/local/bin0755.
  • sysctl: syncookies, rp_filter (см. 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

На каждом хосте:

  • 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.