Volledige Installatiegids

Stap-voor-stap van een lege server naar een volledig operationeel Security Informer systeem. Geschatte tijd: 30–45 minuten.

Prerequisites

Controleer of aan alle vereisten is voldaan voordat u begint.

Software

  • Docker Engine 24.0+ en Docker Compose v2.20+
  • Traefik reverse proxy actief en bereikbaar op het traefik-public netwerk
  • n8n instantie operationeel (aparte container op uw eigen domein)
  • Git voor het clonen van de repository

API keys & tokens

ServiceWaarvoorVerkrijgen viaVerplicht
VulnCheck NVD++ CVE feed vulncheck.com (gratis tier) Ja
Anthropic Claude AI asset matching console.anthropic.com Ja
Telegram Bot Alertnotificaties @BotFather in Telegram Ja
NVD NIST Backup CVE feed nvd.nist.gov Optioneel
SMTP server E-mailrapporten Uw mailprovider of eigen server Optioneel

Stap 1: Repository clonen

bash
# Clone de Security Informer repository
git clone https://github.com/dvesters/security-informer.git /opt/security-informer

# Navigeer naar de projectmap
cd /opt/security-informer

# Controleer de inhoud
ls -la

Stap 2: .env configureren

Kopieer het voorbeeld .env-bestand en vul alle verplichte waarden in. Commit dit bestand nooit naar git.

bash
cp .env.example .env
nano .env  # of uw favoriete editor

Volledige .env template

.env
# ============================================================
# Security Informer — Omgevingsvariabelen
# NOOIT committen naar git!
# ============================================================

# --- PostgreSQL ---
POSTGRES_DB=security_informer
POSTGRES_USER=si_app
POSTGRES_PASSWORD=INVULLEN_sterk_wachtwoord         # VERPLICHT
POSTGRES_NOCODB_USER=si_nocodb
POSTGRES_NOCODB_PASSWORD=INVULLEN_sterk_wachtwoord  # VERPLICHT
POSTGRES_GRAFANA_USER=si_grafana
POSTGRES_GRAFANA_PASSWORD=INVULLEN_sterk_wachtwoord # VERPLICHT

# --- NocoDB ---
NC_DB=pg://postgres:5432?u=${POSTGRES_NOCODB_USER}&p=${POSTGRES_NOCODB_PASSWORD}&d=${POSTGRES_DB}
NC_AUTH_JWT_SECRET=INVULLEN_random_64_chars          # VERPLICHT
NC_ADMIN_EMAIL=admin@uw-domein.nl
NC_ADMIN_PASSWORD=INVULLEN_sterk_wachtwoord          # VERPLICHT

# --- Admin Portaal ---
ADMIN_SECRET_KEY=INVULLEN_random_64_chars            # VERPLICHT
ADMIN_USERNAME=admin
ADMIN_PASSWORD=INVULLEN_sterk_wachtwoord             # VERPLICHT

# --- n8n Integratie ---
N8N_BASE_URL=https://n8n.uw-domein.nl                # uw eigen n8n instantie
N8N_API_KEY=INVULLEN_n8n_api_key                     # VERPLICHT

# --- CVE Bronnen ---
VULNCHECK_API_KEY=INVULLEN_vulncheck_token           # VERPLICHT
NVD_API_KEY=INVULLEN_nvd_api_key                     # optioneel

# --- Anthropic Claude ---
ANTHROPIC_API_KEY=INVULLEN_claude_api_key            # VERPLICHT (in n8n credential)

# --- Telegram ---
TELEGRAM_BOT_TOKEN=INVULLEN_bot_token                # VERPLICHT (in n8n credential)
TELEGRAM_CHAT_ID=INVULLEN_chat_id                    # VERPLICHT

# --- E-mail (optioneel) ---
SMTP_HOST=smtp.uw-mailserver.nl
SMTP_PORT=587
SMTP_USER=security-informer@uw-domein.nl
SMTP_PASSWORD=INVULLEN_smtp_wachtwoord
SMTP_FROM=Security Informer <security-informer@uw-domein.nl>
REPORT_TO_EMAIL=iso@uw-domein.nl

