22.01.2025
Esta guía explica cómo configurar tu servidor para que solo permita acceso desde ciertos países (lista blanca) utilizando .htaccess
o PHP. A continuación, se detalla cómo hacerlo con ejemplos basados en la información de ipdeny.com.
.htaccess
Descargar los archivos de IPs de los países permitidos:
us-aggregated.zone
para Estados Unidos).Abrir o crear el archivo .htaccess
en la raíz de tu sitio web.
Agregar las reglas para permitir solo las IPs específicas: Usa el siguiente formato para configurar las IPs de los países permitidos:
<Limit GET POST>
Order Deny,Allow
Deny from all
Allow from 181.48.0.0/16
Allow from 190.144.0.0/13
Allow from 186.28.0.0/15
# Agrega más IPs aquí desde otros países permitidos
</Limit>
Convertir y agregar IPs de otros países:
Allow from
.Guardar y subir el archivo .htaccess
al servidor:
Si prefieres un enfoque más dinámico, puedes usar PHP para configurar una lista blanca de países.
Crear el archivo countryallow.php
: Este archivo se encargará de validar las IPs según los países permitidos. Crea el archivo con el siguiente contenido:
<?php
function allowCountries($allowedCountries) {
// Directorio donde se almacenarán las listas de IP descargadas
$ipDataDir = __DIR__ . '/ipdata/';
// Crear el directorio si no existe
if (!is_dir($ipDataDir)) {
mkdir($ipDataDir, 0755, true);
}
$clientIP = $_SERVER['REMOTE_ADDR'];
$isAllowed = false;
foreach ($allowedCountries as $country) {
$filePath = $ipDataDir . $country . '-aggregated.zone';
// Descargar el archivo si no existe
if (!file_exists($filePath)) {
$url = "https://www.ipdeny.com/ipblocks/data/aggregated/{$country}-aggregated.zone";
$ipList = file_get_contents($url);
if ($ipList) {
file_put_contents($filePath, $ipList);
} else {
die("Error al descargar datos de IP para el país: {$country}");
}
}
// Validar la IP contra el archivo descargado
$ipRanges = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($ipRanges as $ipRange) {
if (ip_in_range($clientIP, $ipRange)) {
$isAllowed = true;
break 2; // Salir del bucle si se encuentra permitido
}
}
}
// Denegar acceso si la IP no pertenece a los países permitidos
if (!$isAllowed) {
header("HTTP/1.1 403 Forbidden");
exit('403 Forbidden - Acceso denegado.');
}
}
function ip_in_range($ip, $range) {
if (strpos($range, '/') === false) {
return $ip === $range;
}
list($subnet, $bits) = explode('/', $range);
$ip = ip2long($ip);
$subnet = ip2long($subnet);
$mask = -1 << (32 - $bits);
$subnet &= $mask;
return ($ip & $mask) === $subnet;
}
?>
Modificar el archivo index.php
: En el archivo index.php
, agrega esta línea al inicio para incluir la validación:
<?php include 'countryallow.php'; allowCountries(['co', 'us']); // Lista blanca: Colombia y Estados Unidos ?>
Cambia el array ['co', 'us']
por los códigos de los países que desees permitir.
Subir los archivos al servidor:
countryallow.php
y actualiza tu archivo index.php
en el servidor.Con estas configuraciones, puedes permitir acceso solo desde países específicos utilizando .htaccess
para una solución estática o PHP para un enfoque dinámico. Ambas opciones te permiten restringir el acceso a tu sitio web de manera efectiva con una lista blanca basada en países.
20 Jan, 2025 | 0