Home,Forum diskusi, Chatting, Download 


Memahami dan mengunakan ipchains sebagai firewall

Salah satu keunggulan Linux adalah tersedianya fasilitas firewall built-in, begitu anda menginstalasi Linux pada komputer anda, maka telah tersedia firewall yang dapat anda gunakan untuk membuat anda lebih percaya diri di internet. Fasilitas ini dapat juga anda manfaatkan untuk membuat suatu kotak Internet Sharing bagi semua komputer didalam jaringan anda.

Tulisan ini akan membantu anda dalam memahami ipchains dan memanfaatkannya dalam mengamankan komputer anda dan menggunakannya sebagai kota Internet Sharing.

Salam,

Hendra & Susan Dewichan


Petunjuk Praktis pemakaian ipchains

by Ghost_Rider

Pendahuluan

Ini adalah petunjuk praktis, dengan tujuan memberikan pengertian dasar pemakaian ipchains sebagai firewall. Ambilah sesuatu yang dapat dimakan atau sesuatu dengan kafein dan mari kita mulai belajar.

Hal-hal mendasar yang perlu diterangkan

Network Policy

Hal pertama yang perlu anda pikir dalam menggunakan firewall adalah policy apa yang akan anda gunakan. Dalam hal ini adalah policy Accept (menerima) atau policy Deny (menolak).

Policy accept, adalah segala sesuatu yang tidak disebutkan untuk ditolak akan diterima, sedangkan policy deny akan menolak apa saja yang tidak disebutkan.

Menurut saya policy yang lebih baik adalah policy deny, anda hanya perlu menambahkan service yang anda ingin buka, dan yang lain akan ditolak secara defaultnya. Policy accept membutuhkan aturan filtering yang banyak, karena anda harus menyebutkan semua yang service yang ingin anda blokir.

Chains & Rules

Jika anda tidak mengerti kedua istilah tersebut, maka anda akan mendapatkan masalah untuk memahami bagaimana ipchains bekerja.

Chains

Ada 4 jenis chain, sebaiknya kita mulai dari 3 yang pertama sehingga anda dapat mengerti apa yang dimaksud dengan chain. Ketika suatu paket masuk network interface akan melalui input chain; jika paket meninggalkan network interface akan melalui output chain; dan jika paket mencoba "melompat" dari suatu interface ke interface lain akan melalui forward chain. Jadi secara singkat dapat kita katakan :

- Ketika suatu paket mencoba mengakses jaringan kita harus melalui input chain.

- Ketika suatu paket mencoba meninggalkan jaringan kita harus melalui output chain.

- Ketika suatu paket mencoba melompat ke interface lain (bayangkan ip forward) akan melalui forward chain.

Chain ke 4 adalah user defined chain, yang mana didefinisikan oleh user sendiri.

Pada masing-masing chain ini, anda harus mendefinisikan policy yang akan anda gunakan. Ada 3 policy yang mungkin :

Untuk menggunakan policy accept anda dapat menggunakan policy :

- ACCEPT.

Untuk menggunakan policy deny anda akan menggunakan policy:

- DENY

- REJECT

Anda tentu bertanya bertanya, apa perbedaan antara DENY dengan REJECT ?

Jika anda menggunakan policy DENY maka apa yang tidak disebutkan untuk diterima akan diabaikan oleh kernel, tanpa memberitahukan ke komputer remote bahwa paket telah diabaikan. Hebat bukan ?, dan sangat menghemat resources sistem anda, cara ini adalah baik dilakukan terhadap orang yang mencoba melakukan hack terhadap sistem anda.

Jika anda menggunakan policy REJECT, paket yang diabaikan dan suatu suatu ICMP error akan dibangkitkan oleh kernel dan dikirim ke remote host. Hal ini tentu saja memakan resources, dan waktu.

Saya menyarankan anda sebaiknya menggunakan  policy DENY dari pada REJECT. Tetapi ada beberapa pengecualian yang akan dijelaskan selanjutnya.

Rules

