Escrito em por arquivado em Blog. Total de Acessos:135.

Sim eu sei que deveria escrever mais por aqui, mas além de não estar muito inspirado, ando um pouco sem tempo, mas achei que esse é um bom motivo para escrever.

Sempre gostei muito da plataforma do WordPress, principalmente pela quantidade de recursos e plugins que fazem praticamente tudo. Para tentar manter os ambientes mais seguros, além das configurações feitas no sistema operacional, sempre instalo o pluginSucuri Security” que entre outras coisas, me notifica por tentativas falhas de login, Logins bem sucedidos e posts que foram atualizados.

A minha primeira ação foi verificar a origem dos IP’s para tentar bloquear os acessos mal sucedidos. Devido a grande quantidade, ficou inviável o uso de alguma ferramenta que bloqueasse esses IP’s.

O próximo passo foi instalar um plugin que verificasse se a tentativa não estava sendo feita a partir de robôs, o plugin utilizado foi o “Login No Captcha reCAPTCHA“. Embora muito eficiente, diminuindo cerca de 90% das tentativas (apenas mudando um pouco o layout da página de login wp-login.php), receber 3K de mensagens ainda estava me preocupando um pouco.

Foi aí que me veio a ideia de bloquear o acesso antes de chegar na aplicação do WordPress.
Como os conteúdos do site em questão são postados de forma colaborativa e por pessoas de alguns lugares do país, não poderia limitar o acesso apenas aos IP’s da minha rede, teria que fazer englobando o acesso de todos endereços públicos alocados para o Brasil. Porém, esse acesso não poderia bloquear todo o site, já que assim eu limitaria os posts públicos apenas ao Brasil. Precisava limitar o acesso apenas ao arquivo wp-login.php e ao diretório wp-admin e a melhor forma de fazer isso, é utilizando as configurações do apache.

A Primeira parte, foi efetuar o levantamento de todos os prefixos (IPv4 e IPv6) alocados para o Brasil, depois, tentar diminuir a quantidade de linhas, tentando transformar cada conjunto de “/24’s” em “/23’s”, “/22’s” e assim por diante, que foi a parte mais difícil.

Para buscar os blocos de IPv4 rodei o seguinte comando:

curl -s ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest | grep BR | grep ipv4 | awk -F "\|" '{print $4 "/" (32 - (log($5)/log(2)))}' > ipv4.txt

O que gerou uma lista muito grande, mas nada que alguns sed’s, cut’s e grep’s e um pouco de awk não resolvesse:

139.82.0.0/16
143.54.0.0/16
143.106.0.0/16
143.107.0.0/16
143.108.0.0/16
144.23.0.0/16
146.134.0.0/16
146.164.0.0/16
147.65.0.0/16
150.161.0.0/16
150.162.0.0/16
150.163.0.0/16
150.164.0.0/16
150.165.0.0/16
152.84.0.0/16
152.92.0.0/16
155.211.0.0/16
157.86.0.0/16
161.24.0.0/16
161.79.0.0/16
161.148.0.0/16
164.41.0.0/16
164.85.0.0/16
170.66.0.0/16
177.0.0.0/11
177.32.0.0/11
186.192.0.0/11
186.224.0.0/11
187.0.0.0/11
187.32.0.0/11
187.64.0.0/11
187.96.0.0/11
189.0.0.0/11
189.32.0.0/11
189.64.0.0/11
189.96.0.0/11
192.80.209.0/24
192.111.229.0/23
192.132.35.0/24
192.146.157.0/24
192.146.229.0/24
192.147.210.0/24
192.147.218.0/24
192.153.88.0/24
192.153.120.0/24
192.153.155.0/24
192.159.116.0/23
192.160.45.0/24
192.160.50.0/24
192.160.111.0/24
192.160.128.0/24
192.160.188.0/24
192.188.11.0/24
192.190.30.0/23
192.195.237.0/24
192.198.8.0/21
192.207.194.0/23
192.207.200.0/21
192.207.206.0/24
192.223.64.0/18
192.231.114.0/23
192.231.116.0/22
192.231.120.0/23
192.231.175.0/23
198.12.32.0/19
198.17.120.0/23
198.17.231.0/24
198.17.232.0/24
198.49.128.0/22
198.49.132.0/23
198.50.16.0/21
198.58.8.0/22
198.58.12.0/24
198.184.161.0/24
200.0.8.0/21
200.0.32.0/20
200.0.48.0/21
200.0.56.0/22
200.0.60.0/23
200.0.67.0/22
200.0.71.0/23
200.0.81.0/24
200.0.85.0/23
200.0.87.0/24
200.0.89.0/22
200.0.93.0/24
200.0.100.0/22
200.3.16.0/20
200.5.9.0/24
200.6.35.0/21
200.6.43.0/22
200.6.47.0/23
200.6.128.0/22
200.6.132.0/23
200.7.0.0/22
200.7.8.0/24
200.7.10.0/22
200.9.0.0/23
200.9.2.0/24
200.9.65.0/22
200.9.69.0/23
200.9.71.0/24
200.9.76.0/23
200.9.84.0/21
200.9.92.0/22
200.9.102.0/22
200.9.106.0/23
200.9.112.0/23
200.9.114.0/24
200.9.116.0/21
200.9.125.0/22
200.9.127.0/24
200.9.129.0/21
200.9.137.0/22
200.9.143.0/23
200.9.148.0/23
200.9.158.0/22
200.9.162.0/23
200.9.164.0/24
200.9.169.0/24
200.9.170.0/23
200.9.172.0/23
200.9.174.0/23
200.9.181.0/22
200.9.185.0/23
200.9.199.0/23
200.9.202.0/23
200.9.206.0/23
200.9.214.0/24
200.9.220.0/22
200.9.224.0/24
200.9.226.0/24
200.9.229.0/24
200.9.234.0/24
200.9.249.0/22
200.10.4.0/22
200.10.32.0/20
200.10.48.0/21
200.10.56.0/22
200.10.132.0/22
200.10.136.0/23
200.10.138.0/24
200.10.141.0/24
200.10.144.0/24
200.10.146.0/24
200.10.153.0/23
200.10.156.0/22
200.10.163.0/23
200.10.173.0/21
200.10.181.0/24
200.10.183.0/24
200.10.185.0/24
200.10.187.0/24
200.10.189.0/24
200.10.191.0/23
200.10.193.0/24
200.10.209.0/23
200.10.227.0/24
200.10.245.0/24
200.11.0.0/21
200.11.8.0/21
200.11.16.0/21
200.11.24.0/22
200.11.28.0/24
200.12.0.0/21
200.12.8.0/21
200.12.131.0/24
200.12.139.0/24
200.12.157.0/24
200.13.8.0/21
200.14.32.0/23
200.14.35.0/23
200.17.0.0/16
200.18.0.0/15
200.20.0.0/16
200.96.0.0/13
200.128.0.0/9
201.0.0.0/12
201.16.0.0/12
201.32.0.0/12
201.48.0.0/12
201.64.0.0/11

