6

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

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

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

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

谢谢!

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

4

6 回答 6

5

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

于 2008-09-22T03:59:15.800 回答
2

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

编辑:

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

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

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

于 2008-09-22T03:56:25.853 回答
0

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

于 2008-09-22T03:56:20.893 回答
0

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

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

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

于 2008-09-22T04:02:57.053 回答
0

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

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

于 2008-09-22T04:54:09.130 回答
0

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

它在这里简单而简要地解释了http://www.alandoherty.net/info/webservers/

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

于 2009-01-28T23:57:00.953 回答