一、准备工作:定位Apache日志文件
在CentOS系统中,Apache的默认日志路径为:
/var/log/httpd/access_log(记录所有HTTP请求的详细信息,如客户端IP、请求时间、方法、URL、响应状态码等);/var/log/httpd/error_log(记录服务器运行时的错误信息,如文件未找到、权限不足、模块故障等)。/var/log/apache2/目录下,需通过httpd -V命令确认SERVER_CONFIG_FILE路径,进而确定日志位置。二、基础安全审计操作:命令行工具快速分析
实时监控日志动态
使用tail -f命令实时查看日志文件的最新内容,快速捕捉异常事件(如大量404错误、5xx服务器错误):
sudo tail -f /var/log/httpd/access_log # 实时监控访问日志
sudo tail -f /var/log/httpd/error_log # 实时监控错误日志
结合grep过滤关键信息,例如查找所有404错误的请求:
sudo grep " 404 " /var/log/httpd/access_log
统计高频访问IP
通过awk、sort、uniq组合命令,统计访问量排名前20的IP地址,识别异常高频访问(可能是扫描器或攻击源):
awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -20
若某个IP的访问次数远高于正常水平(如超过1000次/分钟),需进一步分析其请求内容。
检测可疑请求模式
使用grep搜索常见的攻击特征,如SQL注入(' OR 1=1 --)、XSS(<script>)、路径遍历(../)等:
sudo grep -E "(' OR 1=1--|<script>|../") /var/log/httpd/access_log
结合awk提取攻击源IP,统计攻击次数:
sudo grep -E "(' OR 1=1--|<script>|../") /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr
分析错误日志中的安全隐患
统计错误日志中的高频错误类型,例如:
/admin、/wp-login.php);sudo grep " 404 " /var/log/httpd/error_log | wc -l
三、进阶安全审计:工具化分析与可视化
使用GoAccess进行实时可视化分析
GoAccess是一款开源、实时的命令行日志分析工具,支持生成HTML报告,直观展示访问统计、状态码分布、Top IP等信息。
sudo yum install epel-release
sudo yum install goaccess
goaccess /var/log/httpd/access_log -o /var/www/html/access_report.html --log-format=COMBINED
通过浏览器访问http://服务器IP/access_report.html,查看实时分析结果。使用ELK Stack实现集中化日志管理
ELK Stack(Elasticsearch+Logstash+Kibana)是一款强大的开源日志分析平台,支持集中化收集、存储、搜索和可视化Apache日志。
logstash.conf文件,定义输入、过滤、输出规则);启用日志轮转防止日志膨胀
使用logrotate工具定期压缩、删除旧日志文件,避免日志占用过多磁盘空间。编辑/etc/logrotate.d/httpd文件,配置如下参数:
/var/log/httpd/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7个轮替文件
compress # 压缩旧日志
delaycompress # 延迟压缩(避免压缩当天日志)
missingok # 如果日志文件丢失,不报错
notifempty # 如果日志文件为空,不轮转
create 640 root adm # 创建新日志文件时设置权限和所有者
sharedscripts # 所有日志轮转完成后执行postrotate脚本
postrotate
/usr/sbin/service httpd reload > /dev/null 2>&1 || true
endscript
}
手动测试轮转配置:
sudo logrotate -vf /etc/logrotate.d/httpd
四、安全加固:防止日志被篡改或未授权访问
设置日志文件权限
确保日志文件仅能被root用户和adm组读取,防止未授权用户篡改或删除日志:
sudo chown root:adm /var/log/httpd/*.log
sudo chmod 640 /var/log/httpd/*.log
审计日志文件的访问和修改
使用auditd工具监控日志文件的访问和修改行为,记录操作用户和时间。示例命令:
sudo auditctl -w /var/log/httpd/ -p wa -k apache_logs_audit
查看审计日志:
sudo ausearch -k apache_logs_audit
这样可以追踪到谁修改了日志文件,便于事后溯源。
五、常见安全威胁识别场景
暴力破解攻击:通过统计高频失败登录请求(如SSH的22端口、Web应用的登录接口),识别攻击源IP。例如,查找access_log中包含POST /login且状态码为401的请求:
sudo grep "POST /login" /var/log/httpd/access_log | grep " 401 " | awk '{print $1}' | sort | uniq -c | sort -nr
SQL注入/XSS攻击:通过grep搜索常见的攻击特征(如' OR 1=1 --、<script>),定位攻击请求和源IP。
异常流量激增:通过GoAccess或ELK的流量统计功能,识别短时间内访问量激增的IP或页面,可能是DDoS攻击或爬虫行为。