Kita telah membahas tentang chain, dan chain tersebut tidak melakukan paket filter, chain hanya berupa policy. Sedangkan Rules mengatur aliran dari paket yang melalui chain tersebut, jadi kita dapat memandang rule sebagai suatu himpunan dari kondisi dengan suatu target. Himpunan kondisi tersebut akan digunakan sebagai perbandingan terhadap paket, target didefinisikan sebagai apa yang akan dilakukan terhadap paket tersebut jika merupakan anggota dari himpunan kondisi yang ditentukan.

Dalam rule anda dapat juga menerapkan ACCEPT, REJECT and DENY. Yang mana hanya akan accept, reject atau deny terhadap paket yang memenuhi kondisi pada rules, dalam hal ini policy dari chain tidak akan terpengaruh karena rule ini hanya berlaku untuk paket tersebut. Jika tidak ada rule untuk suatu paket, policy dari chain akan diterapkan padanya

Saran saya adalah senantiasi mengunakan DENY, karena tidak memakan resources sistem yang terlalu besar sebagaimana REJECT. Tetapi ingat jika anda melakukan koneksi ke SMTP, tambahkan suatu rules REJECT paket pada port 113 (auth). Mengapa ? Karena ketika anda melakukan koneksi ke SMTP server, server akan melakukan koneksi ke port auth anda. Jika anda mengunakan DENY terhadap paket, SMTP server akan terus menunggu sampai time out, sedangkan jika menggunakan rules REJECT, SMTP dapat melanjutkan proses walaupun menerima suatu error. Bukankah lebih baik ?

Hal yang perlu anda ketahui adalah rules pertama yang memenuhi syarat akan digunakan, dan proses akan dihentikan disana untuk paket tersebut.

Ip and Masking

Mengapa masking? Karena masking dapat benar-benar membantu dalam rules. Mungkin anda bertanya mengapa harus melakukan masking, dan mungkin yang lain bertanya apa itu masking?

Suatu alamat ip dibentuk oleh 4 byte dan satu sama lain dipisahkan oleh sebuah titik. Contoh :

ip: 193.34.13.15 dapat juga ditulis sebagai dalam bentuk binary

11000001.00100010.00001101.00001110

Dan sebagian dari byte ini menunjukan network mask dan sisanya adalah host mask.

Apa yang dikerjakan oleh masking adalah menentukan jumlah bits, bukan byte tetapi bit (1 byte = 8 bit) yang tetap, dan berapa banyak tidak tetap. Hal ini berarti bahwa 0.0.0.0/0 dapat disamakan sama dengan alamat ip apa saja, dan 134.34.12.12/32 dapat disamakan dengan

134.34.12.12 tetapi 134.34.12.0/24 dapat disamakan dengan ip-ip dari 134.34.12.0 sampai 134.24.12.255.

Rahasia untuk memahami hal ini adalah memikirkan ip dalam notasi binary, bukan dalam bentuk desimal.

Ipchains: Finally

Menurut saya cara yang terbaik berbicara tentang syntax ipchains adalah menulis script ipchains terlebih dahulu. Ada dua script, yang satu untuk komputer standalone dan yang lain untuk suatu firewall yang akan melakukan masquerading bagi seluruh jaringan. Perhatikan keterangan yang ada agar anda dapat lebih memahaminya.

---- Awal dari script ---
#!/bin/bash
# script ipchains oleh Ghost_Rider
# digunakan sebagai contoh pada
# Practical Guide for using ipchains
 
IPCHAINS ="/sbin/ipchains"
 
# Pertama kita akan mereset seluruh rules. Hal ini memberikan jaminan 100%
# bahwa semua rules sebelumnya tidak akan digunakan.




$IPCHAINS -F input 
$IPCHAINS -F output
$IPCHAINS -F forward
 
# Sekarang mari kita menentukan policy.
# Policy Deny untuk input dan forwarding (hal ini untuk suatu komputer standalone) 
# Policy Access untuk output.
# Catatan: policy harus ditulis dalam huruf besar, sebaliknya tidak berfungsi



