Mengaktifkan MariaDB Remote Access di Centos 7
MariaDB Remote Access – Suatu hari, saya diminta untuk melakukan instalasi aplikasi (web app) dan database (MariaDB) di 2 server yang berbeda. Kedua servernya menggunakan CentOS 7 sebagai sistem operasinya. Awal mulanya, proses instalasi aplikasi dan database tersebut berjalan dengan lancar di masing-masing server. Namun ketika aplikasi hendak dihubungkan dengan database server, masalah mulai muncul. Server aplikasi tidak mau terhubung dengan database server.
Setelah saya cari tahu, ternyata masalahnya adalah MariaDB Remote Access di database server belum terbuka. Dan untuk mengatasi masalah tersebut, yang mungkin juga sedang atau pernah kalian rasakan, maka saya coba tuliskan pemecahan dari masalah tersebut.
Alat dan Bahan
- Server Aplikasi : 192.168.1.108
- Server Database: 192.168.1.109
# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
- Koneksi internet
- Kopi
Instalasi
Pada server aplikasi (192.168,1,108), lakukan instalasi MariaDB Client agar bisa mengakses database server. Caranya:
- Tambahkan repositori MariaDB dengan perintah vi /etc/yum.repos.d/MariaDB yangberisi:
# MariaDB 10.3 CentOS repository list - created 2018-05-25 19:02 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey= https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck= 1
- Setelah itu update package dengan perintah:
# yum update
- Lakukan instalasi MariaDB Client dengan perintah:
# yum install MariaDB-client
*Saya menganggap kalian sudah melakukan instalasi MariaDB Server pada server database, sehingga saya tidak perlu menuliskan di sini.
Solusi
Ada 3 tahapan yang saya buat untuk mengatasi masalah di atas.
- Bind MariaDB ke IP luar
- Buka port MariaDB di Firewall
- Memberikan MariaDB Remote Access ke user yang ingin dituju
Bind MariaDB ke IP Luar
Agar bisa diakses dari luar, bind address yang ada pada konfigurasi database server (192.168.1.109). MariaDB harus diubah. Sebab secara default, MariaDB hanya mengizinkan koneksi terjadi dari localhost. Cara untuk mengubah konfigurasi MariaDB adalah
# vi /etc/my.cnf.d/server.cnf
dan ubah bind address nya menjadi seperti berikut:
[mysqld] bind-address=0.0.0.0
Tambahkan juga dua baris berikut:
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
Sehingga hasilnya menjadi seperti ini:
[mysqld] bind-address=0.0.0.0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
Sedikit catatan:
- Jika ada parameter skip-networking, non-aktifkan parameter tersebut dengan menambahkan tanda # pada bagian awalnya
[mysqld] bind-address=0.0.0.0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock #skip-networking
Buka MariaDB port di Firewall
Port default dari MariaDB adalah 3306. Tapi bila kalian menggunakan port lain, silahkan ubah sesuai dengan kebutuhan.
Untuk membukakan port tersebut, saya akan menggunakan command firewall-cmd.
Hal pertama yang perlu kalian lakukan adalah mengetahi active zone kalian. Caranya:
# firewall-cmd --get-active-zone
Kalau sudah, jalankan perintah berikut dengan mengganti <zone> dan <MariaDB_port> yang sesuai dengan pengaturan sistem kalian:
firewall-cmd --zone=<zone> --add-port=<mysql_port>/tcp --permanent
Sebagai contoh:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
Kalau sudah, jalankan perintah ini untuk memuat ulang konfigurasi firewall:
firewall-cmd --reload
Bila kalian ingin memberikan akses ke port tertentu untuk ip tertentu, jalankan perintah berikut (contoh):
firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" source address="192.168.1.108/32" port protocol="tcp" port="3306" accept'
Jika perintah firewall-cmd tidak bisa karena tidak ditemukan, berarti kalian harus menjalankan perintah iptables. Caranya:
iptables -I INPUT -i ens32 -p tcp --destination-port 3306 -j ACCEPT
Bila ingin memberikan akses ke port tertentu untuk ip tertentu, jalankan perintah berikut:
iptables -A OUTPUT -p tcp -s 192.168.1.108 --sport 1024:65535 -d 0/0 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
Memberikan Remote Access ke MariaDB User
Masuk ke dalam MariaDB prompt dengan perintah:
mysql -u root -p
Tambahkan user yang ingin diberikan akses, baik itu ke semua database atau sebagian, dan juga apa saja yang bisa dilakukan oleh user tersebut. Caranya:
create user 'keystore'@'192.168.1.108' identified by 'hatihatidijalan'; grant all privileges on *.* to 'keystore'@'192.168.1.108' identified by 'hatihatidijalan'; flush privileges;
Uji Coba
Untuk menguji cobanya, paling gampang adalah dengan menggunakan perintah telnet. Caranya:
telnet <ip_tujuan> <port>
Jika hasilnya seperti gambar berikut ini, artinya koneksi berhasil dilakukan:
Kalau seperti di bawah ini, berarti MariaDB Remote Access masih gagal untuk dilakukan:
Tapi untuk menguji cobanya secara langsung, lewat MariaDB Prompt, cara yang perlu dilakukan adalah:
mysql -u <nama_user> -p -h <host>
Jika muncul gambar seperti ini, tandanya koneksi tidak berhasil:
Jika muncul gambar seperti ini, berarti semua pengaturan benar dan koneksi berhasil dilakukan:
Tambahan
Kita perlu melakukan bind, baik ke localhost maupun IP luar. Namun menurut dokumentasi, MariaDB hanya bisa terikat pada satu alamat saja untuk menerima koneksi. Jadi untuk bisa menerima banyak koneksi, nilai ‘Address’ haruslah seperti berikut:
- Jika alamat IP (bind address) adalah *, maka database server akan menerima koneksi TCP/IP, baik dari host dengan IPv6 atau IPv4 (jika server mendukung IPv6). Gunakan alamat ini untuk memberikan izin koneksi ke IPv4 dan IPv6 ke semua server.
- Jika bind address adalah 0.0.0.0, maka database server hanya akan menerima koneksi TCP/IP dari server dengan IPv4.
- Jika bind address adalah ::, maka database server hanya akan menerima koneksi TCP/IP dari server dengan IPv6.
- Jika bind address adalah IPv4-mapped address, maka database server akan menerima koneksi TCP/IP untuk alamt tersebut, baik dalam format IPv4 atau IPv6. Sebagai contoh, jika server terikat pada ::ffff:127.0.0.1, klien dapat terkoneksi dengan menggunakan –host =127.0.0.1 atau –host=::ffff:127.0.0.1
- Jika bind address adalah IP reguler, baik IPv4 atau IPv6, seperti 192.168.1.109 atau ::1), maka database server akan menerima koneksi TCP/IP hanya dari IP tersebut. Namun masalahnya, jika kita binding MariaDB langsung ke hanya satu IP, maka kita tidak akan bisa terkoneksi melalui localhost. Jadi cara terbaik adalah dengan menggunakan “*” atau menonaktifkan parameter tersebut agar bisa menerima koneksi baik dari localhost dan network luar.
- Untuk pemberian grant user, hindari pemberian akses all privileges untuk alasan keamanan.
Tidak ada komentar:
Posting Komentar