Saya perlu mengaktifkan jaringan untuk MySQLd, tetapi setiap kali saya melakukannya, server menjadi terabaikan. Beberapa skrip menebak kata sandi mulai memalu di server, membuka koneksi pada port 3306 dan mencoba kata sandi acak selamanya.
Bagaimana saya bisa menghentikan ini terjadi?
Untuk SSH, saya menggunakan denyhosts, yang berfungsi dengan baik. Apakah ada cara untuk membuat denyhosts berfungsi dengan MySQLd?
Saya juga mempertimbangkan untuk mengubah port yang sedang digunakan MySQL, tetapi ini kurang ideal dan hanya solusi stop-gap (bagaimana jika mereka menemukan port baru?)
Apakah ada yang punya ide lain?
Jika berbeda, saya menjalankan MySQL 5.x di FreeBSD 6.x.
sumber
1: Ubah port dari 3306. Bukan karena alasan keamanan yang lebih baik, tetapi untuk mengambil beban server untuk menghadapi serangan login yang salah
2: Buat sertifikat SSL dan aktifkan pada server MySQL Anda (itu harus-harus mengenkripsi koneksi server-klien Anda)
3: Buat satu atau lebih sertifikat klien (semua klien harus memiliki sertifikat dan perangkat lunak klien perlu dikonfigurasi untuk menggunakannya). Jika klien Anda .Net, Anda perlu mengonversi sertifikat klien ke format pkcs12, tetapi itu mudah dilakukan, lihat panduan ini ..
4: Setel akun pengguna MySQL untuk memerlukan sertifikat klien x509, maka penyerang keduanya memerlukan kredensial masuk DAN sertifikat klien (Anda bahkan dapat memasukkan kata sandi pada sertifikat klien, maka penyerang juga perlu meminta itu juga).
Saya menggunakan panduan ini untuk membuat sertifikat dan file kunci tetapi ada banyak panduan di luar sana.
Saya lebih suka hanya menggunakan koneksi SSH saya untuk mengakses kotak linux saya untuk tujuan administrasi, bukan untuk akses klien.
sumber
Menggunakan MySQL Proxy, Anda bisa menulis skrip LUA kecil yang mengambil kombinasi pengguna / pass tetapi menunggu X detik untuk memproses login jika permintaan koneksi berasal dari rentang IP yang tidak disetujui.
Anda selanjutnya dapat menambahkan sedikit logika tambahan ke skrip LUA ke daftar hitam rentang IP setelah tiga upaya gagal.
Secara keseluruhan, ini bisa dilakukan secara teknis, tapi saya akan dengan rekomendasi lain untuk melakukan tunnel melalui SSH atau VPN ke rentang IP yang umum, masuk daftar putih (melalui FW atau cara lain).
sumber
mengapa tidak mengizinkan akses ke port mysqld dari hanya host yang aman?
sumber
Meskipun ini bukan jawaban "nyata" - Saya tidak tahu mengapa Anda perlu memaparkannya ke dunia luar secara langsung.
Tidak bisakah Anda mengaktifkan ssh pada kotak itu, dan menggunakan tunneling untuk mengakses mesin db?
Atau solusi VPN lain untuk mengaksesnya (openvpn masuk akal).
sumber
Bukan solusi nyata untuk masalah ini, tetapi mungkin membantu jika Anda hanya menjalankan server pada port yang berbeda. Sebagian besar bot pemindaian tersebut mungkin diprogram untuk hanya memeriksa 3306. Ini tidak akan menyelesaikan masalah, tetapi Anda mungkin akan mendapatkan lebih sedikit pemindaian dengan hanya mengubah port.
sumber
Saya percaya koneksi harus di-firewall: cepat dan bagus. Ada banyak tutorial untuk iptables dan apa pun :)
Anda juga dapat menginstal cronjob di host klien yang akan menjalankan server untuk mencegah firewall memblokir host yang dikenal.
sumber
menggunakan ssh untuk terowongan akan menjadi yang terbaik tetapi Anda bisa mencoba menggunakan fail2ban daripada menyangkal karena saya pikir ini bertujuan untuk memantau aplikasi yang lebih berbeda sehingga seharusnya tidak menjadi masalah menambahkan log mysql ke dalamnya.
sumber
Saran untuk dipertimbangkan untuk bagian my.cnf-ini [mysqld] Anda
untuk menghindari ratusan upaya dalam 90 detik. Potong mereka pada 10 upaya.
Pertimbangkan sekali sehari FLUSH HOSTS untuk menghapus orang yang sah mencoba menggunakan sistem Anda yang TIDAK BISA mengingat kata sandi mereka. Mungkin dalam beberapa hari, mereka akan mendapatkannya.
sumber