如何屏蔽除美国和加拿大以外所有国家的网站

如何屏蔽除美国和加拿大以外所有国家的网站

我有一个仅供美国和加拿大访客使用的网站。我不想让其他访客看到它。

我想使用地理定位解决方案,但我有一个亚马逊托管,它确实返回了当前用户的 IP 地址,那么有没有办法获取用户当前位置,或者我们是否可以用其他方式来做到这一点?

答案1

因此,根据标签,我猜您正在尝试在 PHP 级别执行此操作。

我可以补充一点,这不是你唯一的选择,还有其他选择,即:

  1. 防火墙(CSF 非常适合)
  2. ModSecurity
  3. 访问控制

因此 PHP 方式

其逻辑本质上只是查看用户 IP,确定一个国家,然后使用 IF 语句来查看该用户的国家是否被允许(如果是,则执行某些操作,拒绝)

我们将使用免费MaxMind (GeoLite2 City) IP 数据库确定用户的原籍国。

<?php

// MaxMind Setup
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;

$db =new Reader('GeoLite2-City.mmdb');
$client_ip=$db->city($_SERVER['REMOTE_ADDR']);
$client_country=$client_ip->country->isoCode;

// Specification of allowed_countries
$allowed_countries=array("US","CA");

// Blocking Logic
if(!in_array($client_country,$allowed_countries)) {
  header("HTTP/1.0 403 Forbidden");
  echo "<h1>Access Forbidden!</h1>";
  echo "<p>You are accessing from $client_country which is forbidden.</p>";
  exit();
}
?>

<html>
<head>
<title>Example Success</title>
</head>
<body>
<h1>Welcome</h1>
<p>You have access to this website.</p>
</body>
</html>

因此,您需要做的就是首先安装此脚本所依赖的 GeoIP2-php API。为此,请执行以下命令(如概述所示这里):

  1. curl -sS https://getcomposer.org/installer | php
  2. php composer.phar require geoip2/geoip2:~2.0

现在您需要将 IP 数据库下载到将运行脚本的网站目录。

  1. wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz && gunzip GeoLite2-City.tar.gz
  2. 然后您要将其GeoLite2-City.mmdb从文件夹移动到服务器的目录。当然,请确保你检查了随附的许可证、自述文件和版权声明

完成所有这些操作后,脚本即可运行,您可以根据需要对其进行修改,但是目前,如果用户从行$allowed_countries=array("US","CA");(数组)中未指定的国家/地区访问,则将收到一条403 禁止访问页面

如果指定了国家/地区,则将显示初始 PHP 部分以下的任何内容 - 在本例中为<h1>Welcome</h1>页面 - 如何实现此 PHP 脚本取决于您的具体情况。

相关内容