Security / DevOps

Damba — сетевая безопасность и DevOps

Damba — развиваемая self-hosted инфраструктура: Proxmox-хост примерно с 15 изолированными LXC-контейнерами, OpenWrt на периметре и UniFi в роли управляемой L2-сети. Проект объединяет домашние и гостевые сервисы, сетевую безопасность, регулярные технические аудиты и эксплуатацию по принципам DevOps.

Обсудить похожий проект
Архитектура домашней инфраструктуры Damba на Proxmox, OpenWrt и UniFi

Задача

Построить и постоянно укреплять 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 и многоуровневое резервное копирование

Инфраструктура

Архитектура решения

  1. 01

    Proxmox VE размещает около 15 LXC-контейнеров с изолированными self-hosted сервисами

  2. 02

    OpenWrt работает как L3-шлюз, firewall, DHCP/DNS-сервер и VPN-маршрутизатор

  3. 03

    UniFi используется как управляемый L2-контур для коммутаторов и точек доступа

  4. 04

    VLAN и Zone-based Firewall разделяют домашние, гостевые, серверные и управляющие сегменты

  5. 05

    Центральные CrowdSec и GitOps-сервисы взаимодействуют с локальными агентами на хостах

  6. 06

    Резервные копии хранятся на двух локальных контурах и реплицируются во внешнее облако

Возможности

Функционал

01

Повторяемый аудит безопасности

Проверяются открытые порты, конфигурации, состояние IDS-агентов и изменения относительно предыдущего отчёта. Находки получают приоритет и конкретный план исправления.

02

Сегментация сети

VLAN и правила межзонного доступа отделяют гостей, домашние устройства, серверы и управление. Для гостевого сегмента действует прямой выход в интернет без доступа к внутренней сети.

03

VPN и автоматический failover

OpenWrt направляет выбранный трафик через VPN на уровне ядра, а watchdog с защитой от частых переключений контролирует канал и восстанавливает маршрутизацию.

04

Защищённый DNS и PBR

dnsmasq не использует DNS провайдера, запросы уходят через защищённый резолвер, а nftables-наборы и отдельные таблицы маршрутизации управляют policy-based routing.

05

Распределённый IDS/IPS

Центральный CrowdSec LAPI получает события от агентов в сервисных контейнерах, а firewall-bouncer применяет решения на периметре. Тестовый бан проверяется вместе с правилом firewall и откатом.

06

GitOps и инфраструктура как код

Docker-стеки управляются из центральной панели через агентов. Конфигурации и примеры окружения хранятся в приватном Git, а реальные секреты — только во внешних env-файлах.

07

Мониторинг и self-healing

Доступность и ресурсы контролируются несколькими сигналами. Healthcheck и autoheal включаются после тестирования, а watchdog использует anti-flap, журналирование и безопасное восстановление.

08

Резервное копирование и DR

Используются два локальных хранилища и внешняя репликация. Проверяется наличие реальных архивов, а не только успешный статус задания; тест восстановления ведётся как отдельная обязательная задача.

Стек проекта

Технологии

Proxmox VE
OpenWrt
UniFi
Docker
Linux
Git
Gitea
Bash
Tailscale
Cloudflare

Защита данных

Безопасность

  • Периодические аудиты фиксируют дату, область проверки, доказательства, приоритет и статус каждой находки.
  • Обнаруженные приватные ключи ротируются, а секреты переносятся в env-файлы вне Git с ограниченными правами.
  • Административные панели не публикуются наружу и доступны только через VPN.
  • На периметре действует default deny, точечные allowlist-правила и межзонная фильтрация.
  • CrowdSec, UFW и Fail2ban совместно защищают локальные контейнеры и внешние серверы.
  • Для платёжного webhook подготовлен план HMAC-подписи сырого тела, timestamp, replay-window и идемпотентности.

Живые данные

Интеграции

CrowdSec LAPI, агенты и firewall-bouncerUFW и Fail2ban на внешних серверахdnsmasq, DNS-over-HTTPS и nftablesUniFi Network для L2-сети и гостевого Wi-FiSelf-hosted GitOps-панель и агенты Docker-хостовМониторинг доступности и ресурсовЛокальные и облачные резервные хранилища

UX / UI

Дизайн-процесс

Топология и политики строились не как разовая настройка, а как проверяемая система: минимум публичного периметра, явные границы доверия, отдельные зоны для гостей и управления, воспроизводимые конфигурации и доказательства работоспособности после каждого изменения. Для сложных инцидентов решение принималось по сетевым счётчикам, логам и сравнительным тестам, а не по предположениям.

Инженерная работа

Нетривиальные решения

Секрет попал в Git

Аудит обнаружил приватные криптографические ключи. Ключи отправили на ротацию, секреты вынесли в защищённые env-файлы, а очистку истории репозитория зафиксировали отдельным контролируемым этапом.

Слишком широкий публичный периметр

Административные панели за однофакторным SSO создавали риск. Их убрали из публичного доступа и оставили управление только через VPN.

Большие потоки терялись в proxy-routing

Счётчики и повторяемые тесты показали, что userspace tproxy молча теряет крупные соединения. Маршрутизацию перенесли на VPN-модуль ядра, а устаревший контур удалили.

iOS закрывал captive-портал

Переход по ссылке звонка закрывал captive-браузер раньше завершения авторизации. Проверку перенесли в серверный worker, независимый от жизненного цикла окна.

Ложные тревоги вложенных контейнеров

Метрики родительского LXC ошибочно воспринимались как авария дочерних сервисов. Проверку дополнили процессными метриками и несколькими независимыми сигналами.

Задание бэкапа было зелёным, архива не было

Причиной оказался отсутствующий env в cron-окружении. Контроль сместили с кода возврата задания на наличие и пригодность реального архива; полноценный тест восстановления запланирован отдельно.

Результат

Критичные риски стали видимыми и управляемыми: секреты вынесены из репозитория с ротацией ключей, публичные административные панели перенесены за VPN, гостевая сеть изолирована, а деплой, наблюдаемость и восстановление получили воспроизводимые процессы. Дополнительное усиление webhook и полноценная проверка восстановления из резервной копии остаются зафиксированными задачами.

Следующий кейс

AgroHome — умное управление садом

Смотреть кейс →