Perintah-Perintah Iptables Connection Tracking

Dasar-Dasar IPtables

I. Pendahuluan

Firewall adalah sebuah bagian dari sistem komputer atau jaringan yang didesain untuk memblok atau mengijinkan sebuah jaringan lain untuk mengakses jaringan kita. Firewall bisa berbentuk hardware atau software atau pun kombinasi dari keduanya. Firewall digunakan untuk melindungi jaringan kita dari jaringan-jaringan yang berpotensi menimbulkan bahaya ke dalam sistem kita. Seluruh pesan yang masuk atau meninggalkan jaringan kita melalui firewall akan dicek setiap pesan dan memblok setiap pesan yang tidak memenuhi kriteria yang telah kita tetapkan di dalam firewall. Gambar dibawah merupakan ilustrasi tentang bagaimana firewall bekerja. Firewall merupakan perangkat jaringan yang berada di dalam kategori perangkat Layer 3 Network layer dan Layer 4 Transport layer dari protocol 7 OSI layer. Seperti diketahui, layer 3 adalah layer yang mengurus masalah pengalamatan IP, dan layer 4 adalah menangani permasalahan port-port komunikasi TCPUDP. Pada kebanyakan firewall, filtering belum bisa dilakukan pada level data link layer atau layer 2 pada 7 OSI layer. Jadi dengan demikian, sistem pengalamatan MAC dan frame- frame data belum bisa difilter. Maka dari itu, kebanyakan firewall pada umumnya melakukan filtering dan pembatasan berdasarkan pada alamat IP dan nomor port komunikasi yang ingin dituju atau diterimanya. Firewall yang sederhana biasanya tidak memiliki kemampuan melakukan filtering terhadap paket berdasarkan isi dari paket tersebut. Sebagai contoh, firewall tidak memiliki kemampuan melakukan filtering terhadap e-mail bervirus yang kita download atau terhadap halaman web yang tidak pantas untuk dibuka. Yang bisa dilakukan firewall adalah melakukan blokir terhadap alamat IP dari mail server yang mengirimkan virus atau alamat halaman web yang dilarang untuk dibuka. Dengan kata lain, firewall merupakan sistem pertahanan yang paling depan untuk jaringan Anda.

II. Iptables

Di artikel ini akan dijelaskan tentang iptables, sebuah aplikasi firewall terbaik yang biasa digunakan oleh para administrator linux. Iptables merupakan aplikasi yang dibuat oleh proyek the netfilter.org. Sebelum membuat iptables yang berjalan mulai dari linux kernel 2.4.x sampai sekarang, proyek tersebut sudah membuat aplikasi ipchains untuk kernel 2.2.x dan aplikasi ipfwadm untuk kernel 2.0.x. Saat ini, banyak distro-distro besar sudah memaketkan firewall di dalam distro mereka sehingga memudahkan kita untuk menginstal iptables ke dalam sistem kita. Pada tutorial kali ini kita akan menggunakan distro Centos 5.4. Tutorial iptables pada artikel ini hanya menjelaskan tentang dasar-dasar iptables saja dan aplikasi iptables pada jaringan lokal saja.

III. Perintah-Perintah Iptables

Untuk melihat apakah di dalam sistem kita sudah terinstal paket-paket iptables, ketikkan perintah berikut: rpm -qa | grep iptables Jika memang belum terinstal, ketikkan perintah berikut: yum -y install iptables Agar iptables dapat berjalan otomatis setelah restart, gunakan perintah: chkconfig iptables on Untuk melihat status iptables, gunakan perintah: service iptables status Untuk menyalakan iptables, gunakan perintah: etcinit.diptables start Untuk mematikan iptables, gunakan perintah: etcinit.diptables stop Untuk merestart iptables, gunakan perintah: etcinit.diptables restart Sebelum melangkah lebih lanjut, pastikan firewall di sistem kita di enable yaitu dengan cara ketik setup lalu pilih Firewall configuration. Setelah itu, pada bagian Security Level beri tanda bintang pada item Enabledlalu pilih tombol OK.

