Apakah berisiko memiliki server database dan server web pada mesin yang sama?

8

Sepertinya hidup akan mudah untuk menjalankan server database pada mesin yang sama dengan server web, tetapi apakah kita mengambil risiko keamanan besar dengan melakukan ini?

Lingkungan akan menjadi server Windows 2008, Postgresql (versi terbaru, mungkin 9.0 ketika keluar) dan Apache 2.

CLJ
sumber
Tergantung. Bisakah Anda memberikan detail lebih lanjut tentang skenario spesifik yang Anda pertimbangkan?
K. Brian Kelley

Jawaban:

7

Belum tentu.

Dengan asumsi server web Anda dikompromikan penyerang masih akan mendapatkan kredensial untuk mengakses database yang sama, tidak peduli apa server yang mereka jalankan. Bagaimanapun, server basis data masih perlu dikonfigurasi untuk memungkinkan permintaan yang sah dari server web.

(Dengan asumsi langkah-langkah keamanan yang masuk akal seperti di mysqld tidak menerima login root tanpa password dari localhost.)

Yang sedang berkata, Anda mungkin masih ingin menjalankan server database yang terpisah. Alasan untuk itu terkait dengan kinerja, skalabilitas, dll.

andol
sumber
3
Saya setuju bahwa masalah yang lebih besar adalah kinerja yang Anda dapat menjalankan keduanya pada mesin yang sama.
ChrisF
5

Saya tidak setuju dengan poster yang menyatakan bahwa ini bukan masalah keamanan, dan inilah alasannya:

  • Layanan menghadap depan Anda harus memiliki permukaan serangan sekecil mungkin . Ini adalah alasan utama untuk menggunakan proksi terbalik dan firewall, dan untuk menjaga layanan dan program yang tidak perlu jauh dari server yang tidak mengharuskan mereka untuk beroperasi. Inilah sebabnya mengapa server web adalah target paling umum untuk pengerasan keamanan.
  • Server web Anda seharusnya tidak memiliki hak dewa untuk sistem database Anda. Oleh karena itu kompromi server web tidak membahayakan server database juga. Sebagai permulaan, akun yang digunakan server web untuk mengakses database tidak boleh memiliki hak administratif lokal ke kotak SQL, haknya harus dibatasi murni untuk izin basis data. Kedua, dalam izin SQL itu harus beroperasi di bawah prinsip privilege paling . Kotak web Anda seharusnya tidak dapat membuat instance database baru dalam instance, misalnya. Idealnya, kotak web Anda tidak akan memiliki kemampuan untuk menjatuhkan tabel, atau menghapus baris dari tabel apa pun yang sebenarnya tidak perlu. Jadi, dalam hal terjadi kompromi dalam pengaturan 2-tier yang dikonfigurasi dengan benar, dampak penyerang menggunakan kredensial SQL terbatas dalam ruang lingkup.
Chris Thorpe
sumber
1
Saya tidak berpikir ada yang mengatakan bahwa solusi dua kotak tidak lebih aman. Namun, pertanyaannya adalah apakah risiko itu, mengutip pertanyaan, "besar". Jawabannya jelas akan tergantung pada keadaan - saya tidak akan menjalankan situs perbankan yang menghadap Internet pada satu mesin, misalnya. Tetapi server Web yang dikunci dengan benar, setelah dikompromikan, seharusnya tidak memiliki akses lebih atau kurang ke server database-nya daripada sebelum dikompromikan, dan prinsip itu tidak tergantung pada apakah solusinya ada pada dua mesin atau satu. Jika itu tidak benar, saatnya untuk merancang ulang sistem.
BMDan
Saya tidak mengikuti logika Anda. Jika Anda kompromi server web dan mendapatkan root untuk mesin itu, Anda memiliki semua yang ada di mesin itu. Jika itu termasuk seluruh database Anda dengan semua datanya, maka semuanya dikompromikan. Tetapi jika Anda memiliki 2 server terpisah, maka kompromi server web sepenuhnya, hingga tingkat apa pun, hanya akan memberi Anda akses tingkat data ke data yang dapat diakses oleh server web itu sendiri.
Chris Thorpe
3

