Pesquise...

Últimos Posts

Arquivo de Posts

2018 - 2017 - 2016 - 2015 - 2014 - 2013 - 2012

Postagens Populares

Vem Comigo!

     
  •      
  •  
  •  
  •  
  •  
  •  
Tecnologia do Blogger.

Total de Acessos


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!