MySQL'e kaba kuvvet saldırılarını engelliyor musunuz?


9

MySQLd için ağ açmam gerekiyor, ancak her yaptığımda, sunucu unutulmaya zorlanır. Bazı parola tahmin komut dosyaları sunucuda çekiçlemeye başlar, 3306 numaralı bağlantı noktasında bir bağlantı açar ve sonsuza kadar rastgele parolalar dener.

Bunun olmasını nasıl durdurabilirim?

SSH için, iyi çalışan denyhosts kullanıyorum. Denyhosts'un MySQLd ile çalışmasını sağlamanın bir yolu var mı?

Ayrıca MySQL'in çalıştığı bağlantı noktasını değiştirmeyi de düşündüm, ancak bu ideal ve sadece bir dur-boşluk çözümü daha az (ya yeni bağlantı noktasını keşfederse?)

Başka fikri olan var mı?

Farklı yaparsa, FreeBSD 6.x üzerinde MySQL 5.x çalıştırıyorum.

Yanıtlar:


9

MySQL için herhangi bir denyhosts benzeri yazılım paketi bilmiyorum, ama birkaç çözüm var:

  • Girişi belirli IP adresleriyle sınırlayın. Tüm ana makinelerin sunucuya bağlanmasına izin vermek için% öğesini kullanmayın.
  • Daha da güvenli, iptables'ı yalnızca yetkili IP adreslerinden 3306'ya erişime izin verecek şekilde ayarlayın.
  • Trafiğinizi ssh ile kutuya tünelleyin ve localhost ile bağlanın
  • Mysql erişim günlüklerini analiz etmek ve güvenlik duvarındaki kaba kuvvet girişimlerini engellemek için Denyhosts veya BFD komut dosyalarını değiştirin

Düzenle :

Yorumunuzu cevaplamak için şunu deneyin :

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

Burada .20, MySQL'inizdir ve .50, uzak bağlantı IP adresidir.


Birkaç not: 3306 numaralı bağlantı noktasına erişimi yalnızca belirli bir IP adresi kümesiyle nasıl kısıtlayabilirim? Sadece MySQL kullanıcılarını kısıtlamak işe yaramaz, çünkü uzak makineler hala parolalar için bağlanabilir ve kaba kuvvet uygulayabilir. SSH tünelleri, son kullanıcı için ayarlanması biraz tutarsız görünüyor ... Bunu yapmak için bir IPTables örneğiniz var mı?
Keith Palmer Jr.

2

1: Bağlantı noktasını 3306'dan değiştirin. Daha iyi güvenlik nedeniyle değil, yanlış giriş saldırılarıyla başa çıkmak için sunucunun yükünü almak

2: SSL sertifikası oluşturun ve MySQL sunucunuzda etkinleştirin (yine de istemci-sunucu bağlantınızı şifrelemek gerekir)

3: Bir veya daha fazla istemci sertifikası oluşturun (tüm istemcilerin sertifikanın olması ve istemci yazılımının bunu kullanmak için yapılandırılması gerekir). İstemcileriniz .Net ise , istemci sertifikasını pkcs12 biçimine dönüştürmeniz gerekir, ancak bu kolayca yapılır, bu kılavuza bakın ..

4: MySQL kullanıcı hesabını x509 istemci sertifikası gerektirecek şekilde ayarlayın, ardından bir saldırganın hem oturum açma kimlik bilgilerine hem de istemci sertifikasına ihtiyacı vardır (istemci sertifikasına bir parola bile koyabilirsiniz, o zaman saldırganın da bunu istemesi gerekir).

Bu kılavuzu sertifikalar ve anahtar dosyaları yapmak için kullandım , ancak orada birçok rehber var.

Linux kutuma erişim amacıyla yalnızca SSH bağlantımı kullanmayı tercih ediyorum, istemci erişimi için değil.


