如何在 IIS 7.5 中阻止空/空白用户代理

如何在 IIS 7.5 中阻止空/空白用户代理

我们正在经历一场大规模的 DDOS 攻击,但这不是我们的 Cisco Guard 可以处理的典型僵尸网络,而是 BitTorrent 攻击。这对我来说是新事物,所以我不知道如何阻止它。

以下是 IIS 每秒处理来自 BitTorrent 客户端的 40 到 100 个请求的统计数据。我们拥有大约 20% 的用户代理,但其余 75% 是空白的。

我们希望在服务器级别阻止空白用户代理。

最好的方法是什么?

答案1

如果请求过滤无法处理这个问题,你可以尝试'URL 重写' 这是 Microsoft 提供的免费附加组件,而且非常有用。

创建如下规则:

<rule name="NoUserAgent" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_USER_AGENT}" pattern="^$" />
    </conditions>
    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You did not present a User-Agent header which is required for this site" />
</rule>

在快速测试中,这适用于空的 User-Agent 和缺失的 User-Agent。

我使用的正则表达式“^$”,它仅对空字符串有效。

您还可以返回 404 或其他您想要的结果,而不是 403。

答案2

如果您使用 IIS GUI 而不是 web.cofig,则可以使用提供的 IIS 模板来实现相同的结果:

进入互联网信息服务->URL 重写->添加规则...-> 选择“请求阻止“从模板中选择”。然后只需使用可用的下拉菜单填写您的规则:

  • 根据以下情况阻止访问:用户代理标头
  • 阻止以下请求:匹配模式
  • 模式(用户代理标头):^$
  • 使用:正则表达式
  • 如何阻止:中止请求

规则将与给出的其他回复相同,但有一点需要注意,即您似乎无法重命名它。此外,我的示例使用的是中止请求,而不是自定义响应,但如果您愿意,也可以从模板中选择其他 40X 响应。

答案3

每秒 40-100 个请求不会造成 DoS。

也就是说,如果你想阻止特定的用户代理,你可以使用 IIS<filteringRules>指令来执行此操作(请参阅http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/filteringRules)。

下面的示例不能保证可以工作(我没有 IIS 系统可以测试):

<requestFiltering>
   <filteringRules>
      <filteringRule name="Block bad UAs" scanUrl="false" scanQueryString="false" scanAllRaw="false">
         <scanHeaders>
            <add requestHeader="User-agent" />
         </scanHeaders>
         <appliesTo>
         </appliesTo>
         <denyStrings>
            <add string="bad-user-agent" />
            <add string="" />
         </denyStrings>
      </filteringRule>
   </filteringRules>
</requestFiltering>

相关内容