在 Cloudflare 后面使用 Yii2 访问规则来限制 ips 的操作

Using Yii2 Access Rules behind Cloudflare to restrict actions by ips

环境:Cloudflare 代理后面的 IIS 8

我在 Cloudflare 后面使用 Yii2 访问规则来限制 IPS 的操作,这在不使用 Cloudflare 代理时工作正常。我想通过 Cloudflare 进行代理,这样我就可以使用他们的一些功能,但是如果我现在这样做,Yii 会看到 Cloudflare 服务器地址而不是客户端 IP。

我相信 Yii2 访问规则限制 IPS 的行为使用 REMOTE_ADDR header,我想使用 header HTTP_CF_CONNECTING_IP。关于如何最好地实现这一点有什么想法吗?

我是通过带有覆盖的 Yii2 还是 IIS 本身或...来最好地实现这一点?

您需要将 Request::$trustedHosts to IPs range of your proxy and Request::$ipHeaders 配置为允许的 header 列表,这些列表将用于获取使用 IP。例如在您的网络配置中:

'request' => [
    // ...
    'trustedHosts' => [
        '10.0.2.0/24' => [
            'HTTP_CF_CONNECTING_IP',
        ],
    ],
    'ipHeaders' => [
        'HTTP_CF_CONNECTING_IP',
    ],
],

确保在 trustedHosts 中正确配置 IP - 所有匹配指定范围的主机都可以通过发送 HTTP_CF_CONNECTING_IP header.

伪造用户 IP

您可以在 guide 中阅读更多关于可信代理的信息。

只是为了确认我在我的 web.config

中使用以下内容可以正常工作

'request' => [ // ... 'trustedHosts' => [ '103.21.244.0/22' => [ 'cf-connecting-ip', ], // ... ], 'ipHeaders' => [ 'cf-connecting-ip', ], ],

可在此处找到 Cloudflare IP:Cloudflare IP Range