e3201ae41b
Уточнено: порт 25 с интернета не проброшен; inbound-почта не через HAProxy.
5.1 KiB
5.1 KiB
План развёртывания защиты
Оценка: 2–4 рабочих дня с окнами обслуживания на бэкендах (по одному хосту).
Фаза 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 (
sshdjail), см. 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).
Проверка: 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 на бэкендах (по одному хосту)
Порядок рекомендуемый (от менее критичных к более):
- Zabbix
.53:80 - Git
.129:443 - SAC
.145:443 - Synology
.185:5001,.35:5001 - ERP
.150:443 - RDS
.40:4430 - Exchange
.42:443 - 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_snireject, 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.