Contoh Iptables rule dasar yang umum digunakan  ncuptea blog

Contoh Iptables rule dasar yang umum digunakan

Kita flashback kebelakang posting blog ini dan membahas ulang mengenai iptables, namun kali ini kita sertakan contoh aturan yang umum di perlukan untuk sebuah firewall linux.

Linux datang dengan di lengkapi firewall berbasis host yang disebut netfilter, menurut situs resminya.

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.
  2. 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 .
  3. 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 DROP, REJECT, atau ACCEPT)

    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 destination
      1 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 destination
      1 DROP all -- 202.54.1.1 0.0.0.0/0
      2 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 paket
    Ketik 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 DROP
    Secara 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 tertentu
    Misal, 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 tertentu
    Misal 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 ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
    iptables -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:
    # telnet www.ncupisme.blogspot.com 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:
    # nmap -sS -p 80 www.ncupisme.blogspot.com

    Contoh output :
    Starting Nmap 5.00 ( http://nmap.org ) at 2011-12-13 13:19 IST
    Interesting ports on www.ncupisme.blogspot.com (75.126.153.206):
    PORT STATE SERVICE
    80/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.

Referensi :
- netfilter.org
- cybercity.biz

1 comment:

  1. maaf newbie bertanya, ane adda kasus nih gan. mohon bantuannya.
    misalkan ane punya IP:

    IP Address IDS 192.168.1.2 eth0
    IP Address Honeyd 192.168.1.6
    IP Address Client/Hacker 192.168.1.3

    Nah IP Address Client/Hacker 192.168.1.3 ini menyerang IP Address IDS 192.168.1.2 yg udah ane pasang snort.

    gimana sih cara belokin serangan IP Address Client/Hacker 192.168.1.3 ini ke IP Address Honeyd 192.168.1.6 menggunakan IPTables?

    tolong di jawab gan, ane gak ngerti. makasi

    ReplyDelete

Berkomentarlah dengan bijak untuk pengembangan dan sekaligus menjadi pembelajaran kita bersama.

Pilih Name/Url untuk mempermudah memasukan id anda!