Live Journal

All About Log

Penyaringan Paket menggunakan IPTABLES

Penyaringan Paket menggunakan IPTABLES

harijanto@uptkom.cic.ac.id

Salah satu teknik firewalling adalah menggunakan packets filtering (penyaringan paket) TCP/IP, pada Linux Mandrake 8.1 yang menggunakan kernel 2.4 hal ini dapat dilakukan oleh iptables. Sebelumnya pada kernel 2.0 dan 2.2 digunakan ipchains. Pada dasarnya antara iptables dan ipchains hampir sama, bedanya pada iptables pembuatan rule atau aturan dapat lebih sederhana dibandingkan dengan ipchains.

Bagaimana sebuah paket TCP/IP melalui penyaringan-penyaringan yang ada akan penulis coba uraikan berdasarkan dokumen yang didapat dari: http://netfilter.samba.org/unreliable-guides/packet-filtering/packet-filtering-HOWTO.linuxdoc-6.htm

Kernel 2.4 dan iptables menggunakan tiga macam daftar aturan dalam tabel penyaringan, daftar aturan tersebut dinamakan rantai firewall (firewall chains) atau hanya rantai (chains) saja. Ketiga rantai tersebut dinamakan INPUT, OUTPUT dan FORWARD.

Adapun diagramnya adalah:

Pada diagram diatas ketiga lingkaran menggambarkan ketiga rantai (chains). Pada saat sebuah paket sampai pada sebuah lingkaran atau rantai pada diagram, maka rantai tersebut akan mempelajarinya untuk memutuskan nasib paket tersebut. Jika rantai memutuskan untuk “DROP” paket, maka paket tersebut dibuang pada saat itu, tetapi jika rantai memutuskan “ACCEPT” paket, maka paket akan dilewatkan melaui diagram tersebut.

Sebuah rantai adalah aturan-aturan yang telah ditentukan. Setiap aturan menyatakan ‘jika paket memiliki informasi awal (header) seperti ini, maka inilah yang harus dilakukan pada paket’. Jika aturan tersebut tidak sesuai dengan paket, maka aturan berikutnya pada rantai akan memprosesnya. Akhirnya jika tidak ada aturan lainnya lagi maka kernel akan melihat pada chain policy (kebijakan rantai) untuk memutuskan apa yang harus dilakukan. Dalam sebuah sistem yang mengutamakan keamanan, kebijakan biasanya akan memberitahukan pada kernel untuk “DROP” paket.

1. Pada saat sebuah paket datang (misalnya, melalui kartu ethernet) kernel pertama kali akan melihat kemana tujuan dari paket tersebut: hal ini dinamakan “routing”.

2. Jika paket tersebut di tujukan untuk komputer ini, maka paket akan dilewatkan ke bagian bawah diagram atau dengan kata lain ke rantai “INPUT”. Jika paket tersebut berhasil melewati rantai “INPUT”, semua proses yang menunggu paket tersebut akan menerimanya.

3. Sebaliknya, jika kernel tidak diset untuk meneruskan paket (not have forwarding enabled), atau tidak tahu bagaimana meneruskan paket, paket tersebut akan di buang (dropped). Jika kernel dapat meneruskan paket (forwarding is enabled), dan paket ditujukan untuk interface jaringan lainnya (jika Anda memiliki lebih dari satu kartu jaringan), maka paket akan di kirim kekanan diagram atau dengan kata lain ke rantai “FORWARD”. Jika paket tersebut diterima (ACCEPTed), maka paket tersebut akan dikirim keluar.

4. Akhirnya, sebuah program yang berjalan pada sebuah komputer (proses lokal) dapat mengirim paket-paket jaringan. Paket-paket tersebut akan melewati rantai “OUTPUT” dengan segera: Jika rantai “OUTPUT” memutuskan “ACCEPT”, maka paket akan dikirim keluar ke interface mana saja yang dituju.

Menginstall iptables pada Linux Mandrake 8.1

Jika paket iptables pada Linux Mandrake 8.1 belum di install maka untuk menginstallnya lakukan:

#rpm –ivh iptables–1.2.2-8mdk.i586.rpm

menggunakan iptables

iptables memiliki sebuah halaman manual yang cukup detail, untuk membacanya dapat diketik:

#man iptables

Ada beberapa hal berbeda yang dapat Anda lakukan dengan iptables, Anda dapat memulai dengan tiga rantai built-in: INPUT, OUTPUT, dan Forward yang tidak dapat Anda hapus. Beberapa cara untuk mengatur keseluruh rantai adalah:

1. Membuat sebuah rantai baru (-N)

2. Menghapus sebuah rantai kosong (-X)

3. Merubah kebijakan (policy) untuk rantai built-in (-P)

4. Melihat daftar aturan (rules) dalam sebuah rantai (-L)

5. Membersihkan aturan diluar sebuah rantai (-F)

6. Menjadikan “nol” penghitungan paket dan byte pada semua aturan dalam sebuah rantai (-Z)

Dan terdapat beberapa cara untuk memanipulasi aturan dalam sebuah rantai.

