server {
listen [::]:80;
server_name example.com;
# 仅允许特定IPv6地址段访问
allow 2001:db8::/32;
deny all;
# 其他配置...
}
# 如果不需要IPv6,直接不监听IPv6端口
server {
listen 80; # 仅IPv4
# ...
}
# 在http块中添加
real_ip_header X-Forwarded-For;
set_real_ip_from ::/0; # 或者指定你的代理服务器IPv6范围
# 在http块中
limit_conn_zone $binary_remote_addr zone=ipv6_conn:10m;
limit_req_zone $binary_remote_addr zone=ipv6_req:10m rate=10r/s;
# 在server块中
limit_conn ipv6_conn 20;
limit_req zone=ipv6_req burst=20 nodelay;
server {
listen [::]:443 ssl;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
# ...
}
# 允许HTTP/HTTPS
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
# 限制连接速率
ip6tables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
log_format ipv6 '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$upstream_response_time';
access_log /var/log/nginx/ipv6_access.log ipv6;
# 检测并阻止扫描行为
map $http_user_agent $block_ua {
default 0;
"~*(nmap|nikto|w3af|sqlmap)" 1;
}
server {
# ...
if ($block_ua) {
return 403;
}
}
通过以上配置,您可以显著提高Nginx在IPv6环境下的安全性,同时保持服务的可用性和性能。