Senin, 15 Oktober 2012

Contoh Iptables rule dasar yang umum digunakan


Netfilter adalah satu set kait di dalam kernel Linux yang memungkinkan modul kernel untuk mendaftarkan fungsi callback. Sebuah fungsi callback terdaftar kemudian dipanggil kembali untuk setiap paket yang melintasi kail masing-masing dalam tumpukan jaringan.Firewall berbasis linux ini dikendalikan oleh program yang di sebut iptables untuk melakukan pemilteran IPv4 atau IPv6. Beberapa contoh penerapan iptables di bawah ini adalah umum saya kira dan banyak digunakan sebagai pembanding dan sebagainya untuk sisi konfigurasi lebih advance lagi, berikut contoh-contoh aturan iptables :Catatan:
  1. Tanda # di depan aturan adalah status login root.
  1. Pada contoh rule aturan iptables yang panjang dan tidak muat dalam 1 baris pada posting di bawah maka hati-hati jika langsung di copy, pastikan rule penulisannya tersambung atau bisa menggunakan "\" untuk menyatukan 2 baris rule iptables .
  1. Tanda # di depan suatu comment dalam script bukan aturan dan tidak akan di eksekusi 
Melihat/cek aturan firewall yang sedang berjalan :
  • # iptables -L

lebih detail bisa dengan :
  • # iptables -L -n -v

Dimana :-L adalah list aturan-n adalah menampilkan alamat IP dan port dalam format numerik. Jangan gunakan DNS untuk menyelesaikan nama. Hal ini akan mempercepat daftar.
  • -v adalah menampilkan rincian informasi. Pilihan ini membuat perintah list untuk menampilkan nama interfaces, opsi aturan, dan mask TOS. Counter paket dan byte juga tercantum, dengan akhiran 'K', 'M' atau 'G' untuk 1000, 1.000.000 dan 1000000000.
Untuk memeriksa aturan firewall secara penomoran baris :
  • # iptables -n -L -v --line-numbers
    Dengan cara ini kita bisa menghapus/menambahkan aturan nomor berapa akan di rubah
Untuk menampilkan aturan chain di INPUT atau OUTPUT :# iptables -L INPUT -n -v
  • # iptables -L OUTPUT -n -v --line-numbers
Untuk merestart/stop/start aturan firewall untuk pengguna RHEL, Centos, Fedora, atau keluarga lainnya :# service iptables stop# service iptables start
  • # service iptables restart
Cara manual melakukan stop atau hapus semua aturan :# iptables -F# iptables -X# iptables -t nat -F# iptables -t nat -X# iptables -t mangle -F# iptables -t mangle -X# iptables -P INPUT ACCEPT# iptables -P OUTPUT ACCEPT
  • # iptables -P FORWARD ACCEPT

Dimana :-F adalah penghapusan (flushing) semua aturan atau rules-X adalah penghapusan chain (rantai)-t nama_tabel adalah pemilihan tabel (di sebut nat atau mangle) dan hapus/flush aturan.
  • -P adalah mengatura kebijakan default pada chain/rantai (seperti DROPREJECT, atauACCEPT)

  • Menghapus aturan pada chain, misal INPUT atau OUTPUT

Pertama, lihat list penomoran aturan iptables pada chain INPUT atau OUTPUT# iptables -L INPUT -n --line-numbers
  • # iptables -L OUTPUT -n --line-numbers

Kedua, tentukan nomor berapa yang hendak di hapus, dalam contoh misal nomor 4 :
  • # iptables -D INPUT 4

  • Atau cara manual bisa dengan dari mengetik ulang aturan yang sama namun opsi -A di ganti -D

Dimana:
  • -D adalah delete/hapus
Memasukan aturan iptables pada susunan aturan iptables yang sudah ada sebelumnya :Lihat penomoran aturan iptables pada suatu chain :
  • # iptables -L INPUT -n --line-numbers

Misal contoh output di konsol dari hasil command di atas adalah sebagai berikut :Chain INPUT (policy DROP)num target prot opt source destination1 DROP all -- 202.54.1.1 0.0.0.0/0
  • 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Kita ingin menyelipkan aturan baru diantara nomor 2 dan 3, maka :
  • # iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Cek update terbaru aturan pada chain tersebut :
  • # iptables -L INPUT -n --line-numbers

