Pesquise...

Últimos Posts

Arquivo de Posts

2026 - 2025 - 2024 - 2023 - 2022 - 2021 - 2020 - 2019 - 2018 - 2017 - 2016 - 2015 - 2014 - 2013 - 2012

Postagens Populares

Vem Comigo

     
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Tecnologia do Blogger.

Total de Acessos

Mostrando postagens com marcador BR. Mostrar todas as postagens
Mostrando postagens com marcador BR. Mostrar todas as postagens

Saudações,

Conversando com um cliente estes dias, ele me perguntou: É possível limitar um site ou parte do site de forma que somente IPs do Brasil possam ter acesso?

Imediatamente a minha resposta foi SIM!

Pois... nada que um pouco de configuração não resolva se temos a CIDR do Brasil.

Obtendo a CIDR delegada para o Brasil


Alguns anos atras eu já havia feito algo parecido com um servidor ProFTPD. Eu limitei o acesso a porta 21 somente para IPs do Brasil.

Contudo, a lista de blocos que eu tenho estava desatualizada. E, a rede IPv4 passou por uma realocação, por causa do esgotamento de IPs, e eu precisava de uma lista nova.

Mas, não há nem uma dificuldade em se atualizar, pois, a Lacnic fornece uma lista completa dos blocos em ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest.

A lista acima contem todas as CIDR alocadas para a America Latina. Ela segue o formato RIR Statistics Exchange Format.

Este arquivo RIR de estatística segue, em suas linhas de registro, o seguinte formato:

registry|cc|type|start|value|date|status[|extensions...] ( veja seção 3.3 Record format )

Por exemplo:

lacnic|AR|ipv4|24.232.0.0|65536|19970602|allocated
lacnic|CL|ipv4|45.4.0.0|1024|20170224|allocated
lacnic|BR|ipv4|45.4.4.0|1024|20170221|allocated
...

No site da Lacnic é possível baixar a versão estendida com a lista CIDR IPv6! Para atender o meu cliente eu precisei somente do IPv4.

Extraindo os blocos e suas mascaras de rede


Feito o download e compreendido o formato do arquivo, ficou fácil obter a máscara de bits de cada bloco. Eu fiz isto usando o seguinte script Shell em Bash...

#!/bin/bash

# BLOCOS DA AMERICA LATINA
AL="delegated-lacnic-latest.txt";

if [ ! -f ${AL} ]
then
    echo "";
    echo "Como usar este script:";
    echo "";
    echo "Baixe a lista de delegacao em:";
    echo "ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest";
    echo "";
    echo "Salve-a no mesmo diretorio deste script";
    echo "com o nome delegated-lacnic-latest.txt.";
    echo "";
    echo "Por fim execute o script $(basename ${0}).";
    echo "";
    exit 0;
fi;

# NUMERO DE SUB REDES E SUA NOTACAO CIDR
declare -A NH;
NH=( [2147483648]=1 [1073741824]=2 [536870912]=3 [268435456]=4 [134217728]=5 [67108864]=6 [33554432]=7 [16777216]=8 [8388608]=9 [4194304]=10 [2097152]=11 [1048576]=12 [524288]=13 [262144]=14 [131072]=15 [65536]=16 [32768]=17 [16384]=18 [8192]=19 [4096]=20 [2048]=21 [1024]=22 [512]=23 [256]=24 [128]=25 [64]=26 [32]=27 [16]=28 [8]=29 [4]=30 [2]=31 [1]=32 );

# LISTA SOMENTE CIDR DO BRASIL
BR=$(awk -F"|" '$2 ~ /BR/ && $3 ~ /ipv4/ {print $4":"$5}' ${AL});

# PROCESSA ITENS
for I in ${BR}
do
    # BLOCO IP
    BI=$(echo ${I} | cut -d: -f1);
    # NUMEROD DE SUB REDES
    SR=$(echo ${I} | cut -d: -f2);
    # BLOCO COM NETMASK
    echo "${BI}/${NH[${SR}]}";
done;

exit 0;

Ficou bem simples com uma array associativa não?

Executado o script, eu obtive uma saída tipo:

45.4.4.0/22
45.4.8.0/22
45.4.12.0/22
...

"Meio caminho andado". Agora eu precisava fazer, em um VPS, nas diretivas do Apache, a jogada do Allow/Deny.

A configuração ficou parecida com:

...
order allow,deny
allow from 45.4.4.0/22
allow from 45.4.8.0/22
allow from 45.4.12.0/22
...

Ah! Lembrando que as diretivas Allow/Deny estão obsoletas e serão removidas do Apache futuramente. Se desejar, e a sua versão do Apache for compatível, use a diretiva Require.

Bem, é isto... um service apache2 restart depois, e uma tentativa de acesso via Opera VPN, o navegador web retornou um belo Forbidden.

Forbidden usando VPN

Agora é com você! A lista pode ser usada no Firewall, no .htaccess, em seu site PHP, em um servidor proxy, em seus scripts, etc. Seja criativo!


Paz a todos!