# --- Domeinen (Traefik) ---
NOCODB_DOMAIN=assets.uw-domein.nl
ADMIN_DOMAIN=admin.uw-domein.nl
GRAFANA_DOMAIN=monitor.uw-domein.nl

# --- Grafana ---
GF_SECURITY_ADMIN_PASSWORD=INVULLEN_sterk_wachtwoord # VERPLICHT

# --- n8n Credential IDs (invullen na stap 6) ---
N8N_CREDENTIAL_ANTHROPIC_ID=
N8N_CREDENTIAL_TELEGRAM_ID=
N8N_CREDENTIAL_VULNCHECK_ID=
Sterke wachtwoorden
Gebruik voor elke INVULLEN-waarde een uniek, random gegenereerd wachtwoord. Tip: openssl rand -base64 48 genereert een sterk wachtwoord.

Stap 3: Stack starten

bash
# Start alle containers in de achtergrond
docker compose up -d

# Controleer of alle containers actief zijn
docker compose ps

# Verwacht output:
# NAME                  STATUS      PORTS
# si-postgres           running
# si-nocodb             running
# si-admin              running
# si-grafana            running

Stap 4: Databaseschema toepassen

Het SQL-initialisatiescript maakt alle tabellen, indexen en initiële data aan.

bash
# Wacht tot PostgreSQL volledig opgestart is (ca. 10 seconden)
sleep 10

# Pas het databaseschema toe
docker compose exec postgres psql \
  -U "$POSTGRES_USER" \
  -d "$POSTGRES_DB" \
  -f /docker-entrypoint-initdb.d/schema.sql

# Verifieer: controleer of tabellen aangemaakt zijn
docker compose exec postgres psql \
  -U "$POSTGRES_USER" \
  -d "$POSTGRES_DB" \
  -c "\dt"

Stap 5: n8n workflows importeren

Importeer alle zeven workflows via de n8n REST API. Zorg dat N8N_API_KEY en N8N_BASE_URL correct zijn ingesteld in uw .env.

bash
# Laad .env variabelen
source .env

# Workflow 1: CVE Feeds (VulnCheck + CISA KEV)
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/01_cve_feeds.json | jq '.id'

# Workflow 2: EPSS Score Updater
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/02_epss_updater.json | jq '.id'

# Workflow 3: ENISA EUVD Fetcher
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/03_enisa_euvd.json | jq '.id'

# Workflow 4: RSS News Feeds
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/04_rss_feeds.json | jq '.id'

# Workflow 5: Claude AI Asset Matching
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/05_ai_matching.json | jq '.id'

# Workflow 6: Telegram Alerts + Email Reports
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d @workflows/06_notifications.json | jq '.id'

# Noteer de geretourneerde workflow-IDs — nodig voor activatie in stap 7

Stap 6: n8n credentials configureren

Configureer de benodigde credentials in n8n. API keys worden nooit in workflow JSON gezet — ze worden als n8n credential aangemaakt en via credential ID gerefereerd.

VulnCheck API key

bash
# Maak VulnCheck credential aan als HTTP Header Auth
VULNCHECK_CRED=$(curl -s -X POST "${N8N_BASE_URL}/api/v1/credentials" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"VulnCheck API\",
    \"type\": \"httpHeaderAuth\",
    \"data\": {
      \"name\": \"Authorization\",
      \"value\": \"Bearer ${VULNCHECK_API_KEY}\"
    }
  }")

# Sla het credential ID op
echo $VULNCHECK_CRED | jq '.id'
# Voeg toe aan .env: N8N_CREDENTIAL_VULNCHECK_ID=<id>
Anthropic & Telegram
De Anthropic en Telegram credentials zijn al geconfigureerd in uw bestaande n8n instantie. Zoek de credential IDs op via GET /api/v1/credentials en voeg ze toe aan .env als N8N_CREDENTIAL_ANTHROPIC_ID en N8N_CREDENTIAL_TELEGRAM_ID.

