Пост

Домашний SOC

🛡 Домашний SOC: установка и настройка OPNsense + Suricata + Wazuh + CrowdSec

Контекст: OPNsense установлен на реальном железе — мини‑сервер формата 1U (две сетевые карты: WAN/LAN). Цель — собрать мини‑SOC дома: видеть атаки, автоматически блокировать их, хранить логи и строить дашборды.


🔹 Архитектура

1
2
3
4
5
6
7
8
9
10
11
[ Интернет ]
     |
[ OPNsense 1U Firewall ]
     |               \
     |                \-- Syslog --> [ OpenSearch ] --> [ Grafana ]
     |
[ Suricata IDS/IPS ] --(EVE JSON)--> [ OpenSearch ]
     |
[ CrowdSec (bouncer) ]  --> блокировка IP на firewall
     |
[ Wazuh (агенты на серверах) ] --> логи/алерты в OpenSearch
  • OPNsense — маршрутизация, VLAN, VPN, плагины безопасности.
  • Suricata — анализ и блокировка трафика (IDS/IPS) на границе сети.
  • CrowdSec — автоматическая реакция на брутфорсы/сканирования.
  • Wazuh — HIDS: аудит хостов (SSH, sudo, изменения файлов).
  • OpenSearch + Grafana — централизованное хранилище логов и визуализация.

🔹 Шаг 1. Установка OPNsense (на «железо» 1U)

  1. Скачайте ISO: opnsense.org/download.
  2. Установите на сервер 1U с двумя NIC (WAN/LAN).
  3. После первого запуска:
    • WAN: получает IP от провайдера (или PPPoE).
    • LAN: 192.168.1.1/24, доступ к веб‑GUI: https://192.168.1.1.
  4. System → Settings → General: выставьте NTP, DNS.
  5. System → Settings → Tunables: при необходимости включите net.inet8.ip_forwarding=1 (обычно включён).

Рекомендации по производительности/совместимости

  • Interfaces → Settings: отключите Hardware checksum offload, TSO, LRO — так Suricata/IPS работает стабильнее.
  • Если есть 2.5/10G NIC — проверьте поддержку netmap (для IPS).

🔹 Шаг 2. Сегментация сети (VLAN)

Зачем: если взломают IoT‑лампу, она не должна видеть серверы.

  1. Interfaces → Other Types → VLAN:
    • VLAN 10 — LAN (рабочие ПК),
    • VLAN 20 — IOT (камеры/лампы),
    • VLAN 30 — SRV (Proxmox, HA, GitLab).
  2. Interfaces → Assignments: добавьте интерфейсы для VLAN 10/20/30.
  3. Firewall → Rules:
    • Разрешите из LANSRV нужные порты.
    • Запретите IOTSRV (по умолчанию deny), оставьте только то, что нужно (например, IOTHA:8123).
  4. VPN (опционально): WireGuard для удалённого доступа.

🔹 Шаг 3. IDS/IPS: установка и настройка Suricata

  1. System → Firmware → Plugins: установите os-suricata.
  2. Services → Intrusion Detection:
    • Enabled: ✅
    • IPS Mode: ✅ (пакеты будут блокироваться)
    • Promiscuous Mode: ✅ (видеть весь трафик)
    • Interfaces: WAN + нужные VLAN (например, IOT, SRV).
  3. Download вкладка → включите правила ET Open, при желании ET Pro Telemetry (если доступно).
  4. Rules:
    • Включите категории attack, trojan, scan, malware, ssh, dns.
    • Снимите галки с «шумных» правил, если мешают (например, отдельные policy/info).
  5. EVE JSON (логирование):
    • Services → Intrusion Detection → Administration → Logging
    • Включите EVE (JSON) с событиями: alert, dns, http, ssh — пригодится в аналитике.
  6. Запустите Suricata и убедитесь, что Alerts появляются при трафике.

Важно: при включении IPS Mode проверьте, что интернет работает стабильно. Если что‑то «ломается» — временно отключите IPS и уточните правила/категории.


🔹 Шаг 4. Автобан атак: CrowdSec на OPNsense

  1. System → Firmware → Plugins: установите os-crowdsec.
  2. Services → CrowdSec:
    • Включите парсеры для ssh, firewall, nginx (если прокси), opnsense.
    • Установите bouncer (firewall bouncer) — он будет применять блокировки в pf.
  3. Проверьте: в Decisions появляются IP, которые нарушают правила (брутфорс/сканирование).

CrowdSec использует общинную базу репутаций IP. Вы не только баните, но и получаете разведданные.


🔹 Шаг 5. HIDS: Wazuh (сервер и агенты)

