Como posso bloquear tentativas de hackers direcionadas ao phpMyAdmin?

35

Meu site recebe milhares de acessos diários de diferentes IPs que tentam acessar:

/php-myadmin/
/myadmin/
/mysql/

... e milhares de outras variações. Nenhum desses diretórios existe, eu nem tenho o phpmyadmin no meu servidor.

Eu não acho que nenhuma dessas tentativas tenha sido bem-sucedida, no entanto, elas devem estar afetando os recursos do servidor e desperdiçando largura de banda, então eu gostaria de interrompê-las, se possível. Eu bloqueei um punhado desses IPs, mas eles continuam voltando com novos IPs. Existe alguma maneira de evitar isso permanentemente?

amba88
fonte
8
Milhares de acessos por dia não é nada. Você está realmente enfrentando dificuldades de desempenho ou está apenas assumindo? Alguns milhares de 404 em um dia não são realmente nada .
precisa saber é o seguinte
Não, não estou enfrentando problemas de desempenho. Mas isso está me irritando e eu me perguntei se há algo que eu possa fazer.
amba88
6
Tenha cuidado com o bloqueio baseado em IP - muitos IPs acabam sendo transferidos para usuários legítimos. Além disso, alguns usuários legítimos podem estar infectados como parte de uma botnet. Se você fizer algum bloqueio baseado em IP, verifique se ele tem uma validade razoavelmente curta.
Bob
Nenhuma menção mod_securityneste tópico, então confira isso . Observe que um comentário abaixo observa que isso realmente causaria mais trabalho ao servidor, é claro. Então, talvez mod_evasivetambém seja bom de implementar . fail2ban, mas isso está listado abaixo.
precisa saber é o seguinte

Respostas:

42

Não se preocupe com isso. Servir um 404 é uma quantidade minúscula de trabalho para um servidor da Web. Você provavelmente poderia servir dez 404 por segundo usando um 486. A largura de banda por 404 é insignificante; uma pequena solicitação GET e uma pequena resposta 404.

A sério; não se preocupe com isso. Isso é apenas parte da execução de um servidor na internet.

Mark Henderson
fonte
14
Banimento do Inferno: sirva uma página normal (200 OK) com saída sem sentido. As ferramentas as crianças usam reportará página encontrada e eles vão precisar para investigar a mão (a página falsa de login seria certamente um diabo-device) :)
arul
4
@arul - Alguns invasores podem encarar isso como um desafio e prestar atenção extra ao seu servidor apesar de tudo. Seria útil servir um 404 menor ou diferente aqui? Por exemplo, se o host normalmente veicular um 404 com um link de suporte, ele deveria / poderia servir um 404 simples sem conteúdo para esses URLs de destino?
Freiheit
11
O objetivo é fazer com que o adversário gaste recursos adicionais (tempo) para analisar os resultados. Se você receber um 404, sabe que não há possibilidade do ataque funcionar. O resultado OK de tamanho variável é [sem investigação adicional] indistinguível dos resultados esperados. Eles correm esses exames porque a paciência não é sua virtude, por isso desmotivar o inferno fora deles e eles vão parar :)
arul
11
Para ganhar pontos extras, retorne uma página estática que se parece exatamente com a página real do phpmyadmin, mas não é totalmente funcional.
captncraig
11
Para pontos de bônus adicionais, crie um atraso de 0,5 a 1 segundo. Isso não aumentará significativamente o tempo de carregamento por usuários legítimos, mas retardará a verificação que os bandidos estão fazendo. (Você só precisa se certificar de que o servidor tem a capacidade de manter conexões abertas por longos do que o necessário e ainda processar solicitações legítimas.)
Moshe Katz
38

Infelizmente para você, é assim que a Internet funciona. Ignore isso. Milhares de bots / trojans examinam a Internet. O IP de origem será sempre aleatório. Não há cura.

A única solução 100% para eliminar esse tráfego é ilustrada abaixo: insira a descrição da imagem aqui

