其他分类 · 21 7 月, 2024 0

让网站只允许Cloudflare的IP访问(Nginx设置IP白名单)

前言(废话)

你是否在使用Cloudflare提供的缓存代理服务呢。作为有名的赛博活佛,Cloudflare代理提供了免费的、强大的缓存+WAF+防DDoS等功能,然而俗话说:防君子不防小人。上述功能成立的前提是,用户正常访问了你设置的用Cloudflare代理的域名,就像这样(路径1):

用户IP -> 域名 -> CF代理IP(DNS解析) -> 你的服务器IP

那么假如你的服务器IP已经暴露,有人直接用修改hosts文件的方式强行绑定了域名和你的服务器IP(路径2)然后使劲儿D你,阁下又该如何应对?

用户IP -> 域名 -> 你的服务器IP(hosts文件绑定)

只允许Cloudflare的IP访问就好了!

为了让用户必须经由Cloudflare代理才能访问站点,可以将自己网站的HTTP服务器设置为只允许Cloudflare代理的IP地址访问。这样一般用户就无法用自己的IP地址通过(路径2)直接访问HTTP服务器了。这里的HTTP服务器以Nginx为例说明。

Cloudflare代理的IP地址

可以从Cloudflare的官方文档找到。IPv4和IPv6的都有,按需参考即可。

Nginx设置IP白名单

在server或路径中加入IP白名单设置。这里以网站根目录为例。

location /
{
  ## 使用的是2024.07.21确认的地址。设置前请确认上述官方文档。
  ## 放行CF地址(IPv4)
  allow 173.245.48.0/20;
  allow 103.21.244.0/22;
  allow 103.22.200.0/22;
  allow 103.31.4.0/22;
  allow 141.101.64.0/18;
  allow 108.162.192.0/18;
  allow 190.93.240.0/20;
  allow 188.114.96.0/20;
  allow 197.234.240.0/22;
  allow 198.41.128.0/17;
  allow 162.158.0.0/15;
  allow 104.16.0.0/13;
  allow 104.24.0.0/14;
  allow 172.64.0.0/13;
  allow 131.0.72.0/22;

  ## 放行CF地址(IPv6)
  allow 2400:cb00::/32;
  allow 2606:4700::/32;
  allow 2803:f800::/32;
  allow 2405:b500::/32;
  allow 2405:8100::/32;
  allow 2a06:98c0::/29;
  allow 2c0f:f248::/32;

  ## 屏蔽其他IP地址
  deny all;

  proxy_pass http://127.0.0.1:8080/;
  ## 其他配置……
}