所以我尝试使用 .htaccess 来禁止我从本网站。
当我为列表中的每个地址添加拒绝指令时,列表大小接近 1M...但是当我将加载的 .htaccess 文件应用到服务器时,它会出现故障,并且没有页面加载,出现 403 错误。
我的问题...
- .htaccess 文件的大小有限制吗?
deny from
文件中可包含的 IP 地址数量有限制吗?- 有没有更好的方法来完成我在服务器级别尝试做的事情(我知道我可以在提交期间检查 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
有没有更好的方法来完成我在服务器层面上尝试做的事情
我不知道它是否更好,但我更喜欢这个:
- 为每个 IP 创建一个新文件,结构如下
deny/198/198.51.100.201
在您的 .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, deny
、iptables
、...)不提供此类功能。
注意:我使用子文件夹来存放第一个 IP 块,以避免超过32000 个文件每个文件夹。