Cevap için teşekkürler. Bu kılavuzu # 2, 3 ve 4 yapmak için kullandım: digitalocean.com/community/tutorials/…
ofri cofri

1

MySQL Proxy kullanarak, kullanıcı / geçiş kombinasyonu alan ancak bağlantı isteği onaylanmamış bir IP aralığından geliyorsa oturum açma işlemini işlemek için X saniye bekleyen küçük bir LUA komut dosyası yazabilirsiniz.

Ayrıca, üç başarısız denemeden sonra IP aralıklarını kara listeye almak için LUA komut dosyasına biraz fazladan mantık ekleyebilirsiniz.

Sonuç olarak, teknik olarak yapılabilir, ancak SSH veya VPN üzerinden ortak, beyaz listeye alınan (FW veya başka yollarla) bir IP aralığına tünelleme için diğer önerileri ile gidiyorum.


+1 MySQL Proxy için başka bir kullanım :)
Andy

0

neden sadece güvenli ana bilgisayarlardan mysqld bağlantı noktasına erişim izin vermiyor?


Bunu düşündüm, ancak bu, 1000'den fazla istemci için IP adresi değişikliklerini izlemem gerektiği anlamına geliyor. Bu popodaki devasa bir acı olurdu ... Bunu nasıl yapabilirim? Onlar hala MySQL sunucusuna bağlanmak çünkü sadece aslında herhangi veritabanlarını tercih, MySQL içinde onları dışarı kilitlemek için yardım etmez ...
Keith Palmer Jr.

1
Yukarıdaki dave drager alıntı: "Mysql erişim günlüklerini analiz etmek ve güvenlik duvarındaki herhangi bir kaba kuvvet girişimi engellemek için Denyhosts veya BFD komut dosyalarını değiştirin" en iyi fikir gibi görünüyor veya bazı hiyeroglif şifreler kullanın :)
quaie

0

Bu "gerçek" bir cevap olmasa da, bunu doğrudan dış dünyaya maruz bırakmanız gerektiğini bilmiyorum.

Bu kutuda ssh'yi etkinleştiremiyor ve db motoruna erişmek için tünellemeyi kullanamıyor musunuz?

Veya erişmek için başka herhangi bir VPN çözümü (openvpn akla geliyor).


0

Soruna gerçek bir çözüm değil, ancak sunucuyu farklı bir bağlantı noktasında çalıştırırsanız yardımcı olabilir. Bu tarama botlarının çoğu muhtemelen 3306'yı kontrol etmek için programlanmıştır. Bu sorunu çözmez, ancak portu değiştirerek muhtemelen çok daha az tarama alırsınız.



@thepocketwade - Bu yüzden soruna gerçek bir çözüm olmadığını söyledim. Ama yine de yardımcı olabilir.
Eric Petroelje

0

Bağlantıların güvenlik duvarı olması gerektiğine inanıyorum: hızlı ve güzel. Iptables ve her neyse için çok sayıda öğretici var :)

Ayrıca, güvenlik duvarının bilinen ana bilgisayarları engellemesini önlemek için bir sunucuda ikramiye çalışacak istemcilerin ana bilgisayarlarına bir cronjob yükleyebilirsiniz.


0

tüneller için ssh kullanmak en iyi olurdu ama denyhosts yerine fail2ban kullanmaya çalışabilirsiniz çünkü mysql günlüğü ekleyerek bir sorun olmamalı, bu yüzden daha farklı uygulamalar izlemeye yönelik olduğunu düşünüyorum.


0

My.cnf-ini [mysqld] bölümünüz için dikkate almanız gereken öneri

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

90 saniyede yüzlerce denemeden kaçınmak için. 10 denemede doğrayın.

Parolanızı hatırlayamayacak sisteminizi kullanmaya çalışan meşru kişileri temizlemek için günde bir kez FLUSH HOSTS düşünün. Belki birkaç gün içinde bununla başa çıkacaklar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.