Jumat, 04 Januari 2013

IPTables dan Fungsi-fungsi Kodenya


IPTABLES
- Apa itu iptables?
iptables adalah suatu tools dalam sistem operasi linux yang berfungsi sebagai alat untuk melakukan filter (penyaringan) terhadap (trafic) lalulintas data. Secara sederhana digambarkan sebagai pengatur lalulintas data. Dengan iptables inilah kita akan mengatur semua lalulintas dalam komputer kita, baik yang masuk ke komputer, keluar dari komputer, ataupun traffic yang sekedar melewati komputer kita.
- Gimana perintahnya?
iptables [–t tables] [option] [rule] [target]
Contohnya:
iptables –P FORWARD ACCEPT
- Apa saja yang bisa dilakukan dengan iptables?
Dengan kemampuan tools iptables ini, kita bisa melakukan banyak hal dengan iptables. Yang paling penting adalah bahwa dengan iptables ini kita bisa membuat aturan (rule), untuk arus lalulintas data. Aturan aturan itu dapat mencakup banyak hal, seperti besar data yang boleh lewat, jenis paket/datagram yang dapat diterima, mengatur trafic berdasar asal dan tujuan data, forwarding, nat, redirecting, pengelolaan port, dan firewall.
Perlakuan apa saja yang dialami data oleh iptables?
Perlakuan yang dialami oleh data/paket data oleh iptables digambarkan melalui tabel. Macam tabelnya adalah:

A. Table
Fungsi masing-masing tabel pada IPTables:

1. NAT : NAT mentranslasikan (menggantikan) alamat asal atau tujuan dari sebuah paket. Contoh apabila satu buah PC Client yang beralamat IP private memberikan request agar terkoneksi ke internet dari gateway dan di terima oleh PC Router, sedangkan hanya PC Router yang memiliki alamat IP public, maka agar client dapat terkoneksi ke internet, IP private tadi ditranslasikan (digantkan) requestnya oleh PC Router dengan IP public miliknya, kemudian hasil request disambungkan kembali ke PC Client, sehingga PC Client dapat mengakses internet.
2. MANGLE : Melakukan penghalusan (mangle) paket, seperti TTL, TOS dan MARK.
3. FILTER : Menentukan paket yang akan di-DROP, LOG, ACCEPT atau REJECT
Bagaimana kita bisa peroleh informasi tentang iptables tersebut di dalam sistem operasi linux?
Kita bisa peroleh info tentang iptables, dengan cara mengetikkan:
man iptables
atau
iptables –help
Perintah man adalah untuk mendapatkan manual penggunaaan dari iptables ini. Sedangkan help adalah untuk mendapatkan informasi help dari iptables tersebut.

B.COMMAND
Command dan rule yang dipasang pada iptables (firewall) memiliki ketentuan. Pada dasarnya iptables pada komputer dianggap sebagai TABEL IP sesuai dengan namanya. System hanya akan menjalan rule yang ada pada tabel. Sedangkan rule yang sudah ada pada iptables juga dapat di hapus atau di replace dengan rule lain. Berikut beberapa command untuk penambahan, penghapusan dan operasi sejenisnya yang akan diperlakukan terhadap rule.
Command
Keterangan
-A
–append
Perintah ini menambahkan aturan di akhir chain. Aturan ditambahkan di akhir baris chain yang bersangkutan, sehingga dieksekusi terakhir kali
-D         
–delete
Menghapus satu aturan chain. Caranya dengan menyebutkan perintah mana yang ingin dihapus secara lengkap atau menyebutkan nomor baris perintah yang akan dihapus.
-R         
–replace
Menggantikan aturan chain dengan aturan (entry) baru.
-I         
–insert
Memasukkan aturan pada suatu baris di chain. Aturan akan dimasukkan ke baris yang ditulis, dan aturan yang tadinya ada di baris tersebut akan bergeser ke bawah bersama dengan baris-baris selanjutnya
-L         
–list
Menampilkan semua aturan pada tabel. Jika tabel tidak disebutkan, seluruh aturan di semua tabel akan ditampilkan, walaupun tidak ada aturan sama sekali pada tabel. Command ini bisa dikombinasikan dengan option –v (verbose), -n (numeric) dan –x (exact).
-F         
–flush
Perintah ini mengosongkan aturan pada sebuah chain. Apabila chain tidak disebutkan, maka semua chain akan hilang.
-N         
–new-chain
Membuat chain baru.
-X         
–delete-chain
Menghapus chain yang dituliskan. Notabene, tidak boleh ada aturan lain yang bersangkutan dengan chain tersebut.
-P         
–policy
Membuat kebijakan default pada chain. Jika ada paket yang tidak memenuhi aturan pada baris yang diinginkan, paket akan diperlakukan sesuai dengan kebijakan default ini.
-E         
–rename-chain
Mengubah nama chain.
C.OPTION
Option terdiri dari command, dan parameter serta opsi tambahan
Option
Command
Keterangan
-v         
–verbose
–list         
–append
–insert
–delete
–replace
Memberi output secara detail. Jika digunakan dengan –list, akan menampilkan K (x1.000),
M (1.000.000) dan G (1.000.000.000).
-x         
–exact
–list
Memberikan output secara tepat.
-n          
–numeric
–list
Memberikan output berbentuk angka. IP Address dan port ditampilkan dalam bentuk angka, bukan hostname ataupun nama servis/repositori.
–line
-number
–list
Menampilkan nomor dari daftar aturan.
–modprobe
All
Memerintahkan IPTables memanggil modul tertentu. Dapat digunakan bersama semua command.