Como o IPv6 é separado por regiões, foi fácil descobrir o prefixo disponibilizado para o NIC: 2800::/12.

Agora com os blocos IP’s em mãos, gerei um arquivo com as configurações de bloquei de liberação que eu preciso de acordo com a minha versão de Apache2/HTTPD que é a 2.4:

<LocationMatch "^/(wp-(admin|login.php))">
Require ip 139.82.0.0/16
Require ip 143.54.0.0/16
Require ip 143.106.0.0/16
Require ip 143.107.0.0/16
Require ip 143.108.0.0/16
Require ip 144.23.0.0/16
Require ip 146.134.0.0/16
Require ip 146.164.0.0/16
Require ip 147.65.0.0/16
Require ip 150.161.0.0/16
Require ip 150.162.0.0/16
Require ip 150.163.0.0/16
Require ip 150.164.0.0/16
Require ip 150.165.0.0/16
Require ip 152.84.0.0/16
Require ip 152.92.0.0/16
Require ip 155.211.0.0/16
Require ip 157.86.0.0/16
Require ip 161.24.0.0/16
Require ip 161.79.0.0/16
Require ip 161.148.0.0/16
Require ip 164.41.0.0/16
Require ip 164.85.0.0/16
Require ip 170.66.0.0/16
Require ip 177.0.0.0/11
Require ip 177.32.0.0/11
Require ip 186.192.0.0/11
Require ip 186.224.0.0/11
Require ip 187.0.0.0/11
Require ip 187.32.0.0/11
Require ip 187.64.0.0/11
Require ip 187.96.0.0/11
Require ip 189.0.0.0/11
Require ip 189.32.0.0/11
Require ip 189.64.0.0/11
Require ip 189.96.0.0/11
Require ip 192.80.209.0/24
Require ip 192.111.229.0/23
Require ip 192.132.35.0/24
Require ip 192.146.157.0/24
Require ip 192.146.229.0/24
Require ip 192.147.210.0/24
Require ip 192.147.218.0/24
Require ip 192.153.88.0/24
Require ip 192.153.120.0/24
Require ip 192.153.155.0/24
Require ip 192.159.116.0/23
Require ip 192.160.45.0/24
Require ip 192.160.50.0/24
Require ip 192.160.111.0/24
Require ip 192.160.128.0/24
Require ip 192.160.188.0/24
Require ip 192.188.11.0/24
Require ip 192.190.30.0/23
Require ip 192.195.237.0/24
Require ip 192.198.8.0/21
Require ip 192.207.194.0/23
Require ip 192.207.200.0/21
Require ip 192.207.206.0/24
Require ip 192.223.64.0/18
Require ip 192.231.114.0/23
Require ip 192.231.116.0/22
Require ip 192.231.120.0/23
Require ip 192.231.175.0/23
Require ip 198.12.32.0/19
Require ip 198.17.120.0/23
Require ip 198.17.231.0/24
Require ip 198.17.232.0/24
Require ip 198.49.128.0/22
Require ip 198.49.132.0/23
Require ip 198.50.16.0/21
Require ip 198.58.8.0/22
Require ip 198.58.12.0/24
Require ip 198.184.161.0/24
Require ip 200.0.8.0/21
Require ip 200.0.32.0/20
Require ip 200.0.48.0/21
Require ip 200.0.56.0/22
Require ip 200.0.60.0/23
Require ip 200.0.67.0/22
Require ip 200.0.71.0/23
Require ip 200.0.81.0/24
Require ip 200.0.85.0/23
Require ip 200.0.87.0/24
Require ip 200.0.89.0/22
Require ip 200.0.93.0/24
Require ip 200.0.100.0/22
Require ip 200.3.16.0/20
Require ip 200.5.9.0/24
Require ip 200.6.35.0/21
Require ip 200.6.43.0/22
Require ip 200.6.47.0/23
Require ip 200.6.128.0/22
Require ip 200.6.132.0/23
Require ip 200.7.0.0/22
Require ip 200.7.8.0/24
Require ip 200.7.10.0/22
Require ip 200.9.0.0/23
Require ip 200.9.2.0/24
Require ip 200.9.65.0/22
Require ip 200.9.69.0/23
Require ip 200.9.71.0/24
Require ip 200.9.76.0/23
Require ip 200.9.84.0/21
Require ip 200.9.92.0/22
Require ip 200.9.102.0/22
Require ip 200.9.106.0/23
Require ip 200.9.112.0/23
Require ip 200.9.114.0/24
Require ip 200.9.116.0/21
Require ip 200.9.125.0/22
Require ip 200.9.127.0/24
Require ip 200.9.129.0/21
Require ip 200.9.137.0/22
Require ip 200.9.143.0/23
Require ip 200.9.148.0/23
Require ip 200.9.158.0/22
Require ip 200.9.162.0/23
Require ip 200.9.164.0/24
Require ip 200.9.169.0/24
Require ip 200.9.170.0/23
Require ip 200.9.172.0/23
Require ip 200.9.174.0/23
Require ip 200.9.181.0/22
Require ip 200.9.185.0/23
Require ip 200.9.199.0/23
Require ip 200.9.202.0/23
Require ip 200.9.206.0/23
Require ip 200.9.214.0/24
Require ip 200.9.220.0/22
Require ip 200.9.224.0/24
Require ip 200.9.226.0/24
Require ip 200.9.229.0/24
Require ip 200.9.234.0/24
Require ip 200.9.249.0/22
Require ip 200.10.4.0/22
Require ip 200.10.32.0/20
Require ip 200.10.48.0/21
Require ip 200.10.56.0/22
Require ip 200.10.132.0/22
Require ip 200.10.136.0/23
Require ip 200.10.138.0/24
Require ip 200.10.141.0/24
Require ip 200.10.144.0/24
Require ip 200.10.146.0/24
Require ip 200.10.153.0/23
Require ip 200.10.156.0/22
Require ip 200.10.163.0/23
Require ip 200.10.173.0/21
Require ip 200.10.181.0/24
Require ip 200.10.183.0/24
Require ip 200.10.185.0/24
Require ip 200.10.187.0/24
Require ip 200.10.189.0/24
Require ip 200.10.191.0/23
Require ip 200.10.193.0/24
Require ip 200.10.209.0/23
Require ip 200.10.227.0/24
Require ip 200.10.245.0/24
Require ip 200.11.0.0/21
Require ip 200.11.8.0/21
Require ip 200.11.16.0/21
Require ip 200.11.24.0/22
Require ip 200.11.28.0/24
Require ip 200.12.0.0/21
Require ip 200.12.8.0/21
Require ip 200.12.131.0/24
Require ip 200.12.139.0/24
Require ip 200.12.157.0/24
Require ip 200.13.8.0/21
Require ip 200.14.32.0/23
Require ip 200.14.35.0/23
Require ip 200.17.0.0/16
Require ip 200.18.0.0/15
Require ip 200.20.0.0/16
Require ip 200.96.0.0/13
Require ip 200.128.0.0/9
Require ip 201.0.0.0/12
Require ip 201.16.0.0/12
Require ip 201.32.0.0/12
Require ip 201.48.0.0/12
Require ip 201.64.0.0/11
Require ip 2800::/12
</LocationMatch>

Caso esteja utilizando HTTPD (Centos, RHEL, Fedora, etc), o arquivo com a extensão “.conf”, por padrão deve ser salvo no diretório /etc/httpd/conf.d. Já no Apache2 (Debian, Ubuntu, Etc) o arquivo deve ser salvo na pasta /etc/apache2/conf-enabled, e executado o comando # a2enconf.

Após reiniciar o serviço do Apache2/HTTPD, qualquer acesso, IPv4 ou IPv6 fora desses ranges receberão um código de status 403.

Caso você queira testar a Digital Ocean, ela está dando $10, basta clicar neste link, efetuar o cadastro e cadastrar o cartão de crédito para cobrança e começar a brincadeira. Como a tarifação é por hora, dá pra fazer muitos testes legais por lá utilizando apenas os 10 dólares.