我将本地托管的网站置于 Cloudflare 之后,以增强性能。
为了恢复原始连接 IP,我使用mod_remoteip
,并设置了所有 Cloudflare 的 IP 范围。
我还想建立一个纯粹通过 Cloudflare Access 访问的网站,限制任何试图绕过 Cloudflare Access 进行连接的人的访问。
我在网上看到过,可以使用诸如Require ip xx.xx.xx.xx/24
(etc) 之类的规则来执行此操作,但这些规则只有在我检查原始代理 IP 时才有效,但这已被 覆盖mod_remoteip
。
有什么方法可以强制执行原始代理 IP 地址或要求请求已重写 IP,或者任何可以满足我需要的东西?
答案1
只需在 Apache 之外的防火墙或安全组或类似系统中设置某种形式的基于 IP 的访问控制即可。仅允许 CloudFlare IP 范围https://www.cloudflare.com/ips/访问您的 Web 服务器端口,您将不会检测到任何由 Apache 云火焰发出的请求。
仅适用于更复杂的 Apache:
确保只有来自 CloudFlare 的请求才能被 mod_remoteip 解析:
mod_remoteip 提供RemoteIPTrustedProxyList
您可以轻松加载 CloudFlare IP 列表的文本版本
一旦您确保 mod__remoteip 仅针对 CloudFlare IP 激活,您就可以使用文档中隐藏的以下信息:
连接的底层客户端 IP 在 %{c}a 格式字符串中可用。
然后可能根据该格式字符串的存在来建立访问控制。未经测试:
<If "! %{c}a}”>
Require all denied
</If>