使用命令行工具进行AbuseIPDB批量报告
摘要
本文演示了如何使用awk和jq等命令行工具处理服务器日志,并将滥用IP地址批量报告给AbuseIPDB,以应对抓取攻击。
<p><a href="https://lobste.rs/s/vjds7h/bulk_abuseipdb_reporting_using_command">评论</a></p>
查看缓存全文
缓存时间: 2026/09/10 04:09
# 使用命令行工具进行 AbuseIPDB 批量举报
来源:https://blog.mbirth.uk/2026/08/30/bulk-abuseipdb-reporting-using-command-line-tools.html
某个僵尸网络正在爬取我的本地 Gitea 实例,它会尝试访问所有可能的 URL。甚至连同一张表都会以各种可能的排序方式被查询:升序、降序、按第二列升序、按第二列降序,依此类推。这给服务器带来了不必要的负载,也消耗了大量带宽。
几乎所有的请求都来自全球各地的随机 IP 地址。而且它们还使用随机化的 `User-Agent` 字符串——其中许多甚至根本不存在。如果是在几年前,这种行为会被归类为 DDoS 攻击。
Hacker News 上的一位用户向我推荐了 https://www.abuseipdb.com/ ——一个类似于 spamcop.net (https://www.spamcop.net/) 的网站,但举报的是 IP 地址而非电子邮件地址。
借助一点命令行魔法,我为他们的批量举报工具(https://www.abuseipdb.com/bulk-report)创建了一个 CSV 文件:
```bash
echo "IP,Categories,ReportDate,Comment" > /tmp/abuseipdb.csv
cat access.log \
| grep " 302 " | grep "sort=" \
| awk '{print $1",\
\"19\",\
\""substr($4, 2), substr($5, 0, length($5)-1)"\",\
\"Distributed parallel HTTP scraping from random IPs with random user-agents\""}' \
| sort -t, -k1,1 -u >> /tmp/abuseipdb.csv
```
此命令从我的 Traefik `access.log` 中筛选出包含 HTTP 302 重定向(我临时设置的——但即使这样,爬虫在过去三天里仍在请求不存在的 URL)并且 URL 中包含 `sort=`(即上述各种排序变体的参数)的行。
筛选后,`awk` 打印第一个字段(IP 地址),接着是 `"19"`(这是 AbuseIPDB 为 *Bad Web Bot*(恶意网页爬虫)定义的分类代码 (https://www.abuseipdb.com/categories))。然后它截取第四个字段的前两个字符,并截取第五个字段的最后一个字符。Traefik 的日志时间戳格式为 `\[30/Aug/2026:20:00:00 \+0000\]`,`awk` 会看到前面带空格的格式,这样处理可以去掉方括号。
(另外,我测试过这个时间字符串能被 strtotime() (https://secure.php.net/manual/en/function.strtotime.php) 正确解析。)
最后,它输出举报的注释/原因。
接着通过 `sort` 处理,使用逗号作为分隔符,并以第一个字段(且仅第一个字段)作为排序键来保证唯一性,即重复的 IP 地址将被过滤掉。
最终结果输出到文件 `/tmp/abuseipdb.csv`——准备上传到该网站。或者通过其 API 推送:
```bash
curl https://api.abuseipdb.com/api/v2/bulk-report -F csv=@/tmp/abuseipdb.csv -H "Key: API_KEY"
```
AbuseIPDB 贡献者徽章 (https://www.abuseipdb.com/user/343752)
## 改用 JSON 格式而非 CLF
我最近将 Traefik 切换为 JSON 日志格式,以获取更多详细信息,如请求的主机名和 HTTP 头信息。为此准备提交数据时,`jq` 工具非常方便:
```bash
echo "IP,Categories,ReportDate,Comment" > /tmp/abuseipdb.csv
jq -r 'select(.DownstreamStatus == 302)
| select((.RequestPath | contains("sort=")) or (.RequestPath | contains("blame")))
| [.ClientHost, "19", .time, "Distributed parallel HTTP scraping from random IPs with random user-agents"]
| @csv' access.log \
| tail -n 5000 \
| sort -t, -k1,1 -u >> /tmp/abuseipdb.csv
```
此命令选择 HTTP 302 且请求 URL 中包含 `sort=` 或 `blame` 的日志条目。然后它只取最近的 5000 个请求(我在 AbuseIPDB 的每日举报上限),确保 IP 唯一,并写入 CSV 文件。
相似文章
进攻性互联网姿态
作者解释了如何通过伪造 WordPress 登录、endlessh tarpit、阻止 AI 爬虫、伪造 phpinfo、无限虚假网站以及提示注入来毒化大语言模型,从而保护他的 VPS 和博客免受机器人和爬虫的侵扰。
在我的网站上屏蔽ASN(或类似)
一份技术指南,介绍如何使用iptables以及net-consolidator和cidr-aggregator等合并工具,从网站屏蔽整个ASN和云服务商IP范围,以减少不必要的机器人和AI爬虫流量。
一种让你的DHCP服务器耗尽动态IP的不寻常方式
克里斯·西本曼解释了他的反爬虫措施,由于针对LLM训练的高频爬虫激增,他阻止旧版浏览器,这给Feed阅读器和存档服务带来了混乱。
令人毛骨悚然的爬虫
Konstantin Ryabitsev 讨论了恶意网络爬虫如何在git.kernel.org上消耗过多CPU资源,影响合法访问,并引发对如Datasette等服务的担忧。
戏弄IIS服务器:乐趣与牢狱之灾
一份详细的技术指南,介绍如何发现和利用配置错误的IIS服务器进行漏洞赏金狩猎,涵盖Shodan查询、波浪线枚举、web.config利用和WAF绕过等技术。