$IPCHAINS -P input DENY 
$IPCHAINS -P output ACCEPT 
$IPCHAINS -P forward DENY
 
# Semua traffic localhost akan di accept
# sehingga kita tambahkan baris berikut
 
$IPCHAINS -A input -i lo -j ACCEPT
# Apa artinya masing-masing:
# -A: menambahkan rule ke chain, dalam hal ini chain input
# -i: menentukan interface yang akan difilter, dalam hal ini lo (loopback), yang berarti traffic localhost
# -j: menentukan apa yang akan dilakukan dengan paket (policy dari rule tersebut)
 
# Melakukan proses terhadap paket koneksi.
# Apa yang dilakukan adalah memeriksa jika paket tidak datang dengan flag syn on, hal ini karena kita menggunakan ! -y yang berarti negasi dari -y.
 
$IPCHAINS -A input -i ppp0 -p tcp ! -y -j ACCEPT
 
# ppp0: adalah interface untuk koneksi ppp
# -p : memilih protocol untuk rule tersebut, dalam hal ini tcp
# -y : memeriksa jika paket memiliki syn flag atau tidak.
# ! : negasi switch tersebut, dalam hal ini -y
 
# Mari melakukan accept terhadap jawabab DNS
 
$IPCHAINS -A input -i ppp0 -p tcp -sport 53 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p udp -sport 53 -j ACCEPT
 
# Memperbolehkan koneksi ke ssh
 
$IPCHAINS -A input -i ppp0 -p tcp --dport 22 -j ACCEPT
 
# --dport: memberitahukan bahwa port tujuan adalah, dalam hal ini 22
# anda dapat juga menggunakan --sport untuk source port (port dari mesin remote)
# Menolak setiap koneksi auth
 
$IPCHAINS -A input -i ppp0 -p tcp --dport 113 -j REJECT
 
# Memperbolehkan jenis ICMP tertentu saja.
# type 0 adalah untuk echo reply (jadi anda dapat menerima reply dari ping yang anda kirim)
# type 3 adalah untuk Destination Unreachable (jadi anda tidak perlu menunggu sampai timeout)
# type 11 adalah untukTime Exceed (digunakan untuk trace route)
 
$IPCHAINS -A input -i ppp0 -p icmp --dport 0 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p icmp --dport 3 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p icmp --dport 11 -j ACCEPT
 
# CATATAN: anda mungkin berpikir "apa yang orang ini lakukan dengan memberikan port tujuan
# pada icmp, tetapi icmp tidak memiliki port tujuan"
# Tetapi jika diperhatikan lebih mendalam, --dport tersebut sebenarnya adalah jenis ICMP
# Segala sesuatu yang lain di catat
 
$IPCHAINS -A input -j DENY -l 
 
# Yang akan dicatat adalah semua paket yang mencapai kita dan tidak
# memenuhi rule yang anda, selain kita tolak juga dicatat, jadi
# digunakan switch -l
# Jika tidak ingin di catat, buang saja –l
--- Akhir dari script -----


Mari kita lihat script dari suatu firewall yang juga berupa mesin masquerading.

Beberapa diantaranya tidak diberi keterangan yang lengkap karena telah ada pada contoh sebelumnya.

Saya mengganggap firewall tersebut memiliki 2 interface yaitu ppp0 ke internet dan eth0 yang terkoneksi ke LAN.

---- Awal dari script ----
# script ipchains oleh Ghost_Rider
# digunakan sebagai contoh pada
# Practical Guide for using ipchains
 
IPCHAINS = "/sbin/ipchains"
 
# Mereset semua rules yang ada
 
$IPCHAINS -F input
$IPCHAINS -F output
$IPCHAINS -F forward
 
# Menentukan policy
# input akan menggunakan DENY
# output dan forward akan menggunakan ACCEPT
 


$IPCHAINS -P input DENY
$IPCHAINS -P output ACCEPT
$IPCHAINS -P forward ACCEPT
 
# Memperbolehkan traffic lokal
 
$IPCHAINS -A input -i lo -j ACCEPT
$IPCHAINS -A input -i eth0 -j ACCEPT 
 
