Azure 网站 IP 限制

Posted

技术标签:

【中文标题】Azure 网站 IP 限制【英文标题】:Azure website IP restriction 【发布时间】:2014-09-13 01:55:08 【问题描述】:

我有一个仅用于开发和测试的 Azure 网站,因此我想限制除我自己以外的所有人访问它。 根据这个blog article,这现在是官方支持的,所以我尝试将它添加到我的 web.config 文件中:

<system.webServer>
    <security>
        <ipSecurity allowUnlisted="false" denyAction="NotFound">
            <add allowed="true" ipAddress="1.2.3.4" />
        </ipSecurity>
    </security>
</system.webServer>

对于 ipAddress 属性,我必须使用我的 Internet 连接的 IP 地址,对吗?于是我去http://www.whatismyip.com/复制了地址,但现在我的网站只是简单地阻止所有请求,允许规则无效。

我错过了什么吗?

更新:日志文件显示,Web 服务器看到的 IP 不是实际客户端的 IP,而是中间代理 (Cloudflare) 的 IP。所以我尝试通过添加enableProxyMode="true" 来解决这个问题,不幸的是这并不能解决我的问题。关于如何让 IP 限制与 Cloudflare 一起工作的任何想法?

【问题讨论】:

您在 ipAddress 属性上是正确的。您确定这正是您的 web.config 中的内容吗?您拥有的配置(为我的 IP 更改)工作得很好。如果此配置正确,则进入站点的配置页面并打开 WEB SERVER LOGGING-FILE SYSTEM。然后,再次尝试访问您的站点并查看日志以查看正在记录的客户端 IP 是什么。 感谢您的提示!我会检查我的日志文件 【参考方案1】:

以防万一有人尝试使用 Cloudflare 设置 IP 限制:解决方案是不仅将您的 IP 添加到白名单,还包括所有 Cloudflare IP(取自 here)。

<system.webServer>
    <security>
        <ipSecurity enableProxyMode="true" allowUnlisted="false" denyAction="NotFound">
            <!-- YOUR IP -->
            <add allowed="true" ipAddress="1.2.3.4" />
            <!-- CLOUDFLARE -->
            <add allowed="true" ipAddress="199.27.128.0" subnetMask="255.255.248.0" />
            <add allowed="true" ipAddress="173.245.48.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="103.21.244.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="103.22.200.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="103.31.4.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="141.101.64.0" subnetMask="255.255.192.0" />
            <add allowed="true" ipAddress="108.162.192.0" subnetMask="255.255.192.0" />
            <add allowed="true" ipAddress="190.93.240.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="188.114.96.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="197.234.240.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="198.41.128.0" subnetMask="255.255.128.0" />
            <add allowed="true" ipAddress="162.158.0.0" subnetMask="255.254.0.0" />
            <add allowed="true" ipAddress="104.16.0.0" subnetMask="255.240.0.0" />
        </ipSecurity>
    </security>
</system.webServer>

【讨论】:

这个网站不是又对公众开放了吗?也就是说,假设所有流量都通过 Cloudflare 访问该站点,这如何阻止其他人? Cloudflare 添加一个带有原始客户端 IP 的 X-Forwarded-For HTTP 标头,enableProxyMode="true" 告诉网络服务器也检查此标头是否有有效 IP。 令我惊讶的是,这实际上效果很好。只要您启用ProxyMode,它似乎只会将CF IP作为代理标头,不允许它们实际访问但使用它们来找出原始请求IP。我将发布更新的 IP 列表作为单独的答案(建议的编辑队列已满)。 这太好了 - 谢谢!如果您使用 CloudFlare Access,这样做非常重要。【参考方案2】:

从 Azure SDK 2.3 开始,可以使用访问控制列表 (ACL) 为您的云服务应用 IP 限制。

只需将 ACL 添加到您的 ServiceConfiguration.Cloud.cscfg

<NetworkConfiguration>
    <AccessControls>
        <AccessControl name="test">
            <Rule action="permit" description="test" order="100" remoteSubnet="xxx.xxx.xxx.xxx/32" />
            <Rule action="deny" description="test" order="200" remoteSubnet="0.0.0.0/0" />
        </AccessControl>
    </AccessControls>
    <EndpointAcls>
        <EndpointAcl role="WebRoleName" endPoint="Endpoint1" accessControl="test" />
    </EndpointAcls>
</NetworkConfiguration>

【讨论】:

这适用于云服务,但不适用于 Azure Web 应用【参考方案3】:

不打算作为完整的答案,只是以有用的复制/粘贴格式发布稍微更新的 CloudFlare IP 列表。请参阅接受的答案以了解用法。

    <add allowed="true" ipAddress="103.21.244.0" subnetMask="255.255.252.0" />
    <add allowed="true" ipAddress="103.22.200.0" subnetMask="255.255.252.0" />
    <add allowed="true" ipAddress="103.31.4.0" subnetMask="255.255.252.0" />
    <add allowed="true" ipAddress="104.16.0.0" subnetMask="255.240.0.0" />
    <add allowed="true" ipAddress="108.162.192.0" subnetMask="255.255.192.0" />
    <add allowed="true" ipAddress="131.0.72.0" subnetMask="255.255.252.0" />
    <add allowed="true" ipAddress="141.101.64.0" subnetMask="255.255.192.0" />
    <add allowed="true" ipAddress="162.158.0.0" subnetMask="255.254.0.0" />
    <add allowed="true" ipAddress="172.64.0.0" subnetMask="255.248.0.0" />
    <add allowed="true" ipAddress="173.245.48.0" subnetMask="255.255.240.0" />
    <add allowed="true" ipAddress="188.114.96.0" subnetMask="255.255.240.0" />
    <add allowed="true" ipAddress="190.93.240.0" subnetMask="255.255.240.0" />
    <add allowed="true" ipAddress="197.234.240.0" subnetMask="255.255.252.0" />
    <add allowed="true" ipAddress="198.41.128.0" subnetMask="255.255.128.0" />
    <add allowed="true" ipAddress="199.27.128.0" subnetMask="255.255.248.0" />

【讨论】:

【参考方案4】:

这是 Cloudflare IP 的当前列表:

    <security>
        <ipSecurity allowUnlisted="false">
            <!-- CLOUDFLARE -->
            <add allowed="true" ipAddress="103.21.244.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="103.22.200.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="103.31.4.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="104.16.0.0" subnetMask="255.248.0.0" />
            <add allowed="true" ipAddress="104.24.0.0" subnetMask="255.252.0.0" />
            <add allowed="true" ipAddress="108.162.192.0" subnetMask="255.255.192.0" />
            <add allowed="true" ipAddress="131.0.72.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="141.101.64.0" subnetMask="255.255.192.0" />
            <add allowed="true" ipAddress="162.158.0.0" subnetMask="255.254.0.0" />
            <add allowed="true" ipAddress="172.64.0.0" subnetMask="255.248.0.0" />
            <add allowed="true" ipAddress="173.245.48.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="188.114.96.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="190.93.240.0" subnetMask="255.255.240.0" />
            <add allowed="true" ipAddress="197.234.240.0" subnetMask="255.255.252.0" />
            <add allowed="true" ipAddress="198.41.128.0" subnetMask="255.255.128.0" />
        </ipSecurity>
    </security>

【讨论】:

以上是关于Azure 网站 IP 限制的主要内容,如果未能解决你的问题,请参考以下文章

Azure网站上的黑名单特定IP

Azure 网站日志,包括条目中的内部 IP

Azure 上的网站如何识别不同国家和地区的用户

来自 Azure 网站的 Android 推送通知出现 401 错误

使 azure 网站仅可用于其他 azure 网站

公网ip被X网站限制访问,现有啥手段可以继续访问X网站?