黑白名单是一种用于管理和控制系统访问权限的机制。黑名单是指被禁止访问或使用的对象或资源列表,而白名单则是指被允许访问或使用的对象或资源列表。
在网络安全领域,黑白名单通常用于限制对特定网站、IP地址或应用程序的访问,以保护系统免受恶意攻击或未经授权的访问。
注意:黑白名单也可以用于过滤垃圾邮件、拦截恶意软件等。
在 Nginx 中,当我们需要指定或者禁止某些 ip 访问服务时,此时可以使用黑白名单机制,Nginx 通过 allow、deny 配置项来实现黑白名单。
如果仅仅限制单个 IP,我们可以直接在 location 里面编写,例如:
# 配置工作进程数量 worker_processes 1; events { # 设置工作进程可以同时打开的最大连接数 worker_connections 1024; } http { # 引用 MIME 类型 include mime.types; default_type application/octet-stream; server { listen 8080; server_name localhost; location / { # 设置请求的根目录 root html; # 定义将用作索引的文件 index index.html index.htm; # 【关键位置】 # 屏蔽 192.177.12.222 访问 deny 127.0.0.1; # 屏蔽 127.0.0.1 到 127.255.255.254 网段中的所有 IP 访问 deny 127.0.0.0/8; # 允许 192.177.44.201 访问 allow 192.177.44.201; # 允许 127.45.0.1 到 127.45.255.254 网段中的所有 IP 访问 allow 127.45.0.0/16; # 除开上述 IP 外,其他 IP 全部禁止访 deny all; } } }
如果我们需要批量限制 IP,则需要创建 .conf 文件来配置,例如:
(1)在 Nginx 的 conf 目录下面创建白名单文件 white.conf,如下:
allow 127.0.0.1; # 允许 127.0.0.1 访问 allow 192.177.12.222; # 允许 192.177.12.222 访问 allow 192.177.44.201; # 允许 192.177.44.201 访问 allow 127.45.0.0/16; # 允许 127.45.0.1 到 127.45.255.254 网段中的所有 IP 访问 deny all; # 除开上述 IP 外,其他 IP 全部禁止访问
注意:你也可以将配置文件放在任何你想要的地方,然后采用绝对地址引用,如:include /webapp/white.conf
(2)在 Nginx 的 conf 目录下面创建黑名单文件 black.conf,如下:
deny 192.177.12.222; # 屏蔽 192.177.12.222 访问 deny 192.177.44.201; # 屏蔽 192.177.44.201 访问 deny 127.0.0.0/8; # 屏蔽 127.0.0.1 到 127.255.255.254 网段中的所有 IP 访问
(3)最后,在 nginx 配置文件中引入,如下:
# 【目的】 # 实现黑白名单,批量限制IP worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; # 屏蔽该文件中的所有IP include black.conf; server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; # 【关键位置】 # 开放给白名单中的IP include white.conf; } } }
注意:同时也可以通过 ngx_http_geo_module、ngx_http_geo_module 第三方库去实现(这种方式可以按地区、国家进行屏蔽,并且提供了 IP 库)。