KLIK DAPAT DOLLAR$$

KLIK DAPAT DOLLAR $$$


SELFI BUAT ARTIKEL CURHAT DAPAT DOLLAR $$$
Tampilkan postingan dengan label open source. Tampilkan semua postingan
Tampilkan postingan dengan label open source. Tampilkan semua postingan

Kamis, 01 November 2012

antinetcut di ubuntu

Pernah ngrasai bisa nge-ping tapi ndak bisa konek ke jaringan? mungkin ada yang nakal mainan sama software yang namanya Netcut. ini salah satu solusi untuk melawan aplikasi tersebut. Sebagai informasi, netcut menggunakan protokol ARP dalam melakukan serangan. Untuk pengguna linux, cara mendeteksi apakah ada pengguna yang menggunakan netcut adalah dengan mengetikkan
~$ arp
Jikalau user terkoneksi ke sebuah server, maka hanya ada 1 tampilan hasil perintah tersebut

arp
arp
Kalau ada lebih dari 1, kemungkinan ada yang menggunakan netcut. Cara mengatasinya yaitu dengan menggunakan software antinetcut. Download antinetcutnya di sini kemudian extract. Buka console, kemudian pindah direktori ke direktori antinetcut. Ketikkan :

 ~$ sudo ./antinetcut.py start
 
Untuk mengetahui apakah antinetcutnya sudah berjalan atau belum, ketikkan :

 ~$ sudo ./antinetcut.py status
 
kalau muncul tulisan “Antinetcut daemon is running…” berarti antinetcut sudah berjalan. Kalau muncul tulisan “Antinetcut daemon is not running…” berarti antinetcut belum berjalan. Ulangi lagi langkah menjalankan antinetcut.

Kamis, 03 November 2011

PC Router menggunakan OS Linux Ubuntu 9.04

PC Router adalah sebuah PC (Personal Computer) yang di jadikan sebuah router. Yang mana Router itu sendiri ialah sebuah alat jaringan yang mengirimkan paket data melalui sebuah jaringan atau internet menuju tujuannya yang melalui sebuah proses yaitu Routing.
Fungsi Router sebagai penghubung antar dua atau lebih jaringan untuk meneruskan data dari satu jaringan ke jaringan lainnya. Untuk membangun sebuah PC Router saya menggunakan Operating System (OS) Linux Ubuntu Server 9.04 yang bisa anda download disni.
Untuk spesifikasi komputernya adalah sebagai berikut :
1. Intel Pentium 42,6 Ghz
2. Memory 512 MB
3. Harrdisk 40 GB
4. 2 Buah Nic (kartu jaringan)
-NIC 1 (eth0) terhubung ke client yang ada dijaringan LAN
-NIC 2 (eth1) terhubung ke server atau Router
Sebelum mengkonfigurasinya, anda harus mempunyai IP address, subnetmask, broadcast address dan defaul gateway yang bisa anda dapatkan dari ISP (internet service provider) tempat anda berlangganan.
Menginstal Ubuntu server sampai selesai, disini saya menggunakan ubuntu server 9.04.  Setelah penginstalan benar-benar selesai, masukkan username dan password yang telah kita buat tadi sewaktu penginstalan ubuntu server.
Langkah-langkah dan perintah untuk pengkonfigurasian sebagai berikut:
-Masuk sebagai root,supaya kita bisa mempunyai akses penuh dan leluasa.
#sudo su 
-Masukan password root
-Konfigurasi NIC 1(eth0) dan NIC 2(eth1)
#nano /etc/network/interfaces
-Isikan Ip Address, Netmask dan Broadcast sesuai dengan yang anda inginkan
# The loopback network interface
auto lo eth0 eth1
iface lo inet loopback
allow-hotplug eth0

# The primary network interface
iface eth0 inet static
address 192.168.0.99
netmask 255.255.255.0
broadcast 192.168.0.255
iface eth1 inet static
address 192.168.1.20
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.10
-Tekan Control X dan Y enter untuk menyimpannya
-Cek Ip, apakah sudah benar2 masuk dengan perintah
#ifconfig
-Memasukan DNS
#nano /etc/resolv.conf
-Isilah DNS nya
Nameserver 192.168.1.10 // saya mengisikannya dengan Ip gateway
Nameserver 192.168.1.20 // Ip eth1
-Tekan Control X dan Y enter untuk menyimpannya
-Restart network agar settingan kita bisa berfungsi
#/etc/init.d/networking restart 
-Proses network udah selesai, sekarang masuk pada proses Routing
-Mengaktifkan Ip_forward dengan cara
#echo “1”>/proc/sys/net/ipv4/ip_forward
-Masukan perintah iptables untuk mensharing internet dari eth1 ke eth0
#iptables –t nat –A POSTROUTING –o eth1 –j MASQUERADE
-Me Routing Ip client yang kita pakai di jaringan LAN
#/sbin/iptables –t nat –A POSTROUTING –s 192.168.0.99/192.168.0.200 –j MASQUERADE 
-Supaya perintahnya tidak hilang saat komputer di restart, simpanlah perintah tadi di dalam rc.lokal
#nano /etc/rc.local
-Ketik ulang kembali perintah iptables tadi di atas kata exit= 0
iptables –t nat –A POSTROUTING –o eth1 –j MASQUERADE
/sbin/iptables –t nat –A POSTROUTING –s 192.168.0.99/192.168.0.200 –j MASQUERADE
echo “1”>/proc/sys/net/ipv4/ip_forward
-Jangan lupa di save dengan menekan Control X dan Y enter
-Restart kembali settingan networknya
#/etc/init.d/networking restart
Untuk memastikan eth0 , eth1 dan koneksi internet sudah terhubung,lakukan ping satu persatu
# Ping 192.168.0.99 //eth0
#Ping 192.168.1.20 //eth1
#Ping www.google.com
Jika Reply maka dia sudah terhubung dan setting ip client
Isikan dengan :
Ip addres 192.168.0.99-200
Subnetmask 255.255.255.0
Gateway 192.168.1.20 //isi dengan ip eth1
Dns server 192.168.1.20 // ip nameserver yang kita buat tadi sebagai DNS
Cek dengan ping dari client ke server eth0 dan eth1 lalu dari client ke client.
Buka browser pada client dan test koneksi internet, jika berjalan maka anda berhasil membuat sebuah PC ROUTER.
Untuk memaksimalkannya, anda bisa menginstall squid proxy server dan tolls2 lain yang anda rasa perlu.

