Malcolm doesn't just integrate with Suricata — it ships it as a core component. Suricata runs inside Malcolm's Docker Compose stack as one of ~15 containers, providing signature-based threat detection against network traffic. Malcolm handles the surrounding infrastructure: log ingestion, normalization, indexing, and visualization through OpenSearch Dashboards.
This is a "batteries included" relationship. When you deploy Malcolm, Suricata is already configured, its rules are automatically updated, and its EVE JSON alerts flow directly into the same OpenSearch cluster where Zeek logs and Arkime PCAP sessions live.
Network TAP / SPAN port or PCAP upload
↓
┌─────────┴─────────┐
│ │
Zeek Suricata
(protocol logs) (IDS alerts)
│ │
└────────┬──────────┘
↓
Logstash + Filebeat
(normalization)
↓
OpenSearch
(unified index)
↓
OpenSearch Dashboards + Arkime
(search & visualize)
Suricata's EVE JSON output is picked up by Filebeat, processed through Logstash enrichment pipelines (adding GeoIP, ASN, protocol metadata), and indexed alongside Zeek's connection logs. This means a single OpenSearch query can correlate a Suricata alert with the Zeek connection log for the same session, plus retrieve the raw packets from Arkime.
./scripts/install.py.rules files in Malcolm's suricata/rules/ directoryevent.dataset: suricata