配置 Nginx 禁止 Cloudflare 以外 IP 回源
Cloudflare 是一家知名的云服务提供商,启用 CDN 服务后建议禁止其他 IP 访问。
配置
Nginx 可以设置 allow 或 deny 的 IP(段)。类似这样。
1 2
| allow 114.51.4.0/22; deny all;
|
1 2
| allow all; deny 114.51.4.0/22;
|
实践
Cloudflare 在这里公布了所有的回源 IP 段。
按照上面的写法,可以写出下面的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| allow 103.21.244.0/22; allow 103.22.200.0/22; allow 103.31.4.0/22; allow 104.16.0.0/13; allow 104.24.0.0/14; allow 108.162.192.0/18; allow 131.0.72.0/22; allow 141.101.64.0/18; allow 162.158.0.0/15; allow 172.64.0.0/13; allow 173.245.48.0/20; allow 188.114.96.0/20; allow 90.93.240.0/20; allow 197.234.240.0/22; allow 198.41.128.0/17; allow 2400:cb00::/32; allow 606:4700::/32; allow 2803:f800::/32; allow 2405:b500::/32; allow 2405:8100::/32; allow 2a06:98c0::/29; allow 2c0f:f248::/32;
deny all;
|
但是每次都手动写不够优雅,我们可以…
写个脚本
Cloudflare 同样提供纯文本的 IP 段信息,省的写爬虫了。
1 2 3 4 5 6 7 8 9
| #!/bin/sh
CLOUDFLARE_IPV4_URL="https://www.cloudflare.com/ips-v4" CLOUDFLARE_IPV6_URL="https://www.cloudflare.com/ips-v6"
curl -s $CLOUDFLARE_IPV4_URL | awk '{print "allow " $0;}' curl -s $CLOUDFLARE_IPV6_URL | awk '{print "allow " $0;}'
echo "deny all;"
|