# eth0 singkatan dari ethernet card yang pertama
# Block semua ip address private yang datang dari ppp0 (internet)
 
$IPCHAINS -A input -i ppp0 -s 10.0.0.0/8 -j DENY
$IPCHAINS -A input -i ppp0 -s 172.16.0.0/12 -j DENY
$IPCHAINS -A input -i ppp0 -s 192.168.0.0/16 -j DENY
 
# Mengapa perlu di blokir?
# Karena ketiga address tersebut adalah ip yang hanya digunakan untuk intenal.
# Yang berarti tidak ada host diinternet yang memiliki ip ini.
# Jadi tidak mungkin mereka datang dari ppp0
# Nampaknya ada yang mencoba melakukan hacking terhadap jaringan anda dengan spoofing
# Memperbolehkan DNS replies, tetapi hanya primary dan secondary DNS server dari ISP kita
# misalnya: 194.13.20.19 dan 194.13.20.20 adalah DNS server ISP kita

$IPCHAINS -A input -i ppp0 -p tcp -s 194.13.20.19 53 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p tcp -s 194.13.20.20 53 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p udp -s 194.13.20.19 53 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p udp -s 194.13.20.20 53 -j ACCEPT 
 
# Memperbolehkan ssh 
# kita tidak perlu melakukan allow -i eth0 ke -dport 22
# karena kita telah menerima segalanya dari etho0
# periksa pada bagian ketia kita meneripa loopback dan paket ethernet
 
$IPCHAINS -A input -i ppp0 --dport 22 -j ACCEPT
 

# Kita akan menolak paket untuk port 113


$IPCHAINS -A input -i ppp0 -p tcp --dport 113 -j REJECT
 
# Memperbolehkan 3 jenis ICMP
 
$IPCHAINS -A input -i ppp0 -p icmp --dport 0 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p icmp --dport 3 -j ACCEPT
$IPCHAINS -A input -i ppp0 -p icmp --dport 11 -j ACCEPT
 
# Log everything else
 
$IPCHAINS -A input -j DENY -l
 
# Melakukan blokir terhadap alamat LAN tidak boleh akses ke
# www.porno.com dan www.rival.company.com
# yang memiliki ip
# 202.120.12.3 dan 120.10.0.34
 
$IPCHAINS -A output -i eth0 -d 202.120.12.3 -j DENY
$IPCHAINS -A output -i ppp0 -d 120.10.0.34 -j DENY 
 
# Dan akhirnya kita tambahkan aturan untuk masq
 
$IPCHAINS -A forward -j MASQ -s 192.68.1.0/24 -d ! 192.168.1.0/24
 
# Network kita adalah 192.68.1.0/24 
# -d ! 192.168.1.0/24 berarti jika tujuannya bukan berada dalam network kita
# firewall harus melakukan MASQ.
# Tetapi ingat, hanya dengan rule ipchain ini anda tidak dapat melakukan forward sesuatu, karena firewall tidak melakukan route.
# Hal tersebut untuk routing table.
# Jadi instalasi port forwarding tool (ipmasadm).

Sedikit informasi tentang port forwarding tool:

Misalnya eksternal ip firewall anda adalah 193.45.12.10 dan host yang memberikan service http adalah 192.168.1.17. Jadi anda harus mengetik seperti ini:

ipmasqadm portfw -a -P tcp -L 193.45.12.10 80 -R 192.168.1.17 80

 

dimana:

portfw dapat disebut sebagai forwarding chain untuk ipmasqadm

-a berarti add ke ipchains

-P tcp untuk protocol yang digunakan, dalam hal ini tcp

-L adalah untuk local address, dengan ip dan port

-R untuk redirecting alamat, dengan ip dan port

 

Baiklah saya pikir semuanya telah cukup untuk anda.

Saya berharap hal ini dapat membantu anda mengerti bagaimana menggunakan ipchains dan bagaimana mensetupnya.

Have a nice day.


Dibuat  oleh hendra@indoprog.com
Medan - Sumatera Utara
Indonesia