IV. Sintaks Iptables

Secara umum, sintaks iptables dapat dituliskan seperti berikut: iptables [-t table] command [match] [targetjump] Penjelasan dari sintaks di atas dapat dijelaskan di bawah ini:

1. Table

IPTables memiliki beberapa buah tabel yaitu NAT, MANGLE, dan FILTER. Penjelasannya adalah: a. Table Mangle: tabel yang bertanggung jawab untuk melakukan penghalusan mangle paket seperti merubah quality of service QOS, TTL, dan MARK di header TCP. Biasanya tabel ini jarang digunakan di lingkungan SOHO. b. Table Filter: yaitu tabel yang bertanggung jawab untuk pemfilteran paket. Tabel ini mempunyai 3 rantai chain yaitu: 1. Rantai Forward yaitu rantai yang memfilter paket-paket yang akan ke server yang dilindungi oleh firewall. Rantai ini digunakan ketika paket-paket datang dari IP Publik dan bukan dari IP lokal. 2. Rantai Input: yaitu rantai yang memfilter paket-paket yang ditujukan ke firewall. 3. Rantai Output: yaitu rantai yang memfilter paket-paket yang berasal dari firewall.

c. Tabel NAT: yaitu rantai yang bertanggung jawab untuk melakukan Network Address

Translation NAT. NAT yaitu mengganti field asal atau alamat tujuan dari sebuah paket. Pada tabel ini terdapat 2 rantai, yaitu: 1. Rantai Pre-Routing: Merubah paket-paket NAT dimana alamat tujuan dari paket-paket tersebut terjadi perubahan. Biasanya dikenal dengan destination NAT atau DNAT. 2. Rantai Post-Routing: Merubah paket-paket NAT dimana alamat sumber dari paket-paket tersebut terjadi perubahan. Biasanya dikenal dengan source NAT atau SNAT. Alur kerja IPTables dapat dilihat pada gambar di bawah ini: Jalannya sebuah paket melalui gambar diatas bisa dicontohkan sebagai berikut: 1. Perjalanan Paket yang diforward ke host yang lain a. Paket berada pada jaringan fisik Network dan masuk ke interface jaringan b. Paket masuk ke rantai PREROUTING pada tabel MANGLE dan tabel NAT c. Paket mengalami Routing apakah akan diproses oleh host lokal atau diteruskan ke host lain d. Paket masuk ke rantai FORWARD pada tabel MANGLE dan tabel FILTER e. Paket masuk ke rantai POSTROUTING pada tabel MANGLE dan tabel NAT f. Paket keluar menuju ke interface jaringan g. Paket kembali pada jaringan fisik Network 2. Perjalanan paket yang ditujukan bagi host lokal a. Paket berada pada jaringan fisik Network dan masuk ke interface jaringan b. Paket masuk ke rantai PREROUTING pada tabel MANGLE dan tabel NAT c. Paket mengalami Routing d. Paket masuk ke rantai INPUT pada tabel MANGLE dan tabel FILTER untuk mengalami proses penyaringan e. Paket akan masuk ke proses lokal Local Process 3. Perjalanan paket yang berasal dari host lokal a. Aplikasi lokal menghasilkan paket data yang akan dikirimkan melalui jaringan b. Paket masuk ke rantai OUTPUT pada tabel MANGLE, lalu ke tabel NAT, kemudian ke tabel FILTER c. Paket mengalami Routing d. Paket masuk ke rantai POSTROUTING pada tabel MANGLE dan tabel NAT e. Paket keluar menuju ke interface jaringan f. Paket kembali pada jaringan fisik Network

2. command

