参考资料

  1. Nginx Keepalived配置详细说明以及案例
  2. Nginx教程,一看就懂,一学就会
  3. Nginxindex:首页处理模块详细说明以及案例
  4. Nginx代理缓存配置详细说明以及案例
  5. Nginxalias 访问路径别名指令详细说明以及案例
  6. nginx 配置反向代理
  7. 如何通过响应头防御XSS?
  8. Nginx作为Web服务器的优势

以下是Nginx防御常见攻击的综合配置方案,结合访问控制、流量限制、协议优化等多维度安全策略:

Nginx 防止攻击及安全配置

  1. 防止DDoS攻击

  • 限制连接速率:
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn addr 10;

  • 限制请求速率:
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    limit_req zone=one burst=20;

  1. 防止暴力破解

  • 限制登录尝试:
    limit_req_zone $binary_remote_addr zone=auth:10m rate=3r/m;
    limit_req zone=auth burst=5;

  1. 防止SQL注入/XSS

  • 过滤特殊字符:
    if ($query_string ~* "union.*select.*\(") { return 403; }
    if ($args ~* "alert\(.*\)") { return 403; }

  1. 目录遍历防护

  • 禁止访问隐藏文件:
    location ~ /\. { deny all; }

  • 限制敏感目录:
    location ^~ /admin/ { deny all; }

  1. 文件上传防护

  • 限制上传类型:
    location ~* \.(php|pl|py|jsp|asp|sh|cgi)$ { deny all; }

  • 限制上传大小:
    client_max_body_size 10m;

  1. 信息泄露防护

  • 隐藏版本号:
    server_tokens off;

  • 禁用目录列表:
    autoindex off;

  1. SSL安全配置

  • 禁用不安全的协议:
    ssl_protocols TLSv1.2 TLSv1.3;

  • 禁用弱加密套件:
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

  1. HTTP安全头设置

  • 添加安全头:

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    add_header Content-Security-Policy "default-src 'self'";
  1. IP访问控制

  • 白名单设置:
    allow 192.168.1.0/24; deny all;

  • 黑名单设置:
    deny 10.0.0.1;

  1. 日志监控

  • 记录可疑请求:
    log_format security '$remote_addr - $request - $status - $http_user_agent';
    access_log /var/log/nginx/security.log security;

实际案例:

  1. 某电商网站通过限制请求速率成功抵御了CC攻击

  2. 某论坛通过过滤特殊字符阻止了XSS攻击

  3. 某企业官网通过隐藏版本号减少了针对性攻击

注意:配置后需使用nginx -t测试配置,然后nginx -s reload重载配置。

以下是Nginx防御常见攻击的综合配置方案,结合访问控制、流量限制、协议优化等多维度安全策略:

一、访问控制与身份验证

IP访问限制‌
使用allow/deny指令限制特定IP或网段访问敏感路径(如管理后台):

nginx
Copy Code
location /admin {
    deny  all;
    allow 192.168.1.0/24;
}


适用场景:保护后台、API接口等关键资源‌。

基础认证‌
启用HTTP Basic认证,要求用户提供用户名和密码:

nginx
Copy Code
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;


适用场景:临时性访问控制或内部系统‌。

二、DDoS/CC攻击防护

请求速率限制‌
限制单个IP的请求频率(如每秒1次):

nginx
Copy Code
http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
}
location / {
    limit_req zone=req_limit burst=5;
}


通过burst参数允许突发流量缓冲‌。

连接数限制‌
限制单个IP的并发连接数:

nginx
Copy Code
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
location / {
    limit_conn conn_limit 10;
}


防止资源耗尽型攻击‌。

慢连接防御‌
缩短超时时间以减少资源占用:

nginx
Copy Code
client_body_timeout 5s;
client_header_timeout 5s;


避免攻击者通过长连接消耗服务器资源‌。

三、应用层攻击防护

XSS/点击劫持防御‌
通过响应头强制浏览器安全策略:

nginx
Copy Code
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'";


限制外部脚本加载和iframe嵌套‌。

SQL注入/恶意参数过滤‌
拦截包含敏感字符的请求:

nginx
Copy Code
if ($args ~* "union|select|sleep\(\)") {
    return 403;
}


需结合业务逻辑调整过滤规则‌。

四、信息泄露防护

隐藏版本号‌
禁用Nginx版本信息暴露:

nginx
Copy Code
server_tokens off;


防止攻击者利用版本漏洞‌。

禁用目录列表‌
关闭自动目录索引:

nginx
Copy Code
autoindex off;


避免敏感文件被遍历‌。

五、增强型安全措施

HTTPS加密传输‌
启用TLS并强制HTTP重定向:

nginx
Copy Code
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
}


支持HTTP/2提升性能与安全性‌。

防盗链配置‌
限制资源被外部站点引用:

nginx
Copy Code
location ~* \.(jpg|mp4)$ {
    valid_referers none blocked example.com;
    if ($invalid_referer) { return 403; }
}


保护图片、视频等静态资源‌。

六、动态防御策略

黑名单动态更新‌
结合ngx_http_geo_module动态封禁恶意IP:

nginx
Copy Code
geo $blocked_ip {
    default 0;
    1.2.3.4 1;
    include /etc/nginx/blocked_ips.conf;
}
server {
    if ($blocked_ip) { return 444; }
}


需定期更新IP库‌。

人机验证‌
通过Cookie验证区分正常用户与机器人:

nginx
Copy Code
if ($cookie_auth != "valid") {
    add_header Set-Cookie "auth=valid";
    return 302 /verify;
}


适用于防御自动化CC攻击‌。

以上配置需根据实际业务场景调整参数,建议定期审查日志并更新规则,结合Web应用防火墙(WAF)实现多层防护。