1. Menambahkan sebah aturan ke sebuah rantai (-A)

2. Menyisipkan sebuah aturan pada posisi tertentu dalam sebuah rantai (-I)

3. Menggantikan sebuah aturan pada posisi tertentu dalam sebuah rantai (-R)

4. Menghapus sebuah aturan pada posisi tertentu dalam sebuah rantai (-D)

5. Menghapus aturan pertama yang sesuai dalam sebuah rantai (-D)

Contoh penggunaan iptables

Jika iptables telah terinstall pada komputer Anda, coba ketik:

#iptables –L

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Hasilnya adalah rantai built-in yang belum memiliki aturan-aturan dan pada semua rantai menggunakan kebijakan (policy) ACCEPT.

Sebagai contoh jika Anda ingin membuang semua paket ICMP yang datang dari alamat IP 127.0.0.1. Dalam kasus ini kondisinya adalah protokol harus ICMP dan alamat sumber harus 127.0.0.1. Tujuannya adalah membuang paket “DROP”.

127.0.0.1 adalah interface ‘loopback’, yang bisa Anda gunakan walaupun Anda tidak memiliki koneksi jaringan yang sesungguhnya. Anda dapat menggunakan program ‘ping’ untuk membuat paket-paket (hal ini berarti secara sederhana mengirim sebuah paket ICMP tipe 8 (echo request) yang mana semua host dapat merespon dengan sebuah paket ICMP tipe 0 (echo replay)). Hal ini berguna untuk melakuan test.

#ping –c 1 127.0.0.1

