Quem tem algum site em WordPress e vê com frequência os logs de acesso, vai perceber que há sempre um monte de IPs tentando se logar como administrador do site. Essas várias tentativas por vários IPs geralmente são na verdade bots/zumbis que ficam vasculhando a Internet atrás de sites que tenham alguma falha e/ou senhas fracas de admin. Imagine muitas máquinas fazendo várias requisições no seu servidor… Pra que isso né? Carga e tráfego totalmente desnecessários.

wordpress2-login-screenExistem várias técnicas para se precaver desses wordpress bots. Vamos explorar algumas delas…

Mude o nome do usuário do administrador

A primeira dica é mudar o nome do usuário de admin para qualquer outra coisa. Essa dica está bem explícita em diversas páginas, inclusive recomendada pelo criador do WordPress, o Matt. Existem duas maneiras de se fazer isso: mudando o nome diretamente no banco de dados ou criando um novo usuário admin e removendo o antigo/padrão.

Primeiro vamos alterar diretamente no banco de dados, que na minha opinião é muito mais fácil e rápido. Conecte-se ao servidor e banco MySQL do seu WordPress e execute o comando:

01
02
03
04
05
06
07
08
09
10
11
12
13
mysql> SELECT * FROM wp_users WHERE user_login='admin' \G
*************************** 1. row ***************************
                 ID: 1
         user_login: admin
          user_pass: $P$HDGSYGfiyrgifbISFUGIWGRw5bhrfk
      user_nicename: admin
         user_email: [email protected]
           user_url: http://www.meusiteradical.com.br
    user_registered: 2006-03-29 19:29:34
user_activation_key:
        user_status: 0
       display_name: Administrador
1 row in set (0.00 sec)

Basta então alterar o campo user_login para um outro nome qualquer. Exemplo:

1
2
3
mysql> UPDATE wp_users SET user_login='raquel' WHERE user_login='admin';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Pronto! Agora o nome do usuário do administrador principal é raquel.

O outro jeito, que é mais fácil para quem não tem acesso ao banco de dados e pode ser feito por usuários mais leigos é criar um novo usuário admin e remover o outro.

Para fazer isto:

  • Como usuário admin, na administração, escolha a opção de adicionar um novo usuário (Usuários – Adicionar Novo);
  • Crie um novo usuário normalmente com suas informações e senha. Mas não se esqueça de colocá-lo como Administrador;
  • Com o novo usuário criado, deslogue-se e logue-se com o usuário novo (que é administrador).

wordpress novo usuario 300x201 Protegendo o login do WordPress contra força bruta (wordpress bots)

WordPress – Novo usuário

  • Vá na lista de usuários (Usuários – Todos Usuários) e procure pelo usuário admin.
  • Aperte na opção Excluir do usuário admin;
  • Mova todas as postagens e comentários do usuário admin para o novo usuário criado.

wordpress remove admin 300x178 Protegendo o login do WordPress contra força bruta (wordpress bots)

WordPress – Remover admin

Pronto! Simples né?

Protegendo através de Cookies

O método de proteger via cookies é genérico ao ponto de poder ser usado não apenas no WordPress, mas com qualquer outro sistema. Usando esse método, você fornece ao usuário que quer acessar o login uma URL de entrada especial. Essa URL de entrada na verdade vai configurar um cookie específico no navegador do cliente, e só com esse cookie ele pode acessar uma determinada página – que no nosso caso é o wp-login.php.

A grande vantagem deste método é que os bots não sabem nem da página especial de entrada e nem do valor do Cookie, então eles vão de cara receber um status 403 “Proibido” ao tentar fazer qualquer coisa na URL de login do WordPress. Isso quer dizer que o WordPress não vai ser nem chamado e nenhuma carga grande de CPU/memória será gasta para todos esses logins vindo de tantos IPs diferentes.

desvantagem é que essa é uma forma de segurança através de obscuridade, ou seja, você só está escondendo as informações, não está realmente impedindo de alguém fazer a força bruta. Como se tratam de bots, provavelmente eles não terão e nem conseguirão essas informações, por isso esse método é bastante válido.

