在 Nginx 中实现 IP 白名单和黑名单
Nginx 提供了多种机制来实施 IP 访问控制,即创建白名单和黑名单,以增强安全性,限制非授权访问。以下是在 Nginx 配置文件中实现这些策略的方法。
白名单 (Allow List)
仅允许特定 IP 地址或子网访问网站或服务,而阻止所有其他来源的请求,是一种典型的白名单策略。配置如下:
# 允许来自 192.168.1.0/24 子网的所有 IP
geo $allowed {
default 0;
192.168.1.0/24 1;
}
server {
if ($allowed = 0) {
return 403; # 如果 IP 不在白名单内,则返回 403 Forbidden 错误
}
# 正常服务配置...
}
在这个例子中,只有 192.168.1.0/24 子网内的 IP 能访问网站。所有其他尝试访问的请求都将收到 403 错误。
黑名单 (Block List)
黑名单则相反,允许所有人访问,但特定 IP 或子网除外。配置如下:
geo $blocked {
default 0;
192.168.1.1 1; # 将 192.168.1.1 添加到黑名单
}
server {
if ($blocked = 1) {
return 403; # 如果 IP 在黑名单内,则返回 403 错误
}
# 正常服务配置...
}
在这里,任何尝试从 192.168.1.1 访问的请求都将被拒绝。
更多高级用法
- 使用文件或数据库存储 IP 列表:可以将 IP 列表保存在文本文件中,并通过 Nginx 的内置命令读取,动态更新黑名单或白名单。
map $remote_addr $is_blocked { default 0; include /path/to/blacklist.conf; # 包含黑名单文件 } server { if ($is_blocked = 1) { return 403; } }blacklist.conf文件内容类似:192.168.1.1 1 192.168.1.2 1 - 基于请求频率限制:结合
limit_req或limit_conn,可以自动将频繁请求的 IP 添加到黑名单,实现动态防护。
总结
合理使用 IP 白名单和黑名单,可以显著增强 Nginx 服务的安全性,屏蔽恶意请求,减少潜在风险。无论是静态配置还是动态管理,都是现代 Web 架构师和系统管理员应掌握的核心技能。记住定期审查和更新这些列表,确保它们反映最新的威胁情况。