Kamis, 05 Maret 2020

MARIADB-centos7 remote akses

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.
Masalah yang muncul

Alat dan Bahan

  1. Server Aplikasi : 192.168.1.108
  2. Server Database: 192.168.1.109
    # cat /etc/redhat-release
    CentOS Linux release 7.6.1810 (Core) 
  3. Koneksi internet
  4. Kopi

Instalasi

Pada server aplikasi (192.168,1,108), lakukan instalasi MariaDB Client agar bisa mengakses database server. Caranya:
  1. 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
    Penambahan repository MariaDB
  2. Setelah itu update package dengan perintah:
    # yum update
    yum update
  3. Lakukan instalasi MariaDB Client dengan perintah:
    # yum install MariaDB-client
    Instalasi 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
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
masuk ke dalam MariaDB Prompt
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;
memberikan remote access kepada MariaDB User

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:
Berhasil
Kalau seperti di bawah ini, berarti MariaDB Remote Access masih gagal untuk dilakukan:
Gagal
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:
Koneksi tidak berhasil
Jika muncul gambar seperti ini, berarti semua pengaturan benar dan koneksi berhasil dilakukan:
MariaDB Remote Access berhasil dan koneksi bisa 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