Nginx如何实现IP黑白名单?

Nginx可以通过ngx_http_access_module模块实现IP黑白名单功能。IP黑白名单用于:

  • 防御恶意访问:拒绝已知攻击IP的访问,防止网站受到威胁。
  • 访问控制:仅允许特定IP段或IP访问,拒绝其他未授权访问。

实现IP黑白名单需要:

  1. 在http{}或server{}级别使用allow与deny指令设置IP访问控制规则。
  • allow:允许指定IP或IP段访问
  • deny:拒绝指定IP或IP段访问
  1. 使用valid_referers指令检查referer头,避免IP伪装。
  2. 分类使用黑名单与白名单:
  • 黑名单:默认拒绝所有,使用allow显式允许某IP访问。
  • 白名单:默认允许所有,使用deny显式拒绝某IP访问。

例如:

  1. 黑名单:
location / {
  deny all;      # 默认拒绝所有访问
  allow 192.168.1.0/24; # 允许192.168.1.0/24网段访问  
} 
  1. 白名单:
location / {
  allow all;     # 默认允许所有访问
  deny 192.168.1.1;   # 拒绝192.168.1.1 IP访问
} 
  1. 使用valid_referers检查referer:
location / {
  valid_referers none blocked *.example.com;  # 允许空referer、blocked与example.com域
  if ($invalid_referer) {
     return 403;   # 如果referer不符合规则,返回403
  }
}

这种方式可以根据访问源有效控制对资源的访问权限,阻止未经授权的访问请求,是保证web应用安全的重要手段。