在Nginx反向代理配置中,基于网段的访问控制是一种常见的安全措施,可以限制只有特定IP范围的客户端能够访问后端服务。以下是实现这一功能的几种方法:
allow
和deny
指令location / {
# 允许192.168.1.0/24网段访问
allow 192.168.1.0/24;
# 允许10.0.0.0/8网段访问
allow 10.0.0.0/8;
# 拒绝所有其他IP
deny all;
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
geo
模块实现更复杂的控制geo $acl {
default 0;
192.168.1.0/24 1;
10.0.0.0/8 1;
172.16.0.0/12 1;
}
server {
location / {
if ($acl = 0) {
return 403;
}
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
map
模块实现动态控制map $remote_addr $allowed_ip {
default 0;
# 允许的IP网段
"~^192\.168\.1\." 1;
"~^10\." 1;
"~^172\.(1[6-9]|2[0-9]|3[0-1])\." 1;
}
server {
location / {
if ($allowed_ip = 0) {
return 403;
}
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 反向代理层控制
location /api/ {
allow 192.168.1.0/24;
deny all;
proxy_pass http://api_server;
}
# 上游服务配置(在api_server的配置中)
location / {
allow 10.0.0.0/8;
allow 192.168.1.0/24;
deny all;
}
日志记录:记录被拒绝的访问尝试以便审计
log_format acl_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $acl_status';
access_log /var/log/nginx/acl.log acl_log;
ngx_http_geoip_module
或外部数据库2001:db8::/32
)通过合理配置基于网段的访问控制,可以显著增强Nginx反向代理环境的安全性。