插件窝 干货文章 Nginx防范脚本攻击的最佳方案

Nginx防范脚本攻击的最佳方案

Nginx 配置 block server 638    来源:    2025-04-20

Nginx防范脚本攻击的最佳方案

作为IT工程师,我可以为您提供一套全面的Nginx防范脚本攻击的解决方案。以下是分层防御策略:

1. 基础安全配置

1.1 禁用不必要的方法

location / {
    limit_except GET POST {
        deny all;
    }
}

1.2 隐藏Nginx版本信息

server_tokens off;

1.3 限制HTTP头大小

client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
client_max_body_size 8k;

2. 防注入攻击

2.1 SQL注入防护

set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
    set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
    return 403;
}

2.2 XSS防护

set $block_xss 0;
if ($query_string ~ "<script.*>") {
    set $block_xss 1;
}
if ($block_xss = 1) {
    return 403;
}

3. 速率限制

3.1 请求速率限制

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location / {
        limit_req zone=one burst=5 nodelay;
    }
}

3.2 连接数限制

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location / {
        limit_conn addr 10;
    }
}

4. WAF集成

4.1 ModSecurity集成

load_module modules/ngx_http_modsecurity_module.so;

http {
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
}

4.2 NAXSI配置

load_module modules/ngx_http_naxsi_module.so;

http {
    include /etc/nginx/naxsi_core.rules;

    server {
        location / {
            SecRulesEnabled;
            DeniedUrl "/RequestDenied";
        }

        location /RequestDenied {
            return 403;
        }
    }
}

5. 高级防护

5.1 地理位置限制

geo $block_country {
    default 0;
    # 屏蔽高风险国家
    CN 1;
    RU 1;
    KP 1;
}

server {
    if ($block_country) {
        return 403;
    }
}

5.2 User-Agent过滤

map $http_user_agent $blocked_agent {
    default 0;
    ~*(wget|curl|libwww-perl|python|nikto|scan) 1;
    ~*(havij|sqlmap|bbqsql|absinthe|pangolin) 1;
}

server {
    if ($blocked_agent) {
        return 403;
    }
}

6. HTTPS强化

6.1 SSL配置

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

7. 日志与监控

7.1 详细日志记录

log_format security '$remote_addr - $remote_user [$time_local] '
                   '"$request" $status $body_bytes_sent '
                   '"$http_referer" "$http_user_agent" '
                   '$request_time $upstream_response_time '
                   '$http_x_forwarded_for';

access_log /var/log/nginx/security.log security;

8. 定期维护建议

  1. 保持Nginx更新:定期升级到最新稳定版
  2. 审计配置:每月检查一次安全配置
  3. 日志分析:设置实时告警系统监控异常请求
  4. 备份配置:定期备份nginx.conf及相关安全配置

这套方案提供了从基础到高级的多层防护,能有效抵御大多数脚本攻击。根据您的具体业务需求,可以适当调整其中的参数和规则。