假设我想允许 192.168.1.1 和 192.168.1.40 之间的 IP 访问我的项目。
Nginx 示例:
stream {
#...
server {
listen 12345;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 2001:0db8::/32;
deny all;
}
}
我必须分别允许每个 IP,或者是否有任何技术可以允许访问给定范围内的 IP?
答案1
按顺序对allow
和deny
语句进行评估,直到找到匹配项,因此您可以使用五个连续的语句施加到的严格192.168.1.1
范围192.168.1.40
。
例如:
deny 192.168.1.0;
allow 192.168.1.0/27;
allow 192.168.1.32/29;
allow 192.168.1.40;
deny all;
192.168.1.0/27
代表192.168.1.0
包含192.168.1.31
,其中第一个地址已被前一个语句明确拒绝。
192.168.1.32/29
代表192.168.1.32
包容192.168.1.39
。
192.168.1.130
对于范围192.168.1.190
,首先查看最后一个字节的二进制表示形式:
130 = 10000010
190 = 10111110
因此这可以通过允许10xxxxxx
但首先否认1000000x
和来表示10111111
。
例如:
deny 192.168.1.128/31;
deny 192.168.1.191;
allow 192.168.1.128/26;
deny all;