dan output konsolenya sebagai berikut :Chain INPUT (policy DROP)num target prot opt source destination1 DROP all -- 202.54.1.1 0.0.0.0/02 DROP all -- 202.54.1.2 0.0.0.0/0
  • 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Cara save iptables di keluarga RHEL seperti Centos, Fedora, dll :
  • # service iptables save

Untuk distro keluarga linux lainnya gunakan perintah save yang di sertakan spesifik, misal :
  • # iptables-save > /root/firewall.rules

Dimana :
  • Penyimpanan semua aturan iptables akan di simpan ke direktori /root dengan nama file firewall.rule

  • Untuk alternatif lain melakukan save di keluarga debian/ubuntu dan lainnya silahkan buka lagi posting saya sebelumnya tentang cara save iptables di keluarga debian/ubuntu.
Me-restore atau mengembalikan aturan iptables yang sebelumnya lebih sesuai dari pada yang baru (jika itu kasusnya) :
  • # iptables-restore < /root/firewall.rules

Kemudian di restart iptablesnya jika di keluarga/turunan RHEL
  • # service iptables restart
Mengganti default aturan pada chain, misal di INPUT yang awalnya dari ACCEPT ingin ke DROP :
  • # iptables -P INPUT DROP
Memblok traffic masuk di interface yang mengarah ke Internet tetapi membiarkan traffic yang keluar :# iptables -P INPUT DROP# iptables -P FORWARD DROP# iptables -P OUTPUT ACCEPT
  • # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
Drop jaringan private yang berada di interface publik (internet) :IP spoofing tidak lain untuk menghentikan bentang alamat IPv4 untuk jaringan pribadi pada interface publik. Packets with non-routable source addresses should be rejected using the following syntax: Paket dengan alamat sumber non-routable harus ditolak menggunakan sintaks berikut:# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
  • # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Blok traffic masuk suatu IP pada semua interface karena sesuatu hal :# iptables -A INPUT -s 1.2.3.4 -j DROP
  • # iptables -A INPUT -s 192.168.0.0/24 -j DROP

  • Tambahkan -i eth* jika ingin menspesifikan pada interface tertentu
Blok request traffic masuk ke port-port tertentu :Blok semua request ke port 80 :# iptables -A INPUT -p tcp --dport 80 -j DROP
  • # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Blok dari ip 192.168.0.22 jika merequest port 80 (http) :# iptables -A INPUT -p tcp -s 192.168.0.22 --dport 80 -j DROP
  • # iptables -A INPUT -i eth1 -p tcp -s 192.168.0.22/32 --dport 80 -j DROP
Log dan Drop paketKetik sebagai berikut untuk mencatat log dari semua paket yang di drop pada interface publik yang disini saya sebut di eth1 :# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROPSecara default, pencatatan log ada di dir /var/log/messages :# tail -f /var/log/messages
  • # grep --color 'IP SPOOF' /var/log/messages
Drop atau Accept dari MAC Address :Hanya mengijinkan traffic masuk 22 saja dari MAC Address 00:0F:EA:91:04:08# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
  • # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
Blok paket ICMP ping request :Blok semua traffic masuk protokol jenis icmp
  • # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Blok semua traffic masuk protokol jenis icmp pada interfaces eth1
  • # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Batasi request ping pada jaringan atau host tertentu :Di asumsikan default policy INPUT adalah DROP, maka# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
  • # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Buka bentang port tertentuMisal, bentang port yang akan di buka untuk traffic masuk dari 7000:8000, maka :
  • # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:8000 -j ACCEPT
Buka bentangan IP tertentuMisal hanya menyetujui traffic masuk sambungan ke port 80 protokol tcp hanya di rentan IP 192.168.0.100 s/d 192.168.0.200 :
  • # iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.0.100-192.168.0.200 -j ACCEPT

Contoh pada NAT, dimana proses terjadi setelah routing :
  • # iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.100-192.168.0.200
