我在问自己,什么是阻止某些 IP 地址(或整个阻止来自中国、韩国等国家/地区的 IP 地址)访问我的 apache2 Web 服务器的最佳方法。我知道使用以下方法
Allow from apache.org
Allow from .net example.edu
等等,但如果我认为正确的话,它们只能在<Directory>
(和<Files>
或<Location>
)内定义。
是否有适当的方法来处理整个服务器的这种访问控制?
答案1
我从你的问题中看出了两点:
“整个服务器的访问控制“:您已经知道解决方案,因为可以应用每个目录的限制目录服务器配置上下文中的指令(因此,是系统范围的,与特定虚拟主机无关)最高可达“/”,即服务器范围的整个文件系统。例如,在 httpd.conf 中,通常会看到类似以下内容:
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
“来自中国、韩国等国家的整整一个街区“:如果您希望 Apache 根据来源国家/地区过滤 HTTP 请求,一种非常有效的方法是依靠GeoIP 服务。至于 Apache,有一个mod_geoip2 模块您可以将其安装在您自己的 Apache 安装上。一旦启动并运行,该模块将负责为每个 HTTP 请求分配一个基于相应 ISO 3166-1 国家代码的环境变量 (GEOIP_COUNTRY_CODE)。之后,可以根据常用过滤指令检查此类环境变量,以过滤请求。上面的 mod_geoip2 页面提供了一个完整的示例(以及其他有趣的示例):
(从:http://dev.maxmind.com/geoip/legacy/mod_geoip2/)
根据国家/地区阻止客户端
此示例向您展示如何根据 GeoIP 设置的国家代码来阻止客户端。
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
# ... place more countries here
Deny from env=BlockCountry