如何通过Apache日志防止攻击
小樊
35
2025-12-20 09:33:16
用 Apache 日志识别并阻断攻击的实操方案
一 日志安全基线与风险预防
- 将日志存放在 Web 根目录之外,典型路径为 /var/log/apache2/;设置目录权限 700、日志文件 600,仅允许 root 访问。
- 禁止直接访问日志文件:在 Apache 配置或 .htaccess 中加入
<FilesMatch “.(log|txt)$”> Order Allow,Deny Deny from all
- 对日志进行脱敏,避免记录或外泄 Cookie/SessionID、手机号、邮箱等敏感字段;集中到 SIEM/ELK 后再做脱敏展示。
- 预防“日志投毒”:过滤或转义写入日志的 <、>、<?php 等特殊字符;确保日志文件访问 MIME 类型为 text/plain,避免被浏览器解析执行;同时修复可能的本地文件包含等漏洞,切断“日志读取→代码执行”的链路。
二 快速发现攻击的日志特征与命令
- 高频访问与扫描:
- Top IP:awk ‘{print $1}’ access.log | sort | uniq -c | sort -nr | head
- 404 风暴:grep " 404 " access.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head
- 登录爆破与暴力尝试:
- 失败登录特征:grep -i “login” access.log | grep -i " 401 | 403 " | awk ‘{print $1}’ | sort | uniq -c | sort -nr
- SQL 注入:
- 单引号/注释:grep -E “GET .*'|%27” access.log;grep -i “UNION.*SELECT” access.log
- 时间盲注:grep -i -E “sleep(|benchmark(” access.log
- XSS:
- 标签/事件:grep -i -E “<script|%3Cscript|onerror=|onload=” access.log
- 路径遍历/文件包含:
- 目录上跳:grep -E “../|..%2f” access.log;Windows 下补充:grep -E “..\|..%5c” access.log
- Webshell 可疑行为:
- 异常 PHP 的 POST:grep "POST " access.log | grep “.php” | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head
- 可疑 UA:grep -i -E “python|curl|wget|nmap|sqlmap|antsword|godzilla” access.log | awk -F’"’ ‘{print $6}’ | sort | uniq -c | sort -nr
- 敏感文件探测:
- 错误日志中大量“File does not exist”且指向 /etc/passwd、/root、.env、config.php 等:
awk ‘/File does not exist/ {print $1}’ /var/log/apache2/error.log* | sort | uniq -c | sort -nr | awk ‘$1>50{print $2}’
- DDoS/异常流量:
- 单位时间请求速率异常、来源分散、状态码分布异常(大量 200/429/503)等,可结合阈值告警与速率限制策略联动处置。
三 从发现到处置的自动化闭环
- 实时监测与告警:
- 命令行巡检结合 cron(如每 1–3 分钟)统计 Top IP、404 数量、可疑 Payload;超过阈值即触发处置。
- 部署 SIEM/ELK 或专用工具(如 EventLog Analyzer)做规则化告警与可视化。
- 自动封禁:
- 防火墙封禁示例:iptables -I INPUT -s ATTACKER_IP -j DROP(生产建议用 ipset 管理大批量 IP,结合 fail2ban 做动态封禁)。
- 临时“休克疗法”:
- 在遭受强攻时,可由脚本自动切换到仅允许白名单的 .htaccess 规则,待负载与告警恢复后再切回正常配置(示例思路见自动化脚本实践)。
- WAF 协同:
- 将日志中发现的绕过 Payload 沉淀为 ModSecurity 规则,提升拦截率并降低误报。
四 加固与长期运营
- 保持 Apache 与模块为最新版本,禁用不必要模块;启用 SSL/TLS;对管理口与敏感路径实施严格 访问控制;配置 请求频率限制(如 mod_evasive/ModSecurity)。
- 实施 日志轮转与归档(如 logrotate),避免日志过大影响分析与取证;统一日志格式便于解析与审计。
- 建立 基线画像 与 指标监控(请求数、错误率、响应时间、关键 URL 命中),持续做 安全审计 与 合规检查;对发现的漏洞点(URL/参数)回溯修复并优化 WAF/代码。