拉取式封禁名单 + 官方爬虫 IP 段镜像。不改你的架构:cron 拉名单,喂给你已有的 ipset / nginx / 防火墙 / CDN。门神宕机时旧名单继续生效(fail-open)。 免费注册获取 Key · 控制台 · 服务状态
每个接入方有 PROPERTY_ID 与 hex 格式 HMAC_KEY(注册即发)。
免费档 = 每日刷新的高置信长期封禁名单(累犯源,无增量);实时全量 + 增量属付费档,上线前免费开放。
名单接口签固定串 banfeed:<PROPERTY_ID>:
SIG=$(printf 'banfeed:%s' "$PROPERTY_ID" \
| openssl dgst -sha256 -mac HMAC -macopt "hexkey:$HMAC_KEY" -hex | sed 's/.*= //')
curl -sS https://api.ipbouncer.com/client/checkup.sh | bash
本地分析你的 nginx 日志:爬虫普查、高频源、4xx 爆发、冒充官方爬虫的假身 (对照厂商官方段)。只读不改配置,唯一网络请求是拉 40KB 的段镜像。
curl -sS https://api.ipbouncer.com/client/install.sh | PROPERTY_ID=你的id HMAC_KEY=你的hexkey bash
# 加装日志上报(把你站上拦到的攻击源回报进全局池,上报量可抵扣):
# ... | PROPERTY_ID=.. HMAC_KEY=.. REPORTER=1 bash
# 宝塔面板自动适配(日志路径 /www/wwwlogs)。卸载方法见脚本头部注释。
REPORTER=1 同时启用本地防御:假爬虫(UA 自称 Googlebot/GPTBot 等、
IP 却不在官方段)封 24h,单 IP 超速/4xx 爆发封 1h——判定和执行都在你本机,
不等全局评分往返,装完即刻有防御。官方段内的 IP 永不误封。
上报的隔离期:新接入方的上报先只记录、不进入全局评分,运营复核上报质量后转正
——这是对名单质量的保护,也是对你的保护(别人投毒不会脏了你拉到的名单)。
# 1. 下载客户端(与我们自己三台生产机跑的是同一份逻辑)
curl -sSo /usr/local/bin/menshen-banfeed.sh https://api.ipbouncer.com/client/banfeed.sh
chmod +x /usr/local/bin/menshen-banfeed.sh
# 2. 写配置(0600)
mkdir -p /etc/menshen && cat > /etc/menshen/banfeed.conf <<EOF
ENDPOINT=https://api.ipbouncer.com
PROPERTY_ID=你的id
HMAC_KEY=你的hexkey
EOF
chmod 600 /etc/menshen/banfeed.conf
# 3. 每分钟 cron
echo '* * * * * root /usr/local/bin/menshen-banfeed.sh' > /etc/cron.d/menshen-banfeed
脚本自动建 ipset + iptables 规则、自动走游标增量(全量 20MB+ / 增量通常几 KB)、
本地白名单过滤(/etc/menshen/whitelist.txt),MenShen 不可达时本轮跳过、
已有条目按 TTL 自然过期——fail-open 是内建行为不是配置项。
curl -sS --compressed -H "X-Property-Id: $PROPERTY_ID" -H "X-Signature: $SIG" \
https://api.ipbouncer.com/v1/banfeed \
| grep '"op": "add"' | sed 's/.*"ip": "\([^"]*\)".*/deny \1;/' \
> /etc/nginx/menshen-deny.conf.tmp \
&& mv /etc/nginx/menshen-deny.conf.tmp /etc/nginx/menshen-deny.conf \
&& nginx -s reload
# server 块里: include /etc/nginx/menshen-deny.conf;
各厂商自己发布的爬虫 IP 段(OpenAI / Anthropic / Perplexity / Google / Apple), 每日聚合。用途:自称 GPTBot / ClaudeBot / Googlebot 的请求,源 IP 落在对应官方段内 才是真身——大陆服务器拉不到这些源站,这份镜像替你拉。
curl -sS https://api.ipbouncer.com/v1/crawler-ranges | jq '.sources | keys'
# 每个源含 ua_hint(覆盖哪些 UA)、creationTime(厂商侧版本)、prefixes(CIDR 列表)
用一个 Worker 定时把名单同步进你 CF 账户的自定义 IP List,WAF 一条规则
ip.src in $list → Block,拦截发生在 Cloudflare 边缘。
模板(含部署步骤与 Free 计划 1 万条上限的取舍说明):
cloudflare-worker.js。
| 接口 | 鉴权 | 说明 |
|---|---|---|
GET /v1/banfeed | HMAC | 封禁名单:全量(ETag/304)+ 游标增量 |
GET /v1/crawler-ranges | 无 | 官方爬虫段镜像,每日更新 |
GET /v1/ip/{ip} | 无 | 单 IP 信誉查询 |
POST /v1/signals | HMAC | 行为信号上报(reporter 自动调) |
GET /appeal | 无 | 误封申诉 |
封禁哲学:动态地址首封仅 2 小时(不是行业惯例的 24h 起), 累犯才升级;档案里出现真人行为立即解封。误封请走 申诉。 事件数据保留 90 天。