最近在排查某业务系统时发现一个典型的安全隐患——Druid监控页面直接暴露在公网且未做任何访问控制。这种配置相当于把服务器性能指标、SQL查询记录、会话信息等敏感数据直接"裸奔"在互联网上。攻击者只需知道IP和端口,就能获取包括:
更危险的是,部分运维人员为了方便,常使用弱密码或默认密码(如admin/123456),这给攻击者提供了直接控制入口。去年某电商平台就因类似配置导致用户数据泄露,直接损失达数百万。
针对Druid监控页面的保护,常见有以下几种方案:
| 方案 | 实施难度 | 安全性 | 维护成本 | 适用场景 |
|---|---|---|---|---|
| 单纯依赖Druid账号密码 | 低 | 低 | 低 | 内网测试环境 |
| Spring Security集成 | 中 | 高 | 中 | 已有安全框架系统 |
| Nginx基础认证 | 低 | 中 | 低 | 快速加固场景 |
| Nginx+IP白名单 | 中 | 高 | 中 | 固定办公网络 |
本次推荐的Nginx 3步加固方案,是基于以下考虑:
确保已安装:
检查当前Nginx配置中Druid的访问路径,典型配置如下:
nginx复制location /druid/ {
proxy_pass http://localhost:8080/druid/;
proxy_set_header Host $host;
}
使用htpasswd创建认证文件(建议存放在/etc/nginx/conf.d/下):
bash复制sudo htpasswd -c /etc/nginx/conf.d/druid_passwd admin
执行后会提示输入密码,建议使用16位以上包含大小写字母、数字和特殊字符的组合。完成后查看文件:
code复制admin:$apr1$J3m6t0NY$jZqJ7ZxLzw8LzQ2QzQ2Qz.
重要提示:务必设置该文件权限为600:
bash复制sudo chmod 600 /etc/nginx/conf.d/druid_passwd
在原有location块中添加认证配置:
nginx复制location /druid/ {
auth_basic "Druid Monitor";
auth_basic_user_file /etc/nginx/conf.d/druid_passwd;
proxy_pass http://localhost:8080/druid/;
proxy_set_header Host $host;
# 可选:限制访问IP
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
}
执行配置测试:
bash复制sudo nginx -t
确认无误后重载配置:
bash复制sudo systemctl reload nginx
HTTPS强制加密:
nginx复制server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他SSL优化配置...
}
访问频率限制:
nginx复制limit_req_zone $binary_remote_addr zone=druid_limit:10m rate=1r/s;
location /druid/ {
limit_req zone=druid_limit burst=5;
# 其他配置...
}
敏感接口隐藏:
nginx复制location ~ ^/druid/(api|reset) {
return 403;
}
http://your-domain/druid/index.html应弹出认证窗口bash复制tail -f /var/log/nginx/error.log
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 认证窗口不弹出 | auth_basic指令位置错误 | 确保在location块内最上方 |
| 密码正确但仍认证失败 | 密码文件权限问题 | chmod 600密码文件 |
| 配置修改后不生效 | 浏览器缓存旧认证 | 使用隐私窗口测试或清除缓存 |
| 白名单IP仍被拒绝 | CIDR格式错误 | 检查如192.168.1.0/24的写法 |
密码定期轮换:
bash复制# 每月1日执行
0 0 1 * * /usr/bin/htpasswd -b /etc/nginx/conf.d/druid_passwd admin $(openssl rand -base64 12)
监控异常访问:
bash复制# 统计认证失败次数
grep '401' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
备份配置:
bash复制# 每天备份配置
tar -czf /backup/nginx_$(date +%Y%m%d).tar.gz /etc/nginx/conf.d/
这套方案在笔者负责的多个金融级系统中稳定运行超过3年,成功拦截了数百次恶意扫描尝试。实际部署时建议配合WAF和IDS系统使用,形成纵深防御体系。