所以我试图使用.htaccess禁止从本网站获得的可疑垃圾邮件IP地址的大名单(50,000)。
该列表几乎是1M的大小,当我添加列表中的每个地址拒绝指令…但是当我将加载的.htaccess文件应用到服务器它barf和没有页面加载403错误。
我的问题
deny from数量有限制吗? 除了OS文件大小限制(通常为2GB或更多)以外,.htaccess文件的大小没有限制。 但是,使用.htaccess文件会带来很大的性能影响,因为Apache在每次加载页面时都会recursion地处理它们(遍历目录树)。 事实上, Apachebuild议不要使用.htaccess,除非绝对必要,例如不能访问更高级别的configuration。
处理IP阻塞的标准方法是使用内置的Linux防火墙iptables 。 您可以使用其他应用程序来帮助pipe理iptables,例如Fail2ban 。 看到这个博客文章 ,以永久的方式与Fail2ban做到这一点。 您也可以通过添加路由来阻止它们: route add -host 192.168.0.123 reject 。 请记住,您可以使用所有这些IP地址的全部类别,以便列出192.168.0.1,192.168.0.2,… 192.168.0.254,而不是列出networking:192.168.0.0/24。
无论您使用什么方法,请记住要非常小心,不要阻止自己 ,特别是SSH等服务。
有没有更好的方式来做什么即时尝试在服务器级别做
我不知道它是否更好,但我更喜欢这个:
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]
我从来没有对它进行过基准testing,但是我拒绝相信将每个请求与50000个IP进行比较会更快,而不是利用文件系统的inodecaching。 或build立一个列出的IP的索引Apache?
最后,我知道这一点是没有意思的,因为我使用这种技术为我的访问者提供了一个validation码,以防止他们被意外阻塞。 其他方法( allow, deny , iptables ,…)没有提供这样的function。
注意:我使用第一个IP块的子文件夹来避免每个文件夹超过32000个文件。