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-publicnetwerk - n8n instantie operationeel (aparte container op uw eigen domein)
- Git voor het clonen van de repository
API keys & tokens
| Service | Waarvoor | Verkrijgen via | Verplicht |
|---|---|---|---|
| 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
# 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.
cp .env.example .env nano .env # of uw favoriete editor
Volledige .env template
# ============================================================
# 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=
openssl rand -base64 48 genereert een sterk wachtwoord.
Stap 3: Stack starten
# 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.
# 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.
# 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
# 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>
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.
# 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.
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.
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.
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.
Test de Telegram-verbinding
Trigger handmatig de notificatieworkflow vanuit n8n om een testbericht naar uw Telegram chat te sturen. Controleer of het bericht aankomt.
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):
| Service | Domein | .env variabele |
|---|---|---|
| NocoDB | uw eigen keuze | NOCODB_DOMAIN |
| Admin Portaal | uw eigen keuze | ADMIN_DOMAIN |
| Grafana | uw eigen keuze | GRAFANA_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
# 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
# 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
Geen Telegram berichten
- Controleer of
TELEGRAM_BOT_TOKENenTELEGRAM_CHAT_IDcorrect 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
# 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