Portanto, com base nas tags, acho que você está tentando fazer isso no nível do PHP.
Posso acrescentar que não é sua única opção, há outras, a saber:
- Firewall (o CSF é perfeito para isso)
- ModSecurity
- htaccess
Então, o caminho do PHP
A lógica é essencialmente apenas olhar para o IP do usuário, determinar um país e, em seguida, usar uma instrução IF para ver se esse país do usuário é permitido (se sim, faça alguma coisa, negue)
Usaremos o banco de dados de IP MaxMind (GeoLite2 City) gratuito para determinar o país de origem do usuário.
<?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>
Então, tudo o que você precisa fazer é primeiro instalar a API GeoIP2-php na qual esse script se baseia - para isso, execute os seguintes comandos (como descrito aqui ):
-
curl -sS https://getcomposer.org/installer | php
-
php composer.phar require geoip2/geoip2:~2.0
Agora você precisará baixar o banco de dados do IP para o diretório do site onde o script será executado.
-
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz && gunzip GeoLite2-City.tar.gz
- Você então deseja mover o
GeoLite2-City.mmdb
da pasta para o diretório do servidor. Assegure-se, claro, de verificar as licenças, leia-me e avisos de direitos autorais que vêm com ele .
Depois de fazer tudo isso - o script funcionará, você pode modificá-lo conforme necessário, mas atualmente, se o usuário acessar de um país não especificado na linha $allowed_countries=array("US","CA");
(matriz), eles serão recebidos com um 403 Página Proibida .
Se o país for especificado, qualquer coisa abaixo da seção inicial do PHP será exibida - neste caso <h1>Welcome</h1>
page - como você implementa este script PHP depende da sua circunstância específica.