Come bloccare l’accesso da paesi con .htaccess

A volte potresti voler bloccare alcuni paesi al tuo progetto questo è il tuo diritto più naturale. Ma, quando provi a seguire questo processo tramite .htaccess, potresti vedere che non funziona nel tempo perché le classi IP basate sul paese cambiano frequentemente. Ciò significa che aggiorni frequentemente i blocchi IP. Invece, abbiamo sviluppato una soluzione più pratica. Il seguente codice completa una query istantanea dell’indirizzo IP che visita il tuo sito e ottiene il codice del paese. Se è nella tua lista vietata, invia una risposta di blocco 403 al visitatore e smette di funzionare. Ci sono anche casi in cui tutti gli attacchi provengono da un paese specifico. Oppure potresti voler rendere i tuoi contenuti inaccessibili in alcuni paesi per qualche motivo. Per risolvere questo problema,  puoi bloccare l’accesso utilizzando il file .htaccess.

  1. Apri il file .htaccess nella tua directory public_html.
  2. Crea un elenco IP dal paese di tua scelta da questo sito. Per fare ciò, fai clic sul nome del paese e seleziona il formato Apache .htaccess Deny. Una volta terminato, fai clic su Crea ACL.
  3. Dopo aver copiato il codice nell’elenco generato  nel tuo file .htaccess, fai clic sul pulsante Salva e chiudi.
  4. Ora il tuo sito è accessibile a tutti i paesi del mondo tranne i paesi che hai bloccato.

Oppure manualmente intervenire sul file .htaccess

Tieni presente che se blocchi il tuo Paese, sarai comunque in grado di accedere a cPanel, ma non sarai in grado di visualizzare il sito Web finché il blocco non verrà rimosso. Tieni inoltre presente che le VPN e gli IP privati ​​potrebbero avere risultati imprevisti in questo caso. Aggiungi il codice seguente all’inizio del tuo file .htaccess, quindi seleziona Salva.

GeoIPEnable On
# Add countries you wish to deny here
SetEnvIf GEOIP_COUNTRY_CODE CO DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE EG DenyCountry
SetEnvIf GEOIP_COUNTRY_CODE HI DenyCountry
Allow from all
Deny from env=DenyCountry

Puoi anche fare il contrario e consentire solo a paesi specifici di accedere al tuo sito web. Questa è un’ottima misura di sicurezza proattiva se, ad esempio, intendi avere solo clienti o visitatori in italia sul tuo sito.

GeoIPEnable On
# Put countries to allow here
SetEnvIf GEOIP_COUNTRY_CODE IT AllowCountry
Deny from all
Allow from env=AllowCountry

Altro metodo tramite qualsiasi pagina PHP o Config.php

Puoi aggiungere le seguenti righe nella parte superiore del file index.php o del file PHP comunemente utilizzato (come config.php),  appena sotto la riga <?php:

function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
    $output = NULL;
    if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
        $ip = $_SERVER["REMOTE_ADDR"];
        if ($deep_detect) {
            if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP))
                $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
    }
    $purpose    = str_replace(array("name", "\n", "\t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
    $support    = array("country", "countrycode", "state", "region", "city", "location", "address");
    $continents = array(
        "AF" => "Africa",
        "AN" => "Antarctica",
        "AS" => "Asia",
        "EU" => "Europe",
        "OC" => "Australia (Oceania)",
        "NA" => "North America",
        "SA" => "South America"
    );
    if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
        $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
        if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
            switch ($purpose) {
                case "location":
                    $output = array(
                        "city"           => @$ipdat->geoplugin_city,
                        "state"          => @$ipdat->geoplugin_regionName,
                        "country"        => @$ipdat->geoplugin_countryName,
                        "country_code"   => @$ipdat->geoplugin_countryCode,
                        "continent"      => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
                        "continent_code" => @$ipdat->geoplugin_continentCode
                    );
                    break;
                case "address":
                    $address = array($ipdat->geoplugin_countryName);
                    if (@strlen($ipdat->geoplugin_regionName) >= 1)
                        $address[] = $ipdat->geoplugin_regionName;
                    if (@strlen($ipdat->geoplugin_city) >= 1)
                        $address[] = $ipdat->geoplugin_city;
                    $output = implode(", ", array_reverse($address));
                    break;
                case "city":
                    $output = @$ipdat->geoplugin_city;
                    break;
                case "state":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "region":
                    $output = @$ipdat->geoplugin_regionName;
                    break;
                case "country":
                    $output = @$ipdat->geoplugin_countryName;
                    break;
                case "countrycode":
                    $output = @$ipdat->geoplugin_countryCode;
                    break;
            }
        }
    }
    return $output;
}

$paesi_negati=array("RU"=>0, "FR"=>0, "CN"=>0, "CO"=>0);
$codice_paese = ip_info("Visitor", "Countrycode");
if (array_key_exists($codice_paese,$paesi_negati)){
  header('HTTP/1.1 403 Forbidden'); 
  echo "Forbidden Country IP! / IP del paese proibito!";
  die();
}

Puoi aggiungere i codici paese dei paesi da bloccare nell’array soprastante, puoi trovare i codici paesi in lettere qui: https://www.nationsonline.org/oneworld/country_code_list.htm

Exit mobile version