D. Generic Matches
Generic Matches adalah pendefinisian kriteria secara umum. Jadi sintaks generic matches akan sama untuk semua protokol. Setelah protokol didefinisikan, maka aturan yang lebih spesifik protokol baru didefinisikan. Tiap-tiap protokol berbeda karakter, sehingga perlu perlakuan yang berbeda.
Match
Keterangan
-p         
–protocol
Mengecek tipe protokol tertentu, seperti TCP, UDP, ICMP dan ALL. Tanda inverse juga berlaku di sini, misal kita menghendaki semua protokol kecuali icmp, maka kita cukup tuliskan –protokol ! icmp yang berarti semua kecuali icmp.
-s         
–src
–source
Menyocokkan paket berdasar alamat IP asal tunggal seperti 192.168.2.69, atau alamat network seperti 192.168.2.0/255.255.255.128  dan 192.168.2.0/25. Inversi juga berlaku.
-d         
–dst
–destination
Menyocokkan paket berdasar alamat tujuan. Sama seperti match –src

-i         
–in-interface
Menyocokkan paket berdasar interface source paket dan hanya berlaku pada chain INPUT, FORWARD dan PREROUTING
-o         
–out-interface
Menyocokkan paket berdasar interface destination paket seperti –in-interface dan hanya berlaku untuk chain OUTPUT, FORWARD dan POSTROUTING.

E. Implicit Matches
Implicit Match merupakan sekumpulan rule yang diload setelah tipe protokol disebutkan, yaitu TCP matches, UDP matches dan ICMP matches.
a.       TCP matches
Match
Keterangan
–sport         
–source-port

Menyocokkan paket berdasar port asal. Kita memutuskan port atau service yang di definisikan, atau bahkan range port tertentu. Untuk mendefinisikan range antara port 22 sampai dengan 80, tuliskan –sport 22:80.
Jika bagian kiri kita hilangkan, paket diartikan dari port 0. Jika bagian kanan kita hilangkan, paket diartikan dari port 65535. Inverse juga berlaku.

–dport         
–destination-po rt
Sama dengan match –source-port.
–tcp-flags
Menyocokkan paket berdasar TCP flags yang ada pada paket. Match ini bisa menggunakan inversi.
–syn

Memeriksa apakah flag SYN di-set dan ACK dan FIN tidak di-set. Seperti –tcp-flags, SYN, ACK, FIN SYN, dapat digunakan untuk request koneksi TCP baru ke server

b.      UDP matches
Karena protokol UDP bersifat connectionless, tidak ada flags yang mendeskripsikan status paket untuk membuka atau menutup koneksi. Paket UDP juga tidak memerlukan acknowledgement. Sehingga Implicit Match untuk protokol UDP lebih sedikit daripada TCP.
Ada dua macam match untuk UDP:
–sport atau –source-port
–dport atau –destination-port

