Segurança e SSL
Bloquear ou permitir o acesso por países
Pode limitar as visitas de determinados países de duas formas: a partir da área de cliente, sem mexer em nenhum ficheiro, ou com regras no .htaccess quando precisa de algo mais concreto, como proteger apenas o acesso de administração ou redirecionar consoante o país.
O país é calculado a partir do IP do visitante. É fiável na maioria dos casos, mas quem usar uma VPN ou um proxy aparecerá com o país desse serviço.
A partir da área de cliente
- Aceda à área de cliente e abra o seu serviço de alojamento.
- Entre em Firewall e antivírus > Bloqueio geográfico.
- Selecione o domínio que pretende proteger.
- Escolha o modo:
- Lista negra: bloqueia os países selecionados e permite os restantes.
- Lista branca: permite apenas os países selecionados e bloqueia os restantes.
- Selecione os países (ou continentes inteiros) e guarde.
O bloqueio aplica-se a todo o domínio. Se usar uma lista branca, verifique que não deixa de fora serviços que se ligam ao seu site a partir de outros países, como gateways de pagamento, webhooks ou monitores de disponibilidade. Para o retirar, volte à mesma secção e remova a configuração.
Com regras no .htaccess
O servidor geolocaliza cada visita e deixa o resultado nas variáveis GEOIP_COUNTRY_CODE (país) e GEOIP_CONTINENT_CODE (continente), que pode usar no .htaccess do domínio. Adicione as regras no início do ficheiro. Se também usar o bloqueio da área de cliente, não edite o bloco entre # BEGIN HostsuarGeoBlock e # END HostsuarGeoBlock: o painel reescreve-o ao guardar.
Os países indicam-se com o seu código ISO 3166-1 alfa-2 de duas letras: ES Espanha, RU Rússia, CN China, US Estados Unidos… Os continentes, com EU Europa, AS Ásia, AF África, NA América do Norte, SA América do Sul e OC Oceânia.
Bloquear vários países
Este exemplo bloqueia a Rússia, a China e a Coreia do Norte e permite os restantes:
GeoIPEnable On SetEnvIf GEOIP_COUNTRY_CODE RU DenyCountry SetEnvIf GEOIP_COUNTRY_CODE CN DenyCountry SetEnvIf GEOIP_COUNTRY_CODE KP DenyCountry Allow from all Deny from env=DenyCountry
Adicione uma linha SetEnvIf por cada país que pretenda bloquear.
Permitir apenas alguns países
Ao contrário: permite Espanha e Portugal e bloqueia os restantes:
GeoIPEnable On SetEnvIf GEOIP_COUNTRY_CODE ES AllowCountry SetEnvIf GEOIP_COUNTRY_CODE PT AllowCountry Deny from all Allow from env=AllowCountry
Para permitir um continente inteiro, use GEOIP_CONTINENT_CODE; por exemplo, apenas a Europa:
GeoIPEnable On SetEnvIf GEOIP_CONTINENT_CODE EU AllowCountry Deny from all Allow from env=AllowCountry
Limitar o acesso ao wp-admin ao seu país
Muitas vezes não quer bloquear o site, mas apenas o acesso de administração. Este exemplo deixa entrar no wp-login.php, no wp-admin e no xmlrpc.php do WordPress unicamente a partir de Espanha; o resto do site continua aberto a todo o mundo:
GeoIPEnable On RewriteEngine On RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(ES)$ RewriteCond %{REQUEST_URI} ^/(wp-login\.php|wp-admin/|xmlrpc\.php) [NC] RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax\.php [NC] RewriteRule ^ - [F,L]
A exceção do admin-ajax.php é necessária porque muitos plugins e temas também o usam na parte pública. Para permitir mais de um país, separe-os com |: !^(ES|PT)$. Se viajar, lembre-se de que você também ficará de fora até retirar ou alargar a regra.
Redirecionar consoante o país
Também pode enviar os visitantes de certos países para outra versão do site. Este exemplo redireciona quem chega dos Estados Unidos ou do Canadá:
GeoIPEnable On RewriteEngine On RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(US|CA)$ RewriteRule ^(.*)$ https://www.otraweb.com/$1 [R=302,L]
Use 302 (temporário) e não 301: os navegadores guardam os redirecionamentos permanentes e um visitante que mude de país continuaria a ser redirecionado. Tenha em conta que a Google rastreia maioritariamente a partir dos Estados Unidos, por isso um redirecionamento por país pode impedi-la de ver o seu site original.
Ler o país do visitante a partir do PHP
Com GeoIPEnable On no início do .htaccess, o seu código PHP recebe a geolocalização em $_SERVER:
<?php echo $_SERVER['GEOIP_ADDR']; // IP a partir do qual acede echo $_SERVER['GEOIP_COUNTRY_CODE']; // código do país, por exemplo ES echo $_SERVER['GEOIP_CONTINENT_CODE']; // código do continente, por exemplo EU
Assim pode, por exemplo, pré-selecionar o idioma ou a moeda sem chamar um serviço externo. Se o IP não puder ser localizado, a variável não existe: use $_SERVER['GEOIP_COUNTRY_CODE'] ?? '' para evitar avisos.
Se alguém legítimo deixar de conseguir entrar
- Verifique o país atribuído ao seu IP com qualquer serviço de geolocalização e compare-o com a sua lista.
- Numa lista branca, adicionar um país permite-o; numa lista negra, bloqueia-o. Reveja o modo antes de adicionar países.
- Se o seu site estiver por trás de uma CDN como a Cloudflare, o servidor pode ver o IP da CDN em vez do do visitante. Nesse caso, use o bloqueio por países da própria CDN.
- Se se bloqueou a si mesmo, retire as regras do
.htaccessa partir do gestor de ficheiros do cPanel ou remova o bloqueio na área de cliente.
O bloqueio por países reduz muito o tráfego malicioso automatizado, mas não substitui manter o site atualizado e usar palavras-passe seguras.
Também lhe pode ser útil
- Adicionar um IP à lista branca do firewall do seu alojamento Indica como autorizar a partir da área de cliente um IP legítimo bloqueado pelo firewall, para permi...
- O que fazer se o Imunify360 bloquear o seu acesso Esclarece porque é que um IP pode ficar bloqueado, como verificar se o bloqueio vem do Imunify360 e...
- Permitir o acesso web a um diretório apenas a partir de um IP Restrinja uma pasta com Require ip, verifique o IP que o servidor vê e mantenha uma forma de reverte...
- Restringir a área de cliente a IP autorizados Adicione IP concretos ao acesso à área de cliente, verifique uma nova sessão e prepare o que fazer s...
Algo não bate certo ou mudou? Diga-nos e revemos.