Jumat, 30 April 2010

Syntax iptables

Secara umum, sintaks iptables dapat dituliskan seperti berikut:

# iptables [-t table] command [match] [target/jump]

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.

ommand



command pada baris perintah iptables yang akan memberitahu apa yang harus dilakukan terhadap lanjutan sintaks perintah. Berikut adalah beberapa command pada iptables:

























































































commandDeskripsi
-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.0/255.255.255.0 atau 192.168.0.0/24)
-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 asal(bisa dilihat di /etc/services). 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
–synMemeriksa 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-sourceMelakukan pencocokan paket berdasarkan MAC source address
-m multiport –source-portMendefinisikan 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.

Contoh-Contoh




Ada dua pendekatan di dalam Iptables yaitu pendekatan positif dan pendekatan negatif. Pendekatan positif yaitu dimana seluruh port ditutup sedangkan pendekatan negatif yaitu dimana seluruh port dibuka. Untuk melihat apakah sistem iptables kita menggunakan pendekatan positif atau negatif (namun, pada umumnya linux secara default menggunakan pendekatan negatif) ketikkan iptables -L dan lihat kata setelah kata POLICY. Jika ada kata ACCEPT maka berarti pendekatan yang digunakan adalah negatif. Di tutorial ini kita akan menggunakan pendekatan negatif. Berikut adalah contoh-contohnya:

1. Memblok paket yang datang dari sebuah IP


# iptables -I INPUT -s 192.168.0.149 -j REJECT



Peritah di atas digunakan untuk memblok paket dari IP 192.168.0.149. Ada 2 opsi yang digunakan sebenarnya yaitu DROP dan REJECT. Perbedaan dari keduanya adalah kalau REJECT, perintah ini akan memblok paket namun akan memberitahukan bahwa paket tersebut ditolak. Sedangkan kalau DROP, perintah ini akan memblok paket namun tidak diberitahu apakah paket tersebut ditolak atau tidak.

2. Menghapus iptables


#  iptables -D INPUT 3



Menghapus iptables pada tabel input di baris ke 3


# iptables -F



Menghapus seluruh iptables


# iptables -F FORWARD



Menghapus seluruh iptables yang hanya berada di tabel forward

3. Menutup Port


# iptables -A INPUT -p tcp  --dport 22 -j REJECT



Perintah di atas memblok port 22 yang biasa digunakan untuk ssh


# iptables -A INPUT -p tcp -i eth0 --dport 23 -j REJECT

Perintah di atas memblok port 22 yang biasa digunakan untuk telnet

# iptables -I INPUT -s 192.168.0.250 -p tcp --dport 23 -j REJECT

Perintah di atas untuk memblok service telnet dari IP 192.168.0.250

4. Melihat tabel iptables

# iptables -L



Perintah di atas digunakan untuk melihat daftar (list) iptables


#  iptables -L --line-number



Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris


# iptables -L -v --line-number

Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris serta dengan mode verbose

 # iptables -L -v --line-number -t nat



Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris dengan mode verbose serta menampilkan tabel NAT
5. Mengubah Policy

# iptables -P INPUT DROP

Mengubah chain INPUT menjadi DROP

# iptables -P OUTPUT DROP

Mengubah chain OUTPUT menjadi DROP

# iptables -P FORWARD DROP

Mengubah chain FORWARD menjadi DROP
6. Lain-Lain

# iptables -A INPUT -m mac -mac-source 00-14-85-47-85-E5

Memblok komputer yang mempunyai mac address 00-14-85-47-85-E5
# iptables -A INPUT -p tcp -m multiport --source-port 22,53,80

Memblok port-port 22,53, dan 80


7. Menggunakan Log

Untuk menggunakan log di dalam iptables, maka kita harus menambahkan skrip di file file syslog.conf pada folder /etc. Di dalam skrip tersebut, tambahkan skrip sebagai berikut:

kern.*                                                  /var/log/firewall.log

Setelah itu, simpan file tersebut dan restart syslog dengan cara:

# service syslog restart



Dengan demikian, segala hal yang terjadi pada iptables akan dicatat di /var/log/firewall.log

Penentuan posisi log juga berpengaruh terhadap pencatatan log itu sendiri. Sebaiknya posisi log ditempatkan di baris paling atas karena akan mencatat segala yang terjadi pada paket-paket sebelum paket-paket tersebut diperlakukan sesuai dengan rule yang ada di dalam iptables. Untuk lebih jelasnya, perhatikan contoh berikut. Kita akan membuat server linux di vmware dengan 2 ethernet. eth0 dengan IP 192.168.0.248 dan eth1 dengan IP 192.168.2.2. Lalu di iptables kita buat aturan sebagai berikut:
# iptables -P INPUT DROP
# iptables -I INPUT -s 192.168.0.1 -d 192.168.0.248 -j ACCEPT
# iptables -A INPUT -p ALL -m state --state NEW -j LOG --log-prefix "IPTABLES: (INPUT-REJECT)"
# iptables -A INPUT -i eth1 -j REJECT

Perintah pertama dapat dijelaskan bahwa policy default untuk rantai INPUT adalah DROP yang berarti akan memblok seluruh inputan. Perintah iptables kedua akan menerima inputan dari IP 192.168.0.1 dengan tujuan IP 192.168.0.248. Perintah iptables ketiga akan mencatat seluruh inputan yang mencoba masuk ke server selain yang sudah ditentukan.  Perintah iptables keempat akan memblok seluruh inputan yang menuju eth1 atau yang ber- IP 192.168.2.2.  Sekarang coba ping 192.168.0.248 dari komputer yang ber-IP 192.168.0.1,