c.       ICMP matches
Paket ICMP mengirimkan pesan kesalahan dan kondisi jaringan lain. Hanya ada satu implicit match untuk tipe protokol ICMP, yaitu :
–icmp-type

F. Explicit Matches
a. MAC Address
Melakukan penyocokan paket berdasar MAC source address dan hanya berfungsi untuk jaringan yang menggunakan teknologi ethernet.
iptables –A INPUT –m mac –mac-source 00:00:00:00:00:05

b. Multiport Matches
Mendefinisikan port atau port range lebih dari satu, tspi definisi aturan sama untuk beberapa port. Kita tidak bisa menggunakan port matching standard dan multiport matching dalam waktu yang sama.
iptables –A INPUT –p tcp –m multiport –source-port 22,80, 110,1028

c. Owner Matches
Mencocokkan paket berdasar pemilik paket. Match ini bekerja di chain OUTPUT, tetapi terdapat kekurangan yaitu beberapa proses tidak memiliki owner (??).
iptables –A OUTPUT –m owner –uid-owner 500
Selain itu bisa juga dengan group ID dengan sintaks –gid-owner.

d. State Matches
Mendefinisikan state apa yang cocok. Ke empat state yang ada yaitu NEW, ESTABLISHED, RELATED dan INVALID.
NEW untuk paket yang memulai koneksi baru.
ESTABLISHED untuk koneksi yang sudah tersambung dan paket sudah bagian dari koneki.
RELATED untuk paket yang berhubungan dengan koneksi, tapi bukan bagian dari koneksi. Seperti FTP data transfer yang menyertai koneksi TCP atau UDP.
INVALID adalah paket yang tidak teridentifikasi, bukan bagian dari koneksi.
iptables –A INPUT –m state –state RELATED,ESTABLISHED

Selanjutnya apa itu yang disebut dengan chain?
Chain/rantai digambarkan sebagai jalur aliran data. Chains yang diperlukan untuk iptables ini antara lain:
Chain berikut Keterangan
FORWARD Route packet akan di FORWARD tanpa di proses lanjut di local
INPUT Route packet masuk ke dalam proses lokal sistem
OUTPUT Route packet keluar dari local sistem
PREROUTING Chain yang digunakan untuk keperluan perlakuan sebelum packet masuk route. Biasanya dipakai untuk proses NAT
POSTROUTING Chain yang digunakan untuk keperluan perlakuan sesudah packet masuk route. Biasanya dipakai untuk proses NAT
Chain PREROUTING dan POSTROUTING dimaksudkan sebagai jalur data sebelum dan sesudah data tersebut masuk ke dalam route.
PREROUTING: data sebelum masuk jalur route, akan di kenakan rule
POSTROUTING: data sebelum masuk akan dikenakan route

TARGET/JUMP
Perlakuan terhadap paket yang memenuhi aturan atau match. Chain yang ada akan dimasuki paket dengan kriteria. Contohnya ada chain bernama paket_tcp. Tambahkan aturan, dan direferensi dari chain input.
iptables –A INPUT –p tcp –j paket_tcp
Target
Keterangan
-j ACCEPT
–jump ACCEPT
Memberlakukan paket yang cocok dengan daftar match dan target.
-j DROP
–jump DROP
Membuang paket dan menolak memproses lebih jauh.
-j RETUR
–jump RETURN
Mengembalikan paket ke superset chain di atasnya dan masuk ke baris aturan berikutnya, jika pada subchain. Tapi jika pada chain utama seperti INPUT, maka paket dikembalikan kepada kebijakan default.
-j MIRROR
Membalik source address dan destination address.
Target ini bekerja pada chain INPUT, FORWARD dan PREROUTING atau chain buatan yang melalui chain tersebut.

Beberapa target yang lain biasanya memerlukan parameter tambahan:
a. LOG Target
Tingkatan log yang bisa digunakan dalam option pertama adalah debug, info, notice, warning, err, crit, alert dan emerg. Option kedua adalah -j LOG –log-prefix untuk memberikan string yang tertulis pada awal log, sehingga memudahkan pembacaan log.
iptables –A FORWARD –p tcp –j LOG –log-level debug
iptables –A INPUT –p tcp –j LOG –log-prefix “INPUT Packets”

