Dalam posting blog kami sebelumnya, kami menunjukkan kepada Anda bagaimana Anda dapat mengamankan database open source Anda dengan ClusterControl. Tapi bagaimana dengan server ClusterControl itu sendiri? Bagaimana kita mengamankannya? Ini akan menjadi topik untuk blog hari ini. Kami menganggap host hanya untuk penggunaan ClusterControl, tanpa aplikasi lain yang berjalan di dalamnya.
Firewall &Grup Keamanan
Pertama dan terpenting, kita harus menutup semua port yang tidak perlu dan hanya membuka port yang diperlukan yang digunakan oleh ClusterControl. Secara internal, antara ClusterControl dan server database, hanya port netcat yang penting, di mana port default adalah 9999. Port ini perlu dibuka hanya jika Anda ingin menyimpan cadangan di server ClusterControl. Jika tidak, Anda dapat menutupnya.
Dari jaringan eksternal, disarankan untuk hanya membuka akses ke HTTP (80) atau HTTPS (443) untuk UI ClusterControl. Jika Anda menjalankan ClusterControl CLI yang disebut 's9s', titik akhir CMON-TLS perlu dibuka pada port 9501. Anda juga dapat menginstal aplikasi terkait database di atas server ClusterControl, seperti HAProxy, Keepalive, ProxySQL, dan semacamnya. Dalam hal ini, Anda juga harus membuka port yang diperlukan untuk ini juga. Silakan merujuk ke halaman dokumentasi untuk daftar port untuk setiap layanan.
Untuk menyiapkan aturan firewall melalui iptables, pada node ClusterControl, lakukan:
$ iptables -A INPUT -p tcp --dport 9999 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 9501 -j ACCEPT
$ iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
Perintah di atas adalah perintah yang paling sederhana. Anda dapat lebih ketat dan memperluas perintah untuk mengikuti kebijakan keamanan Anda - misalnya, dengan menambahkan antarmuka jaringan, alamat tujuan, alamat sumber, status koneksi, dan lainnya.
Mirip dengan menjalankan penyiapan di cloud, berikut adalah contoh aturan grup keamanan masuk untuk server ClusterControl di AWS:
Penyedia cloud yang berbeda menyediakan implementasi grup keamanan yang berbeda, tetapi aturan dasarnya serupa.
Enkripsi
ClusterControl mendukung enkripsi komunikasi pada tingkat yang berbeda, untuk memastikan otomatisasi, pemantauan, dan tugas manajemen dilakukan seaman mungkin.
Berjalan di HTTPS
Skrip penginstal (install-cc.sh) akan mengonfigurasi secara default sertifikat SSL yang ditandatangani sendiri untuk penggunaan HTTPS. Jika Anda memilih metode akses ini sebagai titik akhir utama, Anda dapat memblokir layanan HTTP biasa yang berjalan pada port 80 dari jaringan eksternal. Namun, ClusterControl masih memerlukan akses ke CMONAPI (antarmuka Rest-API lama) yang berjalan secara default pada port 80 di localhost. Jika Anda ingin memblokir seluruh port HTTP, pastikan Anda mengubah URL API ClusterControl di bawah Pendaftaran Cluster halaman untuk menggunakan HTTPS sebagai gantinya:
Sertifikat yang ditandatangani sendiri yang dikonfigurasi oleh ClusterControl memiliki validitas 10 tahun (3650 hari). Anda dapat memverifikasi validitas sertifikat dengan menggunakan perintah berikut (pada server CentOS 7):
$ openssl x509 -in /etc/ssl/certs/s9server.crt -text -noout
...
Validity
Not Before: Apr 9 21:22:42 2014 GMT
Not After : Mar 16 21:22:42 2114 GMT
...
Perhatikan bahwa jalur absolut ke file sertifikat mungkin berbeda tergantung pada sistem operasinya.
Enkripsi Server Klien MySQL
ClusterControl menyimpan data pemantauan dan pengelolaan di dalam database MySQL pada node ClusterControl. Karena MySQL sendiri mendukung enkripsi SSL client-server, ClusterControl mampu memanfaatkan fitur ini untuk membangun komunikasi terenkripsi dengan server MySQL saat menulis dan mengambil datanya.
Opsi konfigurasi berikut didukung untuk tujuan ini:
- cmondb_ssl_key - jalur ke kunci SSL, untuk enkripsi SSL antara CMON dan DB CMON.
- cmondb_ssl_cert - jalur ke sertifikat SSL, untuk enkripsi SSL antara CMON dan DB CMON
- cmondb_ssl_ca - jalur ke SSL CA, untuk enkripsi SSL antara CMON dan CMON DB
Kami membahas langkah-langkah konfigurasi dalam posting blog ini beberapa waktu lalu.
Ada menangkap meskipun. Pada saat penulisan, UI ClusterControl memiliki batasan dalam mengakses CMON DB melalui SSL menggunakan pengguna cmon. Sebagai solusinya, kita akan membuat pengguna database lain untuk ClusterControl UI dan ClusterControl CMONAPI yang disebut cmonui. Pengguna ini tidak akan mengaktifkan SSL di tabel hak istimewanya.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'cmonui'@'127.0.0.1' IDENTIFIED BY '<cmon password>';
mysql> FLUSH PRIVILEGES;
Perbarui file konfigurasi ClusterControl UI dan CMONAPI yang terletak di clustercontrol/bootstrap.php dan cmonapi/config/database.php masing-masing dengan pengguna database yang baru dibuat, cmonui :
# <wwwroot>/clustercontrol/bootstrap.php
define('DB_LOGIN', 'cmonui');
define('DB_PASS', '<cmon password>');
# <wwwroot>/cmonapi/config/database.php
define('DB_USER', 'cmonui');
define('DB_PASS', '<cmon password>');
File-file ini tidak akan diganti saat Anda melakukan upgrade melalui manajer paket.
Enkripsi CLI
ClusterControl juga dilengkapi dengan antarmuka baris perintah yang disebut 's9s'. Klien ini mem-parsing opsi baris perintah dan mengirimkan pekerjaan tertentu ke layanan pengontrol yang mendengarkan pada port 9500 (CMON) atau 9501 (CMON dengan TLS). Yang terakhir adalah yang direkomendasikan. Skrip penginstal secara default akan mengonfigurasi s9s CLI untuk menggunakan 9501 sebagai port titik akhir server ClusterControl.
Kontrol Akses Berbasis Peran
ClusterControl menggunakan Kontrol Akses Berbasis Peran (RBAC) untuk membatasi akses ke kluster dan fitur penerapan, pengelolaan, dan pemantauannya masing-masing. Ini memastikan bahwa hanya permintaan pengguna yang berwenang yang diizinkan. Akses ke fungsionalitas sangat halus, memungkinkan akses ditentukan oleh organisasi atau pengguna. ClusterControl menggunakan kerangka izin untuk menentukan bagaimana pengguna dapat berinteraksi dengan fungsi manajemen dan pemantauan, setelah mereka diberi otorisasi untuk melakukannya.
Antarmuka pengguna RBAC dapat diakses melalui ClusterControl -> Manajemen Pengguna -> Kontrol Akses :
Semua fitur sudah cukup jelas, tetapi jika Anda menginginkan deskripsi tambahan, silakan lihat halaman dokumentasi.
Jika Anda memiliki beberapa pengguna yang terlibat dalam operasi cluster database, sangat disarankan untuk mengatur kontrol akses untuk mereka. Anda juga dapat membuat beberapa tim (organisasi) dan menugaskannya dengan nol atau lebih kluster.
Berjalan di Port Khusus
ClusterControl dapat dikonfigurasi untuk menggunakan port kustom untuk semua layanan yang bergantung. ClusterControl menggunakan SSH sebagai saluran komunikasi utama untuk mengelola dan memantau node dari jarak jauh, Apache untuk melayani UI ClusterControl dan juga MySQL untuk menyimpan data pemantauan dan pengelolaan. Anda dapat menjalankan layanan ini pada port khusus untuk mengurangi vektor penyerang. Port berikut adalah target biasa:
- SSH - defaultnya adalah 22
- HTTP - defaultnya adalah 80
- HTTPS - standarnya adalah 443
- MySQL - defaultnya adalah 3306
Ada beberapa hal yang harus Anda ubah untuk menjalankan layanan di atas pada port kustom agar ClusterControl berfungsi dengan baik. Kami telah membahas ini secara mendetail di halaman dokumentasi, Berjalan di Port Kustom.
Izin dan Kepemilikan
File konfigurasi ClusterControl menyimpan informasi sensitif dan harus dijaga kerahasiaannya serta terlindungi dengan baik. File harus diizinkan hanya untuk root pengguna/grup, tanpa izin baca kepada orang lain. Jika izin dan kepemilikan salah disetel, perintah berikut membantu memulihkannya kembali ke status yang benar:
$ chown root:root /etc/cmon.cnf /etc/cmon.d/*.cnf
$ chmod 700 /etc/cmon.cnf /etc/cmon.d/*.cnf
Untuk layanan MySQL, pastikan konten direktori data MySQL diizinkan untuk grup "mysql", dan pengguna dapat berupa "mysql" atau "root":
$ chown -Rf mysql:mysql /var/lib/mysql
Untuk ClusterControl UI, kepemilikan harus diizinkan oleh pengguna Apache, baik "apache" untuk RHEL/CentOS atau "www-data" untuk OS berbasis Debian.
Kunci SSH untuk terhubung ke host database adalah aspek lain yang sangat penting, karena memegang identitas dan harus disimpan dengan izin dan kepemilikan yang tepat. Selain itu, SSH tidak akan mengizinkan penggunaan file kunci yang tidak aman saat memulai panggilan jarak jauh. Verifikasi file kunci SSH yang digunakan oleh cluster, di dalam file konfigurasi yang dihasilkan di bawah direktori /etc/cmon.d/, disetel ke yang diizinkan untuk osuser pilihan saja. Misalnya, pertimbangkan osuser adalah "ubuntu" dan file kuncinya adalah /home/ubuntu/.ssh/id_rsa:
$ chown ubuntu:ubuntu /home/ubuntu/.ssh/id_rsa
$ chmod 700 /home/ubuntu/.ssh/id_rsa
Gunakan Kata Sandi yang Kuat
Jika Anda menggunakan skrip penginstal untuk menginstal ClusterControl, Anda dianjurkan untuk menggunakan kata sandi yang kuat saat diminta oleh penginstal. Ada paling banyak dua akun yang perlu dikonfigurasi oleh skrip penginstal (bergantung pada penyiapan Anda):
- Kata sandi cmon MySQL - Nilai default adalah 'cmon'.
- Kata sandi root MySQL - Nilai default adalah 'kata sandi'.
Pengguna bertanggung jawab untuk menggunakan kata sandi yang kuat di kedua akun tersebut. Skrip penginstal mendukung banyak karakter khusus untuk masukan sandi Anda, seperti yang disebutkan dalam panduan penginstalan:
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special password characters: [email protected]#$%^&*()_+{}<>?
Verifikasi konten /etc/cmon.cnf dan /etc/cmon.d/cmon_*.cnf dan pastikan Anda menggunakan kata sandi yang kuat bila memungkinkan.
Mengubah Kata Sandi 'cmon' MySQL
Jika kata sandi yang dikonfigurasi tidak memenuhi kebijakan kata sandi Anda, untuk mengubah kata sandi cmon MySQL, ada beberapa langkah yang perlu Anda lakukan:
-
Ubah kata sandi di dalam server MySQL ClusterControl:
$ ALTER USER 'cmon'@'127.0.0.1' IDENTIFIED BY 'newPass'; $ ALTER USER 'cmon'@'{ClusterControl IP address or hostname}' IDENTIFIED BY 'newPass'; $ FLUSH PRIVILEGES;
-
Perbarui semua kemunculan opsi 'mysql_password' untuk layanan pengontrol di dalam /etc/cmon.cnf dan /etc/cmon.d/*.cnf:
mysql_password=newPass
-
Perbarui semua kemunculan konstanta 'DB_PASS' untuk UI ClusterControl di dalam /var/www/html/clustercontrol/bootstrap.php dan /var/www/html/cmonapi/config/database.php:
# <wwwroot>/clustercontrol/bootstrap.php define('DB_PASS', 'newPass');
# <wwwroot>/cmonapi/config/database.php define('DB_PASS', 'newPass');
-
Ubah kata sandi di setiap server MySQL yang dipantau oleh ClusterControl:
$ ALTER USER 'cmon'@'{ClusterControl IP address or hostname}' IDENTIFIED BY 'newPass'; $ FLUSH PRIVILEGES;
-
Mulai ulang layanan CMON untuk menerapkan perubahan:
$ service cmon restart # systemctl restart cmon
Verifikasi apakah proses cmon dimulai dengan benar dengan melihat /var/log/cmon.log. Pastikan Anda mendapatkan sesuatu seperti di bawah ini:
2018-01-11 08:33:09 : (INFO) Additional RPC URL for events: 'http://127.0.0.1:9510'
2018-01-11 08:33:09 : (INFO) Configuration loaded.
2018-01-11 08:33:09 : (INFO) cmon 1.5.1.2299
2018-01-11 08:33:09 : (INFO) Server started at tcp://127.0.0.1:9500
2018-01-11 08:33:09 : (INFO) Server started at tls://127.0.0.1:9501
2018-01-11 08:33:09 : (INFO) Found 'cmon' schema version 105010.
2018-01-11 08:33:09 : (INFO) Running cmon schema hot-fixes.
2018-01-11 08:33:09 : (INFO) Schema auto-upgrade succeed (version 105010).
2018-01-11 08:33:09 : (INFO) Checked tables - seems ok
2018-01-11 08:33:09 : (INFO) Community version
2018-01-11 08:33:09 : (INFO) CmonCommandHandler: started, polling for commands.
Menjalankannya Offline
Referensi terkait Mengumumkan ClusterControl 1.5.1 - Menampilkan Enkripsi Cadangan untuk MySQL, MongoDB &PostgreSQL Kepatuhan PCI untuk MySQL &MariaDB dengan ClusterControl Cara Mengamankan Server MySQL/MariaDBClusterControl mampu mengelola infrastruktur database Anda di lingkungan tanpa akses Internet. Beberapa fitur tidak akan berfungsi di lingkungan itu (cadangan ke cloud, penerapan menggunakan repo publik, peningkatan), fitur utama ada di sana dan akan berfungsi dengan baik. Anda juga memiliki pilihan untuk menerapkan semuanya dengan Internet terlebih dahulu, lalu memutus Internet setelah penyiapan diuji dan siap menyajikan data produksi.
Dengan membuat ClusterControl dan cluster database terisolasi dari dunia luar, Anda telah menghilangkan salah satu vektor penyerang yang penting.
Ringkasan
ClusterControl dapat membantu mengamankan cluster database Anda tetapi tidak diamankan dengan sendirinya. Tim operasi harus memastikan bahwa server ClusterControl juga diperkuat dari sudut pandang keamanan.