Senin, 05 Agustus 2013

Saat ini saya memiliki sebuah server berbasis Ubuntu Server 12.04 yang terhubung dengan beberapa server lainnya untuk berintegrasi database, sebagian server adalah FreeBSD. Secara default mysql hanya akan meng-allow koneksi database dari localhost atau ip 127.0.0.1. Tentu hal ini akan menghalangi integrasi database dengan server lain, meskipun sudah di grant access tapi jika binding nya hanya ditujukan kepada localhost ya percuma.

Sebenarnya sangat riskan sekali jika binding ini dibuka untuk umum, tapi tidak mungkin juga jika saya egois untuk tidak membiarkan server-server lain berintegrasi database dengan yang lainnya. Lalu bagaimana solusinya? Metode yang saya terapkan adalah :
  • Multiple Binding Address Mysql
  • Grant Access for some IP
  • Pasang firewall
Perlu ditekankan jika kita membuka port MySQL untuk umum, maka harus ada firewall untuk membatasinya. Jangan pernah sekali-sekali membukanya tanpa memasang firewall karena sangat berbahaya.
Langkah pertama, buka file /etc/mysql/my.cnf
[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address          = 127.0.0.1
#
Yang saya beri warna merah adalah yang harus dirubah. Set menjadi 
bind-address          = 0.0.0.0
Pastikan tidak ada tanda # diawal baris. Jika sudah maka simpan dan close. Restart service mysql
service mysql restart

Langkah kedua adalah  adalah lakukan GRANT ACCESS kepada beberapa IP Address tertentu.
mysql> GRANT ALL ON nama_database.* TO 'user'@'host' IDENTIFIED BY 'password'
Lakukan GRANT ACCESS tersebut berulang-ulang dengan IP yang berbeda sesuai kebutuhan anda.

Langkah ketiga adalah memasang firewall. Pastikan hanya IP-IP atau host-host tertentu yang berhak berintegrasi dengan server mysql tersebut. Saya menggunakan iptables sebagai firewall. Blok semua trafik mysql kecuali yang datang dari IP 10.1.1.127,  10.1.1.128, 10.1.1.129.
## Blok semua koneksi ke port 3306 ##
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
### Sekarang, allow 10.1.1.127, 10.1.1.128, and 10.1.1.129 ###
/sbin/iptables -A INPUT -p tcp -d 10.1.1.127 --dport 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d 10.1.1.128 --dport 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d 10.1.1.129 --dport 3306 -j ACCEPT
Atau
## Blok semua koneksi ke 3306 kecuali untuk tiga ip ini##
/sbin/iptables -A INPUT -p tcp --dport 3306 ! -d 10.1.1.127 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 3306 ! -d 10.1.1.128 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 3306 ! -d 10.1.1.129 -j DROP

Sebagai pengamanan tambahan supaya port mysql tidak terlihat kalau difilter, anda bisa merubah default port MySQL (3306) menjadi berapapun yang anda mau. Konfigurasi ini ada didalam file /etc/mysql/my.cnf
[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306 <--------------- Rubah disini
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address          = 127.0.0.1
#
 Setelah selesai maka simpan file dan close. Restart service mysql
/etc/init.d/mysql restart

Saya rasa cukup untuk artikel tentang Multiple Binding Address MySQL Server di Linux Ubuntu Server, jika ada pertanyaan silahkan di tuliskan dikomentar. Dengan senang hati saya akan membantu permasalahan yang anda hadapi.

Semoga bermanfaat,
Salam Penguin :)