Prevenire gli attacchi di forza bruta su MySQL?


9

Ho bisogno di attivare la rete per MySQLd, ma ogni volta che lo faccio, il server viene costretto all'oblio. Alcuni script per indovinare la password iniziano a martellare sul server, aprendo una connessione sulla porta 3306 e cercando password casuali per sempre.

Come posso impedire che ciò accada?

Per SSH, uso denyhosts, che funziona bene. C'è un modo per far funzionare denyhosts con MySQLd?

Ho anche pensato di cambiare la porta su cui MySQL è in esecuzione, ma questa è tutt'altro che ideale e solo una soluzione stop-gap (e se scoprissero la nuova porta?)

Qualcuno ha qualche altra idea?

Se lo fa diversamente, eseguo MySQL 5.x su FreeBSD 6.x.

Risposte:


9

Non conosco alcun pacchetto software simile a denyhosts per MySQL, ma ho un paio di soluzioni:

  • Limitare l'accesso a indirizzi IP specifici. Non utilizzare% per consentire a tutti gli host di connettersi al server.
  • Ancora più sicuro, imposta iptables per consentire l'accesso a 3306 solo da indirizzi IP autorizzati.
  • Tunnel il tuo traffico verso il box con ssh, quindi connettiti tramite localhost
  • Modifica gli script Denyhosts o BFD per analizzare i log di accesso mysql e bloccare eventuali tentativi di forza bruta sul firewall

Modifica :

Per rispondere al tuo commento, prova questo :

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

Dove .20 è il tuo MySQL e .50 è l'indirizzo IP di connessione remota.


Alcune note: come posso limitare l'accesso alla porta 3306 a un solo set di indirizzi IP? Limitare semplicemente gli utenti MySQL non funziona, poiché le macchine remote possono comunque connettersi e forzare le password. I tunnel SSH sembrano in qualche modo inconsistenti da configurare per l'utente finale ... Hai un esempio di IPTables per farlo?
Keith Palmer Jr.,

2

1: Cambia la porta da 3306. Non per motivi di maggiore sicurezza, ma per caricare il server per gestire attacchi di accesso falso

2: Crea un certificato SSL e abilitalo sul tuo server MySQL (è comunque indispensabile crittografare la tua connessione client-server)

3: Creare uno o più certificati client (tutti i client devono avere il certificato e il software client deve essere configurato per usarlo). Se i tuoi clienti sono .Net devi convertire il certificato client nel formato pkcs12, ma è facile farlo, consulta questa guida.

4: Imposta l'account utente MySQL per richiedere il certificato client x509, quindi un utente malintenzionato necessita sia delle credenziali di accesso che del certificato client (puoi anche inserire una password sul certificato client, quindi anche l'attaccante deve richiederlo).

Ho usato questa guida per creare certificati e file di chiavi, ma ci sono molte guide là fuori.

Preferisco usare solo la mia connessione SSH per accedere al mio box Linux a scopo amministrativo, non per l'accesso client.


Grazie per la risposta. Ho usato questa guida per fare # 2, 3 e 4: digitalocean.com/community/tutorials/…
ofri cofri

1

Utilizzando MySQL Proxy, è possibile scrivere un piccolo script LUA che richiede una combinazione utente / passaggio ma attende X secondi per elaborare il login se la richiesta di connessione proviene da un intervallo IP non approvato.

È inoltre possibile aggiungere un po 'di logica in più allo script LUA nella lista nera degli intervalli IP dopo tre tentativi falliti.

Tutto sommato, è tecnicamente fattibile, ma vado con gli altri consigli a tunnel via SSH o una VPN verso un intervallo IP comune, autorizzato (tramite FW o altri mezzi).


+1 ancora un altro uso per MySQL Proxy :)
Andy,

0

perché non consentire l'accesso alla porta mysqld solo da host sicuri?


Ho considerato questo, ma ciò significa che dovrei monitorare le modifiche dell'indirizzo IP per oltre 1.000 client. Sarebbe un dolore gigantesco nel culo ... Come posso farlo comunque? Non aiuta a bloccarli all'interno di MySQL, perché possono ancora collegarsi al server MySQL, semplicemente non in realtà scegliere alcun database ...
Keith Palmer Jr.

1
citando dave drager sopra: "Modifica gli script Denyhosts o BFD per analizzare i log di accesso mysql e bloccare eventuali tentativi di forza bruta sul firewall" sembra la migliore idea o usa alcune password geroglifiche :)
quaie

0

Anche se questa non è una risposta "reale", non so perché sia ​​necessario esporla direttamente al mondo esterno.

Non puoi abilitare ssh su quella scatola e usare il tunneling per accedere al motore db?

O qualsiasi altra soluzione VPN per accedervi (mi viene in mente openvpn).


0

Non è una vera soluzione al problema, ma potrebbe essere utile se si esegue semplicemente il server su una porta diversa. La maggior parte di questi robot di scansione è probabilmente programmata per controllare solo 3306. Non risolverà il problema, ma probabilmente otterrai molte meno scansioni semplicemente cambiando la porta.


-1 per sicurezza dall'oscurità
thepocketwade,

@thepocketwade - Ecco perché ho detto che non è una vera soluzione al problema. Ma potrebbe ancora essere utile.
Eric Petroelje,

0

Credo che le connessioni debbano essere protette da firewall: veloce e piacevole. Ci sono molti tutorial per iptables e quant'altro :)

Inoltre è possibile installare un cronjob sugli host dei client che eseguiranno smth su un server per impedire al firewall di bloccare host noti.


0

usare ssh per i tunnel sarebbe il migliore ma potresti provare a usare fail2ban invece di denyhosts perché penso che sia mirato al monitoraggio di più applicazioni diverse, quindi non dovrebbe essere un problema aggiungendo il registro mysql ad esso.


0

Suggerimento da prendere in considerazione per la sezione my.cnf-ini [mysqld]

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

per evitare le centinaia di tentativi in ​​90 secondi. Tagliateli a 10 tentativi.

Prendi in considerazione una volta al giorno FLUSH HOSTS per cancellare le persone legittime che cercano di utilizzare il tuo sistema e che NON POSSONO ricordare la loro password. Forse tra qualche giorno, ci riusciranno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.