command pada baris perintah iptables yang akan memberitahu apa yang harus dilakukan terhadap lanjutan sintaks perintah. Berikut adalah beberapa command pada iptables: command Deskripsi -A – append Menambah aturan pada akhir rantai sehingga akan dieksekusi terakhir -D –delete Menghapus sebuah aturan pada rantai yang dilakukan dengan cara menyebutkan secara lengkap perintah yang ingin dihapus atau dengan menyebutkan nomor baris dimana perintah akan dihapus -I –insert Memasukkan aturan pada sebuah baris rantai. Berbeda dengan perintah append, perintah insert akan menempati baris yang dimaksud dan aturan awal yang menempati baris tersebut akan digeser ke bawah -L –list Menampilkan semua aturan pada sebuah tabel. Perintah ini akan dikombinasikan dengan opsi -v verbose, -n numeric, -x exact, dan –line- number -F –flush Mengosongkan aturan pada sebuah chain -N –new- chain Membuat rantai baru -X –delete- chain Menghapus rantai yang disebutkan -E – rename- chain Merubah suatu nama rantai -P –policy Membuat kebijakan default pada sebuah rantai -p – protocol Mengecek tipe protokol tertentu. Tanda inverse berarti kecuali. Misalnya protocol tcp berarti kecuali tcp -s –source Mencocokkan paket berdasarkan alamat IP asal. Bisa berbentuk alamat tunggal mis:192.168.0.1 atau alamat network mis:192.168.0.0255.255.255.0 atau 192.168.0.024 -d – destination Mencocokkan paket berdasarkan alamat tujuan -i –in- interface Mencocokkan paket berdasarkan interface dimana paket datang dan berlaku pada rantai INPUT, FORWARD, dan PREROUTING -o –out- interface Mencocokkan paket berdasarkan interface dimana paket keluar dan berlaku pada rantai OUTPUT, FORWARD, dan POSTROUTING –sport – source-port Mencocokkan paket berdasarkan port asalbisa dilihat di etcservices. Perintah ini bisa digunakan untuk range port tertentu. Misal range antara port 22 sampai 80 bisa ditulis –sport 22-80. Jika –sport :80 berarti paket dengan port 0- 80. Jika –sport 1024: berarti paket dengan port asal 1024-65535 –dport – destination- port Mencocokkan paket berdasarkan port tujuan. Penggunaannya sama dengan – sport –syn Memeriksa apakah flag SYN di set dan ACK dan FIN tidak di set. Perintah ini sama dengan kita menggunakan match –tcp-flags SYN,ACK,FIN SYN. Paket dengan perintah tersebut digunakan untuk melakukan request koneksi TCP yang baru terhadap server -m mac -mac-source Melakukan pencocokan paket berdasarkan MAC source address -m multiport –source-port Mendefinisikan port atau port range lebih dari satu -j –jump Perlakuan yang diberikan terhadap paket-paket yang memenuhi kriteria. Setelah perintah ini ada beberapa opsi yaitu: ACCEPT: akan mengijinkan paket DROP: akan menolak paket REJECT: akan menolak paket. Berbeda dengan DROP, REJECT akan memberitahukan error kesalahan kepada user pengirim sedangkan DROP tidak memberitahukan error kesalahan. Opsi untuk REJECT adalah icmp-net- unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto- unreachable, icmp-net-prohibited, dan icmp-host-prohibited. Namun untuk menggunakan opsi-opsi tersebut harus diawali dengan –reject-with RETURN: akan membuat paket berhenti melintasi aturan-aturan pada rantai dimana paket tersebut menemui target RETURN MIRROR: fungsi utamanya adalah membalik source address dan destination address. Misalnya PC A menjalankan target RETURN kemudian komputer B melakukan koneksi http ke komputer A, maka yang muncul adalah pada browser adalah website komputer B itu sendiri LOG: digunakan untuk menentukan tingkat log. Tingkatan log yang bisa digunakan adalah debug, info, notice,warning, err, crit, alert dan emerg. perintah -j LOG –log-prefix digunakan untuk memberikan string yang tertulis pada awalan log, sehingga memudahkan pembacaan log tersebut. SNAT Target: Berguna untuk melakukan perubahan alamat asal dari paket Source Network Address Translation. Target ini berlaku untuk tabel NAT pada rantai POSTROUTING, dan hanya disinilah rantai POSTROUTING. Jika paket pertama dari sebuah koneksi mengalami SNAT, maka paket-paket berikutnya dalam koneksi tersebut juga akan mengalami hal yang sama DNAT Target: 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 rantai PREROUTING dan OUTPUT atau rantai buatan yang dipanggil oleh kedua rantai tersebut MASQUARADE Target: Target ini bekerja dengan cara yang hampir sama seperti target SNAT, tetapi target ini tidak memerlukan option –to-source. Target ini memang ini 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. Target ini hanya bekerja untuk tabel NAT pada rantai POSTROUTING REDIRECT Target: 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 rantai PREROUTING dan OUTPUT atau pada rantai buatan yang dipanggil dari kedua rantai tersebut. Memang banyak sekali dan bisa menjadi sangat sangat kompleks teknik konfigurasi iptables. Pada kesempatan ini kita hanya mencoba melakukan konfigurasi firewall iptables yang sederhana saja.

