登录尝试失败后拒绝 Apache 2 访问


deny apache2 access after failed login attempts

在 4 次用户名/密码登录尝试失败后,我想拒绝对服务器的 IP 访问。我之前曾通过将 IP 或块添加到/etc/apache2/httpd.conf 文件中来拒绝访问 Web 服务器。

<Location "/">
    Order Allow,Deny
    Allow from all
    Deny from 1.2.3.4/30 3.4.5.6/15
    Deny from 9.4.3.4
</Location>

任何人都知道如何使用 PHP 以编程方式执行此操作,或者让 Apache2 以设定的时间间隔查询 mysql 以获取"IP 拒绝列表"?

谢谢!

编辑以澄清

在完成的表单提交中,MySQL将查询用户名。如果找到用户名,脚本将继续检查 pw,然后稍后检查失败的登录。如果失败的登录计数器>=4,则用户的帐户被锁定,但他们仍然可以访问服务器。

如果未找到用户名,我将查询用户 IP 的 dif. 表。如果找到 IP 并且 login_counter>=4 使用上述方法从服务器阻止 IP,则 apache2 httpd.conf

。*

*最终编辑/想法

恐怕如果我给 www-data 用户 perms. 来编辑 .htaccess 文件,恐怕我会打开一个更大的安全漏洞,并且由于没有办法引用 .htaccess 中 www 数据可写的文件,这是我的解决方案。

如果用户名不在数据库中,请将 IP 写入数据库并跟踪每个 IP 的失败尝试。重新访问站点时,如果 IP 在 db 中并尝试>=4,则登录脚本 die()。接下来,我将编写一个外部脚本(www-data 无法访问),该脚本每晚轮询数据库以查找尝试>=4 的 IP,并将它们添加到 .htaccess 中。

更新:事实证明您可以在.htaccess中包含文件,所以我做了一些更改。

因此,这里发生的情况是,您获取.htaccess文件,删除最后一行,Allow from all然后附加新的拒绝规则,然后添加已删除的行。

您的.htaccess文件如下所示:

order Deny,Allow
Deny from 9.4.3.4
Allow from all

当用户超过登录尝试次数时,您可以执行以下操作:

$file = file('.htaccess');
array_pop($file);
$fh = fopen('.htaccess','w');
fwrite($fh, implode('',$file));
fclose($fh);
$fh = fopen('.htaccess', 'a');
fwrite($fh, 'Deny from '.$_SERVER['REMOTE_ADDR']);
fwrite($fh, 'Allow from all']);
fclose($fh);

嗯,这是基本思想,您可以接受它并对其进行自定义并将其应用于您自己的环境