参考资料

  1. Nginx静态资源服务器搭建详细说明以及案例
  2. Nginx如何限制连接数以防止DDoS?
  3. Nginx集群负载(基于LVS和Keepalived)搭建详细说明以及案例
  4. NginxMemcached缓存模块详细说明以及案例
  5. Nginx端口监听(listen指令)详细说明以及案例
  6. Nginxlocalhost 路由匹配规则详细说明以及案例
  7. Nginx基础安全设置及示例
  8. nginx 配置https
  1. DDoS攻击防御

  • 配置速率限制:

    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
  • 启用SYN Cookie防护

  1. HTTP Flood防护

  • 限制单个IP连接数:

    limit_conn conn_limit 5;
    limit_req zone=req_limit burst=20;
  1. 慢速攻击防护

  • 配置超时参数:

    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 5 5;
  1. 恶意扫描防护

  • 屏蔽扫描工具User-Agent:

    if ($http_user_agent ~* (nmap|sqlmap|wget|curl|nikto)) {
      return 403;
    }
  1. 目录遍历防护

  • 禁用目录列表:

    autoindex off;
  1. SSRF防护

  • 限制访问内网:

    location ~* ^/(internal|admin) {
      deny 192.168.0.0/16;
      deny 10.0.0.0/8;
      allow all;
    }
  1. 配置错误利用防护

  • 隐藏版本信息:

    server_tokens off;
  1. WebShell防护

  • 限制PHP文件执行目录:

    location ~* \.php$ {
      fastcgi_pass unix:/var/run/php-fpm.sock;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      allow 192.168.1.0/24;
      deny all;
    }
  1. 实际案例配置

http {
    # 基础防护
    server_tokens off;
    autoindex off;

    # 连接限制
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

    server {
        # 请求限制
        limit_conn conn_limit 5;
        limit_req zone=req_limit burst=20 nodelay;

        # 超时设置
        client_body_timeout 10s;
        client_header_timeout 10s;

        # 扫描防护
        if ($http_user_agent ~* (nmap|sqlmap)) {
            return 444;
        }

        # 敏感目录防护
        location /admin {
            allow 192.168.1.100;
            deny all;
        }
    }
}