Seberapa buruk pengaturan bind-address MySQL ke 0.0.0.0?

35

Saya mencoba untuk memungkinkan server jarak jauh untuk mengakses contoh MySQL yang saat ini berbagi server Linux dengan aplikasi web. Menurut dokumentasi , satu-satunya cara ini mungkin (kecuali saya tidak mengerti dengan benar) adalah jika direktif bind-address diatur ke 0.0.0.0 , yang menghasilkan MySQL yang memungkinkan akses dari IP apa pun yang dapat menghasilkan pengguna yang valid.

Jadi, dua pertanyaan:

  1. seberapa merugikan hal ini bagi keamanan?
  2. apakah ada pendekatan yang lebih baik untuk memungkinkan interaksi lokal dan jarak jauh dengan MySQL?
Jonathanatx
sumber

Jawaban:

36

Saya pikir Anda sedikit salah memahami pengaturan bind-address . Ini adalah alamat lokal yang akan didengarkan MySQL untuk koneksi. Standarnya adalah 0.0.0.0 yang semuanya merupakan antarmuka. Pengaturan ini tidak membatasi IP mana yang dapat mengakses server, kecuali jika Anda menentukan 127.0.0.1 untuk hosting lokal saja.

Jika Anda perlu membatasi pengguna tertentu dari alamat IP tertentu, gunakan buat / berikan pengguna seperti iniCREATE USER 'bobdole'@'192.168.10.221';

Doug Luxem
sumber
+1 tetapi hanya catatan bahwa alamat mendengarkan default bervariasi tergantung pada bagaimana MySQL diinstal.
John Gardeniers
Terima kasih Doug, saya pikir default dalam hal ini adalah host lokal saya, tapi itu bagus untuk mengetahui bahwa pengguna database tertentu masih dibatasi oleh IP.
jonathanatx
@jonathanatx bind-address default MySQL (di 5.6 dan sejauh yang saya tahu) 0.0.0.0. Meskipun, saya pikir untuk banyak pemasangan hanya mengikat secara lokal adalah pilihan terbaik. Jangan membuka pintu jika Anda tidak ingin ada orang yang melewatinya.
ebyrob
1

Sebuah. Itu buruk. Meskipun Anda dapat membatasi akses pengguna dengan ip pada setiap basis data, saya pikir lebih aman untuk memiliki semua koneksi masuk secara lokal. Di server saya, saya mengizinkan MySQL hanya menerima koneksi lokal, 127.0.0.1 sebagaimana konfigurasi default. Untuk mengakses database dari jarak jauh, yang perlu Anda lakukan adalah membuat ssh tunnel sebelum menghubungkan ke database dan kemudian terhubung secara lokal. Jika Anda menulis kode dengan php, cukup mudah untuk melakukannya. Jika Anda menggunakan aplikasi desktop, hal itu mudah dilakukan di Linux (mencari ssh tunnel), Pada Windows saya biasanya menggunakan program seperti Putty untuk membuat terowongan untuk saya.

Jayson Just
sumber
7
Itu cukup gila. Cara standar untuk melakukannya adalah membuat pengguna yang hanya dapat diakses dari nama host atau IP tertentu. Memaksa setiap server web untuk membuat terowongan SSH ke database jauh lebih banyak pekerjaan daripada yang harus dilakukan.
TheLQ
3
Server web dan server basis data Anda tidak selalu merupakan perangkat yang sama. Jangan biarkan koneksi masuk dari internet, tentu saja .. tetapi ada cara aman untuk solusi arsitek dengan akses jaringan MySQL.
Shane Madden
1
Untuk pengaturan kecil (satu db, satu www), Anda mungkin melakukan ssh tunneling. Untuk pengaturan nyata, VPN dan firewall Anda akan melindungi Anda, oleh karena itu Anda akan membuka melalui 0.0.0.0 untuk memungkinkan akses jarak jauh.
Sonia Hamilton
2
Untuk semua orang yang berpikir bahwa gagasan terowongan SSH itu gila, pertimbangkan bahwa sebagian besar lalu lintas MySQL sudah jelas. Jika karena alasan tertentu Anda harus terhubung melalui jaringan yang tidak terpercaya (yaitu Internet), pertimbangkan SSH atau lakukan melalui VPN. Jalankan Wireshark atau sniffer paket lain jika Anda ingin melihat apa yang saya bicarakan.
Brad
2
@Brad MySQL mendukung enkripsi sehingga ini tidak benar.
Marti Markov