Stap 7: Workflows activeren

Activeer alle workflows. Vervang <WORKFLOW_ID> met de IDs die u in stap 5 heeft genoteerd.

bash
# Activeer een workflow (herhaal voor alle 7 workflow IDs)
curl -s -X POST "${N8N_BASE_URL}/api/v1/workflows/<WORKFLOW_ID>/activate" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}"

# Of activeer alle in één keer met het meegeleverde script:
bash scripts/activate_workflows.sh

Stap 8: Verificatie

Controleer of het systeem volledig operationeel is.

1

Admin Portaal

Ga naar het domein dat u heeft geconfigureerd als ADMIN_DOMAIN. Log in met ADMIN_PASSWORD. Het dashboard toont de status van alle bronnen en workflows.

2

NocoDB

Ga naar het domein dat u heeft geconfigureerd als NOCODB_DOMAIN. Log in met het geconfigureerde admin account. U zou de tabel assets, subsidiaries en andere basistabellen moeten zien.

3

Grafana

Ga naar het domein dat u heeft geconfigureerd als GRAFANA_DOMAIN. Log in met GF_SECURITY_ADMIN_PASSWORD. Het Security Informer dashboard is automatisch beschikbaar via de dashboardlijst.

4

Test de Telegram-verbinding

Trigger handmatig de notificatieworkflow vanuit n8n om een testbericht naar uw Telegram chat te sturen. Controleer of het bericht aankomt.

5

Voeg uw eerste asset toe

Voeg via NocoDB een testasset toe (bijv. vendor: "Microsoft", product: "Windows 10", criticality: "high"). Wacht op de volgende CVE-fetch cyclus om te zien of het matching correct werkt.

Traefik integratie

Alle services zijn geconfigureerd met de vereiste Traefik labels. De volgende domeinen worden aangemaakt (configureerbaar via .env):

ServiceDomein.env variabele
NocoDBuw eigen keuzeNOCODB_DOMAIN
Admin Portaaluw eigen keuzeADMIN_DOMAIN
Grafanauw eigen keuzeGRAFANA_DOMAIN

TLS-certificaten worden automatisch aangevraagd via de Let's Encrypt DNS challenge die geconfigureerd is in uw Traefik instantie.

Probleemoplossing

Container start niet op

bash
# Bekijk container logs
docker compose logs si-postgres
docker compose logs si-nocodb
docker compose logs si-admin

# Controleer .env op ontbrekende verplichte waarden
grep "INVULLEN" .env

n8n workflow importeert niet

bash
# Test n8n API verbinding
curl -s "${N8N_BASE_URL}/api/v1/workflows" \
  -H "X-N8N-API-KEY: ${N8N_API_KEY}" | jq '.data | length'
# Verwacht: een getal (aantal workflows)

PostgreSQL verbindingsfout vanuit n8n

Netwerk
n8n draait als externe container en bereikt PostgreSQL via het Docker netwerk. Zorg dat n8n op hetzelfde netwerk is als de Security Informer stack, of configureer een externe PostgreSQL-verbinding via het host IP. PostgreSQL heeft geen publieke poort — communicatie gaat altijd via het interne Docker netwerk.

Geen Telegram berichten

  • Controleer of TELEGRAM_BOT_TOKEN en TELEGRAM_CHAT_ID correct zijn
  • Verifieer dat de bot is toegevoegd aan de juiste chat/groep
  • Controleer de notificatieregels in het admin portaal (tijdvenster actief?)
  • Controleer of de relevantiescore boven de drempelwaarde uitkomt

Testscript

bash
# Voer het meegeleverde testscript uit voor volledige verificatie
bash scripts/test_stap_1.sh   # PostgreSQL + schema
bash scripts/test_stap_2.sh   # NocoDB + assets
bash scripts/test_stap_3.sh   # CVE feeds connectiviteit
bash scripts/test_stap_6.sh   # Volledige end-to-end test