Kamis, 07 Januari 2010

Tutorial Iptables dasar 1


Pendahuluan

Linux memiliki firewall yang sangat kuat di dalamnya, biasanya disebut sebagai iptables, lebih tepatnya iptables / Netfilter. Iptables adalah modul userspace, dengan demikian kita dapat , berinteraksi dengannya pada commandline untuk memasukkan aturan firewall ke tabel standar. Netfilter adalah modul kernel, yang dibangun dalam kernel, yang benar-benar menyaring. Kita akan mempelajari iptables di command line.
Sebelum kita dapat benar-benar bisa menguasai iptables, kita perlu memiliki setidaknya pemahaman dasar dari cara kerjanya. Iptables menggunakan konsep alamat ip, protokol (tcp, udp icmp) dan port. Kita tidak perlu menjadi ahli dalam hal ini untuk memulai, tetapi hal ini membantu untuk memiliki pemahaman umum.

Iptables menempat aturan ke dalam tabel (INPUT, OUTPUT dan FORWARD) yang memeriksa lalu lintas jaringan (paket IP) yang relevan table dan membuat sebuah keputusan mengenai apa yang harus dilakukan pada setiap paket berdasarkan hasil dari aturan-aturan tersebut, yaitu menerima atau menjatuhkan paket. Tindakan-tindakan ini disebut sebagai target, ada dua kemungkinan yang akan ditetapkan DROP untuk menjatuhkan paket atau ACCEPT menerima paket.

chain
Ada 3 chain standar yang digunakan oleh iptables yang kita dapat menambahkan aturan untuk memproses paket IP melewati tabel, yaitu :
INPUT – Semua paket yang ditujukan untuk host komputer.

OUTPUT – Semua paket yang berasal dari host komputer.

FORWARD – Semua paket yang bukan dari atau untuk komputer host, tetapi melalui komputer host. Tabel ini digunakan jika komputer sebagai router.
Sebagian besar, kita akan berurusan dengan tabel INPUT untuk menyaring paket yang memasuki komputer kita.

Aturan ditambahkan dalam daftar untuk setiap tabel. Sebuah paket diperiksa terhadap setiap aturan secara bergiliran, dimulai di bagian atas, dan jika sesuai dengan aturan itu, maka diambil tindakan seperti menerima (ACCEPT) atau jatuh (DROP) paket. Sekali aturan tersebut sesuai, dan tindakan diambil, maka paket akan diproses sesuai dengan hasil dan tidak diproses oleh aturan lebih lanjut dalam tabel. Jika sebuah paket lewat turun melalui semua aturan dalam tabel dan mencapai bagian bawah dicocokkan tanpa aturan apa pun, maka diambil tindakan standar untuk tabel itu. Hal ini disebut sebagai kebijakan default.

Konsep kebijakan standar dalam tabel menimbulkan dua kemungkinan mendasar bahwa kita harus terlebih dahulu mempertimbangkannya sebelum kita memutuskan bagaimana kita akan mengatur firewall kita.
1. Kita dapat menetapkan kebijakan default DROP semua paket dan kemudian tambahkan aturan untuk secara khusus membiarkan (ACCEPT) paket yang dipercaya mungkin dari alamat IP, atau untuk port tertentu pada layanan yang telah kita jalankan seperti bittorrent, server FTP, Web Server, Samba file server dll
atau sebaliknya,

2. Kita dapat menetapkan kebijakan default ACCEPT semua paket dan kemudian tambahkan aturan untuk secara khusus blok (DROP) paket yang mungkin dari alamat IP tertentu, atau untuk port tertentu di mana kita tidak menjalankan servicenya.
Umumnya, pilihan 1 di atas adalah untuk tabel INPUT, digunakan untuk mengontrol apa yang diperbolehkan untuk mengakses komputer kita dan opsi 2 akan digunakan untuk tabel OUTPUT .

Persiapan :

Bekerja dengan iptables di command line membutuhkan hak istimewa root, jadi kita perlu menjadi untuk root untuk hal hal yang akan kita lakukan.

Catatan : Sebelum mulai, kita perlu mereset iptables dan aturan-aturan firewall yang ada

Sayangnya, berbagai distro Linux menggunakan berbagai comands untuk memulai, menghentikan dan menyimpan aturan-aturan firewall, sehingga kita mungkin perlu memeriksa dokumentasi untuk mengetahui cara untuk melakukan ini pada distro Linux kita. Coba ketik iptables –help di command line

# iptables --help
iptables v1.2.9
Usage: iptables -[AD] chain rule-specification [options]
       iptables -[RI] chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LFZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Dan untuk melihat apakah iptables sudah benar benar berjalan di komputer kita, kita dapat menggunakan option –L, untuk meload running iptables

# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  barney               anywhere            MAC 00:50:8D:6D:EF:23
DROP       all  --  wilma                anywhere
ACCEPT     all  --  bart                 anywhere            MAC 00:50:8D:FD:D6:32
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     tcp  --  ict                  anywhere            state NEW tcp dpt:ssh
Chain FORWARD (policy DROP)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Jika iptables berjalan, kita akan melihat beberapa aturan umum seperti diatas, jika tidak, kita coba mengecek modul iptables dengan lsmod

# lsmod |grep ip
ipt_mac                 2113  2
ipt_state               2113  2
ip_conntrack           40949  1 ipt_state
iptable_filter          3777  1
ip_tables              16577  3 ipt_mac,ipt_state,iptable_filter

Baik, kita asumsikan iptables berjalan baik, mari kita mulai dengan aturan yang sangat simple untuk mengeset firewall yaitu mengizinkan semua koneksi keluar tetapi memblok semua koneksi yang tidak diinginkan. Pada command line kta akan mengetikkan perintah berikut :

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -L -v

yang akan memberikan output sebagai berikut :

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Kita sekarang memiliki firewall yang memungkinkan semua koneksi keluar tapi memblokir semua koneksi masuk yang tidak diinginkan dan juga semua paket forwarder. Baik kita akan melihat setiap perintah diatas.

  1. (iptables –F), Pertama tama kita menggunakan –F (flush), tujuannya untuk membersihkan semua aturan yang ada.
  2. (iptables –P INPUT DROP). Option –P ini menetapkan kebijakan default, disini kita menerapkan kebijakan default untuk tabel input adalah DROP, yang maksudnya bahwa jika sebuah paket masuk tidak sesuai dengna salah satu dari aturan-aturan berikutnya akan dihapus.
  3. (iptables –P FORWARD DROP), Demikian pula, default untuk tabel FORWARD adalah DROP, karena kita tidak memfungsikan komputer kita sebagai router.
  4. (iptables –P OUTPUT ACCEPT), Terakhir untuk kebijakan default yaitu pada tabel OUTPUT yaitu ACCEPT, yaitu membolehkan semua lalu lintas keluar.
  5. (iptables –A INPUT –i lo –j ACCEPT), sekarang kita menambah beberapa aturan lain. Kita menggunakan –A untuk menambah sebuah aturan ke chain tertentu, INPUT pada contoh ini, kemudian kita menggunakan –i untuk interface, -j (jump), yaitu tindakan yang akan diambil. Jadi aturan ini akan mengizinkan semua paket masuk localhost. Ini umumbnya diperlukan oleh berbagai software aplikasi untuk bisa berkomunikasi dengan adaptor localhost.
  6. (iptables –A INPUT –m state –state ESTABLISHED,RELATED –j ACCEPT), Ini adalah aturan yang melakukan sebagian besat pekerjaan, dan sekali lagi kita menambahkan (-A) ke chain INPUT. Disini kita menggunakan opsi –m untuk meload sebuah modul (state). Modul stat mampu memeriksa keadaan dari sbuah paket dan menentukan apakah NEW, ESTABLISHE atau RELATED, NEW mengacu kepada paket-paket baru yang masuk koneksi yang tidak diprakarsai oleh host. ESTABLISHED dan RELATED mengacu kepada paket paket masuk yang merupakan bagikan dari koneksi yang telah mapan atau terkait dengan koneksi tersebut.
  7. (iptables –L –v), Terakhir, kita bisa daptarkan aturan aturan yang baru saja kita tambahkan, dan menampilkannya untuk memeriksa apakan sudah terisi dengan benar.

Hal terkahir yang perlu kita lakukan adalah menyimpan aturan tersebut, sehingga saat kita reboot, secara otomatis aturan tadi akan terload. Sayangnya, perintah untuk melakukan ini, biasanya berbeda untuk distro yang berbeda.

Pada Redhat/Fedora lakukan :

/sbin/service iptables save

Namun, cara termudah bekerja dengan iptables ada memasukkan script nya kedalam sebuah file dan membuatnya menjadi file executable, misalkan kita beri nama firewallku.

#!/bin/bash
# file konfigurasi iptables
# ChoenKill
# Flush semua aturan dari iptables
 iptables -F
# Set default untuk chain INPUT, FORWARD dan OUTPUT
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT ACCEPT
# Set access untuk localhost
 iptables -A INPUT -i lo -j ACCEPT
# Accept packets established dan related connections
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Save settings dengan /sbin/service iptables save
# List iptables chains with 'iptables -L -v'
/sbin/service iptables save
iptables -L –v

Tidak ada komentar: