NetworkSecurityLabs/snort3-admin-login-detection

GitHub: NetworkSecurityLabs/snort3-admin-login-detection

该项目演示了如何在 Ubuntu 上使用 Snort3 自定义规则实时检测针对 Apache 管理页面的暴力破解登录攻击。

Stars: 0 | Forks: 0

# 🛡️ 实时管理员登录攻击检测器 — Ubuntu 上的 Snort3 + Apache 针对 Web 管理面板的暴力破解登录攻击在实际环境中 constantly 发生。本项目展示了如何实时捕获它们——就在有人猛击你登录页面的那一刻。 一个受密码保护的 Apache Web 服务器运行在 Ubuntu 上,并由 Snort3 监控网络接口。来自 Kali Linux 攻击机的失败登录尝试会触发自定义的 Snort3 规则,并以 fast 和 full 日志格式生成警报。 📖 **Dev.to 上的完整演练:** [我如何在 Ubuntu 上使用 Snort3 和 Apache 构建了一个实时管理员登录攻击检测器](https://dev.to/almahmudkhalif/lab-task-14-how-i-built-a-real-time-admin-login-attack-detector-using-snort3-and-apache-on-ubuntu-45l9) ## 🖥️ 环境 | 机器 | 操作系统 | 角色 | |---|---|---| | Ubuntu (服务器) | Ubuntu 24.x | Web 服务器 + Snort3 IDS | | Kali Linux (攻击者) | Kali 2025/2026 | 攻击模拟 | | 网络 | Host-only / NAT | VirtualBox | ## ⚙️ 步骤 1 — 安装并验证 Apache2 ``` sudo apt update sudo apt install apache2 -y sudo apt install apache2-utils -y sudo systemctl status apache2 ``` ![Apache2 安装和状态](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/535k2lw1axrnnb0lu256.png) ![Apache2 激活运行状态](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n4m18uhe0pumc7u92y9k.png) ## 📄 步骤 2 — 创建管理员 Web 页面 ``` sudo mkdir /var/www/html/admin sudo nano /var/www/html/admin/index.html ``` ``` Welcome to Admin Page ``` ``` sudo rm /var/www/html/index.html ``` ![创建 admin 目录](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dbktqoaolz9y62t1zfm.png) ![nano 编辑器中的 admin index.html](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xyk4r1zo1q6d5lvn1evv.png) ![移除默认 index 和 htpasswd 设置](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/osjxsa5t4ao0kcrw0ojn.png) ## 🔐 步骤 3 — 为 admin 目录设置密码保护 ``` sudo htpasswd -c /etc/apache2/.htpasswd adminuser sudo chmod -R 755 /var/www/html/admin ``` ![htpasswd 用户创建和 chmod](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7ffvqvpw9n1xdhe83q5.png) ## 🔧 步骤 4 — 配置 Apache Virtual Host ``` sudo nano /etc/apache2/sites-available/000-default.conf ``` 在 `` 中添加: ``` AuthType Basic AuthName "Restricted Admin Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user ``` ![带有 Directory 块的 000-default.conf](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/glelnv4pfcrlm1y4x940.png) ``` sudo a2enmod headers sudo systemctl restart apache2 sudo systemctl status apache2 ``` ![a2enmod headers 和 apache 重启](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rc87h74ctaqdi2zf62cq.png) ## 🌐 步骤 5 — 确认管理页面已上线 ``` ip a ``` 从 Kali 访问 `http:///admin` —— 应该会弹出一个 Basic Auth 登录窗口。 ![Ubuntu IP 地址输出](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ynr0i0g7ba8oxdua2wj8.png) ![Kali 浏览器显示的管理员登录弹窗](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tzbibiqs2mn3gorlzng3.png) ## 📝 步骤 6 — 编写自定义 Snort3 检测规则 ``` sudo nano /usr/local/etc/rules/local-rules/local.rules ``` ``` alert tcp any any -> any 80 ( msg:"Unauthorized Access to admin page"; content:"Authorization"; sid:1000011; rev:2; ) ``` | 规则组件 | 用途 | |---|---| | `alert tcp any any -> any 80` | 监控所有发往端口 80 的 TCP 流量 | | `content:"Authorization"` | 匹配 HTTP Basic Auth header | | `msg` | 日志中显示的警报标签 | | `sid:1000011` | 唯一的规则标识符 | ![带有新 alert 规则的 local.rules 文件](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eojmxcdl0m0cbnp5605h.png) ![Snort 规则文件概览](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bb9quy7czlhd8v6irqlo.png) ## ✅ 步骤 7 — 验证 Snort3 配置 ``` snort -c /usr/local/etc/snort/snort.lua -T ``` 预期输出: ``` Snort successfully validated the configuration (with 0 warnings). ``` ![Snort 配置验证输出](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzlla6gkfgzviudcjv3v.png) ![Snort 验证完成并退出](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibtc73j2246j5i8ur2w8.png) ## 🚀 步骤 8 — 以 Alert Fast 模式运行 Snort3 ``` sudo snort -A alert_fast -i enp0s3 -c /usr/local/etc/snort/snort.lua ``` ![Snort alert_fast 模式启动](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0y18p78kvfxs8i9x0sx.png) ![Snort 开始处理数据包](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8pc13n1r46veuv8md0u6.png) ## 💥 步骤 9 — 模拟攻击 从 Kali 访问 `http:///admin` 并输入错误的凭据 4-5 次。观察 Snort 终端实时触发警报。 ![攻击模拟 —— 来自 Kali 的登录尝试触发 Snort 警报](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9lpzuo66oa09c80shblv.png) ## 📋 步骤 10 — Full 日志格式 ``` sudo snort -A full -i enp0s3 -c /usr/local/etc/snort/snort.lua ``` Full 格式包含 TCP flags、序列号、TTL 和窗口大小 —— 非常适合进行取证分析。 ![Snort full 日志模式启动](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ombdnu1e8t0g2czi4m8t.png) ![带有数据包级详细信息的 Full 日志警报](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zjmig1z0zjya6cr7pwfl.png) ## 🧪 验证清单 - Apache 运行中:`sudo systemctl status apache2` → `active (running)` - 管理页面受保护:`http:///admin` 提示登录 - Snort 检测:登录尝试后警报显示 `"Unauthorized Access to admin page"` - 配置有效:`snort -c /usr/local/etc/snort/snort.lua -T` → 0 个警告 - Full 日志工作正常:`-A full` 标志为每个警报输出数据包级别的详细信息 ## ⚠️ 常见错误 | 错误 | 发生的情况 | 修复方法 | |---|---|---| | 未运行 `sudo a2enmod headers` | Apache 无法重启 | 运行它,然后重启 Apache | | `-i` 标志中指定的网络接口错误 | Snort 捕获不到任何内容 | 使用 `ip a` 确认 | | 规则 content 关键字不匹配 | 没有触发任何警报 | 使用 Wireshark 验证 header 字符串 | | `sid` 重复 | Snort 配置失败 | 使用 10000000+ 范围内的 SID | | 浏览器缓存保留了 auth cookie | 登录跳过了提示 | 使用无痕模式 | | 跳过 `snort -T` | 在生产环境中出现静默规则错误 | 在正式运行前始终进行验证 | ## 🌐 与我联系 [![Dev.to](https://img.shields.io/badge/Dev.to-0A0A0A?style=for-the-badge&logo=devdotto&logoColor=white)](https://dev.to/almahmudkhalif) [![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/khalif-al-mahmud)
标签:Apache, Snort3, 免杀技术, 安全实验环境, 暴力破解检测