[share]ALL about iptables
#1
assalmualaikum ,,,
sebelumnya ane mohon mhaap karena buka thread baru tentang iptables,,
tapi dari thread tentang iptables yang ane baca langsung ke penggunaannya,, makanya ane maw post penjelasan yang ane dapat waktu jalan2 abis subuh tadi,,hehe
kalau salah boleh dihapus,,cekidotdot yok,

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.

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

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

2. Comman
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.
list command
Spoiler! :

[Image: 4hrs5l.png]

3. option
Option digunakan dikombinasikan dengan command tertentu yang akan menghasilkan suatu variasi perintah.
list option
Spoiler! :

[Image: 2e4lpja.png]

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.
list generic match
Spoiler! :

[Image: 1zvy73s.png]

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
Spoiler! :

[Image: 1z33vir.png]


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
list target jump
[spoiler][Image: auwnwg.png][\spoiler]

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

Referensi
www.netfilter.org
Manual page iptables
rootbox.or.id/tips/iptables.html

#2
sip om mantep banget uy...
iptables ini banyak gunanya juga yah...
bisa NAT, bisa blok paket, dll..mantap dah om Big Grin
let's visit Technomorphosa Heart

#3
Widih yang dicari keluar juga, thanks om Big Grin
Berguna sekali ini Big Grin
root@nosetrave:~# ./plagiat.sh
English motherfucker, do you speak it ?
root@nosetrave:~#


#4
added ke wiki ya ...

#5
nice bro .. ane ijin publish di halaman depan ... trims
FOLLOW @DutaLinux
for more question and sharing about security and Opensource only

#6
(01-09-2012, 03:16 PM)zee eichel Wrote: nice bro .. ane ijin publish di halaman depan ... trims
ok om zee,,
Quote:cassaprodigy - Today 12:07 PM
added ke wiki ya ...
sip om cassa,,monggo
Quote:NoseTrave - Today 11:03 AM
Widih yang dicari keluar juga, thanks om Big Grin
Berguna sekali ini Big Grin
iya masama Smile
Quote:NoseTrave - Today 11:03 AM
Widih yang dicari keluar juga, thanks om Big Grin
Berguna sekali ini Big Grin
masama om,,

mari semangat belajar

#7
Ijin om nambahin dikit tentang iptables.. Smile
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 dptConfusedsh

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


[edit] 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 dptConfusedsh
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.


[edit] 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 dptConfusedsh
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 dptConfusedsh
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.


[edit] 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.


[edit] 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



[edit] 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



[edit] 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.


[edit] 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


[edit] 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


[edit] 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

di sadur dari : opensource.telkomspeedy.com

#8
(01-13-2012, 07:58 PM)tempe Wrote: Ijin om nambahin dikit tentang iptables.. Smile
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 dptConfusedsh

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


[edit] 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 dptConfusedsh
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.


[edit] 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 dptConfusedsh
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 dptConfusedsh
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.


[edit] 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.


[edit] 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



[edit] 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



[edit] 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.


[edit] 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


[edit] 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


[edit] 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

di sadur dari : opensource.telkomspeedy.com
mantep mas,,thanks tambahan nya,,ini yg lebih lanjut nyaa,,yang ane itu dasarnya heheh,,tpi kepanjangan mas,, di quote per item jdi asik

#9
mumet saia yang baca wkwkwkkw Tongue
Every Second, Every Minutes, Every Hours, Every Days Its Never End

#10
baca yang dasar dulu yang paling atas Smile hihihi yang di post si junior ya namanya Tongue
terus baru baca yang tambahan yang di post om tempe






Users browsing this thread: 1 Guest(s)