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解析, 密码管理, 应用安全, 数字取证, 自动化脚本, 蜜罐, 证书利用, 防御绕过检测