我最近收到了来自多个代理 ip 的拒绝服务攻击,所以我安装了 cloudflare 来防止这种情况发生。然后我开始注意到他们通过直接连接到服务器的 IP 地址并伪造主机标头来绕过 cloudflare。
在不是来自 cloudflare 使用的 18 个 IP 地址的连接上返回 403 的最高效方法是什么?
我尝试denying all 然后明确地allowing cloudflare ips 但这不起作用,因为我已经设置了它以便CF-Connecting-IP设置 ipallow测试。
我正在使用 nginx 1.6.0。
小智 6
如此处所述,您只能允许来自 cloudflare 的 IP 地址。
https://erichelgeson.github.io/blog/2014/01/18/whitelisting-cloudflare-in-nginx/
# https://www.cloudflare.com/ips
# IPv4
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 104.16.0.0/12;
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 190.93.240.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
# IPv6
allow 2400:cb00::/32;
allow 2405:b500::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2c0f:f248::/32;
allow 2a06:98c0::/29;
deny all; # deny all remaining ips
Run Code Online (Sandbox Code Playgroud)
请注意,您必须每隔一段时间更新一次此配置,因为 Cloudflare 的 IP 地址范围可能会发生变化。要自动生成此配置,您可以使用此脚本
小智 5
我想出的唯一可以用 nginx 自己完成的解决方案需要 nginx 版本 1.9.7 或更高版本。
您可以使用ngx_http_geo_module为任何不是 cloudflare ip 的 ip 识别并返回 403 响应。
使用这个地理块。
geo $realip_remote_addr $cloudflare_ip {
default 0;
103.21.244.0/22 1;
103.22.200.0/22 1;
103.31.4.0/22 1;
104.16.0.0/12 1;
108.162.192.0/18 1;
131.0.72.0/22 1;
141.101.64.0/18 1;
162.158.0.0/15 1;
172.64.0.0/13 1;
173.245.48.0/20 1;
188.114.96.0/20 1;
190.93.240.0/20 1;
197.234.240.0/22 1;
198.41.128.0/17 1;
199.27.128.0/21 1;
2400:cb00::/32 1;
2405:8100::/32 1;
2405:b500::/32 1;
2606:4700::/32 1;
2803:f800::/32 1;
2c0f:f248::/32 1;
2a06:98c0::/29 1;
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将其添加到您的服务器块。
if ($cloudflare_ip != 1) {
return 403;
}
Run Code Online (Sandbox Code Playgroud)
对于不是源自$cloudflare_ip.
这是有效的,因为我$realip_remote_addr在地理块中使用,它在使用real_ip_header CF-Connecting-IP.
最有效的方法是在服务器前面安装硬件防火墙。或者向您的数据中心/上游提供商寻求帮助以减轻攻击。
在网络服务器或 iptables 中阻止某些内容可能会有所帮助,但仍然会占用带宽和系统资源,因此 DoS 攻击仍然有可能发生。您想要的是尽可能阻止上游的流量 - 这样流量就永远不会到达您的服务器,并且不会淹没您到世界其他地方的链接。硬件防火墙可以比网络服务器更快地过滤流量,并且不使用服务器资源。当您需要直接连接时,您将希望它们允许来自 cloudflare 以及您的办公室或其他服务器的流量。
更改服务器的 IP 也可能有所帮助 - 只有 cloudflare 应该需要知道新的 IP,不要将其发布在公共 DNS 记录中。
| 归档时间: |
|
| 查看次数: |
15006 次 |
| 最近记录: |