温馨提示×

如何通过Apache日志预防网站攻击

小樊
36
2025-12-10 00:41:46
栏目: 云计算

用 Apache 日志预防网站攻击的实操方案

一 建立日志基线与安全存放

  • 确认日志路径与格式:Debian/Ubuntu 常见为 /var/log/apache2/access.logerror.log;CentOS/RHEL 常见为 /var/log/httpd/access_logerror_log。统一采用便于解析的 Combined Log Format,便于后续分析与告警。
  • 存放位置与权限:日志必须放在 Web 根目录之外(如 /var/log/),目录权限建议 700、日志文件 600,仅管理员可读写。
  • 禁止直接访问日志:在 Apache 配置或 .htaccess 中拦截对日志文件的访问,返回 403。示例:
    <FilesMatch "\.(log|txt)$">
        Order Allow,Deny
        Deny from all
    </FilesMatch>
    
  • 日志轮转与保留:配置 logrotate 按日/周轮转并设置保留周期,避免日志过大与取证窗口丢失。
  • 日志脱敏:避免在日志中记录敏感信息(如完整 Cookie、身份证号、手机号);必要时在日志格式或采集链路中对敏感字段做脱敏处理。

二 识别常见攻击的日志特征与排查命令

  • 高频扫描与目录爆破:同一 IP 短时间产生大量请求且大量 404
    示例:
    awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
    grep " 404 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head
    
  • 暴力登录:大量 POST /login|wp-login|adminer 等。
    示例:
    grep "POST /login" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
    
  • SQL 注入:参数含 '%27UNION SELECTsleep( 等。
    示例:
    grep -i "UNION.*SELECT" access.log
    grep -i -E "sleep\(|benchmark\(" access.log
    grep "GET .*'.*" access.log
    grep "GET .*%27.*" access.log
    
  • 路径遍历与文件包含:…/…%2f…%5c
    示例:
    grep -E "\.\./|\.\.%2f" access.log
    grep -E "\.\.\\|\.\.%5c" access.log
    
  • XSS:参数含