Private Malware-/Blacklist-/DAST-Observations mit Hash, Verdict, Review- und Publish-Status.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Security-Feed-Storage
Schreibpfad erst nach Tabellen, Triggern und Freigabe
Security-Feed-Storage ist noch nicht schreibbereit: 11 Datenbank-Artefakt(e) fehlen oder die Serverfreigabe ist nicht aktiv.
Readiness zeigt technische Schreibbereitschaft und Betreiberfreigabe. Es veröffentlicht keine Secrets, keine Feed-Rohdaten und keine personenbezogenen Logs.
Preflight-Artefakte
DB-Artefakte fuer Feed-Storage transparent pruefen
Verknuepft private Feed-Observations mit Alerts/Tickets ohne Rohpayload-Export.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Append-only Review-, Publish-, Suppress- und Delete-Entscheidungen.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Schneller Zugriff auf letzte Feed-Checks pro Domain.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Auswertung nach Feed-Quelle und Verdict.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Loesch- und Ablaufjobs finden faellige Observations.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Sanitisierte Metadaten bleiben filterbar.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Verhindert doppelte Alert-Verknuepfungen.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Audit-Events koennen pro Dedupe-Key nachvollzogen werden.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Aenderungen setzen updated_at automatisch.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Aenderungen setzen updated_at automatisch.
infra/postgres/migrations/security-feed-storage.sql mit DB-Owner/Admin aus sicherer Shell anwenden.Storage Canary
Synthetischer Schreibtest ohne externe Feed-Abfrage
Security-Feed-Storage-Canary ist definiert, aber noch nicht erfolgreich gespeichert oder durch Freigabe-Gates blockiert.
Eine upsertbare synthetische Observation mit source_id=security_feed_storage_canary, verdict=inconclusive, publish_decision=not_public.
Ein Auditlog-Eintrag runner_observation_upsert mit after_hash ueber die normalisierten Metadaten.
Kein Alert-Link und kein Ticket, weil der Canary kein echter Treffer ist.
Dedupe-Key aus Domain, Source, matched_url und reference_id verhindert doppelte Tages-Observations.
Inconclusive-Canary laeuft nach 14 Tagen ab, sofern er nicht durch den naechsten Canary-Lauf aktualisiert wird.
Schreibt nur bei aktiver Serverfreigabe eine private synthetische Observation.
SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes python3 scripts/run-security-feed-schedule.py anrufer.info --base-url http://127.0.0.1 --max 1 --timeout 15 --storage-canary
saferpage-security-feed-canary.service läuft über saferpage-security-feed-canary.timer, ohne --execute-ready.
04:15-04:35 Europe/Berlin plus RandomizedDelaySec 20min · Env: /etc/saferpage/security-feed.env
Datenbank
Tabellen, Indizes und Trigger
Normalisierte Momentaufnahmen aus externen Malware-/Blacklist-/DAST-Feeds.
- Vorhanden
- nein
- Zeilen
Verknuepfung gespeicherter Feed-Beobachtungen mit Alert, Ticket, Owner, SLA und Reviewstatus.
- Vorhanden
- nein
- Zeilen
Auditlog fuer Import, Review, Freigabe, Loeschung und Re-Scan.
- Vorhanden
- nein
- Zeilen
- Vorhanden
- nein
- Vorhanden
- nein
- Vorhanden
- nein
- Vorhanden
- nein
- Vorhanden
- nein
- Vorhanden
- nein
security_feed_observations
- Vorhanden
- nein
security_feed_alert_links
- Vorhanden
- nein
Migration
Dedizierte SQL-Datei für den DB-Owner
Diese Migration erzeugt nur die Security-Feed-Storage-Artefakte. Sie aktiviert keine externen Feed-Runs und keine Speicherung ohne Serverfreigabe.
curl -fsS https://saferpage.de/sicherheit/feed-storage-migration.sql -o /tmp/saferpage-security-feed-storage.sql && psql -d saferpage -v ON_ERROR_STOP=1 -f /tmp/saferpage-security-feed-storage.sql
Runbook
Aktivierung nur kontrolliert
Dedizierte Migration mit einem autorisierten DB-Owner anwenden: psql -d saferpage -v ON_ERROR_STOP=1 -f infra/postgres/migrations/security-feed-storage.sql
Danach Readiness erneut prüfen und Tabellen/Indizes/Trigger als ready bestätigen.
SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes erst nach Betreiberfreigabe, Retention-Review und Alert-Routing setzen.
Optionalen Storage-Canary mit --storage-canary ausführen, um eine synthetische private Observation ohne externe Feed-Abfrage zu testen.
Separaten systemd-Canary-Timer prüfen: systemctl list-timers saferpage-security-feed-canary.timer --no-pager.
Ersten Runner-Lauf kontrollieren: stored_observation_count muss zu den aktivierungsbereiten Domains passen.
DB-Owner Paket
Migration, Smoke-Test und Freigabereihenfolge
PostgreSQL-Owner oder Rolle mit CREATE TABLE, CREATE INDEX, CREATE TRIGGER im Schema public.
psql -d saferpage -v ON_ERROR_STOP=1 -f infra/postgres/migrations/security-feed-storage.sql
Die Migration legt nur Tabellen, Indizes und Trigger an. Secret-Werte und Feed-Rohdaten werden dabei nicht benötigt.
psql -d saferpage -Atq -c "select current_database(), current_user;"
psql -d saferpage -Atq -c "select coalesce(to_regclass('public.security_feed_observations')::text,'missing');"
psql -d saferpage -Atq -c "select to_regclass('public.security_feed_observations') is not null, to_regclass('public.security_feed_alert_links') is not null, to_regclass('public.security_feed_audit_log') is not null;"
psql -d saferpage -Atq -c "select count(*) from pg_trigger where tgname in ('security_feed_observations_set_updated_at','security_feed_alert_links_set_updated_at');"
curl -fsS https://saferpage.de/sicherheit/feed-storage-readiness-json | python3 -m json.tool
DDL-Migration anwenden.
Readiness-Endpunkt prüfen: Tabellen, Indizes und Trigger müssen ready sein.
Feed- und Delivery-Secrets serverseitig setzen und PHP/Runner neu laden.
Canary-Timer installieren/aktivieren und zuerst ohne Storage-Freigabe blockiertes Verhalten pruefen.
SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED=yes erst nach Betreiberfreigabe setzen.
Sofortige Pause ohne DDL-Rollback: SAFERPAGE_SECURITY_FEED_STORAGE_APPROVED entfernen und Runner neu laden.
Bei fehlerhaften Observations: review_status=suppressed setzen statt Rohdaten zu löschen, sofern Auditpflicht besteht.
DDL-Drop nur nach Retention-/Audit-Entscheidung und Backupfreigabe ausführen.
Readiness zeigt required_table_count=3 und ready_table_count=3.
Readiness zeigt required_index_count=6 und ready_index_count=6.
Readiness zeigt required_trigger_count=2 und ready_trigger_count=2.
Storage-Freigabe ist nur nach dokumentierter Betreiberentscheidung aktiv.
Runner-State zeigt keine Secret-Werte und keine Feed-Rohpayloads.