gistrec/nginx-scanner-trap
GitHub: gistrec/nginx-scanner-trap
将 nginx 主机变成针对漏洞扫描器的蜜罐,使用 fail2ban 和 nftables 自动封禁探测敏感路径的恶意 IP。
Stars: 0 | Forks: 0
# nginx-scanner-trap
将一台 nginx 主机变成用于漏洞扫描器的蜜罐——并使用 **fail2ban + nftables** 自动
封禁它们。只需一个脚本,开箱即用。
机器人日夜不停地探测每个公共 IP 的 `/.env`、`/.git/config`、`/wp-login.php`、
`/phpmyadmin`…… 每一个都是无害的 404,但大量的探测会产生无谓的负载和噪音,将
真正的 404 淹没在你的警报中。`setup-honeypot.sh` 会让机器人因为**第一次**此类请求
而失去对整个主机的访问权限。
## 它的功能
- 添加一个 nginx `log_format`,**仅记录客户端 IP**(http 上下文)。
- `honeypot.conf` — 将敏感路径(`/.env`、`/.git`、`/.aws`、`/.ssh`、
`wp-login.php`、`phpmyadmin`……)的探测记录到专用日志中并返回 404。
- `deny-dotfiles.conf` — 对任何其他点文件(dotfile)返回 404,不纳入陷阱中。
- 将这两个 snippet(配置片段)接入到 `sites-enabled/` 中的每个 `server { }` 中
(幂等操作,每个文件首先进行备份)。
- 安装并配置 **fail2ban**:一个用于仅包含 IP 日志的过滤器和一个 jail
(`maxretry=1`、`nftables-allports`,递增封禁时间最长可达一周)。
- **自动检测你的 IP** 并询问是否有额外的 IP 需要加入白名单——因为封禁会拦截
*所有*端口(包括 SSH),这可以防止你将自己锁定在外。
## 快速开始
下载、阅读、运行:
```
curl -fsSLO https://raw.githubusercontent.com/gistrec/nginx-scanner-trap/main/setup-honeypot.sh
less setup-honeypot.sh # read it
sudo bash setup-honeypot.sh # interactive: confirms your IP, asks for extras
```
预览而不做任何更改:
```
sudo bash setup-honeypot.sh --dry-run
```
单行命令(仅在你信任它时使用):
```
curl -fsSL https://raw.githubusercontent.com/gistrec/nginx-scanner-trap/main/setup-honeypot.sh | sudo bash
```
## 选项
| flag | 含义 |
|------|---------|
| `--ip ` | 你的管理员 IP(跳过自动检测) |
| `--extra ""` | 额外加入白名单的 IP/CIDR(空格分隔) |
| `--no-wire` | 不碰 `sites-enabled`;仅打印 include 行 |
| `--bantime ` | 基础封禁时间(默认 `86400` = 24小时) |
| `--maxtime ` | 最大递增封禁时间(默认 `1w`) |
| `-y, --yes` | 默认确认,无提示 |
| `--dry-run` | 显示将要发生的操作,不进行任何更改 |
## 安全性
- **幂等** — 重复运行不会产生重复的 include;受管理的文件将原地重写。
- **备份** — 对其编辑的每个文件都会首先复制到 `*.bak.`。
- **带有回滚的 `nginx -t`** — 如果接入配置片段破坏了配置文件,站点编辑将被
自动还原,并且脚本将中止运行。
- **优先白名单** — 你的 IP(通过 `SSH_CONNECTION` →
`who am i` → `ss` 自动检测)加上你添加的任何 IP,并且始终包含 `127.0.0.1/8 ::1`。
- 保持现有的 `/etc/fail2ban/jail.local` 不变。
## 要求
Debian/Ubuntu,已安装 nginx,root 权限。如果缺少 `fail2ban` 和 `nftables`,
脚本会自动安装它们。
## 检查 / 解封
```
sudo fail2ban-client status nginx-honeypot
sudo nft list table inet f2b-table
sudo fail2ban-client set nginx-honeypot unbanip # one IP
sudo fail2ban-client unban --all # everything
```
## 许可证
[MIT](LICENSE) © Aleksandr Kovalko
标签:CISA项目, Fail2ban, Nginx, Web服务器, 动态API解析, 密码管理, 应用安全, 数字取证, 自动化脚本, 蜜罐, 证书利用, 防御绕过检测