借助Nginx日志防止攻击的核心方法
chmod 640 /var/log/nginx/*.log)和访问控制列表(ACL),限制仅管理员、监控系统等合法主体能访问Nginx日志文件,避免未授权读取或篡改。logrotate配置工具时启用压缩(如),并按期轮转日志(如保留7天历史、每天生成新日志,如gzip),服务器性能可能因磁盘空间被占而下降,因此须阻止日志文件无止境增大。grep -v或sed剔除IP地址、用户凭证等敏感字段(如sed 's/b[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}b/XXX.XXX.XXX.XXX/g'),降低数据泄露风险。rsyslog的TLS模块或logstash的ssl配置),避免数据在传输期间遭到窃取。$remote_addr(客户端IP)、$status(HTTP状态码)、$http_user_agent(User-Agent)、$http_referer(引用来源)、$body_bytes_sent(响应大小)等字段。例如:404错误(如"GET /admin.php HTTP/1.1" 404)可能意味着攻击者在扫描网站目录;500错误(如"POST /login.php HTTP/1.1" 500)意味着文件包含漏洞或SQL注入可能正被攻击者尝试;User-Agent(如包含sqlmap、nmap等关键词)可能源于自动化攻击工具;/wp-login.php请求),则可能属于DDoS或暴力破解。"GET /.* HTTP/1.1" 404;".*union.*select.*";".*bot.*|.*scan.*|.*exploit.*"。通过grep、awk或ELK Stack等日志分析工具,批量筛选异常日志。iptables、fail2ban),对异常IP进行自动封禁。例如:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr),若某IP超过阈值(如50次/分钟),则用iptables -A INPUT -s <IP> -j DROP封禁;fail2ban监控Nginx日志(如access.log、error.log),自动添加iptables规则,封禁指定时长的IP(如1小时),并支持自动解封。limit_req_zone和limit_req指令,限制单个IP的请求频率。例如:limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;# 每秒最多10个请求server {location / {limit_req zone=req_zone burst=20 nodelay;# 允许突发20个请求,无延迟# 其他配置...}}这种方式可有效缓解DDoS攻击和暴力破解。access_log指令开启,并使用自定义格式记录足够的信息(如IP、时间、请求方法、URL、状态码、User-Agent、Referer)。例如: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;详细的日志是识别异常行为的基础。error_log级别设为debug或info(生产环境建议warn或error),以记录连接失败、权限问题、模块异常等服务器错误。例如:error_log /var/log/nginx/error.log warn;借助错误日志,可快速定位SQL注入、文件上传漏洞等攻击尝试。add_header X-Frame-Options "SAMEORIGIN";# 防止点击劫持add_header X-XSS-Protection "1; mode=block";# 启用XSS防护add_header X-Content-Type-Options "nosniff";# 防止MIME类型嗅探add_header Content-Security-Policy "default-src 'self'";# 控制资源加载来源这些Headers能有效降低XSS、点击劫持等攻击的风险。http、server或location块中添加server_tokens off;,关闭响应头所含的Nginx版本信息(如Server: nginx/1.25.3),避免攻击者依据版本号查找已知漏洞。allow/deny指令限制访问IP。例如:location /admin/ {allow 192.168.1.0/24;# 允许内网IPdeny all;# 拒绝其他IPauth_basic "Restricted Access";# 启用基础认证auth_basic_user_file /etc/nginx/.htpasswd;# 认证文件路径}减少暴露面,降低被攻击的概率。