在Elasticsearch集群的日常运维中,Cerebro作为轻量级管理工具深受开发者喜爱。但默认安装后直接暴露在公网的9000端口,无异于将集群管理权限拱手让人。本文将手把手带您完成三个关键动作:绑定Cerebro到本地回环、配置Nginx反向代理、启用Basic认证,最终实现既保持管理便捷性又确保安全性的双重目标。
当Cerebro服务监听在0.0.0.0时,任何能访问服务器IP的用户都可以:
我们采用分层防御策略:
生产环境建议同时启用防火墙规则,仅允许特定IP访问Nginx暴露端口
首先需要调整Cerebro的监听设置,以下是基于systemd的配置流程:
bash复制# 修改服务配置文件
sudo vim /etc/systemd/system/cerebro.service
# 关键修改项:
ExecStart=/opt/cerebro/bin/cerebro -Dhttp.address=127.0.0.1 -Dhttp.port=9000
验证配置生效的完整流程:
bash复制# 重载服务配置
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart cerebro
# 检查监听端口
netstat -tulnp | grep 9000
# 正确输出应显示:tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
常见问题排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 端口未监听 | 服务启动失败 | 检查journalctl -u cerebro |
| 仍监听0.0.0.0 | 配置未生效 | 确认daemon-reload后重启 |
| 连接被拒绝 | 防火墙限制 | 临时关闭防火墙测试 |
安装Nginx并配置基础认证:
bash复制# Ubuntu/Debian
sudo apt install nginx apache2-utils
# CentOS/RHEL
sudo yum install nginx httpd-tools
生成密码文件(推荐使用bcrypt加密):
bash复制# 创建密码文件
sudo htpasswd -c -B /etc/nginx/cerebro_passwd admin
# 验证密码文件
cat /etc/nginx/cerebro_passwd
# 输出示例:admin:$2y$05$N9qo8uLOickgx2ZMRZoMy.Mrqsf3pCJH2olb5STWZrV2/3eJk9B6K
Nginx核心配置示例:
nginx复制server {
listen 9001;
server_name your_domain.com;
# 基础认证
auth_basic "Cerebro Access";
auth_basic_user_file /etc/nginx/cerebro_passwd;
# 反向代理配置
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 120s;
}
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
add_header Cache-Control "public";
proxy_pass http://127.0.0.1:9000;
}
}
配置优化建议:
nginx复制location / {
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;
# ...原有proxy配置...
}
通过Lua脚本整合Google Authenticator:
nginx复制location / {
access_by_lua_block {
local ga = require "resty.googleauth"
if not ga.verify() then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
# ...原有配置...
}
在Nginx中添加详细日志记录:
nginx复制log_format cerebro_audit '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for"';
access_log /var/log/nginx/cerebro_access.log cerebro_audit;
安全响应头配置示例:
nginx复制add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'";
配置Prometheus监控Nginx状态:
yaml复制# prometheus.yml 配置示例
scrape_configs:
- job_name: 'nginx'
metrics_path: '/nginx_status'
static_configs:
- targets: ['cerebro-proxy:9001']
关键监控指标告警规则:
日志分析常用命令:
bash复制# 查看认证失败记录
grep '401' /var/log/nginx/access.log
# 统计访问IP排名
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 实时监控错误日志
tail -f /var/log/nginx/error.log
在实施过程中遇到认证失效时,可以依次检查: