首页 > 解决方案 > 动态阻止 IP 地址到 Azure 云服务

问题描述

我们有一个 Azure 云服务(经典),它是我们的 Web 应用程序。我们如何告诉服务阻止所有实例上的特定 IP?

我知道当通过 web.config 文件设置时,我们可以使用 IIS 8+ 动态 IP 限制 (DIPR) 进行阻止。 配置动态 IP 限制

2个问题是1)我们不能从应用程序中添加到总是阻止列表中,2)即使我可以让它工作,它也只会在那个实例上。

有没有办法阻止/IP 过滤来自门户的流量?它可以从我们的云服务中设置吗?

标签: asp.netazureipazure-web-app-service

解决方案


有没有办法阻止/IP 过滤来自门户的流量?它可以从我们的云服务中设置吗?

每次您的实例启动时,它都会查看已为角色配置的端点并在防火墙中打开所需的端口。我们在代码中要做的只是禁用这些规则并创建仅限于几个 IP 地址/IP 地址范围的新规则

该解决方案的核心是IPAddressRestrictionManager.cs类,它解析来自 的设置ServiceConfiguration.cscfg(您可以在部署应用程序时对其进行修改)并修改每个实例上的防火墙。

首先,您需要安装 NuGet 包:

PM> Install-Package WindowsAzure.IPAddressRestriction

如果您想将 链接IPAddressRestrictionManagerServiceConfiguration您的角色,您需要将以下设置添加到您的角色:

在此处输入图像描述

设置的语法并不难理解:

IPAddressRestriction.Enabled = true或者false

IPAddressRestriction.Settings= = 或 =- (端口之间的分隔符是“;”)

最后,您需要在 WebRole/WorkerRoler.cs 中连接所有内容

public class WebRole : RoleEntryPoint  
{
    private IPAddressRestrictionManager restrictionManager;

    public override bool OnStart()
    {
        RoleEnvironment.Changing += OnRoleEnvironmentChanging;
        ConfigureIPAddressRestrictions();
        return base.OnStart();
    }

    private void ConfigureIPAddressRestrictions()
    {
        if (restrictionManager == null)
            restrictionManager = new IPAddressRestrictionManager();

        restrictionManager.RemoveRestrictions();
        if (restrictionManager.IsEnabledInConfiguration())
            restrictionManager.ApplyFromConfiguration();
    }

    /// <summary>
    /// Force restart of the instance.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void OnRoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
    {
        if (e.Changes.Any(o => o is RoleEnvironmentChange))
            e.Cancel = true;
    }
}

更多细节,你可以参考这篇文章


推荐阅读