基于动态IP的黑名单
伙计们,我们都知道IP黑名单不起作用垃圾邮件发送者可以通过代理进入,此外,合法用户可能会受到影响...也就是说,在我看来,黑名单似乎是阻止持久攻击者的有效机制IP的实际列表是根据应用程序的反馈和用户行为动态确定的。
例如:
有人试图强行登录屏幕
一个写得不好的机器人向网站发出了非常奇怪的HTTP请求
脚本小子使用扫描仪在应用中查找漏洞
我想知道以下机制是否有效,如果可以,我们是否知道是否有任何工具可以做到这一点:
- 在Web应用程序中,开发人员可以使用钩子来报告"攻击"。违法行为可能是次要的(无效的密码),将数十种此类违法行为列入黑名单;否则可能会很严重,并且在24小时内有几次此类违规行为会将我们赶出场。
- 在加载每个页面之前,将启动某种形式的Web服务器级块,并确定用户是否来自"不良" IP。
- 有一个内置的"宽恕"机制:过了一会儿,攻击不再针对IP。
谢谢!
额外说明:如果该解决方案可以在PHP中运行,那就太棒了,但是我很想听听我们对这种方法的一般想法,无论使用哪种语言/平台
解决方案
我认为应该是用户名加IP阻止的组合。不只是IP。
我们在* nix机器上吗?使用iptables之类的东西可能最好留给操作系统级别
编辑:
根据评论,是(有点)。但是,想法是iptables可以独立工作。我们可以设置某个限制阈值(例如,阻止端口80 TCP上超过x个请求/分钟的请求),并且所有这些都是透明处理的(即,应用程序实际上不需要了解任何内容)动态封锁)。
我建议使用iptables方法,如果我们可以完全控制该框,并且希望让防火墙处理限制(优点是,我们无需将此逻辑构建到Web应用程序中,并且可以根据请求节省资源在用户点击网络服务器之前就删除了)
否则,如果我们希望阻止不会成为一个巨大的组成部分(或者应用程序是可移植的并且不能保证对iptables的访问),那么将这种逻辑内置到应用程序中将更有意义。
看一下fail2ban。一个python框架,允许我们从尾随日志文件中引发IP表块,以获取错误行为的模式。
我们正在查看自定义锁定代码。开源世界中有一些包含各种此类代码的应用程序。也许我们应该看一下其中的一些,尽管要求相当琐碎,所以标记IP /用户名组合,并利用它来阻止IP占用x倍的时间。 (请注意,我说的是阻止IP,而不是用户。用户可以尝试通过有效的IP /用户名/ pw组合上线。)
实际上,我们甚至可以保留用户登录的痕迹,并且当从未知IP登录时,如果用户名/密码组合为3,则会导致不良的用户名/密码组合,请将该IP地址锁定任意长时间(无论我们喜欢该用户名的时间)。 (请注意,许多ISP共享IP,因此...。)
我们可能还希望延迟身份验证,以使IP不能每隔" y"秒左右尝试登录一次。
我为客户开发了一个系统,该系统可以跟踪对Web服务器的攻击,并在某些时间段内针对某些违法行为在操作系统/防火墙级别动态禁止IP地址,因此,是的,这绝对是可能的。正如Owen所说,防火墙规则比Web服务器在做这种事情上要好得多。 (不幸的是,客户选择对此代码拥有严格的版权,因此我无权共享该代码。)
我通常使用Perl而不是PHP进行工作,但是,只要我们具有防火墙规则引擎的命令行界面(例如/ sbin / iptables),就可以使用任何语言轻松地做到这一点。具有执行系统命令的能力。
错了,这种系统很简单,很常见,我可以很容易地给你我的。
它在这里简单且简要地解释了http://www.alandoherty.net/info/webservers/
编写的脚本无法下载(因为当前未添加评论),但是从上面的站点给我发送了一封电子邮件,我将向我们发送代码,并很乐意调试/将代码升级到服务器