作为IT工程师,确保Nginx日志安全是Web服务器安全的重要组成部分。以下是全面的防护措施:
配置方法:
map $status $loggable {
~^[23] 1;
default 0;
}
log_format filtered '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time';
access_log /var/log/nginx/access.log filtered if=$loggable;
作用:只记录2xx和3xx状态码的请求,过滤错误请求中的敏感信息
log_format safe '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log safe;
server {
# ...
ignore_invalid_headers on;
underscores_in_headers off;
# 禁用敏感header记录
log_format no_sensitive '$remote_addr - [$time_local] "$request" '
'$status $body_bytes_sent';
}
chown root:adm /var/log/nginx/
chmod 750 /var/log/nginx/
chown root:adm /var/log/nginx/*.log
chmod 640 /var/log/nginx/*.log
logrotate配置示例 (/etc/logrotate.d/nginx
):
/var/log/nginx/*.log {
daily
missingok
rotate 90
compress
delaycompress
notifempty
create 0640 root adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
# 可选加密
# lastaction
# find /var/log/nginx -name "*.gz" -exec gpg -e -r security@example.com {} \;
# endscript
}
map $request_uri $log_request {
~*/(admin|api|login|auth) 0;
default 1;
}
server {
# ...
access_log /var/log/nginx/access.log combined if=$log_request;
}
http {
# 隐藏Nginx版本号
server_tokens off;
# 控制错误日志级别
error_log /var/log/nginx/error.log warn;
# 隐藏PHP错误
fastcgi_hide_header X-Powered-By;
fastcgi_intercept_errors on;
}
# 使用fail2ban监控恶意请求
apt-get install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 在jail.local中添加:
[nginx-bad-requests]
enabled = true
port = http,https
filter = nginx-bad-requests
logpath = /var/log/nginx/access.log
maxretry = 3
findtime = 3600
bantime = 86400
对于需要完全匿名的情况,可以使用第三方模块如nginx-log-anonymizer或使用awk/sed后处理:
# 简单IP匿名化示例
awk '{OFS=FS=" ";$1=substr($1,1,3)"."substr($1,5,3)"."substr($1,9,3)".xxx";print}' access.log > anonymized.log
对于AWS/Azure/GCP环境: - 启用云平台日志加密 - 使用IAM严格控制日志访问权限 - 考虑将日志直接发送到安全的SIEM系统
通过以上措施的组合实施,可以显著提高Nginx日志的安全性,防止敏感信息泄露,同时保持足够的日志信息用于故障排查和安全分析。