阅读量:0
如何提高Nginx日志安全性
Nginx日志是记录服务器请求行为的关键文件,包含IP地址、请求参数、用户代理等敏感信息,若配置不当可能导致信息泄露或成为攻击跳板(如日志投毒)。以下是提升Nginx日志安全性的具体措施:
1. 控制日志访问权限,防止未授权读取
通过文件系统权限和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 - Nginx访问控制:通过
location块拦截对日志文件的直接访问,返回403 Forbidden。例如:此配置可防止攻击者通过location ~* \.(log|txt)$ { deny all; }http://example.com/access.log直接下载日志文件。
2. 配置日志存储路径,避免暴露在Web根目录
将日志文件存放在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指令覆盖范围内。
3. 日志脱敏处理,隐藏敏感信息
通过修改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**********)。
4. 启用日志轮转,防止日志文件过大
使用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),并创建新的空日志文件。
5. 过滤恶意请求,防止日志投毒
通过Nginx的if指令拦截含恶意代码的请求(如PHP代码、HTML标签、特殊字符),避免其被写入日志:
# 拦截含PHP代码、HTML标签的请求
if ($request_uri ~* "(\<\?php|\
jindouyun.cn. All Rights Reserved. 筋斗云 版权所有 |
粤ICP备13013545号 | 增值电信业务经营许可证:
粤B1-20215235 |
粤公网安备 44070302000974号
违法和不良信息举报中心 24 小时违法和不良信息举报热线:4006783389,举报邮箱:jubao@jindouyun.cn