Pesquisa de site

Como instalar Mod_GeoIP para Apache em RHEL e CentOS


Mod_GeoIP é um módulo Apache que pode ser usado para obter a localização geográfica do endereço IP do visitante no servidor web Apache. Este módulo permite que você determine o país, a organizaçãoe a localização do visitante. É especialmente útil para exibição geográfica de anúncios, conteúdo direcionado, combate a spam, detecção de fraude, redirecionamento /Bloquear visitantes com base no país e muito mais.

O módulo GeoIP permite aos administradores do sistema redirecionar ou bloquear o tráfego web de acordo com a localização geográfica do cliente. A localização geográfica é aprendida através do endereço IP do cliente.

Mod_GeoIP tem duas versões diferentes, uma é Gratuita e outra é Paga e usa MaxMind GeoIP/GeoCity bancos de dados.

  1. Versão Gratuita: Na versão Gratuita, os bancos de dados Geo City e Country estão disponíveis com 99,5% de precisão.
  2. Versão Paga: Na versão Paga, você obterá ambos os bancos de dados com precisão de 99,8% com alguns detalhes mais avançados sobre o endereço IP.

Se você quiser conferir mais diferenças entre as versões Gratuita e Paga, visite Maxmind.com.

Este artigo explica como configurar e instalar o módulo Mod_GeoIP para Apache em RHEL e CentOS usando o repositório EPEL com utilitário gerenciador de pacotes YUM.

Presumimos que você já tenha um sistema RHEL e CentOS em execução com um LAMP funcional (Linux, Apache , MySQL, e PHP). Caso contrário, leia nossos artigos onde mostramos a instalação de ambos os sistemas operacionais com LAMP.

Instalação do RHEL/CentOS
  1. Instalação do RHEL 7 e CentOS 7 Mínimo.
  2. Instalação do RHEL 8 e CentOS 8 Mínimo.
Configuração LAMP no RHEL/CentOS
  1. Como instalar LAMP (Linux, Apache, MySQL, PHP) no RHEL e CentOS 7
  2. Como instalar Apache, MySQL/MariaDB e PHP no RHEL e CentOS 8

Habilite o repositório EPEL no RHEL e CentOS

Por padrão, mod_Geoip não está disponível no repositório oficial RHEL/CentOS, então precisamos instalar e habilitar o repositório EPEL de terceiros.

yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [On RHEL 8]

Instale Mod_GeoIP no RHEL e CentOS

Depois de ativar o repositório EPEL em seu sistema, você pode simplesmente instalar o mod_geoip executando o seguinte comando com seus pacotes de dependência.

yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel

Baixe o banco de dados geográfico mais recente de cidades e países

É uma boa ideia baixar o Geo City e o Banco de dados de países mais recentes para se manter atualizado.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Habilite Mod_GeoIP no Apache

Após a instalação do módulo, abra e edite o arquivo de configuração principal do módulo, com um editor de texto de linha de comando como vi, e ative o módulo em todo o servidor, conforme ilustrado no trecho abaixo.

vi /etc/httpd/conf.d/geoip.conf

Defina a linha GeoIPEnable de Desligado para Ligado. Além disso, certifique-se de adicionar o caminho absoluto ao arquivo de banco de dados GeoIP.

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>

Reinicie o serviço Apache para refletir as alterações.

systemctl restart httpd
OR
service httpd restart

No entanto, não é recomendado ativar o módulo GeoIP em todo o servidor. Você deve habilitar o módulo GeoIP apenas nos blocos ou onde você realmente realizaria o redirecionamento ou bloqueio de tráfego.

Testando Módulo Mod_GeoIP

Para testar se o módulo mod_geoip está funcionando corretamente com o Apache, precisamos criar um arquivo PHP chamado testgeoip.php em Apache diretório raiz (por exemplo, /var/www/html).

vi /var/www/html/testgeoip.php

Insira o seguinte trecho de código php nele.

<html>
<head>
  <title>What is my IP address - determine or retrieve my IP address</title>
 </head>
<body>
 <?php
     if (getenv(HTTP_X_FORWARDED_FOR)) {
        $pipaddress = getenv(HTTP_X_FORWARDED_FOR);
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ;
    } else {
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your IP address is : $ipaddress";
    }
    $country = getenv(GEOIP_COUNTRY_NAME);
    $country_code = getenv(GEOIP_COUNTRY_CODE);
    echo "<br/>Your country : $country ( $country_code ) ";
?>
</body>
</html>

Agora, tente chamar o arquivo usando um navegador da web (por exemplo, http://localhost/testgeoip.php). Você receberá seu endereço IP e detalhes do país.

Atualizando banco de dados GeoIP

A base de dados GeoIP é atualizada no início de cada mês. Portanto, é muito importante manter a base de dados GeoIP atualizada. Para baixar a versão mais recente do banco de dados, use o seguinte comando.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Atualização automática do banco de dados GeoIP

Escrevemos um pequeno script de shell que baixará automaticamente a versão mais recente do banco de dados GeoIP todos os meses. Basta colocar qualquer um dos seguintes scripts em /etc/cron.monthly.

Roteiro 1
Automatic GeoIP Database Update
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
gzip -d -f GeoLite2-Country.tar.gz
Roteiro 2
#!/bin/sh

GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
GEOIPDIR=/usr/share/GeoIP
TMPDIR=

DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6"

if [ -d "${GEOIPDIR}" ]; then
        cd $GEOIPDIR
        if [ -n "${DATABASES}" ]; then
                TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX)

                echo "Updating GeoIP databases..."

                for db in $DATABASES; do
                        fname=$(basename $db)

                        wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz"
                        gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat"
                        mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat"
                        chmod 0644 "${GEOIPDIR}/${fname}.dat"
                done
                [ -d "${TMPDIR}" ] && rm -rf $TMPDIR
        fi
fi

Redirecionando usuários com base no país

O código de exemplo abaixo redirecionará os usuários com base no código do país que definimos como AS (Ásia). Dessa forma, você pode redirecionar qualquer usuário com base no código do condado.

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://linux-console.net$1 [R,L]

Bloqueio de usuários com base no país

Este exemplo bloqueará usuários com base no código do país definido pelo GeoIP. O exemplo abaixo bloqueará usuários dos países AS (Ásia) e EUA (Estados Unidos).

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
... place more countries here

Deny from env=BlockCountry

Permitindo usuários com base no país

O exemplo abaixo permitirá apenas usuários dos países mencionados abaixo.

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
... place more countries here

Deny from all
Allow from env=AllowCountry

Para obter mais informações sobre mod_geoip e seu uso, consulte http://www.maxmind.com/app/mod_geoip. Se você estiver tendo problemas para configurar um módulo mod_geoip, informe-nos por meio de comentários e não se esqueça de compartilhar com seus amigos.