代码之家  ›  专栏  ›  技术社区  ›  Alex Weinstein

基于动态IP的黑名单

  •  6
  • Alex Weinstein  · 技术社区  · 16 年前

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

    例如: -有人想蛮横地强迫你登录屏幕 -写得不好的bot向您的站点发出非常奇怪的HTTP请求 -Kiddie使用扫描仪在应用程序中查找漏洞

    我想知道以下机制是否可以工作,如果可以,您知道是否有工具可以做到这一点:

    • 在Web应用程序中,开发人员有一个钩子来报告“违规行为”。一个攻击可以是轻微的(无效的密码),并且需要几十个这样的攻击才能被列入黑名单;或者它可以是严重的,并且在24小时内有两个这样的攻击会把你踢出去。
    • 在加载每个页面之前,Web服务器级块的某种形式就会出现,并确定用户是否来自“坏”IP。
    • 有一个内置的“宽恕”机制:一段时间后,冒犯不再算在IP上。

    谢谢!

    额外说明:如果该解决方案在PHP中有效,那就太棒了,但是我想听听您对该方法的总体想法,对于任何语言/平台。

    6 回复  |  直到 15 年前
        1
  •  2
  •   Owen Ryan Doherty    16 年前

    你在尼克斯机器上吗?这类事情最好留在操作系统级别,使用 iptables

    编辑:

    作为对评论的回应,是的(差不多)。然而,其思想是IPtables可以独立工作。您可以将某个阈值设置为Throttle(例如,在端口80TCP上阻止超过x个请求/分钟的请求),这都是透明处理的(即,您的应用程序确实不需要了解任何有关它的信息,就可以进行动态阻止)。

    如果您完全控制了该框,我建议使用iptables方法,并且更愿意让防火墙处理节流(优点是,您不需要将此逻辑构建到Web应用程序中,它可以将资源保存为在请求到达您的Web服务器之前丢弃的请求)。

    否则,如果您认为阻塞不会是一个巨大的组件(或者您的应用程序是可移植的,并且不能保证访问iptables),那么将该逻辑构建到应用程序中会更有意义。

        2
  •  5
  •   Dave Cheney    16 年前

    看一看 fail2ban . 一个python框架,它允许您从跟踪日志文件中获取错误行为模式的IP表块。

        3
  •  0
  •   Vaibhav    16 年前

    我认为应该是用户名加上IP块的组合。不仅仅是IP。

        4
  •  0
  •   Munger    16 年前

    您正在查看自定义锁定代码。在开放源码世界中,有些应用程序包含各种风格的此类代码。也许您应该看看其中的一些,尽管您的需求非常简单,所以标记一个IP/用户名组合,并利用它在X时间内阻塞一个IP。(注意,我说的是阻止IP,而不是用户。用户可以尝试通过有效的ip/username/pw组合进行联机。)

    事实上,您甚至可以保留用户登录的痕迹,当使用3个坏用户名/pw组合从未知IP登录时,请将该IP锁定在您希望该用户名使用的时间内。(请注意,许多ISP共享IP,因此….)

    您可能还希望延迟身份验证,这样IP就不能每隔“y”秒尝试登录一次以上。

        5
  •  0
  •   Dave Sherohman    16 年前

    我已经为一个客户端开发了一个系统,它可以跟踪对Web服务器的攻击,并在操作系统/防火墙级别动态禁止IP地址,在不同的时间段内进行某些攻击,因此,是的,这是绝对可能的。正如欧文所说,防火墙规则是一个比在Web服务器上做这类事情更好的地方。(不幸的是,客户选择保留此代码的严格版权,因此我无权共享此代码。)

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

        6
  •  0
  •   Alan Doherty    15 年前

    呃,这种系统很简单,很常见,我可以很容易地给你我的

    这里简单简单地解释一下 http://www.alandoherty.net/info/webservers/

    写的脚本不可下载,因为目前没有添加评论,但是从上面的站点给我发一封电子邮件,我会把代码扔给你,很乐意帮助你调试/调整到服务器上。