Sumber :
http://www.ilmuti.com

Jumat, 07 Oktober 2011

IPTABLES II

  1. PersiapanSebelum mulai, diharapkan pembaca sudah memiliki pengetahuan dasar mengenai TCP/IP karena hal ini merupakan dasar dari penggunaan IPTables. Ada (sangat) banyak resource yang mendokumentasikan konsep dasar tentang TCP/IP, baik itu secara online maupun cetak. Silahkan googling untuk mendapatkannya.
  2. Pendahuluan
    IPTables memiliki tiga macam daftar aturan bawaan dalam tabel penyaringan, daftar tersebut dinamakan rantai firewall (firewall chain) atau sering disebut chain saja. Ketiga chain tersebut adalah INPUT, OUTPUT dan FORWARD.


Pada diagram tersebut, lingkaran menggambarkan ketiga rantai atau chain. Pada saat sebuah paket sampai pada sebuah lingkaran, maka disitulah terjadi proses penyaringan. Rantai akan memutuskan nasib paket tersebut. Apabila keputusannnya adalah DROP, maka paket tersebut akan di-drop. Tetapi jika rantai memutuskan untuk ACCEPT, maka paket akan dilewatkan melalui 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 terhadap paket”. Jika aturan tersebut tidak sesuai dengan paket, maka aturan berikutnya akan memproses paket tersebut. Apabila sampai aturan terakhir yang ada, paket tersebut belum memenuhi salah satu aturan, maka kernel akan melihat kebijakan bawaan (default) untuk memutuskan apa yang harus dilakukan kepada paket tersebut. Ada dua kebijakan bawaan yaitu default DROP dan default ACCEPT.

Jalannya sebuah paket melalui diagram tersebut bisa dicontohkan sebagai berikut:

Perjalanan paket yang diforward ke host yang lain

1. Paket berada pada jaringan fisik, contoh internet.
2. Paket masuk ke interface jaringan, contoh eth0.
3. Paket masuk ke chain PREROUTING pada table Mangle. Chain ini berfungsi untuk me-mangle (menghaluskan) paket, seperti merubah TOS, TTL dan lain-lain.
4. Paket masuk ke chain PREROUTING pada tabel nat. Chain ini berfungsi utamanya untuk melakukan DNAT (Destination Network Address Translation).
5. Paket mengalami keputusan routing, apakah akan diproses oleh host lokal atau diteruskan ke host lain.
6. Paket masuk ke chain FORWARD pada tabel filter. Disinlah proses pemfilteran yang utama terjadi.
7. Paket masuk ke chain POSTROUTING pada tabel nat. Chain ini berfungsi utamanya untuk melakukan SNAT (Source Network Address Translation).
8. Paket keluar menuju interface jaringan, contoh eth1.
9. Paket kembali berada pada jaringan fisik, contoh LAN.

Perjalanan paket yang ditujukan bagi host lokal

1. Paket berada dalam jaringan fisik, contoh internet.
2. Paket masuk ke interface jaringan, contoh eth0.
3. Paket masuk ke chain PREROUTING pada tabel mangle.
4. Paket masuk ke chain PREROUTING pada tabel nat.
5. Paket mengalami keputusan routing.
6. Paket masuk ke chain INPUT pada tabel filter untuk mengalami proses penyaringan.
7. Paket akan diterima oleh aplikasi lokal.

Perjalanan paket yang berasal dari host lokal

1. Aplikasi lokal menghasilkan paket data yang akan dikirimkan melalui jaringan.
2. Paket memasuki chain OUTPUT pada tabel mangle.
3. Paket memasuki chain OUTPUT pada tabel nat.
4. Paket memasuki chain OUTPUT pada tabel filter.
5. Paket mengalami keputusan routing, seperti ke mana paket harus pergi dan melalui interface mana.
6. Paket masuk ke chain POSTROUTING pada tabel NAT.
7. Paket masuk ke interface jaringan, contoh eth0.
8. Paket berada pada jaringan fisik, contoh internet.

3. Syntax IPTables
iptables [-t table] command [match] [target/jump]

1. Table

IPTables memiliki 3 buah tabel, yaitu NAT, MANGLE dan FILTER. Penggunannya disesuaikan dengan sifat dan karakteristik masing-masing. Fungsi dari masing-masing tabel tersebut sebagai berikut :

  1. NAT : Secara umum digunakan untuk melakukan Network Address Translation. NAT adalah penggantian field alamat asal atau alamat tujuan dari sebuah paket.
  2. MANGLE : Digunakan untuk melakukan penghalusan (mangle) paket, seperti TTL, TOS dan MARK.
  3. FILTER : Secara umum, inilah pemfilteran paket yang sesungguhnya.. Di sini bisa dintukan apakah paket akan di-DROP, LOG, ACCEPT atau REJECT

2. Command

Command pada baris perintah IPTables akan memberitahu apa yang harus dilakukan terhadap lanjutan sintaks perintah. Umumnya dilakukan penambahan atau penghapusan sesuatu dari tabel atau yang lain.

Command

Keterangan

-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).

-F

–flush

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.

4. Penutup

Demikian dasar-dasar dari IPTables beserta komponen-komponennya. Mungkin anda masih agak bingung tentang implementasi dari apa yang telah dijelaskan di atas. Insya Allah dalam tulisan yang akan datang, saya akan memberikan beberapa contoh kasus jaringan yang menggunakan IPTables. Yea.. may I have enough power to do it )

Manajemen Jaringan dengan IPTables

Tools konfigurasi firewall Iptables bukan hanya berguna untuk memblokir atau mengizinkan akses jaringan. Lebih dari itu, iptables bisa menjadikan PC Anda sebuah pengelola jaringan yang cukup lengkap tanpa perlu membeli perangkat khusus.

