CentOS环境下Nginx日志安全策略
Nginx进程通常以nginx或www-data用户(CentOS多为nginx)运行,需确保日志文件的所有者和权限设置合理,防止未授权访问。
/var/log/nginx/access.log、/var/log/nginx/error.log)的所有者改为nginx用户及组,命令:sudo chown nginx:nginx /var/log/nginx/*.log。640(所有者可读写,组用户可读,其他用户无权限),目录权限设为755(允许所有者完全控制,其他用户仅能读取和执行),命令:sudo chmod 640 /var/log/nginx/*.log、sudo chmod 755 /var/log/nginx/。/var/log/)权限正确(通常为755),避免因父目录权限不足导致日志无法写入。使用logrotate工具定期轮换日志文件,防止日志过大占用磁盘空间,同时保留历史日志以便后续审计。
/etc/logrotate.d/nginx文件,添加以下内容(示例):/var/log/nginx/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 nginx nginx sharedscripts postrotate systemctl reload nginx > /dev/null 2>&1 || true endscript } 参数说明:daily(每日轮换)、rotate 30(保留30天日志)、compress(压缩旧日志)、create(创建新日志文件并设置权限)。sudo logrotate -vf /etc/logrotate.d/nginx。日志中可能包含客户端IP、请求参数、User-Agent等敏感信息,需通过配置减少泄露风险。
nginx.conf的http段定义log_format,避免记录敏感字段(如$request_body、$http_cookie),示例:log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 注:若无需记录Referer或User-Agent,可从格式中移除对应字段。rsyslog或fluentd配置加密通道),防止数据在传输中被窃取。限制对日志文件的访问,仅允许授权用户或系统组件读取。
setfacl命令添加权限,示例:sudo setfacl -m u:admin:r-- /var/log/nginx/access.log。/var/log/nginx/)未开启目录列表,避免通过浏览器直接查看日志文件。在Nginx配置中添加autoindex off;指令(默认已关闭)。定期审查日志文件,及时发现异常请求(如暴力破解、SQL注入、恶意扫描)。
error.log中的401(未授权)、403(禁止访问)、500(服务器内部错误)等状态码,可通过tail -f /var/log/nginx/error.log实时查看,或使用grep命令筛选异常记录(如grep ' 401 ' /var/log/nginx/error.log)。awk、GoAccess、ELK Stack)统计访问频率、来源IP、请求路径等,识别异常模式(如短时间内大量请求同一路径、来自陌生地区的IP频繁访问)。例如,通过awk统计404错误的次数:awk '$9 == 404 {count++} END {print count}' /var/log/nginx/access.log。合理配置日志记录级别和内容,平衡安全需求与性能开销。
error_log级别设为warn或error(默认为error),减少不必要的调试信息记录,示例:error_log /var/log/nginx/error.log warn;。/admin),可单独配置详细访问日志,记录更多字段(如$request_time、$upstream_response_time),便于后续分析攻击行为,示例:location /admin/ { access_log /var/log/nginx/admin_access.log main; # 其他配置... }