在CentOS系统中,Apache(httpd)的核心日志文件默认存放于/var/log/httpd/目录下,其中访问日志(记录所有HTTP请求)和错误日志(记录服务器运行错误)是监控网站安全的核心:
/var/log/httpd/access_log,记录客户端的IP地址、请求时间、请求方法(GET/POST)、请求资源路径、HTTP状态码等信息,是识别异常访问的基础。/var/log/httpd/error_log,记录服务器处理请求时的错误信息(如PHP语法错误、文件路径遍历尝试、SQL注入片段等),是发现攻击尝试的关键线索。通过tail -f命令实时查看错误日志的最新内容,可快速捕捉攻击行为(如SQL注入、路径遍历、模块加载失败等):
tail -F /var/log/httpd/error_log # -F选项会跟踪日志轮转后的新文件 关注重点:
SQL syntax、UNION SELECT、sleep(的条目(疑似SQL注入);\.\./、../../../的条目(疑似路径遍历,尝试访问上级目录文件);Invalid user、authentication failure的条目(疑似暴力破解)。通过grep、awk、sort、uniq组合命令,统计访问日志中的高频异常行为:
/login.php)的频繁POST请求,按IP排序统计次数:grep "POST /login.php" /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr 若某IP尝试次数超过100次/分钟,需重点关注。wp-admin)、phpMyAdmin(phpmyadmin)、敏感文件(/etc/passwd)的请求:grep -iE "wp-admin|wp-login|phpmyadmin|/etc/passwd" /var/log/httpd/access_log 高频访问这些路径的IP可能是扫描器或攻击者。通过awk统计不同HTTP状态码的数量,重点关注4xx(客户端错误)和5xx(服务器错误):
awk '{print $9}' /var/log/httpd/access_log | sort | uniq -c | sort -nr /admin、/backup.zip);/root);Fail2ban是一款入侵防御工具,可通过分析日志自动封锁频繁发起攻击的IP地址。针对Apache的配置示例如下:
/etc/fail2ban/jail.local,启用Apache认证失败监控:[apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/httpd/error_log maxretry = 5 # 5次失败后封锁 bantime = 3600 # 封锁1小时 systemctl restart fail2ban 该配置会在5分钟内检测到同一IP有5次认证失败(如登录失败),自动将其加入防火墙黑名单。ELK Stack(Elasticsearch+Logstash+Kibana)适合大规模日志分析,可实现实时可视化、威胁检测和报表生成:
logstash.conf):input { file { path => "/var/log/httpd/access_log" start_position => "beginning" sincedb_path => "/dev/null" } file { path => "/var/log/httpd/error_log" start_position => "beginning" sincedb_path => "/dev/null" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } # 解析访问日志 } if [type] == "error" { grok { match => { "message" => "%{APACHEERRORLOG}" } # 解析错误日志 } } } output { elasticsearch { hosts => ["localhost:9200"] index => "apache-logs-%{+YYYY.MM.dd}" } } chmod和chown设置日志文件权限,仅允许root和Apache用户访问:chown root:adm /var/log/httpd/*.log chmod 640 /var/log/httpd/*.log /var/www/html/uploads),防止攻击者上传恶意脚本修改日志。使用logrotate工具自动分割日志文件,避免单个文件占用过多磁盘空间(如每天轮转,保留7天):
编辑/etc/logrotate.d/httpd,添加以下配置:
/var/log/httpd/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 root adm sharedscripts postrotate systemctl reload httpd > /dev/null endscript } 该配置会每天轮转日志文件,保留最近7个压缩文件(如access_log.1.gz)。
yum update httpd更新Apache至最新版本,修复已知安全漏洞;inotifywait工具实时监控日志文件的创建和修改(如inotifywait -m /var/log/httpd/),及时发现异常写入。通过以上方法,可实现对CentOS上Apache日志的有效监控,快速识别网站安全威胁并及时响应。需注意的是,日志分析需结合业务场景(如正常的高峰访问),避免误判。