我们的ASP。. NET网站托管在windows server 2008和IIS7上。
最近我们遇到了来自某些ip的"攻击"问题,这些攻击通过提交带有无效参数的不同表单而产生大量错误。
我想能够阻止基于从asp.net代码生成的列表24小时的IP地址列表。我知道使用Web可以实现这一点。config - ipSecurity标签。我找到了下面的例子:
http://www.dantor.com/support/misc/web-config-ip-address-restriction.aspx问题是改变/更新网络。配置将导致网站重新启动/回收。
是否有可能在没有池回收的情况下更新被阻塞的IP列表?
编辑:也许一个更好的主意是使用HttpModule来实现这个- Scott Hanselman在他的博客上写了一篇关于这个主题的文章:http://www.hanselman.com/blog/AnIPAddressBlockingHttpModuleForASPNETIn9Minutes.aspx
你认为这会导致性能下降吗?路由所有的网站请求通过httpmodule可以在页面加载时间方面的影响?还有其他办法吗?
编辑2:
该网站受到Fortigate 200a防火墙的保护,但据我所知,防火墙不能自动阻止生成错误或试图进行SQL注入的IP。
是否可以在没有池回收的情况下更新被阻塞的IP列表?
我要冒着我的脖子说它不是。
你认为使用HttpModule会导致性能下降吗?
是的。一个重要的,可能不是。但要确保IP地址查找部分非常有效。例如,在HashSet中缓存列表,并且不要每次都从文件中读取列表。
问题是你仍然在使用你的web请求处理能力来抵御无用的请求。但是,如果您不阻止IP,这可能比您发现请求是否无用的处理要少,因此总体而言,它实际上可能是性能增益。然而,有一个风险,你从这些IP地址收到太多的请求,它压倒了你的服务器。
其他选择
安装软件防火墙或使用Windows内置防火墙是很有可能的。
正如其他人所说,获得硬件防火墙将完全减轻服务器的负载。你可以得到一个可以由你的web服务器动态更新的IP地址。虽然我从未使用过,所以不能推荐或评论它们的工作效果如何。如果你是基于云的设置,可能值得与你的服务提供商讨论他们可以做什么。
更新防火墙需要考虑的一件事是,你真的想让你的web应用程序拥有更新防火墙的安全特权吗?听起来像是一个等待发生的安全漏洞,所以要非常小心如何做到这一点,并确保安全特权只允许将ip添加到阻止列表。
如果你真的受到重创,你可以路由所有的流量通过第三方ddos保护服务,就像这个来自VeriSign。但是要为这个特权付钱。
应用程序池回收是一件坏事吗?
我刚刚想到的另一件事是,应用程序池回收可能没有您想象的那么糟糕。假设您使用的是共享状态服务器,那么很可能没有用户会注意到这种情况。原因是IIS在回收时通常在短时间内并行运行两个进程,以便新请求由新进程处理,而已经开始的请求在旧进程上完成。只有当旧进程处理完所有未完成的请求时,IIS才会终止它。只要你没有将状态存储在内存中,这通常意味着你网站的用户不会注意到切换
我加入DavidG,使用NetShell从命令行添加规则,甚至从代码(c#示例)添加规则,应该立即生效,而无需重新启动。
只有当你想接收请求时才使用HTTP模块(例如,IP地址属于公司或热点,并且你希望在终止请求之前分析cookie),防火墙会在数据甚至发送到你的服务器之前很久就拒绝连接。