Breaking

Friday, 5 February 2016

DASAR-DASAR PERINTAH PROGRAM IPTABLES

DASAR-DASAR PERINTAH PROGRAM IPTABLES

IPTables adalah paket aplikasi (program berbasis Linux) yang saat ini sudah menjadi platform untuk membuat (mensetup) firewall hampir di kebanyakan distro Linux. Dengan menggunakan IPtables seorang pengguna / admin jaringan bisa mengatur lalulintas paket data yang keluar masuk pada router atau server yang menjadi gateway (pintu gerbang) antara jaringan perusahaan/lokal (LAN) dengan jaringan publik (WAN/internet).

Beberapa literatur dan project tentang IPtables

    Pengembangan IPTables (en)
    Prosedur dasar iptable (en)
    Wikipedia.org/iptables
    http://tipstrik-id.blogspot.com
    blogger yoyok

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:

# /etc/init.d/iptables start

Untuk mematikan iptables, gunakan perintah:

# /etc/init.d/iptables stop

Untuk merestart iptables, gunakan perintah:

# /etc/init.d/iptables restart

Sintaks 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:

    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.
    Rantai Input: yaitu rantai yang memfilter paket-paket yang ditujukan ke firewall.
    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:

    Rantai Pre-Routing: Merubah paket-paket NAT dimana alamat tujuan dari paket-paket tersebut terjadi perubahan. Biasanya dikenal dengan destination NAT atau DNAT.
    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
   
-F

–flush
CommandKeterangan
-A

–append
Perintah ini menambahkan aturan pada akhir chain. Aturan akan ditambahkan di akhir baris pada chain yang bersangkutan, sehingga akan dieksekusi terakhir
-D

–delete
Perintah ini menghapus suatu aturan pada chain. Dilakukan dengan cara menyebutkan secara lengkap perintah yang ingin dihapus atau dengan menyebutkan nomor baris dimana perintah akan dihapus.
-R

–replace
Penggunaannya sama seperti –delete, tetapi command ini menggantinya dengan entry yang baru.
-I

–insert
Memasukkan aturan pada suatu baris di chain. Aturan akan dimasukkan pada baris yang disebutkan, dan aturan awal yang menempati baris tersebut akan digeser ke bawah. Demikian pula baris-baris selanjutnya.
-L

–list
Perintah ini menampilkan semua aturan pada sebuah tabel. Apabila tabel tidak disebutkan, maka seluruh aturan pada semua tabel akan ditampilkan, walaupun tidak ada aturan sama sekali pada sebuah tabel. Command ini bisa dikombinasikan dengan option –v (verbose), -n (numeric) dan –x (exact).
Perintah ini mengosongkan aturan pada sebuah chain. Apabila chain tidak disebutkan, maka semua chain akan di-flush.
-N

–new-chain
Perintah tersebut akan membuat chain baru.
-X

–delete-chain
Perintah ini akan menghapus chain yang disebutkan. Agar perintah di atas berhasil, tidak boleh ada aturan lain yang mengacu kepada chain tersebut.
-P

–policy
Perintah ini membuat kebijakan default pada sebuah chain. Sehingga jika ada sebuah paket yang tidak memenuhi aturan pada baris-baris yang telah didefinisikan, maka paket akan diperlakukan sesuai dengan kebijakan default ini.
-E

–rename-chain
Perintah ini akan merubah nama suatu chain.

3. Option

Option digunakan dikombinasikan dengan command tertentu yang akan menghasilkan suatu variasi perintah.
Option     Command          Pemakai     Keterangan
-v

–verbose
    –list

–append

–insert

–delete

–replace
    Memberikan output yang lebih detail, utamanya digunakan dengan –list. Jika digunakan dengan
–list, akan menampilkam K (x1.000),
M (1.000.000) dan G (1.000.000.000).
-x

–exact
    –list     Memberikan output yang lebih tepat.
-n

–numeric
    –list     Memberikan output yang berbentuk angka. Alamat IP dan nomor port akan ditampilkan dalam bentuk angka dan bukan hostname ataupun nama aplikasi/servis.
–line-number     –list     Akan menampilkan nomor dari daftar aturan. Hal ni akan mempermudah bagi kita untuk melakukan modifikasi aturan, jika kita mau meyisipkan atau menghapus aturan dengan nomor tertentu.
–modprobe     All     Memerintahkan IPTables untuk memanggil modul tertentu. Bisa digunakan bersamaan dengan semua command.

4. Generic Matches