Apabila Anda berpikir bahwa pe­rin­tah iptables untuk melakukan konfigurasi firewall, hanya mengurusi pemblokiran akses. Namun lebih dari itu, iptables bisa menyediakan berbagai macam fungsi yang berguna.
Artikel ini akan mencoba menyajikan beberapa fungsi di antaranya:
1 Pengalihan port (port redirection).
2 Membatasi kecepatan koneksi.
3 Membuat sistem Linux sebagai router atau gateway Internet komputer lain.
4 Membatasi akses Internet pada waktu (jam, hari, tanggal) tertentu.

Referensi yang digunakan dalam artikel ini adalah iptables versi 1.4.1.1 (disertakan dalam distro Linux Fedora 9). Versi yang lebih rendah mungkin tidak menyertakan modul yang dibahas saat ini. Cara mengecek versi iptables adalah de­ngan perintah:
$ iptables -V
iptables v1.4.1.1

Seperti biasa, prompt # berarti perintah dilakukan sebagai root. Sementara prompt $ berarti bisa dilakukan sebagai user biasa.

Port redirect

Apa yang dimaksud dengan redirect? Secara mudahnya, redirect berarti membelokkan suatu komunikasi dari tujuan sebenarnya ke arah lain. Di sini, yang dibelokkan adalah tujuan port. Misalnya, jika awalnya suatu data TCP mengarah ke port 80 lalu dialihkan ke port 8080. Teknik ini biasanya digunakan untuk mengalihkan suatu komunikasi secara transparan. Salah satu contoh yang umum diterapkan adalah mengalihkan suatu akses ke web server (port 80) ke proxy server (port 8080). Pengalihan ini bertujuan untuk:
1 Mengurangi beban web server. Re­quest akan dilayani oleh proxy server dahulu. Selanjutnya, jika ada content yang perlu langsung dijawab oleh webserver, web server akan menjawab.

2 Mempercepat akses. Proxy server (contohnya Squid) menyimpan halaman-halaman web yang terakhir diakses. Dengan demikian, jika suatu alamat web diakses bersama-sama oleh banyak client, maka proxy bisa membantu dengan langsung memberikan halaman yang diminta.

Untuk melakukan redirect, gunakan perintah seperti berikut ini.
# iptables -t nat -p tcp -A OUTPUT -s 10.1.1.0/24 -d
11.1.1.1 –dport 80 -j REDIRECT –to-ports 8080

Perintah di atas dapat diartikan, semua data yang berasal dari semua komputer pada kelompok jaringan 10.1.1.0 dengan tujuan komputer ber-IP 11.1.1.1 pada port 80 dialihkan ke port 8080 (pada komputer yang menjadi firewall).

Hal lainnya yang perlu Anda ingat adalah metode redirect ini harus ditempatkan pada tabel NAT atau lebih tepatnya pada bagian chain PREROUTING atau OUTPUT.

Redirect http ke smtp Pada contoh di atas, penerapan redirect mengalihkan tujuan semula ke web server menuju mail server.Redirect http ke smtp Pada contoh di atas, penerapan redirect mengalihkan tujuan semula ke web server menuju mail server.

Membatasi kecepatan koneksi

Sebenarnya, istilah membatasi kecepatan koneksi tidaklah sepenuhnya tepat. Yang dilakukan iptables untuk melakukan pem­batasan sebenarnya adalah mengizinkan suatu koneksi mencapai batas kecepatan tertentu dan memblokir jika telah melebihi batas ini. Salah satu tujuannya adalah untuk mengendalikan beban lalu lintas data yang terjadi pada suatu komputer.

Ada beberapa cara untuk melakukan hal ini. Pertama dengan modul hashlimit. Sebagai contoh, pembatasan dilakukan agar PC hanya dapat merespons ping sebanyak 2 kali selama 1 menit:
# iptables -A INPUT -p icmp -d 192.168.1.2 -m hashlimit
–hashlimit 1/minute –hashlimit-name PING-BLOCK –
hashlimit-mode srcip -j ACCEPT

# iptables -A INPUT -p icmp -d 192.168.1.2 -j DROP
Pada perintah pertama, digunakan parameter -m untuk memanggil modul hash­limit. Berikutnya, kita sebutkan kecepatan yang kita inginkan. Di sini digunakan batas 1 paket ICMP per menit. ICMP (Internet Control Message Protocol) adalah nama teknis dari jenis data yang dikirim saat proses ping dilakukan. Suatu catatan penting disini: kita masukkan rule ini pada chain INPUT karena kita hendak membatasi jumlah paket ping yang ingin direspons komputer.

Apabila komputer digunakan sebagai gateway dan ingin menyaring paket serupa, maka atauran atau rule harus dimasukkan ke chain FORWARD.

Parameter lainnya yang tidak kalah penting adalah “hashlimit-mode”. Argumen pada parameter ini menentukan bagaimana perhitungan limit kecepatan di­lakukan. Pada contoh di atas, digunakan argumen srcip. Artinya, perhitungan limit dihitung per komputer asal koneksi. Lebih jelasnya, semisal ada tiga komputer melakukan koneksi ke komputer ini, jika masing-masing komputer (dianggap A, B dan C) melakukan koneksi bersamaan ke komputer kita, masing-masingnya akan mendapat kecepatan respon 1 paket per menit.

Adapun kemungkinan nilai lainnya antara lain.
ldstip Kebalikan dari srcip, pada dstip limit dihitung pada komputer tujuan. Kembali pada contoh di atas, A, B dan C secara keseluruhan akan mendapat kecepatan 1 paket per menit.

lsrcport Seperti srcip, tetapi pe­nge­lom­pok­kan didasarkan pada port asal (sumber) koneksi.

ldstport Seperti dstip, tetapi pengelompokan didasarkan pada port tujuan koneksi.

Pada perintah kedua mungkin timbul pertanyaan, kenapa parameter drop disertakan? Module hashlimit akan match selama jumlah paket per interval waktu sesuai dengan yang kita sebutkan. Dalam contoh di atas, sampai dengan jumlah paket 1 per menit, rule akan tepat (match). Di sini, kita sebutkan bahwa paket akan diterima. Bagaimana jika kecepatan paket melebihi batas tersebut? Rule-nya tentu saja tidak lagi match. Hal inilah yang ingin dicegah. Oleh karena itu, paket ICMP perlu di-drop pada baris berikutnya. Cara lain yang mirip adalah de­ngan menggunakan modul limit:
# iptables -I INPUT -d 192.168.1.2 -p icmp -m limit –
limit 12/min -j ACCEPT

