Nginx 与 Web 安全加固
引言
在互联网环境中,服务器面临着各种安全威胁。Nginx 作为前端守护神,必须通过配置加固才能抵御恶意攻击。
学习目标
- 掌握 Nginx 安全加固的基本概念和重要性
- 理解 server_tokens、ModSecurity 插件、CSP 设置的核心原理
- 学会配置各种安全策略来保护 Web 应用
- 了解常见安全漏洞及防护措施
- 掌握安全配置的最佳实践
核心知识点详解
1. server_tokens 配置原理
server_tokens 是 Nginx 的第一个安全防线,它控制是否在响应头中显示 Nginx 版本信息。
# 关闭版本信息暴露
server_tokens off;
# 或者完全隐藏
server_tokens "";
# 在特定 location 中关闭
location /api/ {
server_tokens off;
}
工作原理:
- 默认情况下,Nginx 会在响应头中添加 Server 字段,显示版本号
- 攻击者可以通过版本号查找已知漏洞进行针对性攻击
- 关闭后,响应头中的 Server 字段要么不显示,要么只显示 "Nginx"
2. ModSecurity WAF 集成
ModSecurity 是一个开源的 Web 应用防火墙 (WAF),被誉为 "Web 应用的保镖"。
# ModSecurity 基本配置
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
modsecurity_rules '
SecRuleEngine DetectionOnly
SecRequestBodyAccess On
SecResponseBodyAccess Off
';
# 在特定 location 启用
location / {
modsecurity on;
modsecurity_rules '
SecRule ARGS "@rx (?i)union[\s\n\r]+select" \
"id:1001,phase:2,block,msg:\'SQL Injection Attack\'"
';
}
核心功能:
- 实时监控、记录和阻止可疑的 HTTP 请求
- 基于规则集检测 SQL 注入、XSS 等攻击
- 支持自定义安全规则
3. CSP (Content Security Policy) 设置
CSP 是防止 XSS 攻击的重要手段,通过限制页面可以加载的资源来源。
# 基础 CSP 配置
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:";
# 更严格的安全策略
add_header Content-Security-Policy "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self' data:; style-src 'self'; font-src 'self'; object-src 'none';";
# 针对 API 接口的特殊配置
location /api/ {
add_header Content-Security-Policy "default-src 'none'; connect-src 'self';";
}
工作流程说明
- 客户端发起请求
- Nginx 接收请求
- 检查 server_tokens 配置(决定是否显示版本)
- 检查 ModSecurity 规则(匹配到攻击模式则拦截并返回 403,未匹配则继续)
- 检查 CSP 策略(浏览器阻止加载违规资源)
- 正常返回响应或记录安全事件日志


