插件窝 干货文章 如何使用Nginx防范端口扫描攻击

如何使用Nginx防范端口扫描攻击

Nginx 配置 server 其他 280    来源:    2025-04-20

使用Nginx防范端口扫描攻击

端口扫描是网络攻击的常见前奏,通过Nginx可以有效防范这类探测行为。以下是几种有效的防护措施:

1. 限制访问频率

在Nginx配置中使用limit_req模块限制连接频率:

http {
    limit_req_zone $binary_remote_addr zone=scan_protection:10m rate=10r/s;

    server {
        location / {
            limit_req zone=scan_protection burst=20 nodelay;
            # 其他配置...
        }
    }
}

2. 屏蔽扫描工具特征

识别并屏蔽常见扫描工具的User-Agent:

server {
    if ($http_user_agent ~* (nmap|nikto|wikto|sqlmap|w3af|acunetix|nessus|metasploit|dirbuster) ) {
        return 403;
    }
    # 其他配置...
}

3. 隐藏服务器信息

减少服务器信息泄露:

server {
    server_tokens off;
    more_set_headers 'Server: Unknown';
    # 其他配置...
}

4. 限制HTTP方法

只允许必要的HTTP方法:

server {
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 405;
    }
    # 其他配置...
}

5. 使用fail2ban配合防护

结合fail2ban自动屏蔽扫描IP:

  1. 创建fail2ban规则文件/etc/fail2ban/filter.d/nginx-scan.conf:
[Definition]
failregex = ^<HOST>.*"(GET|POST|HEAD).*HTTP.*" (404|403|400) .*$
  1. /etc/fail2ban/jail.local中添加:
[nginx-scan]
enabled = true
port = http,https
filter = nginx-scan
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 600
bantime = 86400

6. 非标准端口配置

考虑使用非标准端口运行服务:

server {
    listen 8080;
    listen [::]:8080;
    # 其他配置...
}

7. 使用GeoIP限制访问

限制只允许特定国家/地区IP访问:

http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    server {
        location / {
            if ($geoip_country_code !~ ^(CN|US|JP)$) {
                return 403;
            }
            # 其他配置...
        }
    }
}

8. 启用ModSecurity

安装并配置ModSecurity WAF:

load_module modules/ngx_http_modsecurity_module.so;

http {
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;
    # 其他配置...
}

以上措施可以组合使用,根据实际业务需求和安全级别选择合适的防护策略。定期检查Nginx日志并更新防护规则也是保持安全的重要环节。