1.
环境与前提说明
部署前准备与权限
列出:Linux(Ubuntu/CentOS)、root或sudo权限、网络拓扑(反向代理/真实服务器)、高防厂商接入方式(清洗/回源)。
核对端口、BGP/Anycast是否已启用,以及是否有控制台API(用于黑洞/封禁)。
2.
日志采集与集中化设计
选择组件与目录结构
建议:filebeat -> Logstash -> Elasticsearch -> Kibana(ELK)或filebeat -> ES直连。
实际操作:在每台节点安装filebeat并配置prospector指向/var/log/nginx/*.log和/var/log/syslog;filebeat.yml中设置output.elasticsearch或logstash地址;systemctl enable --now filebeat。
3.
日志格式化与解析规则
Nginx/iptables日志处理步骤
Nginx:确认access_log格式包含:$remote_addr $time_local $request $status $body_bytes_sent $request_time $upstream_addr;在Logstash配置grok匹配规则并创建字段:client_ip, uri, status, rt。
iptables:使用rsyslog或ulogd将内核日志写入独立文件,基于正则提取SRC/DST/PROTO/SPORT/DPORT。
4.
告警规则与Threshold设置
在Kibana/Watcher或Elasticsearch Watch中配置阈值
示例:同一IP 1分钟内>2000个连接或同一URI 1分钟内>5000次,触发Level=critical。
实践:先统计基线流量(7天),用平均+3倍标准差确定阈值,避免误报。
5.
自动化响应总体架构
响应器设计与安全机制
组件:AlertManager/Watcher -> webhook -> orchestration service(Python/Go)-> 执行器(iptables/nftables、高防API、BGP黑洞)。
安全:响应器使用API Token、IP白名单、操作审计并在沙箱环境测试命令。
6.
实现封禁动作的具体命令
从临时到持久化封禁步骤
临时封禁(秒级):使用iptables -I INPUT -s 1.2.3.4 -j DROP;验证iptables -L -n。
持久化:将规则写入/etc/iptables/rules.v4或使用nft list ruleset > /etc/nftables.conf并systemctl restart nftables。对高并发用tc或conntrack限制连接速率。
7.
接入高防厂商API自动化样例
以假想API为例的Python脚本片段
步骤:1) 通过API查询清洗策略;2) 上传IP黑名单或触发回源模式。
示例逻辑:requests.post(api_url, headers={'Authorization':'Bearer ...'}, json={'action':'block','ip':'1.2.3.4'}) 并记录返回code与request id。
8.
日志关联与攻击溯源流程
从告警到溯源的操作步骤
1) 从告警中拿到IP/URI/时间窗口;2) 在ES中按时间回溯查询同源请求;3) 结合tcpdump抓包(tcpdump -i eth0 host 1.2.3.4 -w /tmp/attack.pcap)保存证据;4) 上传至分析平台或交给上游清洗。
9.
自动化恢复与白名单策略
避免误杀与自动回滚机制
实现:封禁动作包含TTL(如300s),到期后自动执行解除脚本;解除前二次验证:检测该IP在过去300s内是否仍超阈值;若无则解除并记录日志。
实现示例:crontab 每分钟运行检查脚本,对过期条目执行iptables -D。
10.
演练与监控验证步骤
定期演练与SLA监控要点
步骤:在非生产窗口执行模拟攻击(低强度),验证日志链路、告警到封禁的完整路径;检查误报率并调整阈值。
监控:Prometheus抓取系统与网络指标(conntrack、tcp_retransmits、netstat等),Grafana展示SLA曲线。
11.
常见问题与排错清单
快速定位技巧
1) 如果告警不触发:检查filebeat->logstash链路、时间同步(ntp/chrony);2) 如果封禁无效:确认iptables链顺序、conntrack是否缓存旧连接;3) 如果误杀大量正常IP:回滚并扩大分析窗口。
12.
问:如何在日本节点优先减少误报?
答:使用地域与ASN白名单、按国家/城市分布统计基线,结合行为特征(请求速率、UA、请求模版)判定,避免简单按连接数封禁。
13.
问:遇到大流量直接打满链路怎么办?
答:立即通知高防厂商触发清洗或BGP黑洞,同时在服务器端启动tcp proxy限速、tcp_blackhole、并配合上游做流量切换,待流量下降再精细化处置。
14.
问:如何校验自动化响应是否安全可靠?
答:通过灰度测试(先限制非关键IP段)、设置自动回滚、完善审计与告警二次确认(人工确认阈值超高时),并在演练中统计误杀率,调整逻辑。
来源:高防日本服务器运维经验分享 日志分析与自动化响应流程