PING 127.0.0.1 (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.

64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=155 usec

— 127.0.0.1 ping statistics —

1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max/mdev = 0.155/0.155/0.155/0.000 ms

#iptables –A INPUT –s 127.0.0.1 –p icmp –j DROP

#ping –c 1 127.0.0.1

PING 127.0.0.1 (127.0.0.1) from 127.0.0.1 : 56(84) bytes of data.

— 127.0.0.1 ping statistics —

1 packets transmitted, 0 packets received, 100% packet loss

Anda dapat melihat diatas bahwa ping yang pertama berhasil (dengan menggunakan –c 1 berarti hanya mengirim sebuah paket tunggal).

Kemudian kita tambahkan (-A) ke rantai ‘INPUT’, sebuah aturan yang menetapkan bahwa untuk paket dari 127.0.0.1 (‘-s 127.0.0.1’) dengan protokol ICMP (‘-p icmp’) harus di arahkan ke DROP (‘-j DROP’).

Kemudian kita test aturan yang telah dibuat tersebut, menggunakan perintah ping kedua. Program ping akan menunggu beberapa saat sampai memutuskan bahwa tidak akan ada respon dari 127.0.0.1.

Sehingga hasilnya adalah 100% paket hilang.

Jika kita ketik iptables –L setelah penambahan sebuah aturan pada rantai INPUT tersebut diatas hasilnya adalah:

#iptables –L

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP icmp — localhost.localdomain anywhere

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Untuk menghapus aturan yang telah ditambahkan diatas, dapat dilakukan dalam satu atau dua cara. Pertama, jika kita mengetahui bahwa aturan tersebut adalah satu-satunya aturan yang ada pada rantai input, kita dapat menggunakan penghapusan berdasarkan nomor, seperti:

#iptables –D INPUT 1

Kemudian kita coba lihat lagi iptables –L hasilnya:

#iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Dapat Anda lihat aturan tambahan yang ada pada rantai INPUT telah hilang.

Cara kedua adalah seperti perintah –A, tetapi mengganti -A dengan –D. Hal ini berguna pada saat Anda memiliki sebuah rantai yang komplek, caranya adalah:

#iptables –D INPUT –s 127.0.0.1 –p icmp –j DROP

Perintah –D harus benar-benar memiliki options yang sama seperti perintah –A (atau –I atau –R). Jika terdapat beberapa aturan yang sama dalam rantai, hanya yang pertama yang akan di hapus.

Contoh penerapan iptables

Sebuah pendekatan yang cukup baik pada firewall adalah menutup semua port dan memberikan ijin pada setiap port yang Anda perlukan saja. Berikut ini sebuah contoh script iptables yang dapat ditambahkan pada file /etc/rc.local dengan asumsi eth0 terhubung ke Internet sedangkan eth1 terhubung ke jaringan local.

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

iptables –flush

iptables –table nat –flush

iptables –delete-chain

iptables –table nat –delete-chain>

iptables –table nat –append POSTROTING –out-interfface eth0 -j MASQUERADE

iptables –append FORWARD –in-interface eth1 -j ACCEEPT

iptables -A INPUT -i lo -p all -j ACCEPT

iptables -A OUTPUT -o lo -p all -j ACCEPT /proc/sys/net/ipv4/tcp_syncookies

Penjelasan:

Baris ke 1: Untuk memastikan paket forwarding diaktifkan.

Baris ke 2 dan 3: Bersihkan semua aturan dalam saringan (filter) dan tabel NAT (Network Address Translation)

Baris ke 4 dan 5: Hapus semua rantai yang tidak termasuk dalam saringan default dan tabel NAT.

Baris ke 6 dan 7: Aktifkan IP Forwarding dan Masquerading.

Baris ke 8 dan 9: Menginjinkan untuk mengakses interface loopback dari dirinya sendiri, perhatikan bahwa rantai INPUT menggunakan -i yang artinya interface input sedangkan rantai OUTPUT menggunakan -o yang artinya interface output.

Baris ke 10 dan 11: Menerima semua koneksi yang sedang berlangsung.

Baris ke 12 dan 13: Membuka port FTP

Baris ke 14 dan 15: Membuka port SSH

Baris ke 16 dan 17: Membuka port HTTP

Baris ke 18 dan 19: Menerima semua koneksi Samba dari jaringan lokal dalam contoh ini dari network 192.168.0.0/24

Baris ke 20: Menggunakan kebijakan (Policy) untuk membuang semua koneksi lainnya. Hanya koneksi-koneksi yang telah didefinisikan diatasnya yang diterima.

Baris ke 21: Mengaktifkan kernel Linux untuk melakukan proteksi terhadap spoof dan DOS (Denial Of Service), biasanya hal ini sudah dikompilasi secara default pada Redhat dan Mandrake.

Debugging dan Logging:

Jika diperlukan Anda dapat memonitor koneksi-koneksi yang di buang dalam /var/log/messages. Tetapi hal ini sebaiknya dilakukan pada waktu yang singkat, hanya untuk keperluan analisa sesaat. Karena pesan yang dibuat dapat menjadi besar sekali. Untuk melakukan debugging dan logging tambahkan:

iptables -A INPUT -j LOG –log-prefix “INPUT_DROP:”

iptables -A OUTPUT -j LOG –log-prefix “OUTPUT_DROP:””

Untuk menerapkan aturan iptables diatas secara sederhana dapat disimpan pada /etc/rc.local dimana file tersebut akan dieksekusi setiap kali Linux di jalankan atau direstart.

/etc/rc.local dapat juga dieksekusi tanpa harus merestart Linux dengan cara mengetikkan:

#/etc/rc.local

Atau jika Anda telah berada dalam /etc ketik:

#./rc.local

Untuk mengetahui hasil dari script iptables diatas ketik:

#iptables -L

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT all — anywhere anywhere

ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED

REJECT tcp — anywhere anywhere tcp option=!2 reject-with tcp-reset

ACCEPT tcp — anywhere anywhere tcp dpt:ftp

ACCEPT udp — anywhere anywhere udp dpt:ftp

ACCEPT tcp — anywhere anywhere tcp dpt:ssh

ACCEPT udp — anywhere anywhere udp dpt:ssh

ACCEPT tcp — anywhere anywhere tcp dpt:http

ACCEPT udp — anywhere anywhere udp dpt:http

ACCEPT tcp — 192.168.0.0/24 anywhere tcp dpt:netbios-ssn flags:SYN,RST,ACK/SYN

Chain FORWARD (policy ACCEPT)

target prot opt source destination

ACCEPT all — anywhere anywhere

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all — anywhere anywhere

REDIRECT

Dengan menggunakan iptables dan nat dapat juga melakukan REDIRECT, misalnya untuk melakukan REDIRECT port 80 dari jaringan 192.168.1.0 yang ditujukan ke webserver 192.168.1.1 ke server 192.168.1.100, dapat digunakan perintah berikut:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 1192.168.1.1 \

-p tcp –dport 80 -j SNAT –to 192.168.1.100

baris diatas ditulis dalam satu baris

Tanda “\” berarti baris di bawahnya merupakan sambungan baris tersebut.

Untuk membantu pengguna yang tidak mau repot dengan script iptables dapat digunakan aplikasi firewall seperti Guarddog yang berjalan di X-Window.

Untuk menganalisa sebuah host dapat juga digunakan portscan contohnya nmap, jika belum diinstal, install dengan cara:

#rpm -ivh nmap-2.54BETA22-2mdk.i586.rpm

Kemudian ketik:

#nmap namahost

atau

#nmap iphost

Contoh nmap yang dilakukan dari host 192.168.0.254 ke host 192.168.0.253:

#nmap 192.168.0.253

Starting nmap V. 2.54BETA22 ( http://www.insecure.org/nmap/ )

Interesting ports on komputer1.stmikcic.ac.id (192.168.0.253):

(The 1523 ports scanned but not shown below are in state: filtered)

Port State Service

21/tcp open ftp

22/tcp open ssh

80/tcp open http

139/tcp open netbios-ssn

Nmap run completed — 1 IP address (1 host up) scanned in 135 seconds

Penggunaan nmap pada jaringan milik orang lain akan dianggap sebagai threat atau ancaman, jadi gunakanlah nmap hanya untuk menganalisa jaringan sendiri.

Sumber:

http://linuxsecurity.com/feature_stories/netfilter-print.html

http://www.yolinux.com/TUTORIALS/LinuxTutorialNetworkGateway.html

One response to “Penyaringan Paket menggunakan IPTABLES

  1. ray December 22, 2008 at 3:53 am

    thanks bro nice tutorial…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: