Proteger o WordPress contra ataques de brute-force

Várias instalações de WordPress, principalmente aquelas desactualizadas, têm sido alvo de ataques de brute-force para tentar o acesso à área de administração.

Aqui ficam algumas dicas para bloquear este tipo de ataques.

Wordpress

O ponto principal em termos de segurança é manter a instalação do WordPress sempre actualizada na última versão, assim como qualquer tema ou plug-in. As actualizações vão corrigindo várias falhas de segurança que podem ser usadas por terceiros para injectar código no vosso blog com base no WordPress.

A última vaga de ataques tem vindo a ser detectada ao ficheiro wp-login.php, que permite o acesso à área de administração. Se ainda não o fizeram devem mudar o nome de utilizador de admin para outro qualquer, conforme expliquei neste artigo.

Depois devem definir uma palavra-passe segura. Isto evita que sejam facilmente atacados, mas não resolve o problema.

Bloquear pedidos ao wp-login.php

Existem plug-ins que bloqueiam IP’s quando são efectuados vários acessos com dados errados. O problema é que estes recentes ataques usam botnets extensas (mais de 20.000 IP’s) e apenas fazem um pedido por IP, e cada pedido que fazem usa processamento de PHP e MySQL. Com vários pedidos em simultâneo é fácil arrasar um servidor.

A solução é bloquear o acesso ao ficheiro wp-login.php. Podemos depois permitir o acesso apenas a partir do nosso IP, basta adicionar o seguinte código no topo do ficheiro .htaccess

1
2
3
4
5
<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 123.45.67.89
</Files>

Claro que nem sempre é possível ter um endereço de IP fixo, e estar a verificar o IP da ligação e fazer novo upload do ficheiro .htaccess não é prático.

Uma alternativa é instalar um plugin que permita enviar headers personalizados por site no Chrome ou Firefox (ex: Modify Header Value, HTTP Headers, etc) e filtrar o acesso pelo mesmo. Podemos criar um header HTTP com o nome “X-Access-allowed” por exemplo e o valor 9f0aeab30a531755c4e8.

Depois basta adicionar o seguinte código no topo do ficheiro .htaccess

1
2
3
4
5
6
<Files wp-login.php>
    SetEnvIfNoCase X-Access-allowed "9f0aeab30a531755c4e8" AllowedAccess
    Order Deny,Allow
    Deny from all
    Allow from env=AllowedAccess
</Files>

Desta forma apenas um browser com este header irá conseguir aceder à página de login do WordPress. Atenção que, para este método ser seguro, devem existir algumas precauções. O valor do header deve ser complexo e aleatório e deve ser usado apenas para acesso ao WordPress. O mesmo se aplica ao nome do header, usem um valor diferente de “X-Access-allowed”.

Também é possível fazer o mesmo com o User-Agent mas este fica associado aos logs de acesso, mesmo através do Google Analytics, e pode ser usado para permitir acesso.

Com este bloqueio estamos a adicionar mais uma camada de segurança, tornando a instalação do WordPress mais segura.

Bloquear o acesso à pasta wp-admin

Podemos também bloquear totalmente o acesso à pasta wp-admin, é no entanto necessário confirmar se não existe nenhum plug-in ou tema dependente do ficheiro admin-ajax.php.

Vamos assim criar um ficheiro .htaccess dentro da pasta wp-admin e adicionar o seguinte código:

1
2
3
Order Deny,Allow
Deny from all
Allow from 123.45.67.89

Se quisermos bloquear o acesso através do header o código deverá ser o seguinte:

1
2
3
4
SetEnvIfNoCase X-Access-allowed "9f0aeab30a531755c4e8" AllowedAccess
Order Deny,Allow
Deny from all
Allow from env=AllowedAccess

Com estes bloqueios os ataques por brute-force ao WordPress são praticamente impossíveis, aumentando bastante a segurança e reduzindo os recursos do servidor utilizados por ataques de botnets.

 
Copyright © 1985 - 2017 Eduardo Maio. Alguns direitos reservados.
eduardomaio.net - Às vezes mais valia ser Agricultor do que Programador
Ao navegar no blog eduardomaio.net está a concordar com os termos legais e de privacidade.