【问题标题】:Dynamic IP-based blacklisting基于 IP 的动态黑名单
【发布时间】:2010-09-11 21:39:27
【问题描述】:

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

例如: - 有人试图暴力破解您的登录屏幕 - 编写不佳的机器人向您的站点发出非常奇怪的 HTTP 请求 - 脚本小子使用扫描程序来查找应用中的漏洞

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

  • 在 Web 应用程序中,开发人员有一个钩子来报告“违规行为”。一项罪行可能是轻微的(密码无效),并且需要数十次这样的罪行才能被列入黑名单;或者它可能是重大的,在 24 小时内发生几次这样的罪行会让你出局。
  • 某种形式的网络服务器级别块在每个页面加载之前启动,并确定用户是否来自“坏”IP。
  • 内置“宽恕”机制:一段时间后,攻击不再计入 IP。

谢谢!

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

【问题讨论】:

    标签: security apache .htaccess email-spam


    【解决方案1】:

    看看fail2ban。一个 python 框架,允许您从跟踪日志文件中提升 IP 表块,以发现错误行为的模式。

    【讨论】:

      【解决方案2】:

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

      编辑:

      回应评论,是的(有点)。但是,这个想法是 iptables 可以独立工作。您可以设置某个阈值来限制(例如,阻止端口 80 TCP 上超过 x 个请求/分钟的请求),这一切都是透明处理的(即,您的应用程序真的不需要知道任何关于它的信息,发生动态阻塞)。

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

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

      【讨论】:

      • 有没有办法从 Web 应用程序与 iptables 进行通信?就像“嘿 IPtables,我认为地址 X 有入侵者,观察他们,看看他们将来是否表现不佳”。我确实在 Linux 上,运行 PHP。
      【解决方案3】:

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

      【讨论】:

      • 他指的是用户尚未登录或根本没有登录的情况。他明确提到了登录屏幕...如果用户已登录,那将是微不足道的。
      【解决方案4】:

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

      事实上,您甚至可以保留用户登录的痕迹,并且当使用 3 次错误的用户名/密码组合从未知 IP 登录时,将该 IP 锁定到该用户名的任意时间。 (请注意,很多 ISP 共享 IP,因此....)

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

      【讨论】:

      • 最后一点:身份验证延迟是我最喜欢的技术之一。在应用程序确定凭据无效后,但在向用户显示响应之前,休眠 1 秒。这样一来,合法用户不会被拖慢,但机器人会被击中。
      【解决方案5】:

      我为客户端开发了一个系统,该系统可以跟踪对 Web 服务器的点击,并在操作系统/防火墙级别动态禁止 IP 地址在不同的时间段内针对某些攻击行为,所以,是的,这绝对是可能的。正如 Owen 所说,防火墙规则比在 Web 服务器中执行此类操作要好得多。 (不幸的是,客户选择对该代码拥有严格的版权,因此我无权分享它。)

      我通常使用 Perl 而不是 PHP,但是,只要您有防火墙规则引擎的命令行界面(例如 /sbin/iptables),您应该能够相当轻松地从任何能够执行系统命令的语言。

      【讨论】:

        【解决方案6】:

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

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

        编写的脚本无法下载{因为当前没有添加评论},但请从上面的网站给我发一封电子邮件,我会将代码扔给您,并很乐意帮助您调试/计算它服务器

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-26
          • 2014-06-03
          • 2016-12-06
          • 1970-01-01
          相关资源
          最近更新 更多