CNSL
Correlated Network Security Layer
A self-hosted SIEM for Linux.
Detects attacks that span SSH, web, database, and cloud logs simultaneously -- then blocks them automatically.
What it does
Most tools watch one log and count failures. CNSL watches everything at once.
When an attacker scans your web server, probes your database, then tries SSH with stolen credentials -- CNSL sees all three as one coordinated attack and responds before the breach completes.
Web scan from 45.33.32.1 --+
SSH brute from 45.33.32.1 --+---> HIGH alert + auto-block
DB auth fail from 45.33.32.1 --+
It also tracks how far each attacker has progressed through the kill chain, learns new attack patterns automatically, and shares threat intelligence across multiple servers in real time.
Beyond core detection: multi-node federation with a unified hub view, STIX 2.1 export and a built-in TAXII 2.1 server for sharing IOCs, Wazuh/OSSEC integration, PostgreSQL support with a migration tool, a Kubernetes Helm chart, attacker fingerprinting (spots the same actor rotating IPs), graph-based campaign correlation, and opt-in predictive blocking that reacts to an attack's trajectory before any single rule's threshold fires.
Quick start
pip install cnsl[full]
sudo python -m cnsl --dashboard --no-tcpdump
# Open http://127.0.0.1:8765
# Default login: admin / cnsl-change-me
Or from source:
git clone https://github.com/rahadbhuiya/cnsl.git
cd cnsl
python3 -m venv venv && source venv/bin/activate
pip install -e ".[full]"
sudo venv/bin/python -m cnsl --dashboard --no-tcpdump
Start in dry-run mode (default) -- no real blocks until you add
--execute.
Or on Kubernetes (one DaemonSet pod per node, protecting every node in the cluster):
helm install cnsl ./helm/cnsl --namespace cnsl --create-namespace
See docs/kubernetes.md and helm/cnsl/README.md for the full walkthrough (federation, the multi-node hub view, enabling real blocking).
Dashboard
Enable with --dashboard. Runs at http://127.0.0.1:8765.
Tabs: Overview, Incidents, Blocks, Live Feed, Kill Chain, Graph, Correlation, Hub, Campaigns, Cases, UEBA, ML, Honeypot, FIM, Rules, Rate Limit, Settings.
For remote access use an SSH tunnel:
ssh -L 8765:127.0.0.1:8765 user@yourserver
Configuration
Copy and edit the example config:
cp config/config.example.json /etc/cnsl/config.json
All options are documented in docs/configuration.md.
Key sections: thresholds, actions, dashboard, notifications, redis, cloud_identity, zero_trust, siem, federation.
Documentation
| Document | What it covers |
|---|---|
docs/installation.md |
Full install, systemd, Docker |
docs/configuration.md |
Every config option explained |
docs/features.md |
Complete feature list |
docs/architecture.md |
Module structure and design |
docs/api.md |
Full REST API reference |
docs/kubernetes.md |
Helm chart deployment (DaemonSet, hub view, federation) |
docs/kill-chain.md |
Kill chain tracker (predictive blocking: see docs/api.md) |
docs/federation.md |
Multi-node setup and the hub view |
docs/cloud-identity.md |
AWS + Azure AD integration |
docs/zero-trust.md |
Trust score engine |
docs/siem-connectors.md |
Splunk, Sentinel, Webhook push |
docs/pattern-learning.md |
Automated rule discovery |
docs/rules.md |
Detection rule tuning (correlation-rule tuning: see docs/api.md) |
docs/ueba.md |
User/entity behavior analytics |
docs/cases.md |
Case management |
docs/threat-feed.md |
External threat feed ingestion |
docs/2fa.md |
Two-factor auth for the dashboard |
docs/agent.md |
Remote log-shipping agent |
docs/kafka.md |
Kafka log ingestion |
docs/zeek.md |
Zeek log integration |
docs/ot-iot.md |
OT/ICS protocol support (Modbus, DNP3, SCADA) |
docs/country-blocking.md |
Geo-based blocking |
docs/rate-limiting.md |
API rate limiting |
docs/tenants.md |
Multi-tenant setup |
docs/huddle.md |
Incident huddle/collaboration |
docs/notifications.md |
Email/Slack/Telegram alerts |
docs/changelog.md |
Version history |
docs/ |
Browse all 27 guides |
Requirements
- Linux (Ubuntu 20.04+ / Debian 11+ / RHEL 8+)
- Python 3.10+
- Root or
CAP_NET_ADMINfor iptables blocking
Optional: Redis (distributed blocklist + federation), MaxMind GeoIP database.
License
MIT. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cnsl-3.4.17.tar.gz.
File metadata
- Download URL: cnsl-3.4.17.tar.gz
- Upload date:
- Size: 326.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf7f60c7f4eb55af0a4c6d773c2544f0527bea4c2ee30726d86e6fe3c926bda0
|
|
| MD5 |
ab98c196ce7e6944de1416a931026b9b
|
|
| BLAKE2b-256 |
d82c5aebcd3d4b28515b4320bba3f08ffd80c9b94da81f228d0194b45a2e6e90
|
Provenance
The following attestation bundles were made for cnsl-3.4.17.tar.gz:
Publisher:
ci.yml on rahadbhuiya/cnsl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnsl-3.4.17.tar.gz -
Subject digest:
bf7f60c7f4eb55af0a4c6d773c2544f0527bea4c2ee30726d86e6fe3c926bda0 - Sigstore transparency entry: 2582816384
- Sigstore integration time:
-
Permalink:
rahadbhuiya/cnsl@287d04b278a502bff73859c34796410ea3fa96b2 -
Branch / Tag:
refs/tags/v3.4.17 - Owner: https://github.com/rahadbhuiya
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@287d04b278a502bff73859c34796410ea3fa96b2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cnsl-3.4.17-py3-none-any.whl.
File metadata
- Download URL: cnsl-3.4.17-py3-none-any.whl
- Upload date:
- Size: 285.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
887bd6e4ae09c02825ce38ff6435eb8f9c8958f95dc64fbafb035a254343f1fb
|
|
| MD5 |
55ff1e796aa45daa53575d5558622473
|
|
| BLAKE2b-256 |
02d4415a135e15646d3ce1b91b9d63605fd59d908a45c8f404acfa89cef79b5a
|
Provenance
The following attestation bundles were made for cnsl-3.4.17-py3-none-any.whl:
Publisher:
ci.yml on rahadbhuiya/cnsl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cnsl-3.4.17-py3-none-any.whl -
Subject digest:
887bd6e4ae09c02825ce38ff6435eb8f9c8958f95dc64fbafb035a254343f1fb - Sigstore transparency entry: 2582816394
- Sigstore integration time:
-
Permalink:
rahadbhuiya/cnsl@287d04b278a502bff73859c34796410ea3fa96b2 -
Branch / Tag:
refs/tags/v3.4.17 - Owner: https://github.com/rahadbhuiya
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@287d04b278a502bff73859c34796410ea3fa96b2 -
Trigger Event:
push
-
Statement type: