
crowdsecurity/blocklist-mirrorblocklist-mirror 是一款轻量级工具,旨在与 CrowdSec LAPI(Local API)集成,获取安全决策(如***IP地址)并通过 HTTP 端点以多种格式提供阻止列表。它允许网络设备(如防火墙、路由器)或安全工具轻松导入这些阻止列表,增强网络安全防护能力。
适用于已部署 CrowdSec 的网络环境,需要将 CrowdSec 生成的安全决策同步至网络设备(如 MikroTik 路由器、Juniper SRX 防火墙)、防火墙或其他安全工具的场景。例如:
获取 CrowdSec LAPI 密钥
在运行 CrowdSec LAPI 的机器上执行以下命令生成 lapi_key:
bashsudo cscli -oraw bouncers add blocklistMirror
创建配置文件
创建 cfg.yaml 配置文件,基础模板如下:
yamlconfig_version: v1.0 crowdsec_config: lapi_key: ${API_KEY} # 替换为实际的 lapi_key lapi_url: [***] # 替换为 LAPI 可访问地址 update_frequency: 10s include_scenarios_containing: [] exclude_scenarios_containing: [] only_include_decisions_from: [] insecure_skip_verify: false blocklists: - format: plain_text # 支持 plain_text、mikrotik、juniper endpoint: /security/blocklist authentication: type: none # 支持 none、ip_based、basic user: password: trusted_ips: - 127.0.0.1 - ::1 listen_uri: 0.0.0.0:41412 tls: cert_file: key_file: metrics: enabled: true endpoint: /metrics log_media: stdout log_level: info
配置调整
crowdsec_config 中的 lapi_url(确保容器可访问 LAPI)、update_frequency(更新频率)等参数。blocklists 部分配置阻止列表格式(format)、访问端点(endpoint)及身份验证方式(authentication)。tls.cert_file 和 tls.key_file 的路径。bashdocker run \ -v $PWD/cfg.yaml:/etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml \ -p 41412:41412 \ crowdsecurity/blocklist-mirror
-v:挂载本地配置文件到容器内指定路径。-p:映射容器端口(41412)到主机,允许外部访问阻止列表端点。| 参数 | 描述 |
|---|---|
lapi_url | CrowdSec LAPI 的 URL,容器需能访问此地址。 |
lapi_key | 访问 LAPI 的密钥,通过 cscli bouncers add 命令生成。 |
update_frequency | 从 LAPI 获取决策的更新频率,例如 10s(10秒)。 |
include_scenarios_containing | 仅包含触发包含指定关键词场景的决策,为空则包含所有。 |
exclude_scenarios_containing | 排除触发包含指定关键词场景的决策,为空则不排除。 |
only_include_decisions_from | 仅包含指定来源的决策,例如 ["cscli", "crowdsec"]。 |
insecure_skip_verify | 是否跳过 TLS 证书验证,设为 true 时不验证(不建议生产环境使用)。 |
listen_uri | 服务监听地址,格式为 IP:端口,例如 0.0.0.0:41412。 |
| 参数 | 描述 |
|---|---|
cert_file | TLS 证书文件路径(启用 TLS 时必填)。 |
key_file | TLS 私钥文件路径(启用 TLS 时必填)。 |
| 参数 | 描述 |
|---|---|
enabled | 是否启用指标收集,true 为启用,false 为禁用。 |
endpoint | 指标暴露端点,例如 /metrics。 |
每个阻止列表包含以下配置:
| 参数 | 描述 |
|---|---|
format | 阻止列表格式,支持 plain_text、mikrotik、juniper。 |
endpoint | 阻止列表访问端点,例如 /security/blocklist。 |
authentication | 身份验证配置,详见下方 authentication 参数表。 |
| 参数 | 描述 |
|---|---|
type | 身份验证类型:none(无验证)、basic(基本验证)、ip_based(IP验证)。 |
user | basic 验证时的用户名。 |
password | basic 验证时的密码。 |
trusted_ips | ip_based 验证时允许访问的 IP/IP 段列表,例如 ["192.168.1.0/24", "::1"]。 |
访问阻止列表端点时可附加以下查询参数:
| 参数 | 描述 | 是否需值 | 示例 |
|---|---|---|---|
ipv4only | 仅返回 IPv4 地址。 | 否 | http://localhost:41412/security/blocklist?ipv4only |
ipv6only | 仅返回 IPv6 地址。 | 否 | http://localhost:41412/security/blocklist?ipv6only |
nosort | 不排序 IP 地址,可提升性能(约 1ms)。 | 否 | http://localhost:41412/security/blocklist?nosort |
origin | 仅返回指定来源的 IP,需指定来源值。 | 是 | http://localhost:41412/security/blocklist?origin=cscli |
纯文本格式,每行一个 IP 地址。
示例:
text1.2.3.4 4.3.2.1 2001:470:1:c84::17
生成 MikroTik 脚本,用于自动更新防火墙地址列表。
| 参数 | 描述 |
|---|---|
listname=foo | 指定地址列表名称,默认 CrowdSec。 |
示例输出(listname=foo):
bash/ip/firewall/address-list/remove [ find where list="foo" ]; :global CrowdSecAddIP; :set CrowdSecAddIP do={ :do { /ip/firewall/address-list/add list=foo address=$1 comment="$2" timeout=$3; } on-error={ } } $CrowdSecAddIP 1.2.3.4 "ssh-bf" 152h40m24s $CrowdSecAddIP 4.3.2.1 "postfix-spam" 166h40m25s $CrowdSecAddIP 2001:470:1:c84::17 "ssh-bf" 165h13m42s
通过 MikroTik 脚本定期拉取并导入阻止列表:
bash:local name "[crowdsec]" :local url "http://<IP>:41412/security/blocklist?ipv4only&nosort" # 替换为实际地址 :local fileName "blocklist.rsc" :log info "$name fetch blocklist from $url" /tool fetch url="$url" mode=http dst-path=$fileName :if ([:len [/file find name=$fileName]] > 0) do={ :log info "$name import;start" /import file-name=$fileName :log info "$name import:done" } else={ :log error "$name failed to fetch the blocklist" }
生成 Juniper SRX 防火墙支持的 CIDR 格式纯文本文件(需端点以 .txt 结尾)。
示例:
text1.2.3.4/32 4.3.2.1/32 2001:470:1:c84::17/128
调整 blocklist 端点
在 cfg.yaml 中设置端点为 .txt 结尾:
yamlblocklists: - format: plain_text endpoint: /security/blocklist.txt # 需以 .txt 结尾 authentication: type: none
SRX 动态地址配置
textset security dynamic-address feed-server crowdsec url [***] # 替换为 blocklist-mirror 地址 set security dynamic-address feed-server crowdsec update-interval 30 set security dynamic-address feed-server crowdsec feed-name crowdsec path /security/blocklist.txt set security dynamic-address address-name crowdsec-blocklist profile feed-name crowdsec
验证配置
textuser@srx> show security dynamic-address summary
成功配置后将显示类似以下内容:
textServer Name : crowdsec Hostname/IP : [***] Update interval : 30 ... Feed Name : crowdsec Mapped dynamic address name : crowdsec-blocklist URL : [***] Total IPv4 entries : ***






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