Evitando ataques de força bruta no MySQL?

8

Eu preciso ativar a rede para o MySQLd, mas toda vez que faço isso, o servidor é forçado a cair no esquecimento. Alguns significam script de adivinhação de senha começa a martelar no servidor, abrindo uma conexão na porta 3306 e tentando senhas aleatórias para sempre.

Como posso impedir que isso aconteça?

Para o SSH, eu uso o denyhosts, que funciona bem. Existe uma maneira de fazer o denyhosts funcionar com o MySQLd?

Eu também considerei alterar a porta em que o MySQL está sendo executado, mas isso é menos do que ideal e apenas uma solução paliativa (e se eles descobrirem a nova porta?)

Alguém tem alguma outra ideia?

Se for diferente, estou executando o MySQL 5.x no FreeBSD 6.x.

    
por Keith Palmer Jr. 22.09.2009 / 21:51

9 respostas

7

Eu não conheço nenhum pacote de software do tipo denyhosts para MySQL, mas eu tenho algumas soluções:

  • Limite o login a endereços IP específicos. Não use% para permitir que todos os hosts se conectem ao servidor.
  • Ainda mais seguro, configure o iptables para permitir acesso apenas ao 3306 a partir de endereços IP autorizados.
  • Tunelize seu tráfego para a caixa com ssh e conecte-se via host local
  • Modifique os scripts Denyhosts ou BFD para analisar os logs de acesso do mysql e bloquear quaisquer tentativas de força bruta no firewall

Editar :

Para responder ao seu comentário, tente isto :

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

Onde .20 é o seu MySQL e .50 é o endereço IP de conexão remota.

    
por 22.09.2009 / 22:03
1

Usando o MySQL Proxy, você pode escrever um script LUA pequeno que use uma combinação de usuário / senha, mas aguarde X segundos para processar o login se a solicitação de conexão vier de um intervalo de IP não aprovado.

Além disso, você pode adicionar um pouco de lógica extra ao script LUA aos intervalos de IP da lista negra após três tentativas malsucedidas.

Em suma, é tecnicamente factível, mas vou com as outras recomendações para encapsulamento via SSH ou VPN para uma faixa de IP comum, na lista de permissões (via FW ou outros meios).

    
por 23.09.2009 / 16:46
0

porque não permitir acesso à porta mysqld apenas de hosts seguros?

    
por 22.09.2009 / 21:57
0

Embora esta não seja uma resposta "real" - não sei por que você precisa expor diretamente ao mundo externo.

Você não pode habilitar o ssh nessa caixa e usar o tunelamento para acessar o mecanismo de db?

Ou qualquer outra solução VPN para acessá-lo (o openvpn vem à mente).

    
por 22.09.2009 / 21:59
0

Não é uma solução real para o problema, mas pode ajudar se você simplesmente executar o servidor em uma porta diferente. A maioria desses bots de escaneamento provavelmente está programada para checar apenas 3306. Isso não resolverá o problema, mas você provavelmente obterá muito menos scans apenas alterando a porta.

    
por 22.09.2009 / 22:55
0

Eu acredito que as conexões devem ser protegidas por firewall: rápido e agradável. Há muitos tutoriais para o iptables e o que for:)

Você também pode instalar um cronjob nos hosts dos clientes que serão executados em um servidor para impedir que o firewall bloqueie hosts conhecidos.

    
por 23.09.2009 / 05:17
0

usar o ssh para túneis seria o melhor, mas você poderia tentar usar o fail2ban em vez do denyhosts porque eu acho que ele tem como objetivo monitorar aplicativos mais diferentes, então não deve ser um problema adicionar o log do mysql nele.

    
por 23.09.2009 / 17:00
0

1: Altere a porta do 3306. Não por motivo de melhor segurança, mas para tomar a carga do servidor para lidar com ataques de login falsos

2: Crie um certificado SSL e habilite-o em seu servidor MySQL (é obrigatório ter que criptografar sua conexão cliente-servidor)

3: Crie um ou mais certificados de clientes (todos os clientes precisam ter o certificado e o cliente-software precisa ser configurado para usá-lo). Se seus clientes são .net você precisa converter o certificado do cliente para o formato pkcs12, mas isso é feito facilmente, veja este guia ..

4: Defina a conta de usuário do MySQL para exigir o certificado de cliente x509, então um atacante precisa das credenciais de login e do certificado do cliente (você pode até colocar uma senha no certificado do cliente e o invasor também precisará disso) .

Eu usei este guia para criar os certificados e arquivos de chave, mas há manu guia lá fora.

Eu prefiro apenas usar minha conexão SSH para acessar minha caixa Linux para fins de administração, não para acesso de clientes.

    
por 17.04.2016 / 13:01
0

Sugestão a considerar para sua seção my.cnf-ini [mysqld]

max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.

para evitar as centenas de tentativas em 90 segundos. Corte-os em 10 tentativas.

Considere uma vez por dia o FLUSH HOSTS para limpar as pessoas legítimas que tentam usar o sistema e que NÃO PODEM lembrar da senha. Talvez daqui a alguns dias eles consigam.

    
por 02.07.2018 / 02:14