利用geoip来限制某些国家地区访问

如果你的M网站是面向英文客户,你可能不想接受中国的IP段的访问,那么可以使用APACHE的geoip模块方便地做到这一点

http://www.maxmind.com/app/mod_geoip 仅供参考!

I. 简述geoip安装过程:
1. 得到roo权限,准备一个空目录:
su mkdir /home/admin/geoip
cd /home/admin/geoip

2. 下载和安装geoip:
wget http://www.maxmind.com/download/geoip/a ... oIP.tar.gz
tar xzfv GeoIP.tar.gz

cd GeoIP*

./configure
make
make check
make install
安 装好软件的同时,也生成了默认的Geo.dat文件
3. 下载和安装geoip的apache模块 :
mkdir mod_geoip
cd mod_geoip

wget http://www.maxmind.com/download/geoip/a ... 1.1.tar.gz

tar xzfv mod_geoip_1.1.1.tar.gz
cd mod_geoip_1.1.1

apxs -cia -I/usr/local/include -L/usr/local/lib -lGeoIP mod_geoip.c
apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule 指令在运行时加载到Apache服务器中。
因此,要使用这个扩展机制,你的平台必须支持DSO特性,而且Apache httpd必须内建了mod_so模块。apxs工具能自动探测是否具备这样的条件,你也可以自己用这个命令手动探测:,

4. (可选)把目录/usr/local/lib加入到动态链接库配置文件:
编辑/etc/ld.so.conf 在文件底部加一行/usr/local/lib
/usr/kerberos/lib
/usr/lib/mysql
/usr/X11R6/lib
/usr/local/lib

然 后执行/sbin/ldconfig /etc/ld.so.conf
(第四步可能不需要做的,好像第2步会自动做这个事情,或者之前你的系统已 经配置好了,另外就算要编辑ld.so.conf,不同的linux所在的目录也是不同的)

5. 检查httpd.conf ,这时候你看到原来的httpd.conf的备份,新的httpd.config增加一行可能像这样:
LoadModule geoip_module lib/apache/mod_geoip.so

1). 将 LoadModule geoip_module lib/apache/mod_geoip.so 改为你的so所在的实际路径,如:
LoadModule geoip_module /usr/local/libexec/apache/mod_geoip.so
2). 在 AddModule mod_geoip.c下面加一行:
GeoIPEnable On
此时配置文件如下

引用:
LoadModule geoip_module lib/apache/mod_geoip.so
GeoIPEnable On


该 条目 GeoIPDBFile /usr/local/www/GeoLiteCity.dat 可选。

6. 重新启动Apache.
service httpd restart
对于freebsd,可能使用apachectl restart命令
如果担心conf 文件配置错误,可以事先使用 apachectl configtest 来测试

II.使用geoip阻止中国IP:
在 完成第I步的基础上,然后下在geocity数据文件,该数据文件是收费的,但是官方有getlite(一个不太精确的数据库)是免费的,下载后存储导服 务器的目录,如/usr/local/www下。
配置httpd.conf.

代 码:
GeoIPEnable On
GeoIPDBFile /usr/local/www/GeoLiteCity.dat

SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
# ... place more countries here

Deny from env=BlockCountry

# Optional - use if you want to allow a specific IP address from the country you denied
# (See http://httpd.apache.org/docs/1.3/mod/mod_access.html for more details)
Allow from 10.1.2.3



将如上代码添加到httpd.config中即可
注意:

代码:
Deny from env=BlockCountry
Allow from 10.1.2.3



这两行必须放在你的应用所在 的<Directory 标签下,而其他行代码则没这个要求。存盘后重启apache看看变化。

如果你的应用使用虚拟主机,那么 httpd.conf配置为: AllowOverride All . 这样可以把上面的配置写入你的.htaccess而不必修改httpd.conf文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在ThinkPHP项目中使用GeoIP2来实现限制请求IP只能巴西访问,你可以按照以下步骤进行配置: 1. 安装GeoIP2依赖包:在命令行中,进入你的ThinkPHP项目目录,然后运行以下命令来安装GeoIP2依赖包: ```shell composer require geoip2/geoip2:~2.0 ``` 2. 下载GeoIP2数据库:访问MaxMind网站(https://dev.maxmind.com/geoip/geoip2/geolite2/),下载GeoIP2数据库文件(通常是以.mmdb扩展名结尾的文件)。 3. 将GeoIP2数据库文件放置在项目的合适位置,例如`public`文件夹下的`geoip`文件夹。 4. 在ThinkPHP项目中创建一个新的中间件(Middleware),用于检查请求IP是否为巴西的IP。在命令行中,进入你的ThinkPHP项目目录,然后运行以下命令来创建中间件: ```shell php think make:middleware BrazilIPCheck ``` 5. 编辑刚创建的中间件文件:在`app/middleware`目录下找到并打开`BrazilIPCheck.php`文件。 6. 在`handle`方法中,添加以下代码来检查请求IP是否为巴西的IP: ```php use GeoIp2\Database\Reader; public function handle($request, \Closure $next) { $ip = $request->ip(); // 加载GeoIP2数据库 $databasePath = public_path('geoip/GeoLite2-Country.mmdb'); $reader = new Reader($databasePath); try { // 获取请求IP的国家信息 $record = $reader->country($ip); $countryCode = $record->country->isoCode; // 如果不是巴西的IP,则返回403 Forbidden 错误 if ($countryCode !== 'BR') { return response('403 Forbidden', 403); } } catch (\Exception $e) { // 处理数据库加载或查询错误 return response('500 Internal Server Error', 500); } return $next($request); } ``` 7. 保存并关闭`BrazilIPCheck.php`文件。 8. 在`app/middleware`目录下的`middleware.php`文件中,注册刚创建的中间件: ```php return [ // ... \app\middleware\BrazilIPCheck::class, // ... ]; ``` 9. 现在,所有请求将通过中间件进行处理,如果请求IP不是巴西的IP,将返回403 Forbidden 错误。 请注意,以上步骤仅适用于限制请求IP只能巴西访问。如果需要更复杂的访问控制和安全性,建议结合其他认证和授权机制来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值