Kali ini, saya akan menjelaskan materi yang didapat saat menjalani praktikum mata kuliah Jaringan Komputer modul 5 sebagai modul terakhir yang --boleh dibilang-- launchingnya di saat waktu yang kurang tepat. Modul tersebut membahas tentang
firewall, yang mana salah satu aplikasinya di dalam sistem operasi Linux adalah IPTABLES.
IPTABLES adalah suatu
tools dalam sistem operasi Linux yang berfungsi sebagai alat untuk melakukan filter (penyaringan) terhadap
traffic/lalu lintas data. Secara sederhana, IPTABLES digambarkan sebagai pengatur lalu lintas data. Dengan IPTABLES ini, semua lalu lintas diatur dalam komputer, baik yang masuk ke komputer, keluar dari komputer, ataupun yang sekedar melewati komputer.
Flowchart Jalannya Paket Data dari Suatu Komputer melalui Firewall
Aturan penulisan dalam IPTABLES adalah sebagai berikut.
iptables -t [table] command [chain] parameter [other_options] [match] target/jump
Contohnya adalah sebagai berikut.
iptables -t filter -A INPUT -s 192.168.1.1 -j DROP
IPTABLES memiliki 3 tabel, yaitu:
- NAT -> Secara umum digunakan untuk melakukan Network Address Translation (NAT), yaitu penggantian field alamat asal atau alamat tujuan dari sebuah paket.
- MANGLE -> Digunakan untuk melakukan penghalusan (mangle) paket, seperti TTL, TOS, dan MARK.
- FILTER -> Secara umum, inilah pemfilteran paket yang sesungguhnya.. Di sini bisa ditentukan apakah paket akan di-DROP, LOG, ACCEPT, atau REJECT.
Struktur IPTABLES
Tiga jenis Chain pada tabel Filter ialah:
- Forward chain: filter paket menuju server yang dilindungi oleh firewall.
- Input chain: filter paket yang menuju ke firewall.
- Output chain: filter paket yang keluar dari firewall.
Ada tiga jenis NAT, yaitu:
- Static NAT
Static Network Address Translation (NAT) menerjemahkan sejumlah IP address tidak terdaftar menjadi sejumlah IP address yang terdaftar sehingga setiap client dipetakkan kepada IP address terdaftar yang dengan jumlah yang sama.
Jenis NAT ini merupakan pemborosan IP address terdaftar karena setiap IP address yang tidak terdaftar (unregistered IP) dipetakan kepada satu IP address terdaftar. Static NAT ini juga tidak seaman jenis NAT lainnya, karena setiap komputer secara permanen diasosiasikan kepada address terdaftar tertentu, sehingga memberikan kesempatan kepada para penyusup dari Internet untuk menuju langsung kepada komputer tertentu pada jaringan private Anda menggunakan address terdaftar tersebut.
Static NAT
- Dynamic NAT
Dynamic Network Address Translation dimaksudkan untuk suatu keadaan di mana anda mempunyai IP address terdaftar yang lebih sedikit dari jumlah IP address unregistered. Dynamic NAT menerjemahkan setiap komputer dengan IP tak terdaftar kepada salah satu IP address terdaftar untuk terhubung ke internet. Hal ini agak menyulitkan para penyusup untuk menembus komputer di dalam jaringan anda karena IP address terdaftar yang diasosiasikan ke komputer selalu berubah secara dinamis, tidak seperti pada NAT statis yang dipetakan sama. Kekurangan utama dari dynamic NAT ini adalah bahwa jika jumlah IP address terdaftar sudah terpakai semuanya, maka untuk komputer yang berusaha terhubung ke Internet tidak lagi bisa karena IP address terdaftar sudah terpakai semuanya.
Dynamic NAT
- Masquerading NAT
Masquerading NAT ini menerjemahkan semua IP address tak terdaftar pada jaringan anda dipetakan kepada satu IP address terdaftar. Agar banyak client bisa mengakses Internet secara bersamaan, router NAT menggunakan nomor port untuk bisa membedakan antara paket-2 yang dihasilkan oleh atau ditujukan komputer-komputer yang berbeda. Solusi Masquerading ini memberikan keamanan paling bagus dari jenis-jenis NAT lainnya karena asosiasi antara client dengan IP address tak terdaftar dengan kombinasi IP address terdaftar dan nomor port di dalam router NAT hanya berlangsung saat terjadi satu kesempatan koneksi saja, setelah itu dilepas.
Masquerading NAT
Mangle table berfungsi untuk melakukan modifikasi paket-paket data, namun fungsinya lebih kepada penandaan (
marking) terhadap paket tersebut. Modifikasi tersebut terjadi pada level
field-field tambahan dari protokol IP. Mangle table bisa digunakan untuk memberikan tanda pada sebuah paket, dan selanjutnya untuk diolah atau ditransmisikan pada kondisi tertentu.
Chain prerouting dan
chain postrouting merupakan dua jenis chain bawaan dari tabel NAT. Tujuan penggunaannya:
- Chain Prerouting: untuk melakukan NAT terhadap paket data yang memasuki firewall. Kebanyakan digunakan untuk transparency proxy server dan membangun beberapa server dengan satu IP publik.
- Chain Postrouting: untuk melakukan NAT terhadap paket data yang keluar dari firewall. Kebanyakan digunakan untuk translasi alamat IP.
Tabel penjelasan
special property pada bagian Target dalam penulisan IPTABLES.
| Target | Keterangan |
ACCEPT Target
-j ACCEPT
--jump ACCEPT | Ketika paket cocok dengan daftar match dan target ini diberlakukan, maka paket tidak akan melalui baris-baris aturan yang lain dalam chain tersebut atau chain yang lain yang mereferensi chain tersebut. Akan tetapi paket masih akan memasuki chain-chain pada tabel yang lain seperti biasa. |
DROP Target
-j DROP
--jump DROP | Target ini men-drop paket dan menolak untuk memproses lebih jauh. Dalam beberapa kasus mungkin hal ini kurang baik karena akan meninggalkan dead socket antara client dan server.
Paket yang menerima target DROP benar-benar mati dan target tidak akan mengirim informasi tambahan dalam bentuk apapun kepada client atau server. |
RETURN Target
-j RETURN
--jump RETURN | Target ini akan membuat paket berhenti melintasi aturan-aturan pada chain dimana paket tersebut menemui target RETURN. Jika chain merupakan subchain dari chain yang lain, maka paket akan kembali ke superset chain di atasnya dan masuk ke baris aturan berikutnya. Apabila chain adalah chain utama misalnya INPUT, maka paket akan dikembalikan kepada kebijakan default dari chain tersebut. |
MIRROR Target
-j MIRROR | Apabila komputer A menjalankan target seperti contoh di atas, kemudian komputer B melakukan koneksi http ke komputer A, maka yang akan muncul pada browser adalah website komputer B itu sendiri. Karena fungsi utama target ini adalah membalik source address dan destination address.
Target ini bekerja pada chain INPUT, FORWARD, dan PREROUTING atau chain buatan yang dipanggil melalui chain tersebut. |
LOG Target
–j LOG | Ada beberapa opsi yang bisa digunakan bersamaan dengan target ini. Yang pertama adalah yang digunakan untuk menentukan tingkat log. Tingkatan log yang bisa digunakan adalah debug, info, notice, warning, err, crit, alert dan emerg. Yang kedua adalah -j LOG --log-prefix yang digunakan untuk memberikan string yang tertulis pada awalan log, sehingga memudahkan pembacaan log tersebut. Contoh sintaksnya adalah sebagai berikut.
iptables –A FORWARD –p tcp –j LOG --log-level debug
iptables –A INPUT –p tcp –j LOG --log-prefix "INPUT Packets" |
REJECT Target
–j REJECT | Secara umum, REJECT bekerja seperti DROP, yaitu memblok paket dan menolak untuk memproses lebih lanjut paket tersebut. Tetapi, REJECT akan mengirimkan error message ke host pengirim paket tersebut. REJECT bekerja pada chain INPUT, OUTPUT dan FORWARD atau pada chain tambahan yang dipanggil dari ketiga chain tersebut. Contoh sintaksnya adalah sebagai berikut.
iptables –A FORWARD –p tcp –dport 22 –j REJECT --reject-with icmp-host-unreachable
Ada beberapa tipe pesan yang bisa dikirimkan, yaitu icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited dan icmp-host-prohibited. |
SNAT Target
-j SNAT | Target ini berguna untuk melakukan perubahan alamat asal dari paket (Source Network Address Translation). Target ini berlaku untuk tabel nat pada chain POSTROUTING, dan hanya di sinilah SNAT bisa dilakukan. Jika paket pertama dari sebuah koneksi mengalami SNAT, maka paket-paket berikutnya dalam koneksi tersebut juga akan mengalami hal yang sama. Contoh sintaksnya adalah sebagai berikut.
iptables –t nat –A POSTROUTING –o eth0 –j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 |
DNAT Target
-j DNAT | Berkebalikan dengan SNAT, DNAT digunakan untuk melakukan translasi field alamat tujuan (Destination Network Address Translation) pada header dari paket-paket yang memenuhi kriteria match. DNAT hanya bekerja untuk tabel nat pada chain PREROUTING dan OUTPUT atau chain buatan yang dipanggil oleh kedua chain tersebut. Contoh sintaksnya adalah sebagai berikut.
iptables –t nat –A PREROUTING –p tcp –d 15.45.23.67 --dport 80 –j DNAT --to-destination 192.168.0.2 |
MASQUERADE Target
-j MASQUERADE | Secara umum, target MASQUERADE bekerja dengan cara yang hampir sama seperti target SNAT, tetapi target ini tidak memerlukan option --to-source. MASQUERADE memang didesain untuk bekerja pada komputer dengan koneksi yang tidak tetap seperti dial-up atau DHCP yang akan memberi pada kita nomor IP yang berubah-ubah.
Seperti halnya pada SNAT, target ini hanya bekerja untuk tabel nat pada chain POSTROUTING.
Contoh sintaksnya adalah sebagai berikut.
iptables –t nat –A POSTROUTING –o ppp0 –j MASQUERADE |
REDIRECT Target
–j REDIRECT | Target REDIRECT digunakan untuk mengalihkan jurusan (redirect) paket ke mesin itu sendiri. Target ini umumnya digunakan untuk mengarahkan paket yang menuju suatu port tertentu untuk memasuki suatu aplikasi proxy, lebih jauh lagi hal ini sangat berguna untuk membangun sebuah sistem jaringan yang menggunakan transparent proxy. Contohnya kita ingin mengalihkan semua koneksi yang menuju port http untuk memasuki aplikasi http proxy misalnya squid. Target ini hanya bekerja untuk tabel nat pada chain PREROUTING dan OUTPUT atau pada chain buatan yang dipanggil dari kedua chain tersebut. Contoh sintaksnya adalah sebagai berikut.
iptables –t nat –A PREROUTING –i eth1 –p tcp --dport 80 –j REDIRECT --to-port 3128 |
Beda antara target
DROP dan target
REJECT adalah sebagai berikut.
Target
DROP (-j DROP atau --jump DROP) gunanya ialah untuk men-drop paket dan menolak untuk memproses lebih jauh. Dalam beberapa kasus, mungkin hal ini kurang baik karena akan meninggalkan dead socket antara client dan server. Paket yang menerima target DROP benar-benar mati dan target tidak akan mengirim informasi tambahan dalam bentuk apapun kepada client atau server.
Sedangkan untuk target REJECT (-j REJECT atau --jump REJECT), Secara umum, REJECT bekerja seperti DROP, yaitu memblok paket dan menolak untuk diproses lebih lanjut paket tersebut. Tetapi bedanya, REJECT akan mengirimkan error message ke host pengirim paket tersebut. REJECT bekerja pada chain INPUT, OUTPUT, dan FORWARD atau pada chain tambahan yang dipanggil dari ketiga chain tersebut.
Contoh sintaksnya adalah sebagai berikut.
iptables –A FORWARD –p tcp –dport 22 –j REJECT --reject-with icmp-host-unreachable
Ada beberapa tipe pesan yang bisa dikirimkan, yaitu icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unrachable, icmp-net-prohibited, dan icmp-host-prohibited.
Misalkan ada sintaks IPTABLES sebagai berikut.
iptables –A FORWARD –s 0/0 –i eth0 –d 192.168.1.58 –o eth1 –p TCP --sport 1024:65535 –m multiport --dports 80,443 –j ACCEPT
Penjelasan mengenai sintaks tersebut di atas adalah sebagai berikut:
- -A FORWARD : menambahkan rule ke chain FORWARD dalam tabel 'filter'.
- -s 0/0 : source address-nya adalah semua IP address
- -i eth0 : input interface = eth0
- -d 192.168.1.58 : destination address-nya adalah 192.168.1.58
- -p TCP : memakai protokol TCP
- --sport 1024:65535 : source port-nya adalah 1024 sampai dengan 65535
- -m multiport : untuk tujuan port dan juga hanya dapat digunakan bersama dengan -p tcp atau -p udp.
- --dports 80,443 : destination port-nya 80 (http) dan 443 (https)
- -j ACCEPT : menerima paket yang cocok dengan rule ini
Mengenai implementasi IPTABLES dalam banyak kasus akan saya bahas di postingan berikutnya.