Menghubungkan ke MySQL dengan aman - SSL MySQL vs Stunnel vs SSH Tunneling

15

Kami memiliki aplikasi PHP yang terhubung ke server MySQL, dan kami ingin mengamankan koneksi antara server web & aplikasi dan database.

Pada masa puncaknya, server web membuat ratusan koneksi bersamaan ke database, dan melakukan banyak membaca dan menulis kecil. Saya sadar ini tidak optimal, dan saya sedang berupaya mengurangi jumlah koneksi database secara paralel dengan ini.

Kami tidak memiliki koneksi terus-menerus ke basis data yang dihidupkan saat ini, dan meskipun kami bermaksud di masa depan saya ingin menerapkan ini secara independen dari itu.

Dari segi perangkat keras - server MySQL cukup tebal (16 inti) seperti halnya server web. Mereka adalah server khusus.

Pertanyaan saya kemudian mengelilingi cara paling aman untuk mengamankan & mengenkripsi koneksi ke server database.

Penelitian saya sejauh ini telah menyarankan bahwa overhead kinerja utama adalah dengan mengatur koneksi SSL - setelah SSL terhubung ada sedikit penalti kinerja. Dan inilah yang saya miliki tentang setiap metode mengamankan koneksi:

  1. Sertifikat SSL MySQL - berfungsi seperti SSL normal. Dapat menggunakan sertifikat klien untuk mencegah koneksi yang tidak sah. Tidak ada koneksi terus-menerus dengan pengaturan kami yang ada. Masih harus memiliki MySQL mendengarkan pada port terbuka di firewall.
  2. stunnel. Mengatur port ke port ssl tunnel. Tidak perlu mengkonfigurasi ulang MySQL. Dapat menutup port normal mendengarkan MySQL untuk mencegah upaya koneksi MySQL berbahaya. Tidak mendukung koneksi persisten. Hit kinerja tidak dikenal.
  3. Tunneling SSH. Buat terowongan SSH antara klien dan server. Tidak perlu mengkonfigurasi ulang MySQL. Dapat menutup port normal mendengarkan MySQL untuk mencegah upaya koneksi MySQL berbahaya. Mendukung koneksi terus-menerus, tetapi ini terkadang putus. Hit kinerja tidak dikenal.

Ini sejauh yang saya bisa dapatkan. Saya menyadari keterbatasan tolok ukur - dalam pengalaman saya menjalankannya, sangat sulit untuk mensimulasikan lalu lintas dunia nyata. Saya berharap seseorang memiliki saran berdasarkan pengalaman mereka sendiri dalam mengamankan MySQL?

Terima kasih

Dastra
sumber
Apa jenis arsitektur server / jaringan yang Anda miliki? Skenario apa yang ingin Anda cegah? Jika semua komunikasi server-ke-server Anda berada pada sakelar / VLAN terpisah, maka Anda mungkin tidak memerlukan perlindungan anti-sniffing. Adapun kinerja, jalankan openssl speeddan pilih cipher yang sesuai dengan kebutuhan Anda untuk perlindungan vs kompromi kinerja.
Marcin
@ Marsin - terima kasih atas tip kecepatan openssl. Skenario yang saya coba cegah adalah koneksi yang tidak sah ke mysql dan untuk mengenkripsi komunikasi antara server. Setiap bantuan lebih lanjut yang dapat Anda berikan dengan membandingkan ketiga pendekatan akan diterima dengan penuh syukur.
Dastra
1
ke 3) gunakan autossh untuk mengurangi efek putus sekolah. Ini akan terhubung kembali secara otomatis jika terputus. Berfungsi dengan baik di sini dalam banyak situasi.
ansi_lumen

Jawaban:

5

Saya akan pergi dengan ssh-tunnel dan melakukannya dengan autosshalih - alih ssh. Tentang kinerja saya akan mengatakan, bahwa protokol SSH sangat dapat dikustomisasi dan Anda dapat menyesuaikan koneksi Anda, jika diperlukan.

Tapi saya tidak akan mengharapkan overhead yang terlihat setelah koneksi diatur.

ansi_lumen
sumber
3

Dengan melihat tolok ukur artikel ini (Blog Kinerja MySQL), Anda harus benar-benar menghindari kemampuan SSL asli MySQL.

Nicolas BADIA
sumber