端口扫描是网络攻击的常见前奏,通过Nginx可以有效防范这类探测行为。以下是几种有效的防护措施:
在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;
# 其他配置...
}
}
}
识别并屏蔽常见扫描工具的User-Agent:
server {
if ($http_user_agent ~* (nmap|nikto|wikto|sqlmap|w3af|acunetix|nessus|metasploit|dirbuster) ) {
return 403;
}
# 其他配置...
}
减少服务器信息泄露:
server {
server_tokens off;
more_set_headers 'Server: Unknown';
# 其他配置...
}
只允许必要的HTTP方法:
server {
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
# 其他配置...
}
结合fail2ban自动屏蔽扫描IP:
/etc/fail2ban/filter.d/nginx-scan.conf
:[Definition]
failregex = ^<HOST>.*"(GET|POST|HEAD).*HTTP.*" (404|403|400) .*$
/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
考虑使用非标准端口运行服务:
server {
listen 8080;
listen [::]:8080;
# 其他配置...
}
限制只允许特定国家/地区IP访问:
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server {
location / {
if ($geoip_country_code !~ ^(CN|US|JP)$) {
return 403;
}
# 其他配置...
}
}
}
安装并配置ModSecurity WAF:
load_module modules/ngx_http_modsecurity_module.so;
http {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
# 其他配置...
}
以上措施可以组合使用,根据实际业务需求和安全级别选择合适的防护策略。定期检查Nginx日志并更新防护规则也是保持安全的重要环节。