Aturan firewall yang sudah di rasa stabil dan firewall akan di Restart.Saat kita merestart service firewall maka koneksi yang sedang terjalin saat itu akan drop sementara karena modul yang terbongkar di distro Linux RHEL/Fedora/Centos dan sebagainya. Edit /etc/sysconfig/iptables-config dan atur IPTABLES_MODULES_UNLOAD sebagai berikut:
  • IPTABLES_MODULES_UNLOAD = no
Bantuan jika terjadi flooding iptables di layar suatu server.Gunakan opsi crit log untuk mengirim pesan ke file log bukannya ke konsol:
  • # iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit

Blok atau buka port umum yang terbuka.Sisipkan ACCEPT dengan DROP untuk memblok port (ini di tulis dalam sebuah script) :## buka port ssh tcp port 22 ##iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  • iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

## buka cups (layanan printing) udp/tcp port 631 untuk user di LAN ##iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
  • iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

## Setujui sinkronisasi waktu via NTP untuk user di LAN (buka udp port 123) ##
  • iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

## buka port tcp 25 (smtp) untuk semua ##
  • iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

## buka port dns server untuk semua ##iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
  • iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

## buka http/https (apache) server port untuk semua ##iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
  • iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

## buka tcp port 110 (pop3) untuk semua ##
  • iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

## open tcp port 143 (imap) for all #### buka tcp port 143 (imap) untuk semua ##
  • iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

## buka akses ke samba file server hanya untuk user LAN saja ##iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPTiptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPTiptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
  • iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

## buka akses ke proxy server hanya untuk user LAN saja ##
  • iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT

## buka akses ke mysql server hanya untuk user LAN saja ##
  • iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Batasi koneksi pararel dari beberapa klien dalam satu kali waktu ke server
  • Kita dapat menggunakan modul connlimit untuk menempatkan pembatasan tersebut. Untuk memungkinkan hanya 3 koneksi per host ssh klien, masukkan : # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Set request HTTP ke 20 :
  • # iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Troubleshooting iptables.Untuk mengetahui lebih detail tentang iptables silahkan halaman manualnya dengan mengetikan perintah seperti di bawah ini pada konsol/terminal :
  • # man iptables

  • atau

  • # iptables -h

Untuk melihat perintah iptables secara lebih spesifik, misal mengenai -j DROP :
  • # iptables -j DROP -h
Menguji/tes aturan iptables apakah sudah benar.Cari tahu port yang terbuka atau tidak :
  • # netstat -tulpn

Cari tahu apakah tcp port 80 terbuka atau tidak :
  • # netstat -tulpn | grep :80

Jika port 80 tidak terbuka, start-kan apache :
  • # service httpd start

  • atau

  • # /etc/init.d/apache2 start

Memastikan iptables mengijinkan akses ke port 80 :
  • # iptables -L INPUT -v -n | grep 80

Jika tidak, buka port 80 menggunakan iptables untuk semua pengguna:# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
  • # service iptables save

Gunakan perintah telnet untuk melihat apakah firewall memungkinkan untuk terhubung ke port 80:
Contoh outputnya kurang lebih sebagai berikut :Trying 75.126.153.206...Connected to www.ncupisme.blogspot.com.Escape character is '^]'.^]telnet> quit
  • Connection closed.

Kita juga dapat menggunakan nmap untuk menyelidiki server kita sendiri dengan menggunakan sintaks sebagai berikut:
Contoh output :Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 ISTInteresting ports on www.ncupisme.blogspot.com (75.126.153.206):PORT STATE SERVICE80/tcp open http
  • Nmap done: 1 IP address (1 host up) scanned in 1.00 seconds

  • Disarankan juga kalian menginstal dan menggunakan sniffer seperti ngrep tcpdupm dan untuk menguji pengaturan firewall.
Kesimpulan:Posting ini hanya sedikit dari daftar aturan dasar paling umum untuk pengguna linux yang sedang belajar iptables. Kedepannya kita dapat membuat dan membangun aturan yang lebih kompleks. Hal ini membutuhkan pemahaman yang baik mengenani konsep TCP/IP, tuning kernel linux melalui sysctl.conf, dan pengetahuan yang baik dari setup kalian sendiri.Sumber blognya Bang IBAL ( ibolobolo.wordpress.com )

Tidak ada komentar: