
crowdsecurity/crowdsecCrowdsec是一款开源、轻量级的代理工具,用于检测和响应不良行为。它还能自动受益于全球社区范围的IP信誉数据库。
以下所有镜像均在Docker Hub上提供,支持386、amd64、arm/v6、arm/v7、arm64架构。
crowdsecurity/crowdsec:{version}推荐用于生产环境的最新稳定版本。也可在GitHub(ghcr.io)获取。
crowdsecurity/crowdsec:dev用于开发和测试,基于master分支构建。
自v1.4.2起:
crowdsecurity/crowdsec:slim体积减少60%,不包含通知器插件和GeoIP数据库。如果需要决策中的这些详细信息,可在容器内运行cscli hub upgrade在运行时下载GeoIP数据库。
crowdsecurity/crowdsec:{version}-debiancrowdsecurity/crowdsec:latest-debianDebian版本包含对systemd和journalctl的支持。
您可以使用Dockerfile和Dockerfile-debian构建自定义镜像。
例如,如果需要不带插件通知器的Debian版本:
console$ docker build -f Dockerfile.debian --target slim .
支持的目标值:full、geoip、plugins、slim。
注意:对于版本<1.5.0的Crowdsec,语法为:
console$ docker build -f Dockerfile.debian --build-arg=BUILD_ENV=slim .
自CrowdSec 1.7.0起,/var/lib/crowdsec/data/必须挂载为卷。如果未挂载此目录,容器将无法启动。
要使用journalctl作为日志流,无论是否使用DSN环境变量,都需要将主机的journal日志挂载到容器:
-v /var/log/journal:/run/log/journal
集合是一个很好的起点:[***]
在hub中查找集合、场景、解析器和后处理规则:[***]
crowdsecurity/linux)/etc/crowdsec/acquis.d/目录中的文件将日志映射到提供的解析器。更多信息:[***]
该目录可能包含例如:
ssh.yaml:
yamlfilenames: - /logs/auth.log - /logs/syslog labels: type: syslog
apache.yaml:
yamlfilename: /logs/apache2/*.log labels: type: apache2
labels.type:如果日志来自syslog,使用syslog;否则,请查看集合文档获取相关类型。
您可以从主机绑定目录或将其放在Docker卷中,前者在添加更多应用时更容易更新。
注意:在版本<1.5中,采集目录默认未配置。您可以通过挂载/etc/crowdsec/config.yaml.local文件添加:
yamlcrowdsec_service: acquisition_dir: /etc/crowdsec/acquis.d
1.5.0之前,建议将采集配置放在/etc/crowdsec/acquis.yaml中。如果您愿意,仍然可以这样做,但每个数据源一个文件更有效。
yamlfilenames: - /logs/auth.log - /logs/syslog labels: type: syslog --- filename: /logs/apache2/*.log labels: type: apache2
我们强烈建议将Crowdsec配置和数据库持久化到命名卷中,或从主机绑定挂载,以避免在容器销毁和重建、版本更新等情况下丢失凭据和决策数据。
/etc/crowdsec/etc/crowdsec/acquis.d和/或/etc/crowdsec/acquis.yaml(是的,它们可以嵌套在/etc/crowdsec中)/var/lib/crowdsec/datashelldocker run -d \ -v crowdsec_config:/etc/crowdsec \ -v local_path_to_crowdsec_config/acquis.d:/etc/crowdsec/acquis.d \ -v local_path_to_crowdsec_config/acquis.yaml:/etc/crowdsec/acquis.yaml \ -v crowdsec_data:/var/lib/crowdsec/data \ -v /var/log/auth.log:/logs/auth.log:ro \ -v /var/log/syslog.log:/logs/syslog.log:ro \ -v /var/log/apache:/logs/apache:ro \ -e COLLECTIONS="crowdsecurity/apache2 crowdsecurity/sshd" \ -p 8080:8080 -p 6060:6060 \ --name crowdsec crowdsecurity/crowdsec
查看使用docker-compose的完整堆栈示例:[***]
容器使用特定的docker配置构建。如果您需要更改配置,且docker变量(见下文)不够用,可以从主机挂载/etc/crowdsec/config.yaml.local。该文件应仅包含您要更改的config.yaml选项,如覆盖值中所述。
不再推荐绑定挂载完整的config.yaml文件,您也应该不需要这样做。
如果要使用通知系统,必须使用完整镜像(非slim),并至少挂载自定义的profiles.yaml和通知配置到/etc/crowdsec/notifications
shelldocker run -d \ -v ./profiles.yaml:/etc/crowdsec/profiles.yaml \ -v ./http_notification.yaml:/etc/crowdsec/notifications/http_notification.yaml \ -p 8080:8080 -p 6060:6060 \ --name crowdsec crowdsecurity/crowdsec
Crowdsec由解析日志并创建警报的代理和将这些警报转换为决策的本地API(LAPI)组成。这两个功能由相同的可执行文件提供,因此代理和LAPI可以在同一容器或单独的容器中运行。在复杂配置中,在每个运行受保护应用的机器上部署代理,而LAPI收集所有代理的信号并与中央API通信是合理的。
无TLS认证:
shelldocker exec -it crowdsec_lapi_container_name cscli machines add agent_user_name --password agent_password
有TLS认证:
代理会自动注册,不需要用户名或密码。代理名称从其连接的IP地址派生。
在docker run命令中添加以下环境变量:
DISABLE_LOCAL_API=trueAGENT_USERNAME="agent_user_name" - 之前向LAPI注册的agent_user_nameAGENT_PASSWORD="agent_password" - 之前向LAPI注册的agent_passwordLOCAL_API_URL="[***]"Crowdsec是检测组件,修复通过bouncers实现。每个bouncer保护特定组件。了解更多:
[***]
[***]
无TLS认证:
您可以在启动时使用环境变量或Docker secrets向Crowdsec容器注册bouncers。如果不先删除现有bouncer,无法使用此过程更新现有bouncer。
使用环境变量时,格式应为BOUNCER_KEY_<name>=<key>。例如BOUNCER_KEY_nginx=mysecretkey***。
使用Docker secrets时,secret名称应为bouncer_key_<name>,内容为<key>。例如bouncer_key_nginx的内容为mysecretkey***。
Bouncer密钥可以是任何字符串,但建议使用字母数字值,以与Crowdsec生成的密钥保持一致,并避免特殊字符转义问题。
有TLS认证:
Bouncers会自动注册,不需要API密钥。Bouncers名称从其连接的IP地址派生。
我们提供基于Web的界面以充分利用Crowdsec:[***]
在此订阅:[***]
使用绑定挂载而非命名卷(完整解释)会增加复杂性,因为您必须逐个绑定相关文件,而使用命名卷可以挂载完整的配置和数据文件夹。另一方面,命名卷导航不太直观。
注意对于持久配置(即绑定挂载或卷):设置变量时,其值可能在每次容器运行时写入相应文件(通常是config.yaml)。
| 变量 | 默认值 | 描述 |
|---|---|---|
CONFIG_FILE | /etc/crowdsec/config.yaml | 配置文件位置 |
DISABLE_AGENT | false | 禁用代理,运行仅LAPI容器 |
DISABLE_LOCAL_API | false | 禁用LAPI,运行仅代理容器 |
DISABLE_ONLINE_API | false | 禁用在线API注册以进行信号共享 |
TEST_MODE | false | 不运行服务,仅测试配置:-e TEST_MODE=true |
TZ | 设置时区以确保日志具有本地时间戳 | |
LOCAL_API_URL | [***] | LAPI URL,当DISABLE_LOCAL_API为true时需要更改:-e LOCAL_API_URL="[***]" |
PLUGIN_DIR | /usr/local/lib/crowdsec/plugins/ | 插件目录:-e PLUGIN_DIR="<path>" |
METRICS_PORT | 6060 | 暴露Prometheus指标的端口 |
| LAPI | (与DISABLE_LOCAL_API一起使用时无效) | |
USE_WAL | false | 启用SQLite的预写日志 |
CUSTOM_HOSTNAME | localhost | 本地代理(与LAPI在同一容器中运行)的名称 |
CAPI_WHITELISTS_PATH | capi_whitelists.yaml的路径 | |
| Agent | (与DISABLE_AGENT一起使用时无效) | |
TYPE | 时间机器中文件的Labels.type:-e TYPE="<type>" | |
DSN | 在时间机器中处理单个源:-e DSN="file:///var/log/toto.log"或-e DSN="cloudwatch:///your/group/path:stream_name?profile=dev&backlog=16h"或-e DSN="journalctl://filters=_SYSTEMD_UNIT=ssh.service" | |
UNREGISTER_ON_EXIT | 容器停止时从LAPI中删除代理 | |
| Bouncers | ||
BOUNCER_KEY_<name> | 注册名称为<name>、密钥等于环境变量值的bouncer | |
| 控制台 | ||
ENROLL_KEY | 从控制台获取的注册密钥,用于注册实例 | |
ENROLL_INSTANCE_NAME | 设置实例名称以在控制台中查看 | |
ENROLL_TAGS | 已注册实例的标签,用于搜索和筛选 | |
ENABLE_CONSOLE_ALL | 启用所有控制台选项 | |
ENABLE_CONSOLE_MANAGEMENT | 启用控制台管理(自1.6.9起忽略此选项) | |
ENABLE_CONSOLE_CONTEXT | 将警报上下文发送到控制台(已注册实例自动启用) | |
ENABLE_CONSOLE_TAINTED | 将受污染的警报(来自修改的场景)发送到控制台(已注册实例自动启用) | |
ENABLE_CONSOLE_MANUAL | 将手动警报(cscli decisions add)发送到控制台(已注册实例自动启用) | |
ENABLE_CONSOLE_CUSTOM | 将自定义警报(来自自定义场景)发送到控制台(已注册实例自动启用) | |
| 密码认证 | ||
AGENT_USERNAME | 代理用户名(如果是LAPI则注册,如果是代理则使用):-e AGENT_USERNAME="machine_id" | |
AGENT_PASSWORD | 代理密码(如果是LAPI则注册,如果是代理则使用):-e AGENT_PASSWORD="machine_password" | |
| TLS加密 | ||
USE_TLS | false | 启用TLS加密(作为LAPI或代理) |
CACERT_FILE | CA证书 bundle(用于自签名证书) | |
INSECURE_SKIP_VERIFY | 跳过LAPI证书验证 | |
LAPI_CERT_FILE | LAPI TLS证书路径 | |
LAPI_KEY_FILE | LAPI TLS密钥路径 | |
| TLS认证 | (需要USE_TLS=true) | |
CLIENT_CERT_FILE | 客户端TLS证书路径(启用TLS认证) | |
CLIENT_KEY_FILE | 客户端TLS密钥路径 | |
AGENTS_ALLOWED_OU | agent-ou | 允许的代理OU值,用逗号分隔 |
BOUNCERS_ALLOWED_OU | bouncer-ou | 允许的bouncers OU值,用逗号分隔 |
| Hub管理 |




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务