# iptables -I INPUT -p icmp -d 192.168.1.2 -j DROP
Perbedaannya di sini adalah limit berlaku universal, tidak dikelompokkan berdasar IP node asal atau tujuan. Namun, faktor kapan rule dianggap sesuai atau tidak identik dengan hashlimit yang menjadi pertimbangan, kenapa pada baris kedua tetap diperperlukan rule drop.
Catatan: limitasi 12 menit kurang lebih mengizinkan paket ping 1 kali per 5 detik.

Membatasi respons ping Untuk mengurangi beban komputer, Anda dapat mengurangi respons ping menjadi dua kali dalam 1 menit.
Respons ping setelah limitasi diberlakukan Setelah limitasi, perintah ping direspon kira-kira tiap 30 detik sekaliRespons ping setelah limitasi diberlakukan Setelah limitasi, perintah ping direspon kira-kira tiap 30 detik sekali

Membuat Linux sebagai router

Ini pertanyaan yang kerap terlontar jika kita ingin menghubungkan beberapa PC di rumah atau warnet ke Internet. Misalnya di sebuah warnet ada 16 komputer yang disiapkan untuk pelanggan. Lalu, Anda selaku pemilik berlangganan layanan ADSL dari suatu provider di Indonesia. Bia­sanya, hanya ada satu sampai dengan empat PC yang bisa langsung tersambung ke ADSL router (tergantung jumlah port Ethernet yang tersedia). Lalu, bagaimana dengan sisanya?

Apabila kita pikirkan sejenak, dibutuhkan suatu cara agar sekitar 14 komputer sisanya dapat “menumpang” koneksi pada komputer yang tersambung langsung ke router. Pengertian menumpang di sini adalah komputer berkomunikasi dengan Internet via komputer lainnya.

Ilustrasi lain adalah sebuah perusahaan memiliki hampir seratusan PC. Sang administrator selain meminta sambungan Internet, juga meminta dua alamat IP publik. Alamat IP ini untuk area Indonesia biasanya berawalan 202.x.x.x atau 203.x.x.x. Satu alamat akan digunakan untuk mail server, sementara satunya digunakan untuk gateway. Komputer yang memiliki IP publik bisa langsung berkomunikasi dengan Internet. Lalu, bagaimana dengan sisanya? Kita perlu trik seakan-akan komputer lain yang terhubung lewat gateway tersebut menggunakan IP publik.

Untuk mencapai hal ini, kita buat dulu beberapa asumsi:
1 Komputer yang dijadikan gateway memiliki dua network card. Network card pertama (eth0) memiliki IP 202.130.1.2 dan terhubung ke Internet
2 Network card kedua (eth1) memiliki IP 192.168.1.254 dan terhubung ke jaringan lokal lewat switch. Komputer-komputer lain dikoneksikan di kelompok switch yang sama.
3 Komputer-komputer pada LAN memiliki IP berawalan 192.168.1.x.

Hal pertama yang perlu dilakukan adalah memastikan bahwa semua komputer di LAN mengeset IP gateway-nya de­ngan benar. Pe­rintahnya adalah:
# route add default gw 192.168.1.254

Untuk membuatnya menjadi permanen setiap kali Linux di-reboot, kita bisa mengedit file konfigurasi network. Pada keluarga distribusi Fedora dan Redhat, kita edit file /etc/sysconfig/network-scripts/ifcfg-eth0 dan edit baris berikut:
GATEWAY=192.168.1.254
Simpan lalu restart fungsi network:
# service network restart

Hal di atas tidak perlu dilakukan jika alamat IP dan setting gateway dikirim oleh server DHCP (Dynamic Host Control Protocol). Cukup pastikan server DHCP telah mengirim informasi gateway yang benar. Di sisi gateway, kita gunakan suatu target yaitu MASQ, singkatan dari masquerade:
# iptables -t nat -A POSTROUTING -o eth0 -s
192.168.1.1/24 -d ! 192.168.1.1/24 -j MASQUERADE

Dari perintah di atas bisa disimpulkan bahwa target masquerade hanya bisa dile­takkan di tabel NAT di chain postrouting. Penyebutan output interface (-o), alamat asal (-s), dan alamat tujuan (-d) hanya bertujuan untuk lebih memperjelas jenis lalu lintas data yang ingin kita “samarkan”. Anda boleh saja membuang parameter ini dan tetap mencapai hasil yang sama.

Perintah berikut melengkapi masque­rade kita:
# iptables -A FORWARD -i eth1 -o eth0 -m state –state
RELATED,ESTABLISHED -j ACCEPT

Rule di atas akan memastikan bahwa koneksi balik dari Internet yang berhubung­an dengan inisiatif koneksi dari komputer-komputer di LAN diizinkan masuk. Tanpa rule ini, kemungkinan besar hubungan ke Internet akan macet.

Cara lain yang adalah dengan menggunakan target bernama SNAT (Source Network Address Translation):
# iptables -t nat -A POSTROUTING -j SNAT –to-source
192.168.1.254

Perhatikan bahwa opsi –to-source diberikan setelah definisi target. Di sini Anda perlu menyebutkan alamat IP “pengganti” bagi komputer-komputer pada jaringan (LAN). Di sinilah perbedaan paling utama antara SNAT dan MASQUERADE. Pada MASQUERADE, alamat IP “pengganti” tidak perlu disebutkan karena otomatis akan digantikan oleh alamat IP interface yang mengirim data (eth0).

Perbedaan lain menurut manual iptables adalah pada situasi penggunaan. Target masquerade sesuai untuk gateway yang tersambung secara dinamis pada Internet. Yang dimaksud dinamis disini adalah mendapat alamat IP yang belum tentu sama alias bukan statis. Sementara itu, SNAT sesuai untuk koneksi yang menggunakan alamat IP statis. Pada skenario kali ini, digunakan alamat statis sehingga solusi SNAT lebih tepat.

