mirror of
https://github.com/magnus919/agent-skills.git
synced 2026-09-11 19:47:12 +03:00
Clarify state-changing CrowdSec hub updates and frame CLI Builder idempotency and JSON as contracts.
147 lines
6.8 KiB
Markdown
147 lines
6.8 KiB
Markdown
---
|
|
name: crowdsec
|
|
description: >-
|
|
Deploy, configure, and operate CrowdSec Security Engine, cscli, remediation
|
|
components, acquisition pipelines, and AppSec WAF. Use for Linux or Docker
|
|
installation, detection-to-blocking design, incident review, and safe changes.
|
|
Do not use for generic firewall, Kubernetes, or reverse-proxy design; route
|
|
those to the named platform skill and use this skill for CrowdSec integration.
|
|
license: MIT
|
|
compatibility: Requires CrowdSec/cscli for live operations; Docker is optional for container deployment.
|
|
metadata:
|
|
source: https://docs.crowdsec.net
|
|
version: 0.0.3
|
|
---
|
|
|
|
# CrowdSec
|
|
|
|
CrowdSec detects hostile behavior from logs and HTTP requests, then exposes
|
|
alerts and decisions through LAPI. The engine alone does not block traffic:
|
|
install and verify at least one remediation component (bouncer) before claiming
|
|
protection.
|
|
|
|
## Safety Gate
|
|
|
|
Before any mutation, confirm the target host/container, scope, backup or rollback,
|
|
and maintenance window. Prefer read-only inspection and simulation first. Never
|
|
manually delete decisions, collections, or data without recording the reason and
|
|
an undo path. Save bouncer keys when created; they are shown once. Use
|
|
`simulation: true` while tuning scenarios so detections are observed without
|
|
enforcement, then verify allowlists before live blocking.
|
|
|
|
## Choose a Deployment
|
|
|
|
For Debian/Ubuntu, add the CrowdSec repository, install `crowdsec`, then install
|
|
a remediation package such as `crowdsec-firewall-bouncer-iptables` or
|
|
`-nftables`. For Docker Compose, expose LAPI (`127.0.0.1:8080`), metrics
|
|
(`127.0.0.1:6060`), and AppSec (`127.0.0.1:7422`) only to required networks,
|
|
mount `/etc/crowdsec`, `/var/lib/crowdsec/data`, and logs read-only, and pin a
|
|
reviewed image version. Persist the data directory, mandatory for v1.7.0+.
|
|
Load [the Docker deployment guide](references/docker-deployment.md) for a full
|
|
compose example and remote-agent caveats.
|
|
|
|
After installation, verify `systemctl status crowdsec` (or container health),
|
|
then `cscli version`, `cscli collections list`, acquisition metrics, and
|
|
bouncer connectivity. Do not expose LAPI or AppSec publicly without an explicit
|
|
network and authentication design.
|
|
|
|
## The Detection-to-Blocking Workflow
|
|
|
|
1. Select collections for the actual log format, for example
|
|
`crowdsecurity/linux`, `sshd`, `nginx`, `traefik`, or `base-http-scenarios`.
|
|
2. Configure acquisition in `/etc/crowdsec/acquis.yaml` or `acquis.d/`; every
|
|
source needs `labels.type` so the correct parser runs. Use
|
|
`poll_without_inotify: true` for unreliable NFS/SMB or bind mounts and
|
|
`use_time_machine: true` for buffered logs.
|
|
3. Check parser/scenario hits and unparsed lines with `cscli metrics -o json`.
|
|
4. Use profiles to map alerts to decisions. Keep `profiles.yaml.local` and
|
|
remember YAML sequences replace rather than merge.
|
|
5. Add a bouncer with `cscli bouncers add NAME`, store its one-time key securely,
|
|
and verify `cscli bouncers list` plus a harmless test decision.
|
|
6. Confirm the reverse proxy/firewall is actually enforcing decisions; an alert
|
|
or LAPI decision alone is not proof of a blocked request.
|
|
|
|
For complete configuration directives, database choices, and hardening, read
|
|
[config-reference](references/config-reference.md),
|
|
[database-config](references/database-config.md), and
|
|
[production-hardening](references/production-hardening.md).
|
|
|
|
## cscli Essentials
|
|
|
|
Use `cscli -o json` for automation and capture command output, version, host,
|
|
and time as evidence. Read-only triage commonly uses:
|
|
|
|
```bash
|
|
cscli version
|
|
cscli hub list
|
|
cscli collections list
|
|
cscli alerts list --contain "scenario:ssh-bf"
|
|
cscli decisions list -o json
|
|
cscli metrics -o json
|
|
cscli explain --file /path/to/sample.log
|
|
```
|
|
|
|
`cscli hub update` refreshes the local hub index and can change local state. It
|
|
is optional, not part of the read-only triage path, and requires the safety gate
|
|
above before running it. Manage hub items with
|
|
`collections|parsers|scenarios install/list/upgrade/inspect`; those install,
|
|
upgrade, and delete operations also require the safety gate. Manage alerts and
|
|
decisions with `alerts list/inspect` and `decisions add/list/delete`; mutation
|
|
commands require the safety gate above.
|
|
Manage bouncers and machines with `bouncers add/list/delete` and
|
|
`machines add/list/delete`. Use `console status`, `console enroll`, and
|
|
`lapi register` only after confirming the destination and credentials. Load the
|
|
[full cscli reference](references/cscli-command-reference.md) for flags,
|
|
output modes, and less common commands.
|
|
|
|
## Acquisition and AppSec WAF
|
|
|
|
A minimal file acquisition entry is:
|
|
|
|
```yaml
|
|
filenames: [/var/log/nginx/*.log]
|
|
labels: {type: nginx}
|
|
```
|
|
|
|
For AppSec, install the relevant virtual-patching/CRS collections and add an
|
|
`appsec` acquisition source listening on `7422` with
|
|
`appsec_config: crowdsecurity/appsec-default` and `labels.type: appsec`. Route
|
|
requests from the proxy to AppSec and decide failure behavior deliberately:
|
|
fail-open preserves availability but can bypass protection; fail-closed protects
|
|
more strongly but can cause an outage. Test with benign fixtures and inspect
|
|
AppSec metrics before enabling blocking. In-band rules block or captcha the
|
|
current request; out-of-band rules emit events for later scenarios. Load
|
|
[the AppSec deep dive](references/appsec-deep-dive.md) and the relevant
|
|
[bouncer guide](references/traefik-bouncer.md) or
|
|
[nginx-bouncer](references/nginx-bouncer.md).
|
|
|
|
## Operations and Troubleshooting
|
|
|
|
Check service logs, `cscli metrics`, parser/unparsed counts, scenario hits,
|
|
active decisions, and bouncer last-pull time in that order. Distinguish “no
|
|
logs acquired”, “logs acquired but unparsed”, “parsed but no scenario hit”,
|
|
“decision exists but bouncer is stale”, and “bouncer enforced but proxy routing
|
|
is wrong”. Do not interpret an empty alert query as proof of safety. Use
|
|
[the troubleshooting guide](references/troubleshooting.md) and the
|
|
[operations checklist](references/operations-checklist.md) for a bounded
|
|
verification packet.
|
|
|
|
Use profiles and notifications deliberately. Test notification plugins with
|
|
`cscli notifications test NAME`; never place webhook secrets or CTI keys in
|
|
examples. Enable TLS/mTLS for LAPI across trust boundaries and review
|
|
community/blocklist pulls before relying on them.
|
|
|
|
## References
|
|
|
|
- [Docker deployment](references/docker-deployment.md)
|
|
- [Configuration](references/config-reference.md)
|
|
- [cscli commands](references/cscli-command-reference.md)
|
|
- [AppSec WAF](references/appsec-deep-dive.md)
|
|
- [Operations checklist](references/operations-checklist.md)
|
|
- [Troubleshooting](references/troubleshooting.md)
|
|
- [Production hardening](references/production-hardening.md)
|
|
- [Database configuration](references/database-config.md)
|
|
- [Hub collections](references/hub-collections.md)
|
|
- [Traefik bouncer](references/traefik-bouncer.md)
|
|
- [Nginx bouncer](references/nginx-bouncer.md)
|