通过 htaccess 自动将失败的身份验证尝试列入黑名单?

通过 htaccess 自动将失败的身份验证尝试列入黑名单?

Ubuntu 9.10 Apache 2.2.12

嗨,大家好,

我正在使用一个非常基本的 htaccess 设置来“保护”我的网站的一部分(非关键部分,但我希望需要基本身份验证)。

有没有办法将多次无法提供适当凭证的 IP 列入黑名单?我想防止用户有机会一遍又一遍地猜测用户名/密码组合……

答案1

您是否具有服务器的 root 访问权限?有一些程序可以监视日志文件的更改,检查失败的身份验证尝试。在尝试失败 X 次(用户可配置)后,它们会阻止原始 IP 地址(如果需要,可以暂时阻止)。

我记得的两个是:

  • Fail2ban:在 Ubuntu 中安装sudo apt-get install fail2ban,然后更改 /etc/fail2ban/jail.local 文件(如果不存在,只需sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local)。“jail.local”中的选项非常不言自明,但如果您想要更多信息,您可以查看以下文档:http://www.fail2ban.org/wiki/index.php/Main_Page

  • BlockHosts:(它有点旧,我不确定它是否仍然是最新的)要安装,请按照以下说明进行操作http://aczoom.com/cms/blockhosts

  • 可能还有很多……

答案2

我认为 Apache 没有任何内置功能允许您执行此操作。以下是应该可以工作但有点不方便的功能:

  1. 编写一个 cron 作业来解析 Apache 错误日志,查找包含“身份验证失败”的条目
  2. 当某个 IP 地址的身份验证失败次数为 X 时,则拒绝该 IP 地址。
  3. 拒绝 IP 可以通过Apache 访问控制,或者您也许可以使用该/etc/hosts.deny文件。

您应该能够通过单个 cron 作业自动完成所有这些操作。

答案3

您可能会考虑一个向您的 .htaccess 添加条目的函数,在 php 中您可以这样做:


if(is_writable('.htaccess'))
{
       $h = fopen('.htaccess','a+');
       fwrite($h,"\nDeny from: ".$_SERVER['REMOTE_ADDR']);
       fclose($h);
}

相关内容