Security / DevOps
Damba — сетевая безопасность и DevOps
Damba — развиваемая self-hosted инфраструктура: Proxmox-хост примерно с 15 изолированными LXC-контейнерами, OpenWrt на периметре и UniFi в роли управляемой L2-сети. Проект объединяет домашние и гостевые сервисы, сетевую безопасность, регулярные технические аудиты и эксплуатацию по принципам DevOps.
Обсудить похожий проект
Задача
Построить и постоянно укреплять self-hosted инфраструктуру: изолировать сети, контролировать периметр, автоматизировать деплой, мониторинг и восстановление.
Решение
Как реализовали проект
Инфраструктура разделена на зоны и VLAN, а административный доступ вынесен за VPN. OpenWrt управляет маршрутизацией, DNS и отказоустойчивым VPN, UniFi обслуживает коммутаторы и точки доступа, распределённый CrowdSec анализирует события, а GitOps-контур, мониторинг, watchdog-сценарии и резервные копии поддерживают сервисы в рабочем состоянии.
Состав работ
Что вошло в решение
- 01Регулярные пентест-аудиты с приоритизацией P0, P1, High и Medium
- 02Сегментация домашней, гостевой и управляющей сети
- 03Распределённая защита CrowdSec, UFW и Fail2ban
- 04OpenWrt с VPN failover, защищённым DNS и policy-based routing
- 05GitOps-деплой, инфраструктура как код и хранение секретов вне Git
- 06Мониторинг, self-healing и многоуровневое резервное копирование
Инфраструктура
Архитектура решения
- 01
Proxmox VE размещает около 15 LXC-контейнеров с изолированными self-hosted сервисами
- 02
OpenWrt работает как L3-шлюз, firewall, DHCP/DNS-сервер и VPN-маршрутизатор
- 03
UniFi используется как управляемый L2-контур для коммутаторов и точек доступа
- 04
VLAN и Zone-based Firewall разделяют домашние, гостевые, серверные и управляющие сегменты
- 05
Центральные CrowdSec и GitOps-сервисы взаимодействуют с локальными агентами на хостах
- 06
Резервные копии хранятся на двух локальных контурах и реплицируются во внешнее облако
Возможности
Функционал
Повторяемый аудит безопасности
Проверяются открытые порты, конфигурации, состояние IDS-агентов и изменения относительно предыдущего отчёта. Находки получают приоритет и конкретный план исправления.
Сегментация сети
VLAN и правила межзонного доступа отделяют гостей, домашние устройства, серверы и управление. Для гостевого сегмента действует прямой выход в интернет без доступа к внутренней сети.
VPN и автоматический failover
OpenWrt направляет выбранный трафик через VPN на уровне ядра, а watchdog с защитой от частых переключений контролирует канал и восстанавливает маршрутизацию.
Защищённый DNS и PBR
dnsmasq не использует DNS провайдера, запросы уходят через защищённый резолвер, а nftables-наборы и отдельные таблицы маршрутизации управляют policy-based routing.
Распределённый IDS/IPS
Центральный CrowdSec LAPI получает события от агентов в сервисных контейнерах, а firewall-bouncer применяет решения на периметре. Тестовый бан проверяется вместе с правилом firewall и откатом.
GitOps и инфраструктура как код
Docker-стеки управляются из центральной панели через агентов. Конфигурации и примеры окружения хранятся в приватном Git, а реальные секреты — только во внешних env-файлах.
Мониторинг и self-healing
Доступность и ресурсы контролируются несколькими сигналами. Healthcheck и autoheal включаются после тестирования, а watchdog использует anti-flap, журналирование и безопасное восстановление.
Резервное копирование и DR
Используются два локальных хранилища и внешняя репликация. Проверяется наличие реальных архивов, а не только успешный статус задания; тест восстановления ведётся как отдельная обязательная задача.
Стек проекта
Технологии
Защита данных
Безопасность
- Периодические аудиты фиксируют дату, область проверки, доказательства, приоритет и статус каждой находки.
- Обнаруженные приватные ключи ротируются, а секреты переносятся в env-файлы вне Git с ограниченными правами.
- Административные панели не публикуются наружу и доступны только через VPN.
- На периметре действует default deny, точечные allowlist-правила и межзонная фильтрация.
- CrowdSec, UFW и Fail2ban совместно защищают локальные контейнеры и внешние серверы.
- Для платёжного webhook подготовлен план HMAC-подписи сырого тела, timestamp, replay-window и идемпотентности.
Живые данные
Интеграции
UX / UI
Дизайн-процесс
Топология и политики строились не как разовая настройка, а как проверяемая система: минимум публичного периметра, явные границы доверия, отдельные зоны для гостей и управления, воспроизводимые конфигурации и доказательства работоспособности после каждого изменения. Для сложных инцидентов решение принималось по сетевым счётчикам, логам и сравнительным тестам, а не по предположениям.
Инженерная работа
Нетривиальные решения
Секрет попал в Git
Аудит обнаружил приватные криптографические ключи. Ключи отправили на ротацию, секреты вынесли в защищённые env-файлы, а очистку истории репозитория зафиксировали отдельным контролируемым этапом.
Слишком широкий публичный периметр
Административные панели за однофакторным SSO создавали риск. Их убрали из публичного доступа и оставили управление только через VPN.
Большие потоки терялись в proxy-routing
Счётчики и повторяемые тесты показали, что userspace tproxy молча теряет крупные соединения. Маршрутизацию перенесли на VPN-модуль ядра, а устаревший контур удалили.
iOS закрывал captive-портал
Переход по ссылке звонка закрывал captive-браузер раньше завершения авторизации. Проверку перенесли в серверный worker, независимый от жизненного цикла окна.
Ложные тревоги вложенных контейнеров
Метрики родительского LXC ошибочно воспринимались как авария дочерних сервисов. Проверку дополнили процессными метриками и несколькими независимыми сигналами.
Задание бэкапа было зелёным, архива не было
Причиной оказался отсутствующий env в cron-окружении. Контроль сместили с кода возврата задания на наличие и пригодность реального архива; полноценный тест восстановления запланирован отдельно.
Результат
Критичные риски стали видимыми и управляемыми: секреты вынесены из репозитория с ротацией ключей, публичные административные панели перенесены за VPN, гостевая сеть изолирована, а деплой, наблюдаемость и восстановление получили воспроизводимые процессы. Дополнительное усиление webhook и полноценная проверка восстановления из резервной копии остаются зафиксированными задачами.
Следующий кейс