Há diversas formas de fazer a configuração de proteção por Cookies, vamos ver algumas delas, mas antes precisamos criar o PHP que vai gerar o Cookie para o usuário. Antes de mais nada, vamos gerar uma chave, que será o valor do nosso Cookie. Vou usar o comando uuidgen para gerar um valor aleatório como exemplo:

$ uuidgen
142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1

Pronto. Agora o nosso código vai ser 142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1. Agora na raiz do seu site WordPress, crie um arquivo com um nome qualquer. Sim, esse nome também tem que ser único, pois é a URL que você vai passar para os usuários acessarem a administração do WordPress. Vamos usar o seguinte exemplo:

  • http://www.site.com/entrar-no-site.php

Então crie o arquivo entrar-no-site.php na raiz do seu WordPress com o seguinte conteúdo:

1
2
3
4
<?php
setcookie('site-allow-login','142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1',time()+3600);
header("Location: wp-login.php");
?>

Esse PHP cria um Cookie chamado site-allow-login com o nosso código como valor e redireciona para o wp-login.php. Bem simples. O Cookie expira em 1 hora no navegador de quem acessou a página. Toda vez que você for usar a administração, use a URL escolhida ao invés do wp-admin/ ou wp-login.php.

Com o cookie funcionando, agora é hora de configurar o seu servidor favorito para autorizar (ou não) o acesso.

Autorizando no Apache

O Apache, como um dos servidores mais utilizados por aí para hospedar WordPress, é bem fácil de configurar.

Edite o arquivo .htaccess na raiz de seu WordPress e adicione o seguinte conteúdo (pode ser bem no começo do arquivo):

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} wp-login.php
    RewriteCond %{HTTP_COOKIE} !site-allow-login=142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1
    RewriteRule . - [F]
</IfModule>

Pronto! Agora o wp-login.php só poderá ser acessado se o usuário enviar o cookie site-allow-login com o nosso código. Neste trecho anterior, usamos o mod_rewrite do Apache para verificar duas condições: se a URL que o usuário pediu (REQUEST_URI) foi o wp-login.php e se ele não existe nenhum cookie site-allow-login com o código como valor. Caso essas duas condições forem verdadeiras, ele nega todo o acesso através da flag [F] da linha RewriteRule.

Nota: Usamos o arquivo .htaccess para fazer essa configuração, mas você pode colocar essas regras de Rewrite em outros lugares do Apache também (Directory, LocationMatch, VirtualHost, etc). Se quiser saber de mais informações sobre o arquivo htaccess no Apache, leia também o Tutorial Apache: htaccess.

Esse tipo de verificação no Apache fica muito mais rápido que no PHP. E assim você não precisa mudar códigos ou adicionar plugins no WordPress. Lembrando que basta você mudar a URL wp-login.php e essa autorização pode funcionar em qualquer tipo de sistema.

Autorizando no Varnish

No Varnish, basta colocar as seguintes regras dentro do vcl_recv:

1
2
3
4
# only allow logins with a special cookie
if (req.url ~ "wp-login\.php" && req.http.cookie !~ "site-allow-login=142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1") {
  error 403 "Forbidden.";
}

Que vai fazer a mesma verificação: caso a URL (req.url) for wp-login.php e o usuário não tiver o cookie (req.http.cookie) site-allow-login com nosso código como valor, ele retorna um 403 Proibido.

Autorizando no Nginx

No nginx, dentro do bloco do server que está o seu WordPress, coloque o seguinte código:

1
2
3
4
5
location /wp-login.php {
  if ($http_cookie !~ "site-allow-login=142c1a27-ea75-4d26-bbc3-39fcb1d0c7f1") {
    return 403 "Forbidden";
  }
}

Assim quando o usuário tentar acessar o /wp-login.php, o nginx nega qualquer acesso que não tenha o nosso cookie ($http_cookie).

Outros métodos

Claro que não existem apenas estes dois métodos para melhorar a segurança contra os bots… Você também pode:

Via: http://www.devin.com.br/wordpress-bots-seguranca/#sthash.7GTcdovx.dpuf

Compartilhar é se importar!

shares
Precisando de ajuda com sua Hospedagem Web?