Uma alternativa é:
- mover com https / http da porta 80/443 para outra coisa. Os robôs geralmente não procuram o servidor http em todas as outras portas de 65k.
- use a VPN para conectar-se ao servidor (acho que isso não é possível se você hospedar um site público).

Bartłomiej Zarzecki
fonte
LOL +1 para o diagrama :-) Eu tenho esse problema irritante (como todos nós) em um site estático e esta é a resposta mais útil.
Dave Everitt
30

O que você quer é Fail2ban (assumindo que esta seja uma máquina Linux, você não disse ...)

O que é o Fail2ban?

Fail2ban analisará os logs do sistema, procurando por expressões regulares específicas a serem bloqueadas. Quando encontra uma correspondência (ou várias correspondências do mesmo IP, dependendo de como você a configura), ele será bloqueado, geralmente através do IPTables. Normalmente, isso é usado para bloquear tentativas de autenticação com falha contra SSH ou servidores da web.

Você o configura para bani-los por um período de tempo definido (pode ser minutos, pode levar dias ... depende de quão persistentes eles são), após o qual o banimento expirará, a menos que tente novamente.

Como isso ajuda a bloquear os robôs de verificação do phpmyadmin?

Ele pode ser usado com a mesma facilidade para corresponder a sinais comuns de um ataque, como tentar acessar pastas phpmyadmin inexistentes. Você precisará descobrir a expressão regular correta para corresponder a essas tentativas e garantir que não bloqueie usuários legítimos.

A configuração fornecida nesta postagem do blog pode funcionar literalmente ou exigir alguns ajustes na sua configuração.

Por que eu deveria bloqueá-los? Os erros 404 não custam muito

Bloqueá-los no iptables DEVE ter alguma utilidade - as probabilidades são de que, se estiverem verificando vulnerabilidades do phpmyadmin, eles também podem tentar outros serviços, até encontrarem algo que funcione. A proibição deles fará com que a maioria dos bots / scripts desista depois de um tempo, e eles passarão a alvos melhores.

Mesmo com as verificações não custando muito (a menos que encontrem uma vulnerabilidade), elas inundam seus logs, dificultando a visualização de ataques e problemas bem-sucedidos no servidor da web.

Como diz o comentário abaixo, o Fail2ban requer alguns recursos do sistema. Mas não muito. No mínimo, posso dizer que nunca tive um problema de desempenho que pudesse atribuir ao Fail2ban. No entanto, tive problemas de desempenho de scripts muito agressivos, tentando usar senhas de força bruta ou lançando milhares de tentativas de injeção de SQL e outras explorações por segundo no meu servidor. Bloqueá-los no nível do firewall leva MUITO menos recursos do que bloqueá-los no nível do servidor / aplicativo. Também pode ser estendido para executar scripts personalizados para banir endereços IP - portanto, em vez de bani-los em tabelas de IP, você pode bani-los em um firewall de hardware ou enviar um e-mail a alguém se a mesma pessoa continuar tentando atacá-lo para que você possa reclamar ao provedor de serviços de Internet ou peça ao seu datacenter que os bloqueie nos firewalls.

Alguma outra dica?

É ALTAMENTE RECOMENDADO que você coloque na lista branca alguns endereços IP que você controla para não se bloquear acidentalmente.

Conceder
fonte
6
que será uma perda de recursos :) Eu acho que você vai usar mais ciclos de CPU em Fail2ban que em simplesmente servindo às vezes 404 :)
Bartłomiej Zarzecki
4
@ BartłomiejZarzecki Melhor segurança sempre exige mais recursos
user11153
3
@ heinrich5991 ele irá bloquear após as primeiras tentativas. Não faz diferença para algumas verificações, mas uma enorme diferença para verificações que tentam várias tentativas no servidor.
Grant
2
Esperamos que Fail2ban (ou similar) seja mais do que apenas / phpmyadmin. Supondo que ele tenha qualquer tipo de acesso remoto, o bloqueio do tipo F2B (3 senhas e você ... desapareceu!) É mais do que apenas 404s.
precisa saber é o seguinte
3
Se você fizer algo assim, defina a proibição para expirar relativamente rápido (algumas horas, no máximo) ou corre o risco de bloquear usuários legítimos se o ataque vier de um IP alocado dinamicamente.
Jens Neubauer
7