Pelacakan wireshark untuk masquerade Wireshark dapat digunakan untuk menampilkan isi request dari guest yang divirtualisasi ke Google.
Informasi padet data via Wireshark Request terlihat seperti dari IP host setelah melakukan proses masquerading dalam firewall.Informasi padet data via Wireshark Request terlihat seperti dari IP host setelah melakukan proses masquerading dalam firewall.

Mengatur waktu koneksi

Belakangan ini, koneksi Internet cenderung ditawarkan tanpa batas (unlimited). Kompetisi yang ketat di antara para penyedia layanan Internet di Indonesia mungkin menjadi salah satu penyebabnya. Meskipun demikian, pada situasi ter­tentu, kita harus membatasi waktu ak­ses Internet agar kegiatan utama kita tidak terganggu. Contohnya saat di kantor, akses Internet cenderung dibatasi pada jam istirahat makan siang atau waktu break lainnya. Itupun bisa saja ditambah dengan pemblokiran lainnya, misalnya karyawan tidak dapat mengakses website porno atau website lainnya yang dianggap menurunkan produktivitas (Facebook, Friendster, dan sejenisnya). Contoh lainnya, adanya pemblokiran pada program komunikasi, seperti Yahoo Messenger, IRC, dan Google Talk.

Hal serupa bisa juga diterapkan di tempat lain, misalnya di sekolah, lab di kampus, atau bahkan rumah kita sendiri.

Namun, bagaimana cara melakukannya? Katakanlah dipakai cara sangat sederhana dengan mematikan router ADSL di saat-saat tertentu. Cara ini cukup merepotkan. Cara lainnya yang lebih praktis adalah menggunakan fasilitas Access Control List (ACL) pada sistem proxy. Software Squid menyediakan fasilitas tersebut. Namun, coba tanyakan pada diri Anda sendiri, bagaimana agar user bisa meng­­akses Internet tetapi tetap melalui proxy?

Cara yang dianggap lebih efisien adalah menggunakan bantuan modul time di iptables. Modul ini tidak selalu ada di semua distro (distribusi). Yang jelas, modul ini telah tersedia langsung di distro Fedora 9, tetapi tidak tersedia di distro CentOS 5.3. Cara termudah memeriksa ada tidaknya modul tersebut adalah de­ngan perintah:
$ find /lib/xtables/ -iname “*time*”
/lib/xtables/libxt_time.so
Atau:
$ find /lib/iptables/ -iname “*time*”

Anda dipersilahkan mengecek sendiri, mana direktori yang eksis di sistem Linux Anda. Kalau digunakan asumsi seperti pada contoh pembuatan router dan kita hendak membatasi agar akses tidak bisa dilakukan pada jam 10 sampai dengan 12 siang, perintahnya adalah:
# iptables -A FORWARD -i eth1 -o eth0 -m time –time
start 10:00 –timestop 12:00 -j DROP
Kita bisa juga mengatur pemblokiran akses pada hari tertentu dengan perintah:
# iptables -I FORWARD 1 -i eth1 -o eth0 -m time -
-timestart 07:30 –timestop 12:00 –weekdays
Mon,Tue,Wed,Thu,Fri -j DROP

# iptables -I FORWARD 1 -i eth1 -o eth0 -m time -
-timestart 13:00 –timestop 17:00 –weekdays
Mon,Tue,Wed,Thu,Fri -j DROP

Dengan dua baris perintah di atas, kita tentukan agar pada jam 7 pagi sampai jam 12 siang, dilanjutkan jam 1 siang sampai 5 sore, akses diblokir. Peraturan ini berlaku untuk hari Senin sampai dengan Jumat. Pada perintah tersebut, terlihat penyebutan hari cukup dituliskan dengan tiga huruf pertama dari nama hari dalam bahasa Inggris, contohnya “Sat” untuk “Saturday”. Huruf pertama harus huruf kapital.
Selain penyebutan jam dan nama hari, kita bisa juga menggunakan parameter-parameter berikut:

–datestart: menandakan awal suatu interval tanggal. Formatnya adalah YYYY-MM-DD, contoh 2010-05-01 untuk menyebutkan 1 Mei 2010.

–datestop: menandakan akhir suatu interval tanggal. Formatnya sama seperti di atas.

–monthdays: menyebutkan tanggal rule berlaku. Yang bisa dimasukkan di sini adalah angka 1 sampai dengan 31. Di sini tanggal terbesar disesuaikan dengan bulan bersangkutan, misalnya di bulan April tanggal terbesar adalah 30.

Penutup

Masih banyak fungsi lain dari iptables yang bisa digunakan. Melalui perintah “man iptables”, Anda bisa belajar banyak hal, seperti membatasi jumlah koneksi, memblokir koneksi jika data mengandung string tertentu, dan lain sebagainya. Selamat belajar dan mencobanya!

ref:http://gerakanopensource.wordpress.com/2011/06/21/manajemen-jaringan-dengan-iptables/

Sabtu, 17 September 2011

SQUID DI UBUNTU SERVER


Selama ini untuk melakukan aktivitas internetan, saya selalu menggunakan dua browser favorit yaitu Mozilla Firefox dan Opera. Kenapa perlu dua browser, tentunya karena menurut saya diantara keduanya memiliki keunggulan masing-masing yang saling melengkapi. Namun akhir-akhir ini saya sering kesal karena kualitas koneksi internet yang saya pakai sedang mengalamai masalah, super lambat.
Lantas apa hubungannya dengan squid? Beberapa diantara kita mungkin sudah mahfum bahwa untuk mensiasati lambatnya koneksi internet, kita bisa memanfaatkan fitur web cache yang ada pada browser. Jadi untuk bagian-bagian tertentu dari halaman web yang pernah kita kunjungi, browser nggak perlu lagi mengambil dari server, cukup dari simpanannya saja.
Oke masalah sedikit tersiasati, namun itu hanya berlaku untuk browser yang sama. Padahal saya punya dua browser favorit, dan saya ingin halaman yang pernah dikunjungi Firefox dan tersimpan dalam cache juga bisa dimanfaatkan oleh Opera dan begitu pula sebaliknya. Nah akhirnya saya mulai melirik untuk membuat local web cache server pada komputer saya, dan squidlah yang menjadi pilihan.
Berikut ini adalah langkah-langkah ngoprek squid untuk dijadikan local cache server:
1. Instalasi squid.

