Sunday, June 10, 2018

Cara Setting Reverse SSH Tunnel pada Linux

Assalamu'alaikum Wr. Wb.

Tutorial ini dibuat hanya untuk sharing pengalaman saja. Kejadiannya ketika saya pertama kali masuk ke Startup Company di daerah Depok City. Ketika itu dapat tugas untuk membuat webservice (inter-koneksi antara android dan database) menggunakan codeigniter & mysql/mariadb.

Issue-nya : Harus bisa membuat koneksi yg aman menggunakan ssh, antara webservice dan server database menggunakan linux.

Solusi yg saya tawarkan salah satunya adalah :
1. Buat koneksi ssh sebelum menjalankan query ke database melalui php extension yaitu php_ssh2 library.
2. Buat koneksi ssh dari webservice ke server database menggunakan autossh.
3. Buat koneksi reverse ssh dari server database ke webservice menggunakan autossh.
4. Buat database replication slave pada webservice, tapi tetap menggunakan jalur ssh.

Masalah lain yaitu ketika server webservice masih menggunakan shared hosting, yang mana akses untuk solusi no 1 & 2 terbatas, tetapi tidak menghalangi saya untuk mencari jalan keluarnya. Karena solusi no.4 adalah solusi terakhir saya, jadi saya tidak akan fokus kesana.

Yang mau saya bahas adalah solusi no.3 yaitu membuat koneksi ssh reverse dari server database ke server webservice menggunakan autossh.

Linux :
$ cat /proc/version
Linux version 3.10.0-327.28.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Wed Aug 3 11:11:39 UTC 2016

Langkah ini dilakukan pada server database :
-  Install autossh pada Linux Box. Kebetulan saya pakenya CentOS/Redhat.
# rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/a/autossh-1.4c-2.el6.x86_64.rpm

-  Buat user untuk autossh.
# useradd -m -s /sbin/nologin autossh

-  Buat SSH Key untuk user autossh.
# su - autossh -s /bin/bash
# ssh-keygen -t rsa

note: passwordnya dikosongin aja biar bisa autologin dengan autossh nantinya.

-  Copykan ssh key-nya ke server webservice
# ssh-copy-id user@server-webservice.com

note: user isikan user yg didapat dari shared hosting berikut passwordnya nanti.

-  Testing
# su - autossh -s /bin/bash
$ autossh -M 0 -N -R 3333:localhost:3306 user@server-webservice.com -i /home/autossh/.ssh/id_rsa

note: sekarang harusnya kita bisa melakukan koneksi ke database mysql pada server webservice. Dengan koneksi host: localhost & port: 3333

-  Selanjutnya kita akan seting auto run pada saat booting (server database).
# cat > /etc/systemd/system/autossh-webservice.service << EOF
[Unit]
Description=Keep a reverse tunnel to 'webservice server' open
After=network.target

[Service]
User=autossh
ExecStart=/usr/bin/autossh -M 20000 -N -R 3333:127.0.0.1:3306 user@server-webservice -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -i /home/autossh/.ssh/id_rsa

[Install]
WantedBy=multi-user.target
EOF

-  Jalankan service-nya
# systemctl daemon-reload
# systemctl start autossh-webservice.service

-  Aktifkan auto run nya
# systemctl enable autossh-webservice.service

Perluasan penggunaan SSH Tunnel :
Bisa digunakan untuk jalur vpn, remote akses (seperti teamviewer & radmin, dll)

Pernyataan :
Saya sama sekali tidak mendukung menggunakan ini untuk apa pun tindakan kejahatan, seperti mendapatkan akses VPN atau menerobos firewall perusahaan dan lain sebagainya. Tutorial ini hanyalah panduan bagaimana menggunakan secure, reverse tunneling dimana konektivitas biasanya tidak dimungkinkan.

Wassalam.

No comments:

Post a Comment