O que faço é colocar um pequeno script no diretório apropriado, para que seja executado se alguém acessar / phpmyadmin /. Esse script não faz mais nada além de invocar o iptables (no Linux), que bloqueia o endereço IP que acessa o script por 30 minutos (após o qual um cron-job libera a cadeia de iptables ao qual o endereço IP é adicionado).

A vantagem sobre o fail2ban é que você não usa nenhum recurso para analisar o syslog / access-log. A desvantagem, é claro, é que você não verifica mais nada, exceto acessar esse endereço muito específico.

Por que eu faço isso? Claro, servir um 404 seria fácil para o servidor, mas não quero que eles fujam, simples assim. Quero perder o tempo da ferramenta deles, esperando o servidor responder, tentando novamente até que finalmente desista. Além disso, se você não bloqueá-los, eles vão tentar um monte de URLs diferentes antes de finalmente seguir em frente - às vezes mais de mil. Dependendo da ferramenta, pode ser "agradável" e espaçá-las por algumas horas, ou pode não se importar e sobrecarregar o servidor com todos eles em minutos.

Por que não sirvo uma página válida? A ferramenta deles pode parar de fazer a varredura e alertar o skiddie que o está executando - que então precisa fazer o check-out manualmente. O lado oposto disso é que eles darão ao seu servidor uma visão muito mais próxima do que teriam, se a verificação não o fizesse aparecer nos resultados. Talvez eles bisbilhotem um pouco mais, talvez algumas verificações de portas, talvez você as enlouqueça e elas lançem um DoS para ver se podem fazer alguma coisa. Simplesmente bloqueá-los - o que, do ponto de vista deles, faz com que o servidor atinja o tempo limite no momento em que acessam o script phpmyadmin - é efetivo para desperdiçar o tempo de suas ferramentas, evitando a atenção indesejada.

Se você possui o phpMyAdmin no servidor, uma solução eficaz pode colocá-lo em um diretório separado e usar o controle de senha do servidor da web (.htpasswd for Apache) para bloquear o acesso antes que algo aconteça.

Aaa
fonte
Parece uma boa opção alternativa ... mas isso não exige que o servidor da Web consiga executar o script com permissões de root?
Grant
11
Ajuste o alias para ferramentas como phpMyAdmin. Mudança simples no arquivo de configuração para alterá-lo para adminMyPhp ou chrisPhpAdmin ... ou algo que não será guiado por script.
precisa saber é o seguinte
Desculpe pela resposta tardia - não (necessariamente). Você pode usar o sudo (com o arquivo sudoers) para permitir que o servidor da Web execute um script conhecido (e apenas esse script) com permissões de root. Esse script aceitaria (como parâmetro) o IP e você o compararia com uma expressão regular ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ) para garantir que não está injetando nada de estranho.
Aaa
1

FWIW, restringimos o acesso a / phpmyadmin / apenas a endereços IP na lista de permissões.

Também usamos o mod_evasive (no apache2) para impedir ataques de script com DOS / mal comportados.

user204880
fonte
1

vincule a ferramenta de administração do mysql ao endereço de loopback da sua máquina 127.0.0.1

use ssh com encaminhamento de porta para acessar seu back-end de administrador.

adicione uma camada extra de segurança que pode ser bastante transparente.

O zelador do Unix
fonte
-4

A melhor maneira que encontramos é proteger com senha a pasta em que o phpmyadmin está. Além disso, não use nada relacionado ao phpmyadmin como um nome de pasta: pma, phpmy, etc ...

WeWatchYourWebsite
fonte
2
Da pergunta: None of these directories exist, I don't even have phpmyadmin on my server.- Ele não está perguntando como proteger suas instalações existentes ... ele está perguntando o que fazer com coisas que não existem. Você não pode renomear PMAou o que tem se não existir.
WernerCD