Generic Matches artinya pendefinisian kriteria yang berlaku secara umum. Dengan kata lain, sintaks generic matches akan sama untuk semua protokol. Setelah protokol didefinisikan, maka baru didefinisikan aturan yang lebih spesifik yang dimiliki oleh protokol tersebut. Hal ini dilakukan karena tiap-tiap protokol memiliki karakteristik yang berbeda, sehingga memerlukan perlakuan khusus.
Match     Keterangan
-p

–protocol
    Digunakan untuk mengecek tipe protokol tertentu. Contoh protokol yang umum adalah TCP, UDP, ICMP dan ALL. Daftar protokol bisa dilihat pada /etc/protocols.

Tanda inversi juga bisa diberlakukan di sini, misal kita menghendaki semua protokol kecuali icmp, maka kita bisa menuliskan –protokol ! icmp yang berarti semua kecuali icmp.
-s

–src

–source
    Kriteria ini digunakan untuk mencocokkan paket berdasarkan alamat IP asal. Alamat di sini bisa berberntuk alamat tunggal seperti 192.168.1.1, atau suatu alamat network menggunakan netmask misal 192.168.1.0/255.255.255.0, atau bisa juga ditulis 192.168.1.0/24 yang artinya semua alamat 192.168.1.x. Kita juga bisa menggunakan inversi.
-d

–dst

–destination
    Digunakan untuk mecocokkan paket berdasarkan alamat tujuan. Penggunaannya sama dengan match –src
-i

–in-interface
    Match ini berguna untuk mencocokkan paket berdasarkan interface di mana paket datang. Match ini hanya berlaku pada chain INPUT, FORWARD dan PREROUTING
-o

–out-interface
    Berfungsi untuk mencocokkan paket berdasarkan interface di mana paket keluar. Penggunannya sama dengan
–in-interface. Berlaku untuk chain OUTPUT, FORWARD dan POSTROUTING

5. Implicit Matches

Implicit Matches adalah match yang spesifik untuk tipe protokol tertentu. Implicit Match merupakan sekumpulan rule yang akan diload setelah tipe protokol disebutkan. Ada 3 Implicit Match berlaku untuk tiga jenis protokol, yaitu TCP matches, UDP matches dan ICMP matches.

a. TCP matches
Match     Keterangan
–sport

–source-port
    Match ini berguna untuk mecocokkan paket berdasarkan port asal. Dalam hal ini kia bisa mendefinisikan nomor port atau nama service-nya. Daftar nama service dan nomor port yang bersesuaian dapat dilihat di /etc/services.

–sport juga bisa dituliskan untuk range port tertentu. Misalkan kita ingin mendefinisikan range antara port 22 sampai dengan 80, maka kita bisa menuliskan –sport 22:80.

Jika bagian salah satu bagian pada range tersebut kita hilangkan maka hal itu bisa kita artikan dari port 0, jika bagian kiri yang kita hilangkan, atau 65535 jika bagian kanan yang kita hilangkan. Contohnya –sport :80 artinya paket dengan port asal nol sampai dengan 80, atau –sport 1024: artinya paket dengan port asal 1024 sampai dengan 65535.Match ini juga mengenal inversi.
–dport

–destination-port
    Penggunaan match ini sama dengan match –source-port.
–tcp-flags     Digunakan untuk mencocokkan paket berdasarkan TCP flags yang ada pada paket tersebut. Pertama, pengecekan akan mengambil daftar flag yang akan diperbandingkan, dan kedua, akan memeriksa paket yang di-set 1, atau on.

Pada kedua list, masing-masing entry-nya harus dipisahkan oleh koma dan tidak boleh ada spasi antar entry, kecuali spasi antar kedua list. Match ini  mengenali SYN,ACK,FIN,RST,URG, PSH. Selain itu kita juga menuliskan ALL dan NONE. Match ini juga bisa menggunakan inversi.
–syn     Match ini akan memeriksa apakah flag SYN di-set dan ACK dan FIN tidak di-set. Perintah ini sama artinya jika kita menggunakan match –tcp-flags SYN,ACK,FIN SYN

Paket dengan match di atas digunakan untuk melakukan request koneksi TCP yang baru terhadap server

b. UDP Matches

Karena bahwa protokol UDP bersifat connectionless, maka tidak ada flags yang mendeskripsikan status paket untuk 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 digunakan untuk mengirimkan pesan-pesan kesalahan dan kondisi-kondisi jaringan yang lain. Hanya ada satu implicit match untuk tipe protokol ICMP, yaitu :

–icmp-type

6. Explicit Matches

a. MAC Address

Match jenis ini berguna untuk melakukan pencocokan paket berdasarkan MAC source address. Perlu diingat bahwa MAC hanya berfungsi untuk jaringan yang menggunakan teknologi ethernet.

