Nginx日志是记录服务器请求行为的关键文件,包含IP地址、请求参数、用户代理等敏感信息,若配置不当可能导致信息泄露或成为攻击跳板(如日志投毒)。以下是提升Nginx日志安全性的具体措施:
通过文件系统权限和Nginx配置限制日志文件的访问范围:
700(仅root用户可读写执行),日志文件权限设为600(仅root可读写)。例如:chmod 700 /var/log/nginx/
chmod 600 /var/log/nginx/access.log /var/log/nginx/error.log
chown root:root /var/log/nginx/ /var/log/nginx/*.log
location块拦截对日志文件的直接访问,返回403 Forbidden。例如:location ~* \.(log|txt)$ {
deny all;
}
此配置可防止攻击者通过http://example.com/access.log直接下载日志文件。将日志文件存放在Web根目录之外(如/var/log/nginx/而非/usr/share/nginx/html/logs/),防止攻击者通过URL直接访问。例如:
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
确保日志目录不在Nginx的root或alias指令覆盖范围内。
通过修改Nginx的log_format指令,隐藏日志中的敏感字段(如Cookie中的SessionID、用户手机号、邮箱):
log_format secure '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "****"'; # 替换Cookie中的敏感信息
access_log /var/log/nginx/access.log secure;
对于更复杂的脱敏需求(如手机号、邮箱),可使用ELK Stack的mutate或gsub插件进行处理(如将1[3-9]\d{9}替换为1**********)。
使用logrotate工具定期压缩、删除旧日志,避免日志文件占用过多磁盘空间(如保留7天日志,每天轮转一次):
# /etc/logrotate.d/nginx 配置示例
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
此配置可自动压缩7天前的日志(如access.log.1.gz),并创建新的空日志文件。
通过Nginx的if指令拦截含恶意代码的请求(如PHP代码、HTML标签、特殊字符),避免其被写入日志:
# 拦截含PHP代码、HTML标签的请求
if ($request_uri ~* "(\<\?php|\<script|\>|\'|\"|eval)") {
return 403;
}
# 拦截异常User-Agent(含恶意代码)
if ($http_user_agent ~* "(\<\?php|\<script|eval|shell)") {
return 403;
}
这些规则可有效防止攻击者通过构造恶意请求将代码植入日志,避免后续日志解析漏洞触发。
若需将日志传输至远程服务器,使用SSH隧道或SSL/TLS加密(如rsync -avz -e ssh或logstash-input-beats的SSL配置),防止数据在传输过程中被窃取。
inotifywait工具监控日志目录,当有非授权IP访问时发送告警:inotifywait -m -e access /var/log/nginx/ | while read event; do
echo "日志被访问:$event" | mail -s "日志安全告警" admin@example.com
done
<?php、eval)的请求,若短时间内出现多次同类请求,判定为投毒尝试并拉黑IP。定期检查日志中的异常记录(如频繁的401/403错误、同一IP的大量请求),使用日志分析工具(如GoAccess、ELK)可视化数据,及时发现暴力破解、SQL注入等攻击行为。
通过以上措施,可有效提升Nginx日志的安全性,降低信息泄露和攻击风险。需根据实际环境调整配置(如日志存储路径、敏感字段定义),并定期更新安全策略。