Nginx可以通过ngx_http_access_module模块实现IP黑白名单功能。IP黑白名单用于:
- 防御恶意访问:拒绝已知攻击IP的访问,防止网站受到威胁。
- 访问控制:仅允许特定IP段或IP访问,拒绝其他未授权访问。
实现IP黑白名单需要:
- 在http{}或server{}级别使用allow与deny指令设置IP访问控制规则。
- allow:允许指定IP或IP段访问
- deny:拒绝指定IP或IP段访问
- 使用valid_referers指令检查referer头,避免IP伪装。
- 分类使用黑名单与白名单:
- 黑名单:默认拒绝所有,使用allow显式允许某IP访问。
- 白名单:默认允许所有,使用deny显式拒绝某IP访问。
例如:
- 黑名单:
location / {
deny all; # 默认拒绝所有访问
allow 192.168.1.0/24; # 允许192.168.1.0/24网段访问
}
- 白名单:
location / {
allow all; # 默认允许所有访问
deny 192.168.1.1; # 拒绝192.168.1.1 IP访问
}
- 使用valid_referers检查referer:
location / {
valid_referers none blocked *.example.com; # 允许空referer、blocked与example.com域
if ($invalid_referer) {
return 403; # 如果referer不符合规则,返回403
}
}
这种方式可以根据访问源有效控制对资源的访问权限,阻止未经授权的访问请求,是保证web应用安全的重要手段。