iptables –A INPUT –m mac –mac-source 00:00:00:00:00:01



b. Multiport Matches

Ekstensi Multiport Matches digunakan untuk mendefinisikan port atau port range lebih dari satu, yang berfungsi jika ingin didefinisikan aturan yang sama untuk beberapa port. Tapi hal yang perlu diingat bahwa kita tidak bisa menggunakan port matching standard dan multiport matching dalam waktu yang bersamaan.

iptables –A INPUT –p tcp –m multiport –source-port 22,53,80,110

c. Owner Matches

Penggunaan match ini untuk mencocokkan paket berdasarkan pembuat atau pemilik/owner paket tersebut. Match ini bekerja dalam chain OUTPUT, akan tetapi penggunaan match ini tidak terlalu luas, sebab ada beberapa proses tidak memiliki owner (??).

iptables –A OUTPUT –m owner –uid-owner 500

Kita juga bisa memfilter berdasarkan group ID dengan sintaks –gid-owner. Salah satu penggunannya adalah bisa mencegah user selain yang dikehendaki untuk mengakses internet misalnya.

d. State Matches

Match ini mendefinisikan state apa saja yang cocok. Ada 4 state yang berlaku, yaitu NEW, ESTABLISHED, RELATED dan INVALID. NEW digunakan untuk paket yang akan memulai koneksi baru. ESTABLISHED digunakan jika koneksi telah tersambung dan paket-paketnya merupakan bagian dari koneki tersebut. RELATED digunakan untuk paket-paket yang bukan bagian dari koneksi tetapi masih berhubungan dengan koneksi tersebut, contohnya adalah FTP data transfer yang menyertai sebuah koneksi TCP atau UDP. INVALID adalah paket yang tidak bisa diidentifikasi, bukan merupakan bagian dari koneksi yang ada.

iptables –A INPUT –m state –state RELATED,ESTABLISHED

7. Target/Jump

Target atau jump adalah perlakuan yang diberikan terhadap paket-paket yang memenuhi kriteria atau match. Jump memerlukan sebuah chain yang lain dalam tabel yang sama. Chain tersebut nantinya akan dimasuki oleh paket yang memenuhi kriteria. Analoginya ialah chain baru nanti berlaku sebagai prosedur/fungsi dari program utama. Sebagai contoh dibuat sebuah chain yang bernama tcp_packets. Setelah ditambahkan aturan-aturan ke dalam chain tersebut, kemudian chain tersebut akan direferensi dari chain input.

iptables –A INPUT –p tcp –j tcp_packets
Target     Keterangan
-j ACCEPT

–jump ACCEPT
    Ketika paket cocok dengan daftar match dan target ini diberlakukan, maka paket tidak akan melalui baris-baris aturan yang lain dalam chain tersebut atau chain yang lain yang mereferensi chain tersebut. Akan tetapi paket masih akan memasuki chain-chain pada tabel yang lain seperti biasa.
-j DROP

–jump DROP
    Target ini men-drop paket dan menolak untuk memproses lebih jauh. Dalam beberapa kasus mungkin hal ini kurang baik, karena akan meninggalkan dead socket antara client dan server.

Paket yang menerima target DROP benar-benar mati dan target tidak akan mengirim informasi tambahan dalam bentuk apapun kepada client atau server.
-j RETURN

–jump RETURN
    Target ini akan membuat paket berhenti melintasi aturan-aturan pada chain dimana paket tersebut menemui target RETURN. Jika chain merupakan subchain dari chain yang lain, maka paket akan kembali ke superset chain di atasnya dan masuk ke baris aturan berikutnya. Apabila chain adalah chain utama misalnya INPUT, maka paket akan dikembalikan kepada kebijakan default dari chain tersebut.
-j MIRROR     Apabila kompuuter A menjalankan target seperti contoh di atas, kemudian komputer B melakukan koneksi http ke komputer A, maka yang akan muncul pada browser adalah website komputer B itu sendiri. Karena fungsi utama target ini adalah membalik source address dan destination address.

Target ini bekerja pada chain INPUT, FORWARD dan PREROUTING atau chain buatan yang dipanggil melalui chain tersebut.

Beberapa target yang lain biasanya memerlukan parameter tambahan:

a. LOG Target

Ada beberapa option yang bisa digunakan bersamaan dengan target ini. Yang pertama adalah yang digunakan untuk menentukan tingkat log. Tingkatan log yang bisa digunakan adalah debug, info, notice, warning, err, crit, alert dan emerg.Yang kedua adalah -j LOG –log-prefix yang digunakan untuk memberikan string yang tertulis pada awalan log, sehingga memudahkan pembacaan log tersebut.

