插件窝 干货文章 Nginx安全防火墙配置,保护网站不受恶意攻击

Nginx安全防火墙配置,保护网站不受恶意攻击

Nginx 配置 server SSL 717    来源:    2025-04-17

Nginx安全防火墙配置指南

基础安全配置

1. 禁用不必要的HTTP方法

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

2. 隐藏Nginx版本信息

server_tokens off;

3. 防止点击劫持

add_header X-Frame-Options "SAMEORIGIN";

4. 启用XSS保护

add_header X-XSS-Protection "1; mode=block";

速率限制配置

1. 防止暴力破解

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

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

2. 连接数限制

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    limit_conn addr 10;
}

Web应用防火墙(WAF)配置

1. 使用ModSecurity

load_module modules/ngx_http_modsecurity_module.so;

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

2. 常见攻击防护规则

# SQL注入防护
set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
    set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
    return 403;
}

# 目录遍历防护
if ($uri ~* "\.\./") {
    return 403;
}

# 常见漏洞扫描工具防护
if ($http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan)) {
    return 403;
}

SSL/TLS安全配置

1. 强制HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

2. 安全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_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

高级防护措施

1. GeoIP限制

geo $blocked_country {
    default 0;
    # 限制特定国家IP访问
    CN 1;
    RU 1;
}

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

2. 防止热点链接

valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
    return 403;
}

3. 文件上传限制

client_max_body_size 10m;
client_body_buffer_size 128k;

日志与监控

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 $upstream_addr';

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

2. 错误日志配置

error_log /var/log/nginx/error.log warn;

实施建议

  1. 分阶段实施:先在监控模式下测试规则,确认无误后再启用拦截
  2. 定期更新规则:保持安全规则与最新威胁同步
  3. 监控异常:设置警报监控异常访问模式
  4. 备份配置:修改前备份现有配置
  5. 性能测试:安全规则可能会影响性能,上线前进行压力测试

这些配置可以根据您的具体需求和环境进行调整。对于生产环境,建议先在小规模测试环境中验证配置效果。