Nginx配置黑白名单

480 阅读3分钟

nginx如何配置白名单黑名单

可以使用 nginx 的 geo 模块来配置白名单和黑名单。该模块提供了一种根据客户端的 IP 地址将请求路由到特定区域的方法。下面是一个示例配置文件,其中包含了一个名为 blocklist 的黑名单和一个名为 allowlist 的白名单。这个配置文件假定您的 nginx 已经安装并配置好了。

http {
# ...

    # 定义黑名单
    geo $blocklist {
        default 0;
        10.0.0.0/8 1;
        172.16.0.0/12 1;
        192.168.0.0/16 1;
        # 您可以添加更多的 IP 地址范围,用空格分隔
    }

    # 定义白名单
    geo $allowlist {
        default 1;
        192.168.1.0/24 0;
        # 您可以添加更多的 IP 地址范围,用空格分隔
    }

    server {
        # ...
        # 应用黑名单
        if ($blocklist = 1) {
        return 403;
        }

        # 应用白名单
        if ($allowlist = 0) {
        return 403;
        }
        # ...
    }
}

在上面的配置文件中,$blocklist$allowlist 变量分别包含了黑名单和白名单中的 IP 地址范围。如果客户端的 IP 地址在黑名单中,则返回 403 错误页面;如果客户端的 IP 地址不在白名单中,则返回 403 错误页面。

您可以根据需要添加更多的 IP 地址范围到黑名单或白名单中。请注意,这种基于 IP 地址的访问控制并不是最安全的方式,因为攻击者可以使用代理或伪造 IP 地址来规避它。对于更高级的安全措施,建议使用基于身份验证或令牌的访问控制。

CIDR 表示法的 IP 地址

上面 192.168.226.128/23 是什么意思?

  • 代表了一个IP段
类别十进制二进制备注
IP地址192.168.226.12811000000.10101000.11100010.10000000--
子网掩码255.255.254.011111111.11111111.11111110.00000000/23 只获取前23位
网络地址192.168.226.011000000.10101000.11100010.00000000--
广播地址192.168.227.25511000000.10101000.11100010.00000000--

IP地址:192.168.226.128
子网掩码:255.255.254.0
将IP地址和子网掩码转换为二进制,然后进行按位与运算,得到网络地址:
IP地址: 11000000.10101000.11100010.10000000
子网掩码:11111111.11111111.11111110.00000000
网络地址:11000000.10101000.11100010.00000000
将网络地址转换为十进制,得到网络号:192.168.226.0

计算可用主机数:
子网掩码中0的个数为9,所以可用主机数为2^9-2=510
计算广播地址:
子网掩码取反后与网络地址按位或运算,得到广播地址:
子网掩码取反:00000000.00000000.00000001.11111111
广播地址:11000000.10101000.11100011.11111111
将广播地址转换为十进制,得到广播地址:192.168.227.255

所以IP范围为:
网络号:192.168.226.0
广播地址:192.168.227.255
可用主机IP范围:192.168.226.1 - 192.168.227.254

IP地址、网络地址与子网掩码

IP地址

  • IP地址是一个32位二进制数,通常被分成4个8位二进制数,每个8位二进制数转换为十进制数后,用"."连接起来,形成IP地址。
  • IP地址由网络号和主机号两部分组成,网络号用于标识网络,主机号用于标识网络中的设备。在IPv4中,IP地址的网络号和主机号的划分是由子网掩码来实现的。
  • 常用的IP地址有A、B、C三类,每类均规定了网络标识和主机标识在32位中所占的位数。 (图片地址引用自:IP地址、网络地址与子网掩码的理解IP分类.png

网络地址

网络地址是指在一个子网中,所有主机共享的地址部分,用于标识该子网。计算方式是将IP地址和子网掩码进行按位与运算,得到网络地址。

子网掩码

  • 子网掩码用于将IP地址分成网络地址和主机地址两部分,以便于在网络中进行路由和寻址。
  • 子网掩码是一个32位的二进制数,其中网络地址部分全为1,主机地址部分全为0。
  • 子网掩码的长度决定了网络地址和主机地址的位数,例如255.255.254.0表示网络地址为23位,主机地址为9位。
  • 子网掩码的长度也决定了一个子网中可用的IP地址数量,长度为n时可用IP地址数量为2^(32-n)-2。
  • 子网掩码的计算方式是将子网掩码的二进制形式与IP地址的二进制形式进行按位与运算,得到网络地址的二进制形式。