【问题标题】:Dynamically block IP address to azure cloud service动态阻止 IP 地址到 Azure 云服务
【发布时间】:2018-10-10 13:23:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • 现在有什么流程吗?
  • 这方面仍然没有进展。我最终实现了 Azure 应用程序网关防火墙。 (WAF)不过仍在解决其中的问题。

标签: asp.net azure ip azure-web-app-service


【解决方案1】:

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

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

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

首先你需要安装 NuGet 包:

PM> Install-Package WindowsAzure.IPAddressRestriction

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

设置的语法并不难理解:

IPAddressRestriction.Enabled = truefalse

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;
    }
}

更多详情可以参考这个article

【讨论】:

  • 谢谢乔伊!这很接近,但并不完全在那里。我需要默认允许所有 IP,然后根据需要从代码中阻止它们。这似乎是硬编码以阻止所有内容并仅允许某些 IP。还是我错过了什么?
  • 我还花了一天时间阅读有关 ACL 的内容,并尝试让 PowerShell 脚本运行。不幸的是,似乎没有 ACL 的 API/接口,并且似乎没有办法以管理员身份执行 PS 脚本,所以我回到了第 1 点。
  • 我从您建议的文章中挖掘了代码,最终将我引向了这篇文章:codeproject.com/Tips/501194/Allow-Block-a-Program。但是,在我的 Web 上下文中运行时,我得到了拒绝访问。
  • 您可以尝试通过article 解决您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多