使用 stopforumspam.com 的禁止 IP 列表从 .htaccess 拒绝不起作用?

使用 stopforumspam.com 的禁止 IP 列表从 .htaccess 拒绝不起作用?

所以我尝试使用 .htaccess 来禁止我从本网站

当我为列表中的每个地址添加拒绝指令时,列表大小接近 1M...但是当我将加载的 .htaccess 文件应用到服务器时,它会出现故障,并且没有页面加载,出现 403 错误。

我的问题...

  1. .htaccess 文件的大小有限制吗?
  2. deny from文件中可包含的 IP 地址数量有限制吗?
  3. 有没有更好的方法来完成我在服务器级别尝试做的事情(我知道我可以在提交期间检查 web 应用程序中的列表,但我正在尝试学习一些东西)

答案1

除了操作系统文件大小限制(通常为 2GB 或更大)外,.htaccess 文件的大小没有限制。但是,由于 Apache 以递归方式(向上遍历目录树)处理 .htaccess 文件,因此使用 .htaccess 文件会对性能产生重大影响。每次页面加载。 实际上,Apache 建议不要使用 .htaccess除非绝对必要,例如无法访问更高级别的配置。

处理 IP 阻止的标准方法是使用iptables内置 Linux 防火墙。您可以使用其他应用程序来帮助管理 iptables,例如Fail2ban。 看这篇博文了解使用 Fail2ban 永久执行此操作的方法。您也可以通过添加路由来阻止它们:route add -host 192.168.0.123 reject。请记住,您可以将整个 IP 地址类别与所有这些地址一起使用,这样您就可以指定网络:192.168.0.0/24,而不是列出 192.168.0.1、192.168.0.2、... 192.168.0.254。

无论你使用什么方法,请记住要非常小心,不要挡住自己,尤其是来自 SSH 之类的服务。

答案2

有没有更好的方法来完成我在服务器层面上尝试做的事情

我不知道它是否更好,但我更喜欢这个:

  1. 为每个 IP 创建一个新文件,结构如下deny/198/198.51.100.201
  2. 在您的 .htaccess 中使用以下代码来阻止 IP:

    RewriteCond %{REMOTE_ADDR} ^([0-9]{1,3})\.
    RewriteCond /usr/www/{your_path}/deny/%1/%{REMOTE_ADDR} -f
    RewriteRule . - [F]
    

我从未对其进行过基准测试,但我不相信将每个请求与 50000 个 IP 进行比较比利用文件系统的 inode 缓存更快。或者为 Apache 构建列出的 IP 的索引?!

最后,我对此并不感兴趣,因为我用这个技术为我的访客提供验证码,如果他们被意外阻止,他们可以自行解锁。其他方法(allow, denyiptables、...)不提供此类功能。

注意:我使用子文件夹来存放第一个 IP 块,以避免超过32000 个文件每个文件夹。

相关内容