1.
规划与准备:明确目标与架构
部署前先画出站群拓扑(香港节点、管理节点、日志集线器),确定日志类型:系统日志、SSH/Win事件、Web/反向代理、数据库、WAF/防火墙、网络流量。
制定合规与保存策略(如香港本地法律要求、保留期限30/90/365天),选用中心化方案(ELK/EFK/Graylog/Siem硬件)。
准备资源:专用日志服务器(推荐VCPU与高IO),时间同步(NTP或chrony,保持所有节点同一时区),证书与访问控制策略。
2.
时间与一致性:部署NTP/chrony并验证
在每台Linux上执行:sudo apt install chrony && sudo systemctl enable --now chrony。编辑/etc/chrony/chrony.conf,加入香港或公共NTP池(pool.ntp.org)。
校验:chronyc tracking与chronyc sources,确保时间偏差<200ms,日志时间戳一致能避免事件关联失败。
3.
日志收集端:Linux与syslog配置(rsyslog示例)
安装并配置rsyslog转发到日志集中器:在/etc/rsyslog.d/60-remote.conf加入:<udp/tcp based on preference> *.* @@logserver.example.hk:514。
启用结构化JSON输出(便于ELK解析):在rsyslog添加模板,或使用filebeat直接读取/var/log/*.log。重启rsyslog:sudo systemctl restart rsyslog。
4.
Windows事件收集:WEC或Winlogbeat
推荐使用Winlogbeat:下载并在每台Windows Server上配置winlogbeat.yml,指定hosts:[ "logserver:5044" ]与event_logs: ["System","Security","Application"].
设置Event Forwarding作为替代:在Collector端启用WEF,订阅指定事件源,确保使用TLS加固传输。
5.
容器与Web日志:Filebeat/Fluentd与结构化日志
对于Nginx/Apache与反向代理,开启access_log格式包含请求ID与X-Forwarded-For。Filebeat配置示例:filebeat.inputs -> type: log -> paths: ['/var/log/nginx/*.log'],使用processors提取字段。
在Kubernetes环境使用Fluentd或FluentBit,输出到Elasticsearch或Kafka以作后续分析。
6.
网络流量采集:部署Zeek与Suricata
在流量镜像点部署Zeek(被动网络解析)与Suricata(IDS/IPS)。安装命令示例(Ubuntu):sudo apt install suricata zeek。
配置Suricata使用规则集(Emerging Threats),并将eve.json输出到Logstash/Filebeat进行入库。Zeek输出的conn.log/http.log也应入ELK便于会话重建。
7.
集中化与解析:ELK/Graylog基础配置
部署Elasticsearch、Logstash、Kibana:设置索引模板,按天或按周分割索引以控制大小。Logstash使用grok过滤器解析常见日志,示例grok:%{COMBINEDAPACHELOG}。
启用ILM(索引生命周期管理)与快照策略以节省空间并满足合规。
8.
告警规则与入侵检测策略设计
制定规则分层:基线行为(失败登录短时间高频)、异常行为(新的高权限账户创建、长时间横向扫描)、威胁情报匹配(IP/域/哈希)。
实现示例:ELK Watcher或SIEM规则:当5分钟内同一账号来源失败SSH登录>10次且来源IP分布广泛,则触发高优先级警报并自动添加至临时黑名单。
9.
样例规则与命令:fail2ban与Suricata规则
fail2ban简易规则:在/etc/fail2ban/jail.local添加[sshd] enabled=true port=ssh filter=sshd maxretry=5 bantime=3600。
Suricata示例规则:alert tcp $HOME_NET any -> $EXTERNAL_NET 22 (msg:"SSH Brute Force"; threshold:type both, track by_src, count 10, seconds 60; sid:1000001; rev:1;)
10.
基线建立与异常检测:统计与机器学习
收集正常运行14—30天的行为数据,计算每个主机的平均会话数、平均数据流量、常见端口。使用Elasticsearch ML或外部脚本(Python+scikit-learn)做异常分数(Isolation Forest)。
将模型每日重训练并在Kibana中展示异常分数,结合阈值实现告警,避免单纯基于规则的高误报。
11.
告警分级、流程与自动化响应
定义P0/P1/P2等级并绑定SLA与响应动作。示例自动化:当P0触发,自动执行脚本(Ansible)封停可疑IP、采集内存快照、冻结用户会话并通知值班。
保留审计日志与操作记录,所有自动化操作需有回滚脚本与人工审批链。
12.
调优与持续改进:降低误报并提升检测率
每周复盘告警:标注误报类型并将白名单或规则阈值持久化。把告警与事件响应时长做KPI。定期更新IDS签名与外部威胁情报(MISP/OTX)。
在
香港站群场景考虑网络延迟与多点采集,优化日志批量发送与压缩(压缩算法:gzip/snappy),减少带宽成本。
13.
问:如何在香港站群快速定位横向扫描源头?
在集中日志中按时间窗口聚合conn.log(Zeek)或Suricata的alert,按源IP做top排序并查看相邻主机访问序列。结合ELK的IP聚合与geoip扩展判断是否为同一子网或不同节点发起,若源为内网多节点则查询SSH/Win事件寻找被盗凭证痕迹。
14.
答:快速定位步骤(命令级)
1) 在Kibana使用时间过滤器选定扫描时间段;2) 聚合字段source.ip并按count排序;3) 对可疑IP执行索引查询查看相关user.name与process信息;4) 若需实时追踪,用tcpdump在目标交换机镜像端口抓包:sudo tcpdump -i eth0 host
-w /tmp/scan.pcap。
15.
问:如何降低误报同时不漏掉真实入侵?
设计多条件复合告警(例如失败登录+异常命令执行+新的外连),使用信任列表(白名单)和采样指标避免噪声账户触发,同时用机器学习分数作为二次判断。对高价值资产启用更严格的阈值和人工二次确认。
16.
答:实践建议与周期性工作
建立告警反馈回路:每次误报归因(规则过宽、日志不完整等),并将结论写入规则调优库。每月更新威胁情报与签名、每季度重训行为模型并复测检测覆盖率,保持人为审查与自动化防御并行。
来源:香港站群服务器安全日志分析与入侵检测提升早期威胁识别能力