SSH Tunneling adalah teknik yang sangat
cocok dipakai sebagai backdoor dari dunia luar langsung menembus ke dalam
“behind enemy lines” melewati semua firewall, IDS, IPS atau apapun itu di perbatasan.
Dalam artikel ini akan dijelaskan pula tentang port forwarding atau port
mapping dan kaitannya dengan SSH.
Apa itu SSH dan Tunneling?
SSH (Secure Shell) merupakan sebuah protokol
network yang multiguna, selain untuk menggantikan telnet, SSH juga mendukung
fitur tunneling, port forwarding, download/upload file (Secure FTP), SOCKS
proxy, dsb. Semua fitur tersebut dibungkus dengan enkripsi sehingga data yang
lewat melalui protokol ini aman dari jangkauan hacker.
Sedangkan secara sederhana, tunneling
berarti mengirimkan data melalui koneksi lain yang sudah terbentuk. Pada
contohnya, misalkan anda membuka situs internet banking (dimisalkan
ibank.bni.co.id), pasti anda akan membukanya dengan URL berawalan “https”, yang
sejatinya adalah data dalam protokol HTTP yang dikirimkan melalui koneksi
dengan protokol SSL, atau disebut “HTTP over SSL”, atau bisa dikatakan bahwa
HTTP “digendong” oleh SSL.
SSH dan SSL adalah dua contoh tunneling
protocol, keduanya dapat dipakai untuk menggendong data dalam protokol apa saja
(tidak hanya http). Hanya bedanya adalah pada SSL dibutuhkan public key
certificate dalam format X.509 yang perlu diverifikasi melalui Certificate
Authority (CA) resmi. SSH tidak memerlukan public key certificate, sehingga
lebih sederhana dan lebih mudah dipakai.
Protocol Encapsulation
Dalam kasus https, data dalam protokol
HTTP di-enkapsulasi (dibungkus) dalam protokol SSL sebagai payload. Enkapsulasi
juga terjadi dalam layer model TCP/IP, yaitu data pada layer yang lebih atas
menjadi payload dan di-enkapsulasi dengan protokol pada layer di bawahnya.
Sebagai gambaran dari enkapsulasi, kita
dapat melihat konsep yang digunakan pada boneka lucu terbuat dari kayu dari
Rusia bernama Matryoshka. Keunikan boneka ini adalah boneka yang berukuran
kecil bisa dimasukkan ke dalam boneka yang lebih besar, dan boneka yang lebih
besar juga bisa dimasukkan ke dalam boneka yang lebih besar lagi hingga pada
akhirnya hanya ada satu boneka saja yang paling besar. Bila boneka yang paling
besar itu dibuka, maka di dalamnya akan ada satu boneka yang lebih kecil, bila
boneka tersebut dibuka, maka akan ditemukan boneka lagi yang lebih kecil,
demikian seterusnya hingga boneka yang terkecil. Protocol encapsulation dapat
diilustrasikan seperti gambar di bawah ini :
Gambar di atas menggambarkan bagaimana
data dienkapsulasi dan dikirimkan melalui protokol yang berada
pada layer di bawahnya, dan dapat dikatakan bahwa email message tersebut
dikirimkan dalam bentuk paket SMTP over TCP over IP over Ethernet. Jadi pada
akhirnya semua data tersebut akan terkirim dalam bentuk paket ethernet.
Dalam ilustrasi boneka matryoshka, pesan
email adalah boneka matryoshka terkecil. Boneka ini dimasukkan dalam boneka
matryoshka SMTP yang ukurannya lebih besar, kemudian boneka matryoshka SMTP ini
dimasukkan dalam boneka matryoshka TCP, kemudian boneka matryoshka TCP ini
dimasukkan dalam boneka matryoshka IP, dan akhirnya dimasukkan ke dalam boneka
matryoshka ethernet yang berukuran paling besar.
Jadi boneka matryoshka yang diterima oleh
alamat tujuan adalah boneka matryoshka yang terbesar. Bila boneka ini dibuka,
di dalamnya ada boneka matryoshka IP yang lebih kecil, dan bila boneka ini juga
dibuka, di dalamnya ada boneka matryoshka TCP yang semakin kecil ukurannya.
Bila boneka matryoshka TCP ini dibuka, di dalamnya ada boneka matryoshka SMTP
yang didalamnya ada matryoshka email message. Email message adalah boneka
matryoshka terkecil.
Port Forwarding
Port forwarding atau port mapping adalah
pengalihan (redirection) koneksi dari suatu IP:port ke IP:port yang lain.
Ini artinya adalah semua koneksi yang ditujukan ke IP:port asal akan dialihkan
ke IP:port tujuan seolah-olah client sedang menghubungi IP:port tujuan secara
langsung.
Contoh: bila kita definisikan port
forwarding 127.0.0.1:8080 dipetakan ke 192.168.10.10:80, artinya bila browser
di arahkan ke url http://127.0.0.1:8080, maka request HTTP tersebut akan
diteruskan ke 192.168.10.10:80. Jadi walaupun pada localhost (127.0.0.1) port
8080 tidak ada web server, namun web browser bisa membuka web pada url
http://localhost:8080.
Pada port forwarding tersebut,
didefinisikan sehingga klien dari dunia luar bisa mengakses service yang ada
pada jaringan internal. Port forwarding yang didefinisikan adalah:
§ 64.130.31.59:10004 –> 192.168.1.103:22
Artinya untuk SSH ke host 192.168.1.103,
maka client harus ssh ke IP 64.130.31.59 port 10004.
§ 64.130.31.59:10001 –> 192.168.1.100:22
Artinya untuk SSH ke host 192.168.1.100,
maka client harus ssh ke IP 64.130.31.59 port 10001.
§ 64.130.31.59:8080 –> 192.168.1.102:80
Artinya untuk mengakses halaman web di
host 192.168.1.102, maka url yang harus dibuka di browser adalah
http://64.130.31.59:8080
Port forwarding pada ssh, mirip dengan
port forwarding pada gambar di atas, namun ada sedikit perbedaan. Pada port
forward gambar di atas, titik koneksi masuk dan keluarnya sama, artinya koneksi
masuk ke IP dan port tertentu, dan koneksi tersebut akan diforward ke tempat
lain dari titik yang sama juga. Sedangkan port forwarding pada ssh, titik
keluarnya berbeda dengan titik masuknya. Agar lebih jelas, silahkan lihat
gambar di bawah ini.
Pada gambar di atas pada bagian atas,
koneksi yang masuk di titik masuk, diforward ke tujuan dari titik itu juga. Ini
adalah tipikal port forwarding di router/proxy. Sedangkan pada gambar di
bawahnya, koneksi yang masuk di titik masuk, diforward ke tujuan dari titik
lain di ujung sebelah kanan. Kotak panjang yang menghubungkan dua titik
berwarna orange tersebut menggambarkan koneksi ssh. Koneksi yang masuk akan
diforward dari ujung koneksi ssh, bukan dari titik masuknya.
Konsep SSH Tunneling
Dalam ssh tunneling, data yang dikirimkan
melalui koneksi ssh akan di-enkapsulasi (dibungkus) dalam paket SSH seperti
pada perumpamaan boneka matryoshka di bawah ini.
Selain enkapsulasi paket, dalam ssh tunnel
juga dibutuhkan port forwarding. Port forwarding dalam SSH tunnel ada 3 jenis:
§ Local Port Forwarding
§ Remote Port Forwarding
§ Dynamic Port Forwarding
Perhatikan gambar di bawah ini untuk
memahami perbedaan antara local port forwarding dan remote port forwarding.
Dari gambar di atas dapat dijelaskan bahwa
perbedaan antara local dan remote port forwarding adalah sebagai berikut :
- Pada local port forwarding, komputer yang bertindak sebagai ssh client akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh server menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh client akan diforward ke tujuan dari komputer ssh server. Gambar di bawah ini ilustrasi lain dari ssh local port forwarding. Contoh penggunaannya, local port forwarding memungkinkan kita untuk mem-bypass firewall (dalam suatu perusahaan) yang mem-block wikipedia atau situs lainnya.
- Pada remote port forwarding, komputer yang bertindak sebagai ssh server akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh client menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh server akan diforward ke tujuan dari komputer ssh client. Gambar di bawah ini ilustrasi lain dari ssh remote port forwarding. Contoh penggunaannya, remote port forwarding memungkinkan kita untuk melakukan koneksi dari SSH server ke komputer yang ada dalam lingkup intranet (dalam suatu perusahaan).
Jadi yang perlu diingat dalam perbedaan
antara local dan remote port forwarding adalah posisi titik masuk koneksi yang
akan diforward. Bila titik masuknya ada di komputer yang berperan sebagai ssh
client, maka itu adalah local port forwarding, namun bila titik masuknya di
komputer ssh server, maka itu adalah remote port forwarding.
Dalam bahasa sederhananya, disebut local
karena dari sudut pandang ssh client, titik masuknya ada di localhost, dan
disebut remote karena titik masuknya bukan di localhost, tapi di komputer
server.
Static vs Dynamic Port Forwarding
Sebenarnya dynamic port forwarding
termasuk local port forwarding juga karena pada dynamic port forwarding, titik
masuk koneksi yang akan diforward berada di komputer yang berperan sebagai ssh
client. Namun pada local dan remote port forwarding biasa (static), IP address
dan port asal dan tujuan harus disetting dulu sebelum bisa dipakai, jadi
sifatnya statis.
(static) local port forwarding
Gambar di atas adalah (static) local port
forwarding biasa. Pada local port forwarding biasa (static), setiap pemetaan
port asal dan IP:port tujuannya harus disetting satu per satu. Jadi terlihat
pada gambar di atas, bila ada 3 tujuan yang ingin dihubungi, maka 3 pemetaan
port asal dan IP:port tujuan harus disetting semua sebelum bisa dipakai.
Pada gambar di atas terlihat di ssh client
ada 3 port yang LISTEN (3 bulatan merah di sisi ssh client) untuk 3
tujuan yang berbeda. Perlu dicatat juga bahwa ketiga pemetaan port forwarding
tersebut dilakukan dalam satu koneksi ssh yang sama (multiple port forwarding
on single ssh connection).
dynamic (local) port forwarding
Sedangkan pada dynamic (local) port
forwarding, kita tidak perlu menentukan pemetaan port asal dan IP:tujuan untuk
setiap tujuan. Kita hanya perlu menentukan port berapa yang akan LISTEN di
localhost (di komputer ssh client), dan semua aplikasi bisa memanfaatkan port
tersebut sebagai proxy ke tujuan manapun dengan protokol SOCKS (SOCKS proxy).
Berbeda dengan gambar sebelumnya, pada dynamic port forwarding di sisi ssh
client hanya ada satu port yang LISTEN (hanya ada satu bulatan merah).
Multiple Port Forwarding on Single SSH
Connection
Walaupun jarang dipakai, namun sebenarnya
ssh mendukung banyak port forwarding dalam satu koneksi ssh. Kalau kita
membutuhkan 3 local port forwarding dan 4 remote port forwarding, kita tidak
perlu membuat 7 koneksi ssh, cukup satu koneksi ssh saja.
multi port forwarding on a
single ssh connection
Gambar di atas memperlihatkan ilustrasi
multi port forwarding pada satu koneksi ssh yang sama. Dalam satu koneksi ssh
tersebut port forwarding yang dibuat adalah:
§ Panah berwarna hitam paling atas adalah local port
forwarding.
§ Panah berwarna biru dan biru gelap di tengah adalah
dynamic port forwarding.
§ Panah berwarna hijau paling bawah adalah remote port
forwarding.
Daripada membuat 3 koneksi ssh untuk masing-masing
port forwarding, jauh lebih sederhana dan praktis membuat multi port forwarding
pada satu koneksi ssh.










Tidak ada komentar:
Posting Komentar