Anda di halaman 1dari 18

http://linux2.arinet.

org
25 April 2008
PANDUAN PRAKTIS FIREWALL DENGAN IPTABLES
Pendahuluan
Saat ini rasanya hampir tidak ada komputer yang tidak tersambung ke
jaringan/internet, baik itu melalui modem dialup, modem ADSL, maupun
dedicated LA! "al ini menunjukkan pengaruh globali#ation di dalam beberapa
dekade ini, dimana salah satu imbasnya adalah masuknya kita ke dalam
$internet society$ % sebuah komunitas global yang terhubung melalui internet!
"al ini tentu saja memberikan banyak pengaruh positi& seperti makin cepatnya
tersebarnya in&ormasi dari satu negara ke negara lain, makin lancarnya transaksi bisnis
lintas negara, dll! Dari sisi mikro, kini telah merupakan hal yang umum bila perusahaan
berlangganan koneksi internet dedicated! Dengan berlangganan internet dedicated,
maka selain lebih ekonomis, perusahaan pun dapat lebih leluasa dan cepat di dalam
mengakses in&ormasi/kesempatan bisnis le'at internet! amun hal ini juga memberikan
dampak negati&, atau mungkin lebih tepat kalau kita memakai istilah $tantangan$!
(engapa tantangan) Sebab dibandingkan se'aktu munculnya era internet di tahun
*++0an, kini internet telah menjadi lingkungan yang sangat kejam! ,idak perduli apakah
kita admin yang baru belajar ataupun yang sudah pengalaman, kita harus selalu
'aspada! -aspada dalam hal apa) Di dalam konteks ini adalah 'aspada di dalam
mengatur siapa/apa yang boleh/tidak boleh mengakses masuk/keluar net'ork kita! .isa
dibayangkan apa yang akan terjadi bila ada cracker yang berhasil membobol ser/er kita!
(ulai dari de&ace 'ebsite, abuse band'idth, sampai penghapusan data! 0ni berarti kita
harus selalu menjaga keamanan net'ork dan ser/er2 kita!
Ada banyak cara yang harus dilakukan di dalam menjaga keamanan net'ork dan ser/er,
namun di tulisan kali ini kita akan konsentrasi membahas dari sisi &ire'all! Apa itu
&ire'all) Seperti arti hara&iah katanya, yaitu1 $tembok api$! Di &ire'all ini kita melakukan
proses penyaringan tra&ik net'ork apa dan bagaimana yang kita perbolehkan/larang! Di
dalam konsep net'orking, semua ser/ice net'orking 2seperti 'eb, &tp, mail, dns, dll3
berjalan melalui jalur2 yang kita namakan $port$! (asing2 ser/ice tersebut memiliki
jalurnya sendiri, yaitu port2 dengan nomor tersendiri, seperti ser/ice1
% 'eb %%%4 port tcp 80, 555
% &tp %%%4 port tcp 20, 2*
% mail %%%4 port tcp 25, **0
% dns %%%4 port tcp/udp 56
% Dll, lihat da&tar lengkapnya di &ile /etc/ser/ices
Dua pendekatan setup fireall
Di mailing list sering ada yang bertanya1 78ort apa saja sih yang harus kita ,9,98)7 0ni
adalah pendekatan 'negative list', dimana secara D:;A9L, semua port kita .9<A, baru
kemudian satu per satu kita ,9,98 port yang diinginkan!
page 1 of 18
http://linux2.arinet.org

8endekatan kedua adalah1 'positive list', yaitu dimana secara D:;A9L, semua port di
,9,98, dan baru kemudian satu per satu kita .9<A port yang diinginkan!
(ana dari kedua pendekatan itu yang sebaiknya kita pakai) .erikut ini adalah
summarynya1
!" Ne#ati$e List%
& 'udah disetup
& Beresik( lupa )enutup p(rt
*" P(siti$e List%
& San#at se+ure, se-a- se)ua p(rt tertutup
& Relatif le-ih sulit disetup
Sampai sejauh ini semoga konsep dasar &ire'all telah cukup jelas! Sekarang bagaimana
sebenarnya kita mengatur &ire'all di Linu=) 9ntuk ini kita menggunakan yang namanya
Netfilter! et&ilter adalah &rame'ork yang menyediakan cara untuk memanipulasi
packet2 net'ork le'at kernel Linu=! Sedangkan iptables adalah utility yang digunakan
untuk mengatur hal tersebut! >oohh!!! gitu 13
K(nsep Netfilter.Ipta-les
Sebenarnya bagaimana sih cara bekerja iptables sebagai &ire'all) Seperti dapat kita lihat
di gambar *, di tengah2 ba'ah adalah ser/er Linu= kita! Di atas adalah et'ork, baik
local maupun internet! Di gambar itu juga terlihat ada 5 buah kotak ber'arna hijau
kuning! <otak%kotak ini melambangkan titik/lokasi tempat kita bisa melakukan &iltering
maupun manipulasi terhadap paket net'ork yang sedang le'at!
page 2 of 18
http://linux2.arinet.org
?@ambar *, Diagram et&ilterA
.erikut ini adalah de&inisi dari masing2 titik tersebut1
*! PRER/UTING, titik dimana kita bisa memanipulasi paket net'ork sebelum dia
memasuki keputusan routing, apakah ia akan masuk ke dalam Linu= kita atau cuma
sekedar $le'at$!
2! INPUT, titik dimana kita bisa melakukan pemeriksaan terhadap paket net'ork yang
akan (AS9< ke dalam Linu= kita!
6! /UTPUT, titik dimana kita melakukan pemeriksaan terhadap paket net'ork yang
dihasilkan oleh Linu= kita <:L9AB sebelum routing!
5! F/RWARD, titik dimana kita melakukan pemeriksaan terhadap paket net'ork yang
cuma numpang L:-A, Linu= kita!
5! P/STR/UTING, titik dimana kita bisa melakukan manipulasi terhadap paket yang
akan keluar dari Linu= kita!
page 3 of 18
http://linux2.arinet.org
<elima $titik$ di atas kita sebut 01AIN 2rantai3 di dalam synta= 0ptables!
Lalu bagaimana dengan kotak yang ber'arna kuning) 0ni disebut table! ,able adalah
tempat rule2/aturan2 yang kita buat disimpan! Ada 6 buah table, secara general dapat
kita de&inisikan1
*! Ta-le filter, adalah tempat rule2 yang berkaitan dengan boleh/tidaknya suatu paket
net'ork mele'ati sebuah C"A0 di atas!
2! Ta-le nat, adalah singkatan dari et'ork Address ,ranslation, yaitu table tempat
rule2 yang berkaitan dengan manipulasi suatu paket net'ork ketika mele'ati C"A0
8B:B>9,0@, 8>S,B>9,0@, dan >9,89,!
6! Ta-le )an#le, adalah tempat rule2 yang berkaitan dengan manipulasi suatu paket
net'ork untuk keperluan ad/ance, seperti D>S 2Euality o& ser/ice3, packet marking, dll!
S2nta3 Ipta-les
0ptables memberikan keleluasaan yang sangat besar kepada kita di dalam mengatur
&ire'all! <ita bisa membuat rule mulai dari yang general/umum sampai yang detail sekali!
Synta= 0ptables seperti ini 2perhatikan huru& besar kecil berpengaruh31
iptables [-t table] -[AD] CHAIN rule-specification [options]
iptables [-t table] -I CHAIN [rulenum] rule-specification [options]
iptables [-t table] -R CHAIN rulenum rule-specification [options]
iptables [-t table] -D CHAIN rulenum [options]
iptables [-t table] -[LFZ] [CHAIN] [options]
iptables [-t table] -P CHAIN target [options]
<eterangan1
-I 1 insert, bila menggunakan 0, maka secara de&ault rule akan menempati baris
nomor *! <ita bisa menyebutkan ingin insert di baris keberapa!
-A 1 append, rule akan ditambahkan di baris paling ba'ah!
-D 1 delete, menghapus rule baris ke%berapa!
-R 1 replace, mengganti rule baris ke%berapa!
-L 1 list, menampilkan rule2 yang ada!
-P 1 policy, mengubah policy suatu chain!
-ah cukup rumit yah! (emang mungkin sebaiknya kita membahas contoh penggunaan
iptables menggunakan cerita! <ita gunakan contoh gambar 2! Disini ceritanya kita
berperan sebagai seorang admin Linu= di kantor! <antor kita berlangganan internet
dedicated dan kita diminta melakukan1
!" 'en#a)ankan #atea2 dari ke)un#kinan seran#an -aik dari luar )aupun
dala)"
*" Se+ara default user tidak dapat )elakukan k(neksi ke #atea2 dan internet"
4" Sharin# internet"
5" 'e)-uat transparent pr(32 di #atea2"
6" 'en#atur a#ar kita -isa )e)-uat se-uah e- dan )ail ser$er 2an#
page 4 of 18
http://linux2.arinet.org
terlindun#i di -elakan# #atea2"
?@ambar 2, Diagram et'ork <antorA
-ihhh!!! cukup banyak nih! Apalagi kita akan menggunakan pendekatan $positi/e list$,
dimana secara de&ault kita akan menutup seluruh port yang ada! Sebelum kita mulai,
artikel ini mengasumsikan kita menggunakan distro Centos 5, tapi distro lain pun kurang
lebih akan sama step by stepnya! >ya, juga sangat disarankan agar melakukan setting ini
langsung di depan layar ser/er Linu= kita! .oleh saja sih mengatur iptables secara
net'ork, tapi pastikan bah'a langkah pertama yang kita lakukan adalah membuat
sebuah rule yang membolehkan akses dari 8C kita!
<ita mulai yah!
Tu#as !" 'en#a)ankan #atea2"
Di Centos paket iptables secara de&ault sudah terinstall dan akti&, tapi masih dalam
kondisi kosong rule2nya!
page 5 of 18
http://linux2.arinet.org
FFF .ila karena suatu hal kita ingin menghapus semua rule yang telah kita buat, maka
commandnya1
iptables -F
FFF .ila ingin menghapus sebuah rule saja1
iptables -nL --line-numbers
iptables -D INPUT|OUTPUT|FORWARD [barisnya], misalnya1
iptables -D INPUT 3
Sangat disarankan agar kamu melakukan command2 iptables ini dari mode te=t demi
kemudahan! Sebab bila dilakukan dari mode @90, ada kemungkinan G'indo' kita hang,
kita harus membuat rulenya dahulu agar tidak hang! ,api agar menjadi simple di tahap
a'al ini, maka disarankan kita melakukannya dari mode te=t dahulu yah 2ketik init 6,
atau CtlHAlt ;*3!
9ntuk melihat status iptables1
[root@server ~]# iptables -nL
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
8enjelasan1
Chain 089, 2policy ACC:8,3 I Chain 089, memiliki policy ACC:8,, jadi secara de&ault
paket net'ork boleh (AS9< ke ser/er Linu= kita! Demikian juga dengan chain lainnya,
masih diperbolehkan 2ACC:8,3!
>k, kita akan segera mengamankan ser/er Linu= gate'ay kita! Disini karena saya tidak
sedang berada di depan ser/er Linu= saya, maka saya mengaturnya melalui net'ork!
>leh karena itu hal pertama yang harus saya lakukan adalah membuat sebuah rule yang
(:(.>L:"<A akses ssh dari notebook saya ke ser/er Linu= tersebut! "al ini harus
dilakukan paling pertama, sebab kalau tidak saya akan $terblok$ sendiri oleh ser/er Linu=
saya!
iptables -I INPUT -s 192.168.0.227 -j ACCEPT
Arti command di atas adalah1
(e % 0S:B, sebuah rule di chain 089,, dimana semua tra&ik yang bersumber 2%s3
2S>9BC:3 dari 08 *+2!*J8!0!22K, di %j 2L9(83 ACC:8, 2boleh3! %j atau L9(8 ini adalah
action dari sebuah rule, apakah ingin kita bolehkan/reject/drop dll! >k jelas yah)
page 6 of 18
http://linux2.arinet.org
Sekarang kita lihat lagi kondisi iptables kita1
[root@server ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0 <--- perhatikan
muncul rule ini
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
,erlihat bah'a di chain 089, sekarang ada baris rule yang menyatakan target1 ACC:8,,
prot 2protocol31 all, opt 2option31 kosong, source1 *+2!*J8!0!22K, destination1 0!0!0!0/0
2all3! >k, sampai disini mulai ada gambaran yah)
Lanjutnya, bagaimana cara mengamankan gate'ay Linu= kita ini) .ila menggunakan
pendekatan $negati/e list$, maka kita harus membuat puluhan/ratusan rule untuk
melakukan penutupan port2 yang ada! "al ini tentu cukup merepotkan! >leh karena itu
kita menggunakan pendekatan $positi/e list$, dimana kita mengubah 8>L0CM C"A0 yang
ada dari ACC:8, menjadi DB>8! >ya sebelumnya kita jelaskan, policy ini bekerjanya
adalah sebagai $de&ault action$ apa yang harus dilakukan terhadap suatu paket bila tidak
ada rule yang cocok untuk paket itu! Dalam kondisi a'al iptables kita ini sekarang
adalah1 ACC:8,! Ladi semua paket bebas keluar masuk, le'at gate'ay Linu= kita!
9ntuk mengamankan gate'ay Linu= kita, ubah policy chain2 yang ada menjadi drop!
iptables -P INPUT DROP
Coba kita list lagi seperti apa kondisinya iptables kita1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP) <--- perhatikan berubah policynya jadi drop
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
>k sekarang sudah terlihat bah'a policy chain 089, telah menjadi DB>8! 0ni artinya
apa) Secara de&ault semua paket net'ork ,0DA< diperbolehkan (AS9< ke dalam ser/er
gate'ay Linu= kita! ah sudah cukup secure kan) Sekarang marilah kita mengubah
page 7 of 18
http://linux2.arinet.org
policy chain yang 2nya lagi menjadi DB>8 juga! :h, tapi nanti dulu! <arena saat ini posisi
saya adalah di notebook, yang melakukan koneksi ssh ke ser/er, maka kita harus buat
dahulu sebuah rule untuk notebook saya! Lho, bukannya tadi sudah) 0ya tadi yang sudah
adalah sebuah rule yang (:(.>L:"<A akses 089, dari notebook ke ser/er,
bagaimana dengan rule yang (:(.>L:"<A akses >9,89, dari ser/er ke notebook) 0ni
juga mesti kita de&inisikan, sebab kalau tidak koneksi ssh dari notebook ke ser/er sih
memang bisa, tapi tra&ik balasannya dari ser/er ke notebook akan terblok!
>leh karena itu kita perbolehkan dahulu tra&ik net'ork yang <:L9AB dari ser/er ke
D:S,0A,0> 08 notebook saya1
iptables -I OUTPUT -d 192.168.0.227 -j ACCEPT
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.0.227 <--- perhatikan
muncul rule ini.
.aru kemudian aman kita mengubah policy untuk chain >9,89, dan ;>B-ABD menjadi
DB>81
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy DROP) <--- perhatikan berubah policynya menjadi
DROP.
target prot opt source destination
Chain OUTPUT (policy DROP) <--- ini juga.
page 8 of 18
http://linux2.arinet.org
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.0.227
Catatan1 sebenarnya kita bisa menggunakan &eature $connection tracking$ dari iptables
agar kita tidak perlu membuat rule untuk koneksi >9,89, tadi! ,api ini nanti kita bahas!
>ya, secara tidak sadar kita ternyata telah melakukan Tu#as n(" * juga, yaitu secara
de&ault user tidak dapat melakukan koneksi ke internet dan gate'ay 13 Ladi user yang ada
di 8C * seperti di gambar, dia tidak akan dapat melakukan koneksi ke internet dan
gate'ay dalam bentuk apapun, ssh, &tp, 'eb, dll!
Tu#as 4" Sharin# Internet"
ah tentu dengan memiliki ser/er gate'ay Linu= yang secure tidak akan berguna banyak
kalau ia tidak dapat ber&ungsi seperti yang diharapkan, yaitu dalam hal ini menyediakan
akses internet untuk user kantor kita!
9ntuk sharing internet1
8ertama yakinkan bah'a setup routing di gate'ay kita sudah benar!
<edua, akti&kan ip &or'arding di /etc/sysctl.conf1
net.ipv4.ip_forward = 1
<etiga baru setup iptablesnya1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
"asilnya1
[root@server ~]# iptables -t nat -nL <--- perhatikan ada -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
<eterangan1
<ita membuat sebuah rule di table nat dan di chain 8>S,B>9,0@, dimana semua paket
net'ork yang keluar dari eth0 kita akan di (ASD9:BAD:! Apakah ini) 0ni artinya adalah
semua paket net'ork yang berasal dari 08 LA kita 2*+2!*J8!0!=3 akan 7dibungkus7 atau
di masEuerade dengan 08 8ublic gate'ay kita! (engapa perlu dibungkus dengan 08
8ublic) Sebab 08 LA 2kelas C3 tidak diperbolehkan di routing keluar ke internet!
,erus, kenapa ip &or'arding perlu dihidupkan pula) Sebab untuk sharing internet, paket
page 9 of 18
http://linux2.arinet.org
net'ork dari LA kita akan $masuk$ ke eth* kita, kemudian $dilempar$ keluar ke internet
melalui eth0 kita! Ladi &ungsi ip &or'arding di kernel kita perlu dihidupkan di
/etc/sysctl.conf itu! Lihat gambar 2!
,api hal ini saja tidak cukup, sebab dari sisi iptables kita perlu mengatur pula siapa2 saja
atau apa2 saja yang kita perbolehkan mele'ati chain ;>B-ABD dari iptables kita! <arena
policy chain ;>B-ABD tadi kita setel menjadi DB>8, maka kita harus mengatur siapa
saja yang boleh le'at!
(isalkan kita ingin membolehkan 8C * untuk bro'sing internet, maka kita buat rule1
iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.1 -j ACCEPT
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:80
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.0.227
<eterangan1
<ita membuat sebuah rule di chain ;>B-ABD, dimana paket net'ork yang berupa
protocol tcp dan di port 802'''3, yang berasal dari 08 *+2!*J8!0!*, diperbolehkan!
Coba bro'sing dari 8C *, uupppss ternyata blom bisa! "al ini ternyata karena tra&ik DS
untuk meresol/e domain name belum diperbolehkan! Disini kita asumsi bah'a settingan
DS di 8C * adalah memakai DS di 0S8! >leh karena itu kita buatkan pula rulenya1
iptables -I FORWARD -p tcp --dport 53 -j ACCEPT
iptables -I FORWARD -p udp --dport 53 -j ACCEPT
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
page 10 of 18
http://linux2.arinet.org
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:80
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.0.227
>k, sharing internet bro'sing sudah bisa! .agaimana dengan chatting) (isalnya Mahoo
(essenger) <ita mesti membuat rule spesi&ik untuk itu juga! Mahoo messenger memakai
port tcp 5050, jadi1
iptables -A FORWARD -p tcp --dport 5050 -s 192.168.0.1 -j ACCEPT
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:5050
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.0.227
*******************
Connection Tracking
*******************
Sebelum kita membahas lebih lanjut, ada baiknya kita sentuh konsep connection
tracking! ,adi di atas kita telah melihat bah'a agar koneksi ssh saya dari notebook ke
ser/er tidak putus ketika kita mengubah policy chain 089, dan >9,89, menjadi DB>8,
maka kita harus mende&inisikan rule 2 di kedua buah chain itu! Cukup merepotkan yah!
9ntuk mempermudah hal ini, kita bisa meman&aatkan &ungsi connection tracking dari
iptables, yaitu dimana ketika kita sudah mende&inisikan sebuah rule di chain tertentu,
maka tra&ik net'ork yang terkait dengan rule tersebut tidak perlu disebutkan lagi! Ladi
dalam hal ssh dari notebook ini, kita cukup mende&inisikan rule di chain 089, saja, yang
di >9,89,nya tidak perlu lagi!
page 11 of 18
http://linux2.arinet.org
Caranya adalah1
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
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state
RELATED,ESTABLISHED
ACCEPT all -- 192.168.0.227 0.0.0.0/0
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state
RELATED,ESTABLISHED
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:5050
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state
RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 192.168.0.227
**********************
Tu#as 5" Transparent Pr(32"
Apakah itu transparent pro=y) 0a adalah kondisi dimana kita bisa 7memaksa7 semua
tra&ik 'eb yang berasal dari LA kita agar diarahkan masuk ke dalam sEuid/pro=y kita!
Ladi di 8C client kita tidak perlu mengatur bro'ser ;ire&o= untuk menggunakan pro=y
tertentu lagi! Semuanya akan otomatis $dipaksa$ masuk ke dalam sEuid kita!
Detail cara menyetel sEuid untuk sebagai transparent pro=y bisa dibaca di artikel ini1
http1//linu=2!arinet!org/inde=!php)optionIcomNcontentOtaskI/ie'OidI6+O0temidI2
Singkatnya, edit /etc/squid/squid.conf1
httpd_accel_host virtual
httpd_accel_port 80
page 12 of 18
http://linux2.arinet.org
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
9ntuk sEuid /ersi 2!J keatas, editnya1
http_port 3128 transparent
Dari sisi iptables, kita lakukan ini1
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-
port 3128
Dan kita perbolehkan sEuid untuk mengakses internet1
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
"asilnya1
[root@server ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
redir ports 3128
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Tu#as 6" 'en#atur a#ar kita -isa )e)-uat se-uah e- dan )ail ser$er 2an#
terlindun#i di -elakan# #atea2"
Coba kita lihat lagi gambar 2! Di tugas 5 ini, kita harus mengatur agar tra&ik dari internet
yang masuk ke eth0 di port 'eb2tcp 803 dan mail2tcp 25,**03 akan di $&or'ard$ ke port
yang bersangkutan di 08 (ail Ser/er kita 2*+2!*J8!0!20*3!
Commandnya untuk 08 &or'arding ini adalah1
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to
192.168.0.201:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to
192.168.0.201:25
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to
page 13 of 18
http://linux2.arinet.org
192.168.0.201:110
"asilnya1
[root@server ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 3128
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.0.201:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.0.201:25
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:
192.168.0.201:100
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
<ita mesti membuka pula untuk di chain ;>B-ABDnya1
iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --dport 110 -j ACCEPT

Sebenarnya apa gunanya membuat -eb dan (ail Ser/er di belakang gate'ay seperti ini)
Selain untuk keamanan, guna lainnya adalah agar kita dapat $memaksa$ user LA kita
agar kalau ingin mengirim email, harus menggunakan mail ser/er kita tersebut! (engapa
demikian) Agar user tidak dapat seenaknya mengirim email menggunakan smtp lain di
internet, dan juga untuk mencegah program2 spy'are dan /irus mengirim spam ke
internet dari LA kita!
>k, tra&ik 'eb dan email dari internet ke LA kita sudah diatur, lanjutnya adalah
mengatur yang dari -eb dan (ail ser/er kita ke internet1
iptables -A INPUT -i eth1 -p tcp --dport 80 -s 192.168.0.251 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 25 -s 192.168.0.251 -j ACCEPT
"asilnya1
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 192.168.0.227 0.0.0.0/0
ACCEPT tcp -- 192.168.0.251 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.0.251 0.0.0.0/0 tcp dpt:25
Chain FORWARD (policy DROP)
target prot opt source destination
page 14 of 18
http://linux2.arinet.org
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 192.168.0.1 0.0.0.0/0 tcp dpt:5050
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 192.168.0.227
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 tcp:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 udp:53
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 tcp:80
********************************************************************
Melihat DETAIL kondisi Iptables kita. Gunakan 'v' dan --line-numbers
********************************************************************
[root@server ~]# iptables -nvL --line-numbers
Chain INPUT (policy DROP 4 packets, 272 bytes)
num pkts bytes target prot opt in out source destination
1 515 35388 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 1302 96800 ACCEPT all -- * * 192.168.0.227 0.0.0.0/0
3 0 0 ACCEPT tcp -- eth1 * 192.168.0.251 0.0.0.0/0 tcp dpt:80
4 0 0 ACCEPT tcp -- eth1 * 192.168.0.251 0.0.0.0/0 tcp dpt:25
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
4 0 0 ACCEPT tcp -- * * 192.168.0.1 0.0.0.0/0 tcp dpt:80
5 0 0 ACCEPT tcp -- * * 192.168.0.1 0.0.0.0/0 tcp dpt:5050
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 312 37296 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 686 74712 ACCEPT all -- * * 0.0.0.0/0 192.168.0.227
3 686 74712 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4 686 74712 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
5 686 74712 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
Apa gunanya kita menampilkan nomor baris dari rule2 tersebut) @unanya adalah untuk
memudahkan kita melakukan beberapa command seperti1
9ntuk menghapus sebuah rule yang salah/tidak diperlukan lagi1
iptables -D INPUT 2
0ni artinya menghapus rule di baris no! 2 dari chain 089,! Lho, bukannya gampang
dilihat) 0ya kalau rulenya sedikit, kalau rulenya sudah puluhan, pusing juga melihatnya
kalau tidak ada nomor barisnya 13
iptables -I INPUT 3
0ni artinya meng%insert rule di baris 6 di chain 089,!
********************************************************************
Sa$e Ipta-les
page 15 of 18
http://linux2.arinet.org
Semua rule yang telah kita buat, bisa kita sa/e dengan command1
service iptables save.
Dia akan di sa/e di /etc/sysconfig/iptables
******
REVIEW
******
>k cukup melelahkan juga yah) Ada baiknya kita re/ie' kembali semua rule yang telah
kita buat di atas sambil menambahkan beberapa rule yang berguna!
.erikut ini adalah command2 lengkapnya1
#### Normalkan dahulu policy yang ada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#### Hapus semua rule yang ada (Flush)
iptables -F
#### Siapkan rule untuk notebook kita agar tidak kena blok (sesuaikan IPnya
dengan IP kamu)
iptables -I INPUT -s 192.168.0.227 -j ACCEPT
#### Secara localhost kita mesti membolehkan akses
iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
#### Rule untuk connection tracking, agar kita mudah membuat rule2
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#### Rule untuk sharing internet
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#### Rule untuk DNS (asumsi bahwa kita menggunakan DNS ISP)
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
#### Rule untuk membolehkan PC 1 (192.168.0.1) bisa browsing internet dan
chatting yahoo messenger
iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.1 -j ACCEPT
page 16 of 18
http://linux2.arinet.org
## (Bila nanti kita sudah menggunakan transparent proxy, maka rule ini
tidak perlu lagi)
iptables -A FORWARD -p tcp --dport 5050 -s 192.168.0.1 -j ACCEPT
#### Rule untuk membuat transparent proxy squid
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-
port 3128
#### Rule untuk membolehkan squid dan gateway sendiri mengakses internet
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#### Rule untuk melakukan port forwarding dari eth0(internet) di port tcp
80,25,100 ke mail server kita di 192.168.0.251
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to
192.168.0.251:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to
192.168.0.251:25
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to
192.168.0.251:110
#### Rule untuk membolehkan akses Web dan Mail dari internet ke Web dan
Mail server kita
iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --dport 110 -j ACCEPT
#### Rule agar Web dan Mail server kita bisa mengakses internet
iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.251 -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -s 192.168.0.251 -j ACCEPT
#### Mengaktifkan fungsi logging agar kita mudah troubleshoot
iptables -A INPUT -m limit --limit 2/m --limit-burst 2 -j LOG --log-prefix
'** INPUT DROP ** '
iptables -A FORWARD -m limit --limit 2/m --limit-burst 2 -j LOG --log-
prefix '** FORWARD DROP ** '
iptables -A OUTPUT -m limit --limit 2/m --limit-burst 2 -j LOG --log-prefix
'** OUTPUT DROP ** '
#### Terakhir mengatur default policy menjadi drop
page 17 of 18
http://linux2.arinet.org
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#### Jangan lupa di save
service iptables save
#### SELESAI
Bule2 tersebut di atas dapat di do'nload dari http1//linu=2!arinet!org di menu D(nl(ad
7 Artikel 7 Linu3 Ad)in 7 S(rt Berdasarkan Su-)it Date 7 ipta-les&praktis&
s+ript"sh
Penutup dan kesi)pulan
Demikianlah pedoman praktis iptables ini! ;iuuuhh!!!, capek juga yah 13 ,api memang di
tengah kondisi internet yang kejam sekarang ini, memasang &ire'all untuk melindungi
net'ork kita sudah merupakan keharusan!
Sebenarnya ada banyak tersedia tool/utility untuk mengatur iptables ini seperti1
shorewall, firewall-builder, dll! ,idak ada salahnya kita menggunakan tool2 tersebut, tapi
setidaknya dengan telah mengetahui konsep &ire'all dengan iptables, kita akan dapat
lebih mudah mengaturnya entah langsung dari iptablesnya ataupun menggunakan tool2
bantuan lainnya!
Sebagai penutup, penulis sadar panduan ini jauh dari sempurna, dan oleh karenanya,
segala saran, kritik, koreksi!!! (onggo!!!! 13
,erima kasih banyak sebelumnya atasnya! Selamat belajar!

Sentul City, 2J April 2008
Fa8ar Pri2ant(, a linu= lo/er 13
99999999
Atas per)intaan 2an# tin##i, telah di-uka trainin# pri$ate . in&h(use Arinet"
In#in -ela8ar atau di-i)-in# Linu3: /leh trainer, instruktur dan i)ple)ent(r
Linu3 -erpen#ala)an"
1u-un#i fa8arpri;arinet"(r#
page 18 of 18

Anda mungkin juga menyukai