Blokir Website dengan iptables

Ceritanya saya sedang browsing sana sini pake tablet pc. Tiba2.. si halaman web yang mestinya tampil biasa saja kalo dibuka lewat komputer biasa, skr berubah jadi ala majalah. Selidik sana selidik sini, itu ternyata gara2 si onswipe dot com.

Si tablet mestinya cukup mampu tuk menampilkan halaman web tsb apa adanya berhubung layarnya cukup luas. Tapi entah mengapa si pemilik website bekerja sama dg layanan tersebut yang malah membuat membaca menjadi tidak nyaman.

Akhirnya saya putuskan saja tuk menutup akses ke si layanan langsung di router berhubung si tablet pc gak bisa dioprek2 tuk beginian. Router yang saya pakai memakai dd-wrt yang memiliki fasilitas untuk menutup akses ke website yang kita atur. Cara mengaturnya terlihat mudah tapi entah mengapa ngga berhasil saya pakai. Kalau saya lihat, tabel iptables tidak berubah sama sekali.

Setelah mencari kesana kemari, akhirnya saya temukan juga cara memasukan isian iptables secara manual tuk kepentingan memblokir akses. Berikut inilah perintahnya..

# iptables -A FORWARD  -p tcp -m tcp -m webstr --host "onswipe.com<&nbsp;>" -j REJECT --reject-with tcp-reset

boom! akses ke layanan mengesalkan itu pun terblokir.

Port forwarding dg NAT

Ceritanya saya punya mesin, katakanlah bernama C, yang cuma bisa diakses dari dalam jaringan lokal. Saya juga punya mesin bernama M yang bisa diakses dari jaringan lokal DAN juga dari internet. Nah, berhubung si C bisa diakses oleh M, tentu saja saya bisa mengakses C dari internet dg menghubungi M terlebih dahulu.

Cara yang biasa saya lakukan adalah dg membuat koneksi ke M melalui SSH. Setelah di dalam M, saya buka lagi koneksi ke C, lagi-lagi melalui SSH. Intinya saya harus menyiapkan koneksi ke M via SSH terlebih dahulu sebelum saya bisa menghubungi si C. Caranya sendiri pernah saya tuliskan sebelumnya: port forwarding dengan SSH atau dengan membuat socks proxy.

Lama-lama saya malas juga membuat koneksi SSH ke M setiap saya ingin menghubungi C. Mengingat saya memiliki akses administrator di mesin M, akhirnya saya mencoba cara lain, yaitu port forwarding dg NAT alias Network Address Translation. Cara kerja NAT akan saya bahas di lain waktu (kalau ingat, kalau lagi gak malas, kalau mau :P) jadi skr lgs ke inti solusinya saja.

Pertama-tama, aktifkan dulu IP forwarding. (oh iya.. perintah2 ini dikerjakan di mesin M)

# echo 1 > /proc/sys/net/ipv4/ip_forward

Pastikan perintah di atas dijalankan oleh root.. atau versi dengan sudo nya adalah seperti berikut.

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Kalau IP forwarding sudah diatur, mari kita buat NAT, atau lebih tepatnya DNAT alias Destination NAT berhubung yang akan dibelokkan itu adalah alamat tujuan koneksi.

$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --source 1.2.3.4 --dport 12345 -j DNAT --to 10.20.30.40:22

Saya ingin membuat NAT yg terbatas dari segi alamat sumber. Dalam contoh di atas, hanya koneksi dari alamat 1.2.3.4 yang akan dialihkan. Selain dari itu, koneksi akan berhenti sampai di sini saja. Selain itu hanya koneksi yg nyampe di eth0 dg protokol tcp di port 12345 yang akan dilayani.

Jika ada koneksi yg sesuai, koneksi ini lalu akan dibelokkan ke mesin dg IP 10.20.30.40, yaitu mesin C, pada port 22.

Singkatnya, jika ada mesin dg IP 1.2.3.4 membuat koneksi ke eth0 di mesin M dg protokol tcp dg 12345, maka koneksi akan dibelokkan ke mesin dg IP 10.20.30.40 pada port 22.

Nah kalau sudah begini, saya dari rumah (yg pake IP 1.2.3.4) bisa membuat koneksi ke mesin C melalui si M tanpa harus membuat koneksi SSH dulu ke M.

rumah$ ssh M -p 12345

Perintah SSH di atas akan langsung terhubung dg mesin C walau koneksi ditujukan ke M karena si M akan membelokkan koneksi ke C.

Selain tuk mengakses C dg SSH langsung dari komputer rumah, yg seperti ini saya pakai juga tuk keperluan lain.. misalnya..

Di mesin M ini saya juga punya sebuah instance virtual machine (VM) dengan VirtualBox. Saya mengaktifkan layanan virtual desktop (dengan RDP) di VirtualBox ini berhubung mesin M ini ada entah-di-mana sehingga saya tidak punya akses fisik langsung. Antara VM dengan host-nya (si M) sudah terjalin hubungan baik melalui jaringan host-only di VirtualBox. Kalau saya ingin mengakses si VM maka, seperti tadi, saya harus mengakses M terlebih dahulu. Dengan melakukan port forwarding, saya bisa mengakses si VM dari C scr langsung.