V. Connection Tracking

iptables mengandung sebuah modul yang mengijinkan para administrator untuk memeriksa dan membatasi service-service yang tersedia pada sebuah jaringan internal menggunakan sebuah metode yang disebut connection tracking. Fitur ini merupakan fitur baru di dalam firewall yang ditambahkan sejak kernel 2.4.x. Kemampuan dari connection tracking adalah untuk menyimpan dan menjaga informasi koneksi seperti koneksi baru atau koneksi yang sudah ada yang disertai dengan jenis protokol, alamat IP asal dan alamat IP tujuan. Dengan menggunakan fitur ini, para administrator dapat menolak atau mengijinkan berbagai macam koneksi. Connection tracking mempunyai beberapa keadaan: - NEW – Sebuah klien mereques koneksi melalui firewall. Maksudnya server1 menghubungi server2 dengan mengirimkan paket SYN Synchronize - RELATED – Sebuah koneksi yang mereques sebuah reques baru tetapi masih merupakan bagian dari koneksi yang sudah ada. Maksudnya server2 menerima paket SYN dari server 1 dan kemudian merespon dengan sebuah paket SYN-ACK Synchronize-Acknowledgment - ESTABLISHED – Sebuah koneksi yang merupakan bagian dari koneksi yang sudah ada. Maksudnya server 1 menerima paket SYN-ACK dan kemudian merespon dengan paket ACK Acknowledgment. - INVALID – Sebuah keadaan dimana tidak ada keadaan seperti 3 keadaan di atas Untuk lebih jelasnya perhatikan contoh dibawah ini: Misalnya kita ingin menggunakan service ftp pada IP=132.456.78.9, maka pada saat kita mengetikkan ftp 132.456.78.9 perintah tersebut akan membuka koneksi baru NEW Lalu pada saat kita ingin mengambil sebuah file dari IP tersebut, misalnya paket yang bernama file.tar.gz, maka pada saat kita mengetikkan: ftp get file.tar.gz itu berarti kita telah membuat keadaan koneksi ESTABLISHED. Jika kita menggunakan sebuah koneksi ftp pasif, dimana port koneksi clien adalah 20 tetapi port transfer menggunakan port 1024 atau yang lebih besar, maka pada saat kita mengetikkan ftp pass Passive mode on kita harus menggunakan keadaan koneksi RELATED pada firewall jika kita mengijinkan akses ftp secara pasif. Fungsi lain dari connection tracking yaitu ketika kita sudah mendefinisikan sebuah rule di chain tertentu, maka trafik network yang terkait dengan rule tersebut tidak perlu disebutkan lagi. Misalnya kita ingin menolak ssh dari sebuah IP, maka kita cukup mendefinisikan rule tersebut di chain INPUT saja, yang di outputnya tidak perlu lagi. Caranya adalah: iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT Di bawah ini adalah contoh iptables untuk mengijinkan service ssh dengan IP 132.456.78.9 masuk dan keluar serta hanya mengijinkan koneksi baru dan establlished untuk service ssh tersebut. iptables -A INPUT -p tcp -s 00 --sport 513:65535 -d 64.67.33.76 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -s 132.456.78.9--sport 22 -d 00 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

VI. Contoh-Contoh