b. REJECT Target
Memblok paket dan menolak untuk memproses lebih lanjut paket tersebut. REJECT akan mengirimkan pesan error ke pengirim paket, tidak seperti DROP. REJECT bekerja pada chain INPUT, OUTPUT dan FORWARD atau pada chain tambahan dari chain tersebut.
iptables –A FORWARD –p tcp –dport 80 –j REJECT –reject-with icmp-host-unreachable
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.

c. SNAT Target
Berguna untuk melakukan perubahan alamat asal paket (Source Network Address Translation). Target ini hanya berlaku untuk tabel nat pada chain POSTROUTING. Jika paket pertama dari satu koneksi mengalami SNAT, paket-paket berikutnya dalam koneksi juga akan mengalaminya.
iptables –t nat –A POSTROUTING –o eth0 –j SNAT –to-source 192.168.2.69-192.168.2.96:1024-32000

d. DNAT Target
Digunakan untuk melakukan translasi alamat tujuan (Destination Network Address Translation) pada header dari paket yang memenuhi aturan match. DNAT hanya bekerja untuk tabel nat pada chain PREROUTING dan OUTPUT atau chain buatan yang dipanggil oleh chain tersebut.
iptables –t nat –A PREROUTING –p tcp –d 35.35.33.37 –dport 80 –j DNAT –to-destination 192.168.22.22
e. MASQUERADE Target
Hampir sama dengan SNAT, tetapi tidak perlu option –to-source. Target ini hanya bekerja untuk tabel nat pada chain POSTROUTING.
iptables –t nat –A POSTROUTING –o ppp0 –j MASQUERADE

f. REDIRECT Target
Mengalihkan paket ke komputer itu sendiri. Mengarahkan paket yang menuju suatu port tertentu untuk memasuki proxy, berguna untuk membangun transparent proxy. Misal untuk mengalihkan semua koneksi yang menuju port http untuk memasuki aplikasi http proxy seperti squid. Hanya bekerja untuk tabel nat pada chain PREROUTING dan OUTPUT atau pada chain buatan dari chain tersebut.
iptables –t nat –A PREROUTING –i eth1 –p tcp –dport 80 –j REDIRECT –to-port 8080



Contoh beberapa kasus untuk iptables
Misalkan terdapat sebuah jaringan komputer menggunakan koneksi internet dengan IP ADDRESS publik
222.124.132.91 (eth0)
Server gateway memiliki 3 anak jaringan (jaringan lokal) dengan dibedakan subnet
192.168.0.0/24 (eth1)
192.168.1.0/24 (eth2)
192.168.10.0/24 (eth3)
Kondisi dalam jaringan, eth3 tidak diperbolehkan melakukan akses ke internet tetapi diperbolehkan masuk ke jaringan lokal lainnya melalui protokol http. Sedangkan eth1 dan eth2 diperbolehkan melakukan akses ke internet. Pada IP ADDRESS 192.168.1.10 terdapat webserver, dan pada IP Address 192.168.1.12 terdapat koleksi intranet yang akan dipublish ke internet. Disamping itu, koneksi internet 1 mega tersebut akan di share, untuk semua komputer di eth2 akan dibatasi pemakaiannya maksimal 10kbps. Berikut contoh sederhana routin firewallnya
#/bin/bash
#blok semua address (default), pada dasarnya semua akses di blok
iptables –P INPUT –j DROP
#bersihkan table
iptables –F
iptables –t nat –F
iptables –t mangle -F
#perkecualian dengan syarat tertentu
iptables -A INPUT -d 192.168.1.0/24 -m limit –limit 10/s –limit-burst 20 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m limit –limit 10/s –limit-burst 20 -j ACCEPT
iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –j MASQUERADE
iptables –t nat –A POSTROUTING –s 192.168.1.0/24 –j MASQUERADE
#forward webserver dan intranet
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.0.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 88 -j DNAT –to 192.168.0.12:80
#redirect ke squid
iptables –t nat –A PREROUTING –s 192.168.10.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128
iptables –t nat –A PREROUTING –s 192.168.10.1/24 -p tcp –dport 80 -j REDIRECT –to-port 3128

Tidak ada komentar:

Poskan Komentar