iptables –A FORWARD –p tcp –j LOG –log-level debug

iptables –A INPUT –p tcp –j LOG –log-prefix “INPUT Packets”

b. REJECT Target

Secara umum, REJECT bekerja seperti DROP, yaitu memblok paket dan menolak untuk memproses lebih lanjut paket tersebut. Tetapi, REJECT akan mengirimkan error message ke host pengirim paket tersebut. REJECT bekerja pada chain INPUT, OUTPUT dan FORWARD atau pada chain tambahan yang dipanggil dari ketiga chain tersebut.

iptables –A FORWARD –p tcp –dport 22 –j REJECT –reject-with icmp-host-unreachable

Ada beberapa 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

Target ini berguna untuk melakukan perubahan alamat asal dari paket (Source Network Address Translation). Target ini berlaku untuk tabel nat pada chain POSTROUTING, dan hanya di sinilah SNAT bisa dilakukan. Jika paket pertama dari sebuah koneksi mengalami SNAT, maka paket-paket berikutnya dalam koneksi tersebut juga akan mengalami hal yang sama.

iptables –t nat –A POSTROUTING –o eth0 –j SNAT –to-source 194.236.50.155-194.236.50.160:1024-32000

d. DNAT Target

Berkebalikan dengan SNAT, DNAT 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 chain PREROUTING dan OUTPUT atau chain buatan yang dipanggil oleh kedua chain tersebut.

iptables –t nat –A PREROUTING –p tcp –d 15.45.23.67 –dport 80 –j DNAT –to-destination 192.168.0.2

e. MASQUERADE Target

Secara umum, target MASQUERADE bekerja dengan cara yang hampir sama seperti target SNAT, tetapi target ini tidak memerlukan option –to-source. MASQUERADE memang 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.

Seperti halnya pada SNAT, target ini hanya bekerja untuk tabel nat pada chain POSTROUTING.

iptables –t nat –A POSTROUTING –o ppp0 –j MASQUERADE

f. REDIRECT Target

Target REDIRECT 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 chain PREROUTING dan OUTPUT atau pada chain buatan yang dipanggil dari kedua chain tersebut.

iptables –t nat –A PREROUTING –i eth1 –p tcp –dport 80 –j REDIRECT –to-port 3128

Tutuorial Squid bisa dilihat di bagian Proxy Server.

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 atasUntuk 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 0/0 --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 0/0 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

VI. 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 forward3. 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.logPenentuan 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, dan akan terlihat hasil sebagai berikut:

Dan kalau kita lihat di log firewall di /var/log/firewall akan terlihat tidak ada aktivitas apa-apa di dalam file tersebut. Tetapi pada saat kita menge-ping 192.168.2.2, maka akan terlihat gambar seperti di bawah ini:

Itu berarti IP tersebut di blok. Sekarang lihat di log firewall, seharusnya akan terlihat gambar berikut ini:

Contoh yang lain lagi misalnya kita mempunyai IP publik yang ada di eth1 dan kita ingin memblok seluruh IP publik yang ada untuk mengakses IP publik kita, namun kita juga ingin mengetahui IP-IP mana saja yang mengakses IP Publik kita maka sintaksnya seperti berikut:

# iptables -I INPUT -p All -i eth1 -s ! 192.168.0.0/24 -m state --state NEW -j LOG --log-prefix "IPTABLES: (INPUT-REJECT) "
# iptables -A INPUT -i eth1 -s ! 192.168.0.0/24 -j REJECT

Sintaks di atas dapat dijelaskan bahwa seluruh IP akan ditolak namun hanya IP-IP publik saja yang akan di catat dalam log.

8. Membackup dan merestore iptables
Jika kita sudah mengatur konfigurasi iptables, maka sebaiknya kita langsung menyimpan iptables tersebut. Karena jika tidak, konfigurasi iptables kita akan hilang jika server kita restart atau kita menggunakan perintah restart iptables dan kita harus menyusunnya kembali. Berikut adalah langkah-langkah untuk menyimpan iptables:

 # service iptables save

Maka perintah-perintah iptables akan disimpan di file iptables pada folder /etc/sysconfig. Jika misalnya kita sudah menyimpan iptables yang sudah kita konfigurasi sebelumnya, maka jika server kita restart atau iptables kita restart maka iptables kita bisa terestore secara otomatis. Untuk merestore iptables yang sudah kita simpan sebelumnya, maka ketikkan perintah:

 # service iptables restart

maka iptables yang sudah kita simpan akan terestore kembali.

No comments:

Post a Comment