Debian Apache日志分析指南
Debian系统中,Apache的默认日志文件集中存储在/var/log/apache2/目录下,核心日志包括:
/var/log/apache2/access.log;/var/log/apache2/error.log。命令行工具适合快速筛选、统计日志信息,无需额外安装复杂软件:
192.168.1.1的所有访问记录:grep "192.168.1.1" /var/log/apache2/access.log;查找所有404错误(页面未找到):grep " 404 " /var/log/apache2/access.log。awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10;提取所有POST请求的IP、时间、状态码:awk '/POST/ {print $1, $4, $9}' /var/log/apache2/access.log。awk '{print $9}' /var/log/apache2/access.log | sort | uniq -c | sort -nr(结果按次数降序排列)。tail -f /var/log/apache2/error.log。可视化工具能将日志数据转化为直观的图表或报告,便于快速理解:
COMBINED日志格式(默认)。安装:sudo apt-get install goaccess;生成HTML报告(保存到/var/www/html/供浏览器访问):sudo goaccess /var/log/apache2/access.log --log-format COMBINED -a -o /var/www/html/report.html。sudo apt-get install lnav;启动后加载日志文件:lnav /var/log/apache2/access.log;使用SQL查询POST请求(示例):SELECT ip, request, status FROM access_log WHERE method = 'POST'。若需要大规模、结构化的日志分析(如长期存储、多维度关联),可使用ELK(Elasticsearch+Logstash+Kibana)堆栈:
sudo apt-get install elasticsearch,启动服务:sudo systemctl start elasticsearch。/etc/logstash/conf.d/apache.conf,内容如下:input {
file {
path => "/var/log/apache2/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "apache-access"
}
}
启动Logstash:sudo systemctl start logstash。sudo apt-get install kibana,启动服务:sudo systemctl start kibana;访问http://服务器IP:5601,配置Kibana连接Elasticsearch,即可创建仪表盘(如访问量趋势、状态码分布、IP地理位置等)。通过日志分析可快速识别安全威胁,常见场景:
' OR 1=1 --、UNION SELECT等关键词的请求:grep -E "(' OR 1=1 --|UNION SELECT)" /var/log/apache2/access.log;<script>、javascript:的请求:grep -E "<script>|javascript:" /var/log/apache2/access.log;awk '/POST.*login/ && /401/ {print $1, $4}' /var/log/apache2/access.log | sort | uniq -c | sort -nr。logrotate工具自动轮转、压缩日志(默认配置文件/etc/logrotate.d/apache2),避免占用过多磁盘空间。例如,配置每日轮转、保留7天日志:/var/log/apache2/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload apache2 > /dev/null
endscript
}
Combined格式基础上添加请求耗时),修改Apache配置文件(/etc/apache2/apache2.conf或虚拟主机配置),使用LogFormat指令定义新格式,再通过CustomLog指令应用。