blocklist-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 : ***
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429