2008-09-22 44 views
6

伙计们,我们都知道,IP黑名单不起作用 - 垃圾邮件发送者可以通过代理进入,另外,合法用户可能会受到影响......也就是说,黑名单似乎是一个有效的基于应用程序的反馈和用户行为,假设IP的实际列表是动态确定的,则阻止持久攻击者的机制。基于动态IP的黑名单

例如: - 有人试图暴力破解你的登录屏幕 - 写得不好的BOT问题很奇怪的HTTP请求到您的网站 - 一个脚本小子使用扫描仪来寻找漏洞在您的应用程序

我想知道如果下面的机制会的工作,如果是这样,你知道是否有做任何工具:

  • 在Web应用程序,开发者有一个钩子报告的“罪行” 。犯罪可以是轻微的(密码无效),并且需要将数十项此类犯罪列入黑名单;或者它可能很重要,并且24小时内的一些此类犯罪会将您踢出去。
  • 某些形式的网络服务器级别块在每个页面加载之前都会启动,并确定用户是否来自“不良”IP。
  • 有一种内置的“宽恕”机制:一段时间后,犯罪行为不再计入IP。

谢谢!

额外注:这将会是真棒,如果该解决方案在PHP的工作,但我很想听听你的总体做法的想法,任何语言/平台

回答

2

你是在一个* nix机器上?这样的事情可能是最好留给操作系统级,使用类似iptables

编辑:

响应评论,是(在某种程度上)。然而,这个想法是iptables可以独立工作。你可以设置一个特定的阈值来扼杀(例如,阻止端口80 TCP上的请求超过x请求/分钟),并且这些都是透明地处理的(即,你的应用程序真的不需要知道任何事情,动态阻塞发生)。

我会建议iptables方法,如果你有完全控制框,并希望让你的防火墙处理限制(好处是,你不需要建立这个逻辑到你的web应用程序,它可以节省资源,因为请求在它们打到你的网络服务器之前就被丢弃了)

否则,如果你期望阻塞不会是一个巨大的组件(或者你的应用是可移植的并且不能保证访问iptables),那么它会使更多感觉将该逻辑构建到您的应用程序中。

+0

有没有一种方法可以从Web应用程序与iptables进行通信?就像“嘿IPtables,我认为地址X有一个入侵者,看着他们看他们未来的行为是否糟糕”。 我确实在Linux上运行PHP。 – 2008-09-22 03:58:45

0

我认为它应该是用户名和IP块的组合。不只是IP。

+0

他指的是用户还没有登录的情况,或者根本没有。他明确提到了登录屏幕......如果用户登录,这将是微不足道的。 – AviD 2008-09-22 05:34:15

5

看看fail2ban。一个python框架,允许您从拖尾的日志文件中提取IP表格块以查找错误行为模式。

0

您正在查看自定义锁定代码。开源世界中的应用程序包含各种风格的代码。也许你应该看看其中的一些,尽管你的要求很简单,所以标记一个IP /用户名组合,并利用它来阻止一段IP时间。(注意我说的是阻止IP,而不是用户,用户可能会尝试通过有效的IP /用户名/密码组合来联机。)

事实上,您甚至可以保留用户登录痕迹,从一个未知的IP地址中发送3个错误的用户名/密码组合,将该IP地址锁定,只要您喜欢该用户名即可。 (请注意,很多ISP共享IP地址,因此......)

您可能还想延迟身份验证,以便IP每隔'y'秒左右就不会尝试登录一次以上。

+0

关于你的最后一点:延迟认证是我最喜欢的技术之一。在应用程序确定凭据无效后,但在向用户显示响应之前,应用程序会休眠1秒钟。通过这种方式,合法用户不会减速,但机器人正在被追踪。 – 2008-09-22 04:11:43

0

我已经制定了一个客户端,它保持跟踪命中针对Web服务器,并在对的时间对某些罪行可变周期操作系统/防火墙级别动态禁止的IP地址的系统,所以,是的,这是绝对有可能。正如Owen所说,防火墙规则比在Web服务器中更适合做这种事情。 (不幸的是,客户选择了严格的代码版权,所以我不能分享它。)

我一般使用Perl而不是PHP,但只要你有一个命令行接口到你的防火墙规则引擎(比如说/ sbin/iptables),你应该能够从任何能够执行系统命令的语言中很容易地做到这一点。

0

犯错这种系统是容易的和常见的,我可以给你我很轻松地

它的简单,这里简要http://www.alandoherty.net/info/webservers/

书面脚本解释arn't下载{因为目前没有加入科芒特里}但是给我发一封电子邮件,从上面的网站,我会抛出你的代码,很乐意帮助调试/推荐它到你的服务器