MenShen · IP 信誉名单

拉取式封禁名单 + 官方爬虫 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 的段镜像。

接法 A · 一键安装(推荐)

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 永不误封。
上报的隔离期:新接入方的上报先只记录、不进入全局评分,运营复核上报质量后转正 ——这是对名单质量的保护,也是对你的保护(别人投毒不会脏了你拉到的名单)。

接法 A′ · 手动三条命令(等价)

# 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 是内建行为不是配置项。

接法 B · nginx deny 文件

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;

接法 C · 官方爬虫段镜像(免鉴权)

各厂商自己发布的爬虫 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 列表)

接法 D · Cloudflare 边缘(源站零改动)

用一个 Worker 定时把名单同步进你 CF 账户的自定义 IP List,WAF 一条规则 ip.src in $list → Block,拦截发生在 Cloudflare 边缘。 模板(含部署步骤与 Free 计划 1 万条上限的取舍说明): cloudflare-worker.js。

接口一览

接口鉴权说明
GET /v1/banfeedHMAC封禁名单:全量(ETag/304)+ 游标增量
GET /v1/crawler-ranges无官方爬虫段镜像,每日更新
GET /v1/ip/{ip}无单 IP 信誉查询
POST /v1/signalsHMAC行为信号上报(reporter 自动调)
GET /appeal无误封申诉

封禁哲学:动态地址首封仅 2 小时(不是行业惯例的 24h 起), 累犯才升级;档案里出现真人行为立即解封。误封请走 申诉。 事件数据保留 90 天。