NAT Server: 5 Masalah yang Sering Terjadi
Sebagai Network Admin atau NOC kampus, apakah Anda pernah mengalami masalah-masalah NAT server seperti ini?
- Server lokal dengan NAT Publik tidak dapat diakses oleh client dari lokal sendiri?
- Aplikasi web tidak bisa menemukan IP Address klien ?
- Log webserver tidak dapat merecod IP pengakses? Malah yang muncul IP Gateway?
- Koneksi host to host dengan Bank tidak kunjung terjadi karena perbedaan IP publik outgoing dan ingoing.
- Anti brute force server justru memblok IP Router?
Tim network eCampuz akan berbagi pengalaman tentang hal itu. Hal tersebut berkaitan dengan set NAT jaringan yang ada di lingkungan Anda.. Mari kita bahas satu persatu.
Apakah NAT itu?
NAT singkatan dari Network Address Translation, yaitu suatu metode yang digunakan untuk menjembatani antara IP LAN dan IP WAN/Publik. Masih ingat kan, IP Local (IPV4) itu terdiri dari IP berapa saja?
- 192.168.x.x
- 172.16.x.x
- 10.x.x.x
Konsep NAT adalah, pada dasarnya IP lokal itu tidak dapat berhubungan dengan IP publik atau WAN, karena mereka ada di alam yang berbeda. Demikian pula sebaliknya. Maka, agar komputer dengan IP lokal dapat mengakses internet, harus ada IP publik yang digunakan sebagai atas nama dia saat berhadapan dengan publik. Demikian juga, seseorang dari internet tidak dapat mengakses server dengan IP lokal kita jika tidak diatasnamakan IP lokal di lingkungan kita. Pengatasnamaan ini biasanya menjadi tugas router atau gateway.
Apakah NAT POSTROUTING itu?
Dalam konsep NAT, terdapat dua metode yang biasa digunakan untuk membedakan kondisi paket keluar dan masuk.
- PREROUTING, adalah paket yang akan masuk dari sisi WAN / Publik ke infrastruktur internal / LAN via router/gateway
- POSTROUTING, adalah paket yang akan keluar dari sisi internal/LAN ke WAN / Publik via router/gateway
Gambar di atas ini menunjukkan topologi sederhana yang disarankan untuk security. Semua server/layanan ini menggunakan IP local, dan hanya dipublikkan oleh router dengan konsep NAT. Agar si server dapat mengakses keluar internet, maka dia akan diberikan rule POSTROUTING oleh router, sehingga dia keluar atas nama router tersebut.
Gambar di atas, menunjukkan dua cara. Yang pertama adalah cara melakukan cek IP Address pada Linux. Yang ternyata adalah IP lokal. Sedangkan perintah kedua adalah cara untuk melihat ip publik yang menjadi atas nama server kita. Ada dua macam NAT yang biasa digunakan pada kondisi POSTROUTING, yaitu : source nat, dan ip masquerading.
Berikut contoh setting SNAT pada Mikrotik
/ip firewall nat add chain=srcnat src-address=172.17.0.0/16 action=src-nat to address=183.33.139.37
Contoh Setting SNAT pada Linux
iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j SNAT --to-source=183.33.139.37
Setting IP masquerading pada mikrotik
/ip firewall nat add chain=srcnat action=masquerade out-interface=public
Setting IP masquerading pada Linux
iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
Cukup dengan memberikan salah satu perintah SNAT atau MASQUERADE, maka server lokal seharusnya sudah dapat mengakses internet. Server 172.17.0.0 tersebut saat mengakses internet akan diatasnamakan 183.33.139.37.
Apakah NAT PREROUTING Itu?
Begitu juga dengan PREROUTING. Seseorang yang berasal dari internet, tidak akan bisa mengakses server yang berada di IP lokal. Cara ini cukup dikenal oleh para network engineer korporasi ataupun instansi-instansi negeri dan swasta. Yaitu cara agar server lokal dapat DIAKSES oleh pengguna dari sisi publik. Maka pengaturannya dilakukan pada kondisi “sebelum masuk router dari sisi publik”. Jadi jelas ya, jika POSTROUTING itu “lokal mengakses WAN/Internet, PREROUTING itu diakses dari WAN/Internet”. Jangan terbalik.
Salah satu rekomendasi keamanan server pada sisi topologi adalah : sebaiknya semua server itu ada di IP lokal. Hanya port tertentu saja yang nanti akan dipublikkan, melalui NAT dari router/gateway. Metode NAT yang digunakan adalah destination NAT, atau DNAT/dst-nat. Pada routerboard Mikrotik, setting DNAT dapat dilakukan seperti berikut:
/ip firewall nat add chain=dstnat dst-address=183.83.139.37 action=dst-nat to-address=172.17.0.5
Atau dalam router Linux
iptables -t nat -I PREROUTING -d 183.83.139.37 -j DNAT --to-destination 172.17.0.5
Dengan demikian, saat IP Address 183.83.139.37 ini diakses, maka akan dilanjutkan ke 172.17.0.5. Baik SNAT maupun DNAT ini dapat melibatkan port tertentu saja yang akan dikenai rule.
Beberapa Masalah NAT Server
Di masa ini, salah satu prosedur keamanan jaringan yang disarankan adalah mengurangi penggunaan server dengan IP publik murni di internet. Dengan demikian, yang digunakan adalah IP Local, yang diberikan NAT publik hanya pada port tertentu, terhadap server local. Dengan demikian, semua protokol local server tidak akan terpublikasi ke luar. Banyak juga Sobat eCampuz yang telah menggunakan model NAT ini untuk infrastruktur sistem akademiknya. Bahkan, layanan-layanan cloud internasional, sebagian besar sudah memainkan NAT server lokal juga, untuk memperkuat sistem keamanan dan penghematan IP nya.
Yang dipublikasikan hanyalah port-port yang memang diijinkan. Dalam beberapa implementasi di kampus-kampus, Tim eCampuz mendapati beberapa hal masalah terkait NAT, yang ternyata memiliki efek terhadap akses aplikasi. Mari kita ulas masalah-masalah NAT server tersebut.
A. Penggunaan MASQUERADE murni
NAT Server, secara ideal, diharapkan IP local server tersebut dipetakan ke publik, baik jalur keluar atau masuknya. Namun, karena kesalahan konfigurasi di router, jalur keluar ke publik, bisa saja berbeda dengan jalur masuknya. Lho kok bisa? Berikut gambarannya:
Urutannya adalah seperti berikut
- User meminta request pada salah satu server dengan IP Publik 11.22.33.44.
- Pada NAT server local, pemilik IP Publik sebenarnya adalah router. Oleh router akan dilihat peta DNAT, maka seluruh tujuan 11.22.33.44 akan dilanjutkan pada tujuan IP 192.168.0.4.
- Server 192.168.0.4 akan memberikan respon pada user, melalui router. Bisa melalui dua hal, tergantung setting pada router (SNAT atau Masquerade)
- Jika router memberikan NAT keluar berupa SNAT, maka respon pada user akan atas nama IP Publik 11.22.33.44, sesuai dengan SNAT nya.
- Jika router memberikan NAT keluar berupa Masquerade, maka respon user akan atas nama IP Publik router. (Termasking)
Poin terakhir ini sering menjadi penyebab banyak masalah. Masalah yang ditimbulkan antara lain :
- IP jalur keluar server berbeda dengan jalur masuk. Masuk atas nama DNAT IP publiknya sendiri, tapi keluar atas nama IP router. Jelas jika untuk berurusan dengan bank yang biasa melibatkan filter IP, akan jadi masalah.
- Akses ke server oleh user, seluruhnya akan atas nama IP router (masked). Hal ini akan berakibat bahwa server tidak dapat mengenali IP pengaksesnya.
- Seluruh catatan IP pengakses pada log webserver, SSH dan seluruh akses lainnya akan atas nama router. Bukan atas nama client. Untuk kegiatan forensik, ataupun penggunaan lanjut ke mesin statistik log seperti awstats, webalizer, akan menjadi tidak valid.
- Bahasa pemrograman, seperti PHP, tidak akan dapat menangkap IP Client dengan cara apapun. Baik mengambil melalui variable REMOTE_ADDR, XFF (HTTP_X_FORWARDED_FOR), ataupun seluruh variable lainnya. Seluruh variable itu hanya akan atas nama IP router.
- Mesin pencegah bruteforce berbasis IP , seperti fail2ban ataupun tool lainnya, akan menganggap semua akses berasal dari tempat yang sama. Maka fail2ban akan berpotensi keliru dalam melakukan blokir filter IP, yaitu IP router. Akibatnya server akan tidak dapat diakses.
Solusi dari kasus-kasus ini adalah penggunaan SNAT / src-nat alih-alih MASQUERADE. Pada mikrotik dapat diselesaikan dengan cara ini
/ip firewall nat add chain=srcnat src-address=192.168.0.4 action=src-nat to-address=11.22.33.44
Sedangkan pada router Linux dapat diselesaikan dengan cara ini :
iptables -t nat -I POSTROUTING -s 192.168.0.4 -j SNAT --to-source 11.22.33.44
B. Tidak menggunakan local DNS
Dalam penggunaan DNAT publik untuk server ber-IP Local, sering terjadi masalah yang berkaitan dengan jalannya request DNS. DNS adalah Domain Name Service, yang sesungguhnya terletak di internet (publik). Tugasnya menterjemahkan nama panggil (domain), menjadi IP Address yang dikenal oleh komputer. Namun kejadian yang sering terjadi adalah seperti pada gambar di bawah ini.
Sebuah topologi, di mana server terletak pada IP local, sama-sama di bawah NAT Router publik. Komputer local yang ada di sampingnya tidak akan dapat mengakses domain server di sebelah. Mengapa? Berikut urutannya :
- Kondisi : Domain abcde.com dipointing di DNS global atas nama 11.22.33.44. Semua komputer di seluruh dunia, termasuk client di blok 10.254.254.0/24 mengetahui hal itu.
- Kondisi : Semua request di router, atas IP 11.22.33.44 akan dilanjutkan requestnya pada server 172.16.72.3. Jadi pemilik domain abcde.com akan dimintakan ke sana.
- Kejadian : salah satu komputer 10.254.254.0/24 merequest domain abcde.com. Router akan menganggap itu adalah request terhadap DNAT ke server 172.16.72.3. Dilanjutkan ke sana.
- Kejadian : server 172.16.72.3 mendapat request oleh router, namun router mengatasnamakan 10.254.254.0/24.
- Kejadian : server 172.16.72.3 mengembalikan respon paket ke 10.254.254.0/24.
- Kejadian : PC di 10.254.254.0/24 merasa tidak mengirim paket ke 10.254.254.0/24. Tapi ke router pusat. Sehingga paket data balik dari server local, tidak diterima.
Solusinya?
- Penggunaan server DNS lokal untuk keperluan direct name resolve. Dijamin paket tidak memutar ke publik lebih dulu. DNS server lokal dapat dibuat menggunakan banyak cara. Antara lain : BIND (Linux), Unbound, dan tool-tool lainnya.
- Penggunaan Hairpin NAT. Apakah lagi itu? Tim teknis eCampuz tentu akan membahasnya kapan-kapan, tentu masih dalam lingkun tentang NAT server. Baca juga: Dropbox API dan Alternatif Backup Data Server