使用命令行工具进行AbuseIPDB批量报告

Lobsters Hottest 工具

摘要

本文演示了如何使用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 文件。

相似文章

进攻性互联网姿态

Lobsters Hottest

作者解释了如何通过伪造 WordPress 登录、endlessh tarpit、阻止 AI 爬虫、伪造 phpinfo、无限虚假网站以及提示注入来毒化大语言模型,从而保护他的 VPS 和博客免受机器人和爬虫的侵扰。

在我的网站上屏蔽ASN(或类似)

Lobsters Hottest

一份技术指南,介绍如何使用iptables以及net-consolidator和cidr-aggregator等合并工具,从网站屏蔽整个ASN和云服务商IP范围,以减少不必要的机器人和AI爬虫流量。

令人毛骨悚然的爬虫

Simon Willison's Blog

Konstantin Ryabitsev 讨论了恶意网络爬虫如何在git.kernel.org上消耗过多CPU资源,影响合法访问,并引发对如Datasette等服务的担忧。

戏弄IIS服务器:乐趣与牢狱之灾

Hacker News Top

一份详细的技术指南,介绍如何发现和利用配置错误的IIS服务器进行漏洞赏金狩猎,涵盖Shodan查询、波浪线枚举、web.config利用和WAF绕过等技术。