Сервер Wazuh (Docker single‑node)

1
2
3
git clone https://github.com/wazuh/wazuh-docker.git -b v4.7.1
cd wazuh-docker/single-node
docker compose up -d

После запуска откройте https://<WAZUH_HOST>:5601 (Wazuh Dashboards).

Агент Wazuh на Linux‑хосте

1
2
3
4
5
# Установите репозиторий (для вашей ОС) и агент:
apt install wazuh-agent
# Укажите адрес менеджера:
sed -i 's/MANAGER_IP/<WAZUH_HOST>/' /var/ossec/etc/ossec.conf
systemctl enable --now wazuh-agent

Где ставить агенты: домашние серверы (Proxmox, HA, GitLab, NAS, Docker‑хосты).
Что даёт агент: события SSH, sudo, systemd, изменения файлов, rootkit‑сканы.


🔹 Шаг 6. Централизация логов: OpenSearch + Grafana

OpenSearch + Dashboards (Docker)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'
services:
  opensearch:
    image: opensearchproject/opensearch:latest
    environment:
      - discovery.type=single-node
      - plugins.security.disabled=true
    ports:
      - "9200:9200"
      - "9600:9600"
  dashboards:
    image: opensearchproject/opensearch-dashboards:latest
    environment:
      - OPENSEARCH_HOSTS=["http://opensearch:9200"]
      - OPENSEARCH_SECURITY_DISABLED=true
    ports:
      - "5601:5601"

Отправка логов с OPNsense

  • System → Settings → Logging / targets:
    • Добавьте Remote syslog → укажите opensearch-host:514 (если используете rsyslog/Fluent Bit/Filebeat как «шлюз»).
    • Проще: поднимите Fluent Bit/Filebeat рядом с OpenSearch и направляйте syslog туда.

Grafana

  • Поставьте Grafana (Docker).
  • Добавьте OpenSearch как datasource.
  • Импортируйте/создайте дашборды:
    • «Атаки по странам»,
    • «SSH брутфорс»,
    • «Top talkers по портам»,
    • «Suricata alerts timeline».

🔹 (Опционально) Zeek как глубокая аналитика

Zeek отлично дополняет Suricata (forensic‑аналитика протоколов).

  • Развёртывание на отдельной VM/сервере.
  • Выгрузка логов в OpenSearch.
  • Аналитика: HTTP/DNS/SSL/SSH события на уровне сеансов.

🔹 Шаг 7. Тестирование: имитируем атаки внутри своей сети

⚠️ Важно: тестируйте только в собственной сети/лабе.

  1. Порт‑сканирование (с ноутбука в LAN):
    1
    
    nmap -sS -p 1-1000 192.168.1.10
    

    — Suricata должна сработать на сигнатуры SCAN.

  2. SSH брутфорс (эмуляция):
    1
    
    hydra -l root -P passwords.txt ssh://192.168.1.10
    

    — CrowdSec/Wazuh/Suricata зафиксируют и забанят источник.

  3. DNS аномалии — сделать десятки редких запросов: Suricata/Zeek отметят «шум».

🔹 Реальный пример атаки (скриншот)

Suricata зафиксировала ET SCAN Potential SSH Scan с зарубежного IP:

  • Suricata отметила всплеск пакетов на порт 22 (WAN).
  • CrowdSec вынес решение (ban) за секунды.
  • Wazuh показал нулевое число успешных логинов.
  • Grafana отрисовала всплеск по SSH за последний час.

📸 Скриншот дашборда: SSH Attack Example


🔹 Советы по эксплуатации

  • Раз в неделю просматривайте Suricata Alerts — отключайте шумные категории/правила.
  • В CrowdSec проверяйте Decisions: не попали ли в бан «свои» IP (добавляйте в allowlist).
  • Делайте снапшоты/бэкапы конфигов OPNsense.
  • Держите IPS Mode включённым, но проверяйте, не ломает ли он редкие рабочие кейсы.
  • В Wazuh настроьте алерты в Telegram/Email на события уровня «High».

🔹 Итоги

На одном мини‑сервере 1U с OPNsense можно собрать рабочий домашний SOC:

  • Suricata (IDS/IPS) видит и блокирует атаки на границе.
  • CrowdSec банит брутфорсы/сканирования автоматически.
  • Wazuh следит за серверами и файлами.
  • OpenSearch + Grafana дают удобную аналитику и дашборды.

👉 Это не только безопасность дома, но и практический опыт SOC‑инженера, применимый в продакшене.

Авторский пост защищен лицензией CC BY 4.0 .

© Sysadmin. Некоторые права защищены.