Ini akan sangat tergantung pada model keamanan server Web dan DB Anda (yaitu, perangkat lunak), serta tingkat firewall / kontrol akses / IDP yang Anda akan terapkan pada keduanya jika mereka berada di server yang terpisah.

Semuanya sama, mungkin masalahnya lebih baik memisahkan keduanya. Namun, praktisnya, setidaknya di lingkungan LAMP, selama Anda menggunakan privsep Apache (jika Anda tidak yakin, jangan khawatir, Anda) dan tidak menggunakan login root ke MySQL di webapp Anda, dan Anda tidak memiliki tcp / 3306 terkena dunia luar, Anda tidak benar-benar mendapatkan banyak keamanan dengan memindahkan satu atau yang lain ke sepotong silikon yang berbeda. Anda mendapatkan manfaat kinerja dan kemampuan debug.

Pertanyaan Anda dalam gaya yang tampaknya membutuhkan jawaban absolut, tetapi tanpa informasi lebih lanjut (minimal, OS apa dan server web / DB yang sedang kita bicarakan), bahkan sulit untuk memberikan jawaban yang informatif.

BMDan
sumber
1
+1 Keamanan dasar dan praktik terbaik sudah cukup untuk sebagian besar data.
Chris S
Kita akan menjalankan: Windows Server 2008 dan Postgresql 8.4 (atau 9.0 saat keluar), Apache 2
CLJ
0

Saya tidak melihat banyak risiko keamanan tambahan menempatkan database dan server web pada perangkat keras yang sama. Jika server web dilanggar, data tetap dapat diakses. Keamanan bukanlah alasan khas untuk memisahkan tingkatan.

Dalam kedua kasus Anda ingin memastikan bahwa server database mendengarkan pada port non-standar, hanya akan menanggapi permintaan dari server web, dan bahwa firewall hanya memungkinkan permintaan http / s ke server web dan tidak ada port atau alamat lain .

Meskipun demikian, memisahkannya adalah praktik yang baik .. setiap server lebih mudah untuk dikelola dan dikonfigurasikan, dan Anda dapat menangani kegagalan, masalah, rekondisi, masalah kinerja, dll. Lebih mudah bergerak maju. Jadi, Anda dapat mempertimbangkan dua server virtual pada perangkat keras yang sama, yang kemudian dapat dipisahkan ketika kinerja atau kapasitas membutuhkannya.

tomjedrz
sumber
0

Saya tidak akan - tapi itu saya.

Itu tergantung pada apa yang ada di depan kotak Anda (mis. Firewall, load-balancers, dll.) Dan seberapa 'ketatnya' mereka, apa data aktualnya (yaitu sekarang berdampak data yang tersedia secara publik di satu ujung, rahasia nasional di sisi lain) , apakah ada dampak kinerja pada penggabungan mereka, kekuatan jaringan di antara keduanya (yaitu firewall antar-tingkat) dan kualitas pengerasan OS / aplikasi yang akan diterapkan.

Jika Anda tidak mengharapkan sistem ini harus berurusan dengan memuat terlalu banyak satu hal yang dapat Anda pertimbangkan adalah memvirtualisasi sistem menjadi dua VM terpisah; satu per fungsi - mungkin dengan VM firewall hanya perangkat lunak ketiga di antaranya. Ini berarti bahwa bahkan jika seseorang membobol server web Anda, mereka harus memecahkan server basis data dan, jika disertakan, VM firewall perantara. Tentu saja ini akan mengurangi kinerja sistem secara keseluruhan, tetapi setidaknya akan sedikit lebih aman dan juga dapat membantu jika beban Anda semakin membutuhkan desain dua server karena Anda dapat dengan mudah memindahkan satu VM ke mesin kedua. Produk ESXi gratis VMWare dapat melakukan ini dengan cukup mudah dan sudah ada VM firewall gratis yang siap untuk diimplementasikan jika Anda mau.

Chopper3
sumber