Wazuh服务器与Elastic Stack集成部署实战指南

张开发
2026/6/12 4:13:26 15 分钟阅读
Wazuh服务器与Elastic Stack集成部署实战指南
1. 为什么需要Wazuh与Elastic Stack集成在当今复杂的网络安全环境中单纯依靠传统的安全防护手段已经远远不够。Wazuh作为一个开源的安全监控平台能够提供入侵检测、日志分析、文件完整性监控等功能。但要让这些安全数据真正发挥价值我们需要一个强大的可视化分析工具——这就是Elastic Stack的用武之地。Elastic Stack包含三个核心组件Elasticsearch负责存储和检索数据Logstash处理数据收集和转换Kibana则提供直观的数据可视化界面。这三者组合起来能够将Wazuh产生的安全数据转化为可操作的洞察。我曾在多个企业环境中部署过这套方案最直观的感受是当安全事件发生时运维团队不再需要面对枯燥的日志文本而是可以通过丰富的仪表盘快速定位问题。比如通过集成的Kibana界面可以一目了然地看到全网主机的安全状态分布、攻击趋势变化等关键指标。2. 环境准备与规划2.1 硬件需求评估根据我的经验部署规模直接决定了硬件配置的选择。对于中小型企业环境监控50-100个节点建议配置服务器4核CPU/8GB内存/200GB存储Elasticsearch节点独立部署8核CPU/16GB内存/500GB SSD特别要注意的是Elasticsearch对I/O性能非常敏感。在一次客户部署中我们最初使用了普通机械硬盘结果查询响应时间长达数秒。换成SSD后性能提升了近10倍。2.2 操作系统选择官方支持的主流Linux发行版包括CentOS/RHEL 7Ubuntu 16.04Debian 9我个人更推荐使用CentOS 7因为其长期支持周期和出色的稳定性。曾经在一个金融行业客户那里他们的CentOS 7系统连续运行了600多天没有重启整套监控系统依然稳定如初。2.3 网络拓扑规划根据不同的安全等级要求有两种典型的部署模式单机部署模式适合测试环境[Wazuh Server] ←→ [Elastic Stack]分布式部署模式生产环境推荐[Wazuh Agents] → [Wazuh Server] → [Filebeat] → [Logstash] → [Elasticsearch Cluster] ← [Kibana]在分布式部署时一定要确保各组件间的网络连通性。我就遇到过因为防火墙规则配置不当导致Filebeat无法连接Logstash端口的情况。3. Wazuh服务器安装与配置3.1 基于RPM的安装CentOS/RHEL对于CentOS/RHEL系统安装过程最为简便。首先添加Wazuh官方仓库# cat /etc/yum.repos.d/wazuh.repo EOF [wazuh_repo] gpgcheck1 gpgkeyhttps://packages.wazuh.com/key/GPG-KEY-WAZUH enabled1 nameWazuh repository baseurlhttps://packages.wazuh.com/4.x/yum/ protect1 EOF然后安装核心组件# yum install wazuh-manager wazuh-api安装完成后启动服务并检查状态# systemctl daemon-reload # systemctl enable wazuh-manager wazuh-api # systemctl start wazuh-manager wazuh-api # systemctl status wazuh-manager3.2 基于DEB的安装Ubuntu/Debian对于Debian系系统安装步骤略有不同。首先安装依赖工具# apt-get update # apt-get install curl apt-transport-https lsb-release添加仓库和安装组件# curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add - # echo deb https://packages.wazuh.com/4.x/apt/ stable main | tee /etc/apt/sources.list.d/wazuh.list # apt-get update # apt-get install wazuh-manager wazuh-api3.3 常见安装问题排查在实际部署中可能会遇到以下典型问题Node.js版本冲突Wazuh API需要特定版本的Node.js。如果系统自带版本不符可以通过以下方式解决# curl -sL https://deb.nodesource.com/setup_12.x | bash - # apt-get install -y nodejsPython路径问题某些旧系统默认Python版本较低需要在API配置中指定Python路径// 编辑 /var/ossec/api/configuration/config.js config.python [ { bin: /usr/bin/python3, lib: } ];服务启动失败检查日志文件/var/ossec/logs/ossec.log常见问题包括端口冲突或权限不足。4. Elastic Stack部署详解4.1 Elasticsearch安装与优化首先安装Java环境Elasticsearch依赖# yum install java-11-openjdk添加Elastic官方仓库并安装# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # cat /etc/yum.repos.d/elastic.repo EOF [elasticsearch-7.x] nameElasticsearch repository for 7.x packages baseurlhttps://artifacts.elastic.co/packages/7.x/yum gpgcheck1 gpgkeyhttps://artifacts.elastic.co/GPG-KEY-elasticsearch enabled1 autorefresh1 typerpm-md EOF # yum install elasticsearch-7.10.2关键配置优化/etc/elasticsearch/elasticsearch.ymlcluster.name: wazuh-cluster node.name: ${HOSTNAME} path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 discovery.type: single-node bootstrap.memory_lock: trueJVM调优/etc/elasticsearch/jvm.options-Xms4g -Xmx4g4.2 Logstash配置技巧安装Logstash# yum install logstash-7.10.2Wazuh专用配置文件/etc/logstash/conf.d/01-wazuh.confinput { beats { port 5000 codec json_lines } } filter { if [metadata][pipeline] { mutate { add_field { pipeline %{[metadata][pipeline]} } } } } output { elasticsearch { hosts [http://localhost:9200] index wazuh-alerts-%{YYYY.MM.dd} pipeline %{pipeline} } }4.3 Kibana与Wazuh应用集成安装Kibana# yum install kibana-7.10.2安装Wazuh插件# sudo -u kibana /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/4.x/ui/kibana/wazuh_kibana-4.3.5_7.10.2-1.zip关键配置/etc/kibana/kibana.ymlserver.host: 0.0.0.0 elasticsearch.hosts: [http://localhost:9200]5. 组件间集成与数据流配置5.1 Filebeat配置详解在Wazuh服务器上安装Filebeat# yum install filebeat-7.10.2下载预配置的Filebeat模板# curl -so /etc/filebeat/filebeat.yml https://raw.githubusercontent.com/wazuh/wazuh/v4.3.5/extensions/filebeat/7.x/filebeat.yml修改配置文件关键部分output.logstash: hosts: [logstash_ip:5000]5.2 安全通信配置SSL/TLS生成自签名证书# mkdir /etc/logstash/ssl # openssl req -x509 -batch -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/logstash/ssl/logstash.key \ -out /etc/logstash/ssl/logstash.crt配置Logstash使用SSLinput { beats { port 5044 ssl true ssl_certificate /etc/logstash/ssl/logstash.crt ssl_key /etc/logstash/ssl/logstash.key } }6. 系统调优与维护6.1 Elasticsearch性能优化内存锁定防止ES内存被交换到磁盘# /etc/elasticsearch/elasticsearch.yml bootstrap.memory_lock: true分片策略对于中小规模部署# 创建索引模板 PUT _template/wazuh { index_patterns: [wazuh-alerts-*], settings: { number_of_shards: 3, number_of_replicas: 1 } }6.2 日志轮转策略配置Logstash日志轮转/etc/logrotate.d/logstash/var/log/logstash/*.log { daily rotate 7 size 100M copytruncate delaycompress compress missingok notifempty }7. 安全加固措施7.1 Kibana访问控制使用Nginx作为反向代理并启用基础认证server { listen 80; server_name kibana.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name kibana.example.com; ssl_certificate /etc/nginx/ssl/kibana.crt; ssl_certificate_key /etc/nginx/ssl/kibana.key; location / { auth_basic Restricted Access; auth_basic_user_file /etc/nginx/htpasswd.users; proxy_pass http://localhost:5601; } }7.2 Wazuh API安全配置修改默认凭证# cd /var/ossec/api/configuration/auth # node htpasswd -c user myadmin启用HTTPS# /var/ossec/api/scripts/configure_api.sh --https8. 监控与告警配置8.1 Kibana仪表盘定制Wazuh默认提供多个预置仪表盘安全事件概览代理状态监控漏洞检测统计自定义仪表盘示例进入Kibana → Dashboard点击Create new dashboard添加Metric可视化选择wazuh-alerts-*索引配置聚合条件如按规则等级统计8.2 告警规则配置通过Elasticsearch的Watcher功能创建告警PUT _watcher/watch/wazuh_high_severity { trigger: { schedule: { interval: 5m } }, input: { search: { request: { indices: [wazuh-alerts-*], body: { query: { bool: { must: [ { range: { timestamp: { gte: now-5m/m } } }, { term: { rule.level: { value: 12, boost: 1.0 } } } ] } } } } } }, actions: { email_alert: { email: { to: security-teamexample.com, subject: High Severity Wazuh Alert, body: Found {{ctx.payload.hits.total}} high severity events in last 5 minutes } } } }9. 故障排查指南9.1 日志文件位置关键日志文件路径Wazuh:/var/ossec/logs/ossec.logElasticsearch:/var/log/elasticsearch/wazuh-cluster.logLogstash:/var/log/logstash/logstash-plain.logKibana:/var/log/kibana/kibana.log9.2 常见错误解决Elasticsearch集群健康状态为RED# 查看分片状态 GET _cat/shards?v # 尝试恢复未分配分片 POST _cluster/reroute?retry_failedLogstash管道处理失败# 测试配置文件语法 /usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/ # 启用调试日志 bin/logstash -f config.conf --log.leveldebugKibana无法连接Elasticsearch# 检查Elasticsearch服务状态 curl -XGET http://localhost:9200/_cluster/health?pretty # 验证Kibana配置 grep -E elasticsearch\.hosts|server\.host /etc/kibana/kibana.yml10. 升级与扩展10.1 版本升级策略测试环境先行先在非生产环境验证升级流程组件升级顺序Elasticsearch → Logstash → Kibana → Wazuh数据备份# 创建Elasticsearch快照 PUT _snapshot/my_backup/snapshot_1?wait_for_completiontrue { indices: wazuh-*, ignore_unavailable: true, include_global_state: false }10.2 集群扩展方案水平扩展Elasticsearch集群在新节点安装Elasticsearch配置相同的cluster.name设置初始主节点# /etc/elasticsearch/elasticsearch.yml discovery.seed_hosts: [master_node_ip] cluster.initial_master_nodes: [master_node_name]Wazuh多管理器部署配置主从管理器!-- /var/ossec/etc/ossec.conf -- cluster namewazuh-cluster/name node_namemaster/node_name node_typemaster/node_type keysecret_key/key port1516/port bind_addr0.0.0.0/bind_addr nodes nodemaster_ip/node nodeworker_ip/node /nodes /cluster11. 备份与恢复策略11.1 配置备份Wazuh关键配置文件/var/ossec/etc/ossec.conf/var/ossec/etc/client.keys/var/ossec/ruleset/rules/建议使用版本控制系统管理配置变更。11.2 数据备份方案Elasticsearch数据备份方法配置快照仓库PUT _snapshot/my_backup { type: fs, settings: { location: /mnt/backups/elasticsearch, compress: true } }自动化备份脚本#!/bin/bash curl -X PUT localhost:9200/_snapshot/my_backup/snapshot_$(date %Y%m%d_%H%M%S)?wait_for_completiontrue \ -H Content-Type: application/json -d { indices: wazuh-*, ignore_unavailable: true, include_global_state: false }12. 实际应用场景12.1 安全事件调查通过WazuhKibana可以快速定位安全事件在Kibana的Discover页面筛选特定时间范围使用查询语法如rule.groups:authentication AND data.srcip:192.168.1.100查看关联事件的时间线12.2 合规性报告预置的PCI DSS、GDPR合规报告进入Kibana → Wazuh → Compliance选择相应标准生成PDF格式报告13. 性能监控指标关键监控指标及获取方式Wazuh处理性能# 查看队列状态 /var/ossec/bin/agent_control -lElasticsearch健康状态curl -XGET http://localhost:9200/_cluster/health?pretty系统资源使用# 内存使用 free -h # 磁盘I/O iostat -x 114. 高级配置技巧14.1 自定义规则开发在/var/ossec/etc/rules/local_rules.xml中添加自定义规则group namecustom, rule id100100 level5 if_sid5716/if_sid matchsudo: session opened for user root/match descriptionRoot sudo activity detected/description /rule /group14.2 第三方集成与Slack集成告警示例使用Logstash的webhook输出output { if [rule][level] 10 { http { url https://hooks.slack.com/services/XXXXX http_method post content_type application/json message {text:Wazuh Alert: %{[rule][description]},attachments:[{fields:[{title:Host,value:%{[agent][name]},short:true},{title:Level,value:%{[rule][level]},short:true}]}]} } } }15. 容器化部署方案15.1 Docker Compose部署示例docker-compose.ymlversion: 3 services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2 environment: - discovery.typesingle-node - bootstrap.memory_locktrue - ES_JAVA_OPTS-Xms2g -Xmx2g ulimits: memlock: soft: -1 hard: -1 volumes: - esdata:/usr/share/elasticsearch/data ports: - 9200:9200 kibana: image: docker.elastic.co/kibana/kibana:7.10.2 ports: - 5601:5601 depends_on: - elasticsearch wazuh: image: wazuh/wazuh-manager:4.3.5 hostname: wazuh-manager ports: - 1514:1514/udp - 1515:1515 - 1516:1516 volumes: - wazuh_data:/var/ossec/data volumes: esdata: wazuh_data:15.2 Kubernetes部署要点使用StatefulSet部署Elasticsearch为Wazuh Manager配置持久化存储使用ConfigMap管理配置文件通过Ingress暴露Kibana服务16. 成本优化建议冷热数据分离热节点SSD存储处理近期数据温节点普通硬盘存储历史数据索引生命周期管理PUT _ilm/policy/wazuh_policy { policy: { phases: { hot: { actions: { rollover: { max_size: 50GB, max_age: 7d } } }, delete: { min_age: 30d, actions: { delete: {} } } } } }17. 社区资源利用官方文档Wazuh DocumentationElastic Stack GuideGitHub资源Wazuh Rules RepositoryElasticsearch-Hadoop论坛支持Wazuh ForumElastic Discuss

更多文章