我们正在经历一场大规模的 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>