Buka terminal dan ketikkan perintah berikut :
$ sudo apt-get install squid
2. Membuat file log dan direktory untuk cache.

File log yang dimaksud adalah untuk cache_log dan access_log. Cache_log berfungsi untuk mencatat penulisan cache pada cache direktory sedangkan access log akan berisi daftar trafik yang pernah terjadi melalui port squid.
Direktory cache adalah tempat penyimpanan cache website yang pernah dikunjungi. Ketiga item tersebut harus menjadi hak milik cache_efective_user, dan supaya gampang kita sebut saja squid sebagai usernya.

$ mkdir /usr/local/squid
$ mkdir /usr/local/squid/cache
$ touch /usr/local/squid/cache.log
$ touch /usr/local/squid/access.log
$ sudo adduser squid
$ chown -Rf squid.squid /usr/local/squid
3. Mengkonfigurasi squid

Supaya bisa bekerja sesuai dengan keinginan kita harus memodifikasi isi dari squid.conf file. Biasanya setelah default install, file tersebut tersimpan di direktori /etc/squid/. Namun seandainya tidak ketemu, bisa menggunakan perintah berikut untuk mencarinya: sudo find / -name squid.conf
Saat pertama kali terinstall, squid akan memiliki sebuah default configuration file yang disertai coment-comment yang begitu buanyak, sehingga poin-poin konfigurasinya justru tersembunyi di dalam rimba coment tersebut. Jalankan perintah berikut untuk menghilangkan coment dan baris kosong pada default squid.conf file:
$ sudo chown squid.squid /var/spool/squid -Rf
$ sudo chown squid.squid -Rf /etc/squid
$ sudo -u squid mv /etc/squid/squid.conf /etc/squid/squid.conf.original
$ sudo -u squid touch /etc/squid/squid.conf
$ sudo -u squid cat /etc/squid/squid.conf.original | sed ‘/ *#/d; /^ *$/d’ > /etc/squid/squid.conf

Salah satu item yang perlu di-customize dari squid config file ini adalah variable yang berisi file log dan direktory cache sehingga merujuk pada yang telah kita siapkan sebelumnya.
cache_dir ufs /usr/local/squid/cache 1024 16 256
access_log /usr/local/squid/access.log
cache_log /usr/local/squid/cache.log
cache_store_log none

Kemudian untuk membuat squid sebagai chache server, option berikut yang perlu ditambahkan :
http_port 3128 transparent
cache_mem 1024 MB
cache_swap_low 94
cache_swap_high 96
maximum_object_size 16384 KB
minimum_object_size 4 KB
maximum_object_size_in_memory 2048 KB
fqdncache_size 1024
cache_replacement_policy heap GDSF
memory_replacement_policy heap GDSF

visible_hostname localhost
cache_mgr admin@localhost
cache_effective_user squid
cache_effective_group squid
Berikut ini adalah contoh configuration file yang saya gunakan.
4. Membuat struktur cache directory.
Dengan menjalankan perintah berikut, squid akan membentuk struktur direktori untuk penyimpanan cachenya:
$ sudo -u squid squid –z
5. Test squid
Jalankah perintah berikut untuk menguji coba konfigurasi squid yang telah dimodifikasi:
$ squid –d 1 -D
Kalau tidak ada error maka configuration file yang kita buat sudah ok. Dan jika ternyata masih ada error maka setelah melakukan perubahan pada squid.conf, jalankan perintah squid –k reconfigure untuk memerintahkan squid membaca ulang squid conf yang telah diedit.
6. Menjalankan squid
Untuk menjalankan squid, gunakan perintah berikut ini:

$ squid -sYD
Setelah langkah langkah diatas sukses, selanjutnya kita perlu mensetting browser supaya menggunakan proxy pada localhost port 3128.

IPTABLES di UBUNTU


$ sudo iptables -L
Akan keluar aturan “rules” yang sudah ada di iptables. Jika kita baru saja menginstalasi server, biasanya masih belum ada rules yang terpasang, kita akan melihat
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

Option Dasar iptables
Berikut adalah beberapa option dasar yang sering digunakan dalam mengkonfigurasi iptables.

-A – Tambahkan rule / aturan ini ke rantai aturan yang ada. Rantai yang valid adalah INPUT, FORWARD and OUTPUT. Kita biasanya lebih banyak menggunakan rantai INPUT yang berdampak pada traffic yang masuk.
-L – memperlihatkan daftar aturan / rule yang ada iptables.
-m state – mengijinkan aturan di cocokan berdasarkan kondisi sambungan (connection state). Mengijinkan penggunaan option -–state.
--state – Mendefinisikan daftar dari kondisi / states bagi aturan untuk di cocokan. Beberapa state yang valid, adalah,
NEW – Sambungan baru, dan belum pernah terlihat sebelumnya.
RELATED – Sambungan baru, tapi berhubungan dengan sambungan lain yang telah di ijinkan.
ESTABLISHED – Sambungan yang sudah terjadi.
INVALID – Traffic yang karena berbagai alasan tidak bisa di identifikasi.

-m limit - Dibutuhkan oleh rule jika ingin melakukan pencocokan dalam waktu / jumlah tertentu. Mengijinkan penggunakan option --limit. Berguna untuk membatasi aturan logging.
--limit – Kecepatan maksimum pencocokan, diberikan dalam bentuk angka yang di ikuti oleh "/second", "/minute", "/hour", atau "/day" tergantung seberapa sering kita ingin melakukan pencocokan aturan. Jika option ini tidak digunakan maka default-nya adalah "3/hour".
-p – Protokol yang digunakan untuk sambungan.
--dport – Port tujuan yang digunakan oleh aturan iptables. Bisa berupa satu port, bisa juga satu range ditulis sebagai start:end, yang akan mencocokan semua port start sampai end.

-j - Jump ke target yang spesifik. iptables mempunyai empat (4) target default, yaitu,
ACCEPT - Accept / menerika paket dan berhenti memproses aturan dalam rantai aturan ini.
REJECT - Reject / tlak paket dan beritahu ke pengirim bahwa kita menolak paket tersebut, dan stop pemrosesan aturan dalam rantai aturan ini.
DROP – Diam-diam tidak pedulikan paket, dan stop pemrosesan aturan di rantai aturan ini.
LOG - Log / catat paket, dan teruskan memprosesan aturan di rantai aturan ini. Mengijinkan penggunaan option --log-prefix dan --log-level.
--log-prefix – Jika pencatatan di lakukan, letakan text / tulisan sebelum catatan. Gunakan kutip di text / tulisan.
--log-level – Pencatatan menggunakan syslog level. 7 adalah pilihan yang baik, kecuali kita perlu suatu yang lain.
-i – Lakukan pencocokan jika paket yang masuk dari interface tertentu.
-I – Insert / masukan aturan. Butuh dua (2) option, yaitu, rantai aturan yang mana, dan nomor aturan. Jadi -I INPUT 5 akan memasukan ke rantai INPUT dan menjadikannya aturan nomor 5 di daftar.
-v – Menampilkan lebih banyak informasi di layar. Sangat membantu jika ada beberapa aturan yang tampak mirip jika di tampilkan tanpa -v.

Pengijinan Sesi Sambungan Yang Terbentuk
Kita dapat mengijinkaan sesi sambungan yang terbentuk untuk menerima traffic, melalui perintah,
$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Mengijinkan Traffic Masuk ke Port Tertentu.
Di awal proses, sebaiknya iptables memblok semua traffic. Biasanya kita membutuhkan untuk bekerja melalui saluran SSH, oleh karenanya biasanya kita mengijinkan untuk traffic SSH dan memblok traffic lainnya.
Untuk mengijinkan traffic masuk ke default port SSH nomor 22, kita harus mengijinkan semua TCP traffic yang masuk ke port 22.
$ sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
Dari daftar option di atas, kita dapat mengetahui bahwa aturan iptables tersebut mengatur agar
masukkan aturan ini ke rantai input (-A INPUT) artinya kita melihat traffic yang masuk. cek apakah protokol yang digunakan adalah TCP (-p tcp). Jika TCP, cek apakah packet menuju port SSH (--dport ssh). Jika menuju SSH, maka packet di terima (-j ACCEPT).
Mari kita cek aturan yang di bentuk oleh perintah di atas menggunakan perintah iptables -L,
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Selanjutnya, kita akan mengijinkan semua traffic web untuk masuk, gunakan perintah berikut
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Cek aturan yang kita buat mengunakan perintah iptables -L, sebagia berikut,
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
Kita harus secara spesifik mengijinkan TCP traffic ke port SSH dan Web, tapi kita belum mem-block apa-apa, dan semua traffic masuk bisa masuk.

Blocking Traffic
Jika aturan telah memutusan untuk menerima packet (ACCEPT), maka aturan selanjutnya tidak akan berefek pada packet tersebut. Karena aturan yang kita buat mengijinkan SSH dan Web traffic, selama aturan untuk memblok semua traffic kita letakan terakhir sesudah aturan mengijinkan SSH dan Web, maka kita akan tetap dapat menerima traffic SSH dan Web yang kita inginkan. Jadi kita harus menambahkan (-A) aturan untuk mem-block traffic di akhir.
$ sudo iptables -A INPUT -j DROP
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
Karena kita tidak menentukan interface atau protokol yang digunakan, semua traffic ke semua pirt maupun semua interface akan di blok, kecuali web dan SSH.

Editing iptables
Masalah utama yang akan kita peroleh adalah, loopback port pada interface “lo” akan di blok. Oleh karena itu kita perlu mengijinkan agar menerima semua traffic untuk loopback (“lo”). Hal ini dapat dilakukan dengan cara meng-Insert (-I) aturan pada rantai INPUT bagi interface lo, agar masuk ke urutan paling atas.
$ sudo iptables -I INPUT 1 -i lo -j ACCEPT
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
Kalau kita lihat di atas, aturan paling atas dan aturan paling bawah agak mirip, untuk melihat lebih detail dari aturan tersebut, kita dapat menggunakan perintah,
$ sudo iptables -L -v
Chain INPUT (policy ALLOW 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
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
0 0 DROP all -- any any anywhere anywhere
Kita melihat lebih banyak informasi disini. Aturan untuk mengijinkan loopback sangat penting artinya, karena banyak program akan menggunakan interface loopback untuk berkomunikasi satu sama lain. Jika loopback tidak di ijinkan maka kemungkinan kita akan merusak program tersebut.

Logging / Pencatatan
Dalam semua contoh di atas, semua traffic tidak di log. Jika kita ingin untuk mencatat paket yang di dop, cara yang paling cepat adalah,
$ sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
Silahkan lihat di bagian atas untuk melihat aap yang terjadi dalam proses logging.

Saving iptables
Jika kita booting mesin yang kita gunakan, maka apa yang kita kerjakan sejauh ini akan hilang. Tentunya dapat saja kita mengetik ulang semua perintah yang kita masukkan satu per satu setiap kali reboot, agar lebih enak hidup kita, maka kita dapat menggunakan perintah iptables-save dan iptables-restore untuk menyimpan dan merestore iptables.
Bagi anda yang menggunakan Ubuntu terutama Ubuntu Fiesty, tampaknya Ubuntu Network Manager (masih beta) agak conflict dengan iptables. Oleh karenanya mungkin ada baiknya kita bypass Ubuntu Network Manager.
Dengan tidak menggunakan Ubuntu Network Manager, kita dapat men-save konfigurasi iptables agar di start setiap kali booting menggunakan perintah
$ sudo sh -c "iptables-save > /etc/iptables.rules"
Kita perlu memodifikasi /etc/network/interfaces agar aturan iptables yang kita gunakan dapat berjalan secara automatis. Memang kita perlu mengetahui ke interface mana aturan yang kita buat akan digunakan. Biasanya kita menggunakan eth0. Untuk interface wireless, kita dapat mencek penggunaaannya mengunakan perintah,
$ iwconfig
Kita perlu mengedit file /etc/network/interfaces misalnya menggunakan perintah
$ sudo nano /etc/network/interfaces
Jika kita sudah menemukan nama interface yang digunakan, maka di akhir interface kita dapat menambahkan perintah,
pre-up iptables-restore < /etc/iptables.rules
Selanjutnya di bawahnya kita tambahkan perintah sesudah interface down, menggunakan perintah,
post-down iptables-restore < /etc/iptables.rules
Contoh real konfigurasi interfaces adalah sebagai berikut,
auto eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-restore < /etc/iptables.rules


Konfigurasi Startup di NetworkManager
Ubuntu Network Manager mempunyai kemampuan untuk menjalankan script pada saat dia mengaktifkan atau men-nonaktifkan interface. Untuk men-save aturan iptables pada saat shutdown, dan me-restore iptables saat startup, kita akan membuat script seperti itu. Untuk memulai, kita dapat mengedit file,
$ gksudo gedit /etc/NetworkManager/dispatcher.d/01firewall
Kita dapat memasukan script di bawah ini melalui editor, save dan exit.
#!/bin/bash
if [ -x /usr/bin/logger ]; then
LOGGER="/usr/bin/logger -s -p daemon.info -t FirewallHandler"
else
LOGGER=echo
fi

case "$2" in
pre-up)
if [ ! -r /etc/iptables.rules ]; then
${LOGGER} "No iptables rules exist to restore."
return
fi
if [ ! -x /sbin/iptables-restore ]; then
${LOGGER} "No program exists to restore iptables rules."
return
fi
${LOGGER} "Restoring iptables rules"
/sbin/iptables-restore -c < /etc/iptables.rules
;;
post-down)
if [ ! -x /sbin/iptables-save ]; then
${LOGGER} "No program exists to save iptables rules."
return
fi
${LOGGER} "Saving iptables rules."
/sbin/iptables-save -c > /etc/iptables.rules
;;
*)
;;
esac
Akhirnya, kita perlu memastikan bahwa Ubuntu Network Manager dapat menjalankan script tersebut. Melalui konsol, kita dapat menjalankan perintah berikut,
$ sudo chmod +x /etc/NetworkManager/dispatcher.d/01firewall


Sedikit Tip
Jika kita sering mengedit secara manual iptables. Perubahan iptables yang sering biasanya terjadi pada masa development, pada saat operasional sebetulnya tidak banyak perubahan aturan di iptables. Jika perubaha cukup banyak, maka sebaiknya kita menambahkan beberapa kalimat berikut ke file /etc/network/interfaces:
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-save > /etc/iptables.rules
Kalimat "post-down iptables-save > /etc/iptables.rules" akan menyimpan aturan agar dapat digunakan lagi sesudah booting.

Penggunaan iptables-save/restore untuk Test Aturan
Jika kita berexperimen dengan iptables, ada baiknya menggunakan perintah iptables-save dan iptables-restore untuk mengedit dan test aturan yang kita buat. Untuk mengedit aturan iptables yang kita buat dapat menggunakan perintah berikut (misalnya menggunakan gedit),
$ sudo iptables-save > /etc/iptables.rules
$ gksudo gedit /etc/iptables.rules
Kita akan memperoleh sebuah file yang mirip dengan yang kita lakukan,
# Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006
*filter
:INPUT ACCEPT [368:102354]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [92952:20764374]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
COMMIT
# Completed on Sun Apr 23 06:19:53 2006
Tampak dari file tersebut bahwa perintah tersebut adalah perintah iptables, tanpa ada “iptables”-nya. Kita dapat mengedit file ini, dan men-save jika telah selesai. Untuk melakukan test dapat di jalankan menggunakan perintah,
$ sudo iptables-restore < /etc/iptables.rules
Sesudah test, kita dapat mensave apa yang sedang di kutak-katik menggunakan perintah iptables-save ke file /etc/network/interfaces melalui perintah
$ sudo iptables-save > /etc/iptables.rules

Lebih Detail Tentang Logging
Untuk melihat lebih detail dari syslog kita perlu menambahkan rantai tambahan. Berikut adalah contoh dari /etc/iptables.rules memperlihatkan bagaimana setup iptables me-log dari syslog:
# Generated by iptables-save v1.3.1 on Sun Apr 23 05:32:09 2006
*filter
:INPUT ACCEPT [273:55355]
:FORWARD ACCEPT [0:0]
:LOGNDROP - [0:0]
:OUTPUT ACCEPT [92376:20668252]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j LOGNDROP
-A LOGNDROP -p tcp -m limit --limit 5/min -j LOG --log-prefix "Denied TCP: " --log-level 7
-A LOGNDROP -p udp -m limit --limit 5/min -j LOG --log-prefix "Denied UDP: " --log-level 7
-A LOGNDROP -p icmp -m limit --limit 5/min -j LOG --log-prefix "Denied ICMP: " --log-level 7
-A LOGNDROP -j DROP
COMMIT
# Completed on Sun Apr 23 05:32:09 2006
Perhatikan ada rantai baru CHAIN di sebut LOGNDROP di awal file. Tampak standard DROP yang biasanya ada di bawah rantai INPUT sekarang digantikan oleh LOGNDROP dan menambahkan deskripsi protokol agar mudah membaca log tersebut. Akhirnya kita akan membuang / mendrop traffic di akhir rantai LOGNDROP. Beberapa catatan berikut akan memberikan keterangan apa yang terjadi,
--limit mengatur berapa banyak pencatatan dari dari sebuah aturan ke syslog
--log-prefix "Denied..." menambahkan prefix untuk memudahkan membaca syslog
--log-level 7 mengatur tingkat banyaknya informasi di syslog

Mematikan firewall
Jika kita membutuhkan untuk men-disable / mematikan firewall sementara, hal ini dapat dilakukan dengan mudah menggunakan perintah flush (-F), sebagai berikut,
$ sudo iptables -F

Kemudahan Konfigurasi Menggunakan Grafik
Bagi kita yang agak sulit untuk menggunakan konsol, kita akan sangat di bantu dengan berbagai aplikasi untuk mengkonfigurasi firewall menggunakan grafik. Salah satu software favorit yang mungkin akan sangat membantu adalah,
Webmin - http://www.webmin.com
Firestarter - http://www.fs-security.com