Rabu, 19 Juni 2013

Modul 5: Implementasi IPTABLES

       Postingan ini merupakan postingan saya sebelumnya. Kali ini akan dibahas mengenai implementasi IPTABLES dalam berbagai macam kasus. Dalam hal ini, jaringan yang digunakan ialah topologi jaringan yang digunakan di modul 4. Gambarnya adalah sebagai berikut.

Contoh kasus beserta sintaks IPTABLES untuk solusinya.
  1. Semua subnet tidak dapat mengakses TCP port 21, 443, 66 pada DMZ, kecuali subnet KEBUN_BIBIT, sedangkan port TCP yang diizinkan untuk mengakses DMZ adalah port 80, 8080, 22.
    Solusi:Network ID (NID) dari server DMZ adalah 10.151.71.144/29, sedangkan NID dari host kebun_bibit adalah 10.51.0.0/27. Sintaks IPTABLES di bawah ini diterapkan pada router yang terhubung langsung dengan DMZ, yaitu router ampel.

    iptables -A FORWARD -p tcp -i eth0 -s 10.51.0.0/27 -d 10.151.71.144/29 -m multiport --dport 21,443,66 -j ACCEPT #menerima dari kebun bibit pada port 21 443 66
    iptables -A FORWARD -p tcp -i eth0 -s 0.0.0.0/0 -d 10.151.71.144/29 -m multiport --dport 80,8080,22 -j ACCEPT #menerima dari semua yang ada di port 80,8080,22

    iptables -A FORWARD -p tcp -i eth0 -s ! 10.51.0.0/27 -d 10.151.71.144/29 -m multiport --dport 21,443,66 -j REJECT #menolak selain dari kebun bibit pada port 21 443 66

  2. Mengizinkan semua akses UDP ke DMZ
    Solusi:Network ID (NID) server DMZ adalah 10.151.71.144/29. Sintaks IPTABLES di bawah ini diterapkan pada router yang terhubung langsung dengan DMZ, yaitu router ampel.

    iptables -A FORWARD -p udp -i eth0 -s 0.0.0.0/0 -d 10.151.71.144/29 -j ACCEPT #semua bisa akses udp ke dmz
  3. Subnet DMZ tidak dapat di-PING dari luar selain subnet AJK dan jaringan internal.
    Solusi:Network ID (NID) server DMZ adalah 10.151.71.144/29. NID dari lab AJK adalah 10.151.36.0/24. NID jaringan internal dari topologi yang digunakan adalah 10.51.0.0/17.  Sintaks IPTABLES di bawah ini diterapkan pada router yang terhubung langsung dengan DMZ, yaitu router ampel.

    iptables -A FORWARD -p icmp -i eth0 -s 10.51.0.0/17 -d 10.151.71.144/29 -j ACCEPT #dmz bisa di ping oleh jaringan internal
    iptables -A FORWARD -p icmp -i eth0 -s 10.151.36.0/24 -d 10.151.71.144/29 -j ACCEPT #dmz bisa di ping oleh AJK

    iptables -A FORWARD -p icmp -i eth0 -s ! 10.51.0.0/17 -d 10.151.71.144/29 -j REJECT #dmz tidak bisa diping jaringan selain internal
    iptables -A FORWARD -p icmp -i eth0 -s ! 10.151.36.0/24 -d 10.151.71.144/29 -j REJECT  #dmz tidak bisa diping selain AJK

  4. Koneksi kepada DMZ melalui ssh dibatasi sebanyak 5 koneksi.
    Solusi:Network ID (NID) server DMZ adalah 10.151.71.144/29. Sintaks IPTABLES di bawah ini diterapkan pada router yang terhubung langsung dengan DMZ, yaitu router ampel.

    iptables -A FORWARD -p tcp -i eth1 -d 10.151.71.144/29 --syn --dport 22 -m connlimit --connlimit-above 5 -j REJECT
  5. Buatlah sebuah perintah IPTABLES untuk mengatasi synflood!
    Solusi:Sintaks IPTABLES di bawah ini diterapkan pada router utama dalam topologi, yaitu router tugu_pahlawan.

    iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j REJECT
  6. Buatlah sebuah perintah IPTABLES untuk mengatasi force ssh attack!
    Solusi:Sintaks IPTABLES di bawah ini diterapkan pada router utama dalam topologi, yaitu router tugu_pahlawan.

    iptables -I FORWARD -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
    iptables -I FORWARD -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j REJECT

  7. Buatlah perintah IPTABLES untuk memblok paket scanning. Contoh: xmas, fin scan.
    Solusi:Sintaks IPTABLES di bawah ini diterapkan pada router utama dalam topologi, yaitu router tugu_pahlawan.

    iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j REJECT
    #Force Fragments packets check

    iptables -A FORWARD -f -j REJECT
    #XMAS packets

    iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j REJECT
    #REJECT all NULL packets

    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j REJECT
    #Block Spoofing and bad addresses

  8. Subnet TAMAN_BUNGKUL hanya bisa diakses oleh subnet KEBUN_BIBIT, subnet PLAZA_SURABAYA hanya bisa diakses ketika jam kerja (08.00-16.00), subnet SUTOS tidak bisa melakukan koneksi ke Yahoo Messenger dan Facebook serta tidak bisa melakukan streaming video pada hari dan jam kerja (Senin-Jumat 07.00-17.00).
    Solusi:siola:
    iptables -A FORWARD -p all -i eth0 -s 10.51.0.0/27 -d 10.51.116.0/22 -j ACCEPT #menerima dari kebun bibit
    iptables -A FORWARD -p all -i eth0 -s ! 10.51.0.0/27 -d 10.51.116.0/22 -j REJECT #menolak selain dari kebun bibit

    balaikota :
    iptables -A FORWARD -p all -s 0.0.0.0/0 -d 10.51.120.128/25 -m time --timestart 08:00 --timestop 16:00 -j ACCEPT

    stasiun gubeng :
    iptables -A FORWARD -p all -s 0.0.0.0/0 -s 10.51.2.0/23 -d 173.252.110.27 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT #facebook
    iptables -A FORWARD -p all -s 0.0.0.0/0 -s 10.51.2.0/23 -d 69.171.229.25 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT #yahoo messenger
    iptables -A FORWARD -p all -s 0.0.0.0/0 -s 10.51.2.0/23 -d 208.65.153.253 -m time --timestart 07:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j REJECT #youtube

  9. Selain DMZ gunakan NAT untuk mengakses jaringan luar (tidak boleh menggunakan masquerade).
    Solusi:tugu:
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT -s 10.151.70.73

  10. Catat semua log yang di drop oleh firewall!
    Solusi:
    semua router:
    iptables -N LOGGING
    iptables -A INPUT -j LOGGING

Modul 5: IPTABLES, Firewall-nya Linux

       Kali ini, saya akan menjelaskan materi yang didapat saat menjalani praktikum mata kuliah Jaringan Komputer modul 5 sebagai modul terakhir yang --boleh dibilang-- launchingnya di saat waktu yang kurang tepat. Modul tersebut membahas tentang firewall, yang mana salah satu aplikasinya di dalam sistem operasi Linux adalah IPTABLES.
       IPTABLES adalah suatu tools dalam sistem operasi Linux yang berfungsi sebagai alat untuk melakukan filter (penyaringan) terhadap traffic/lalu lintas data. Secara sederhana, IPTABLES digambarkan sebagai pengatur lalu lintas data. Dengan IPTABLES ini, semua lalu lintas diatur dalam komputer, baik yang masuk ke komputer, keluar dari komputer, ataupun yang sekedar melewati komputer.

Flowchart Jalannya Paket Data dari Suatu Komputer melalui Firewall

        Aturan penulisan dalam IPTABLES adalah sebagai berikut.
iptables -t [table] command [chain] parameter [other_options] [match] target/jump
        Contohnya adalah sebagai berikut.
iptables -t filter -A INPUT -s 192.168.1.1 -j DROP

        IPTABLES memiliki 3 tabel, yaitu:
  • NAT -> Secara umum digunakan untuk melakukan Network Address Translation (NAT), yaitu 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 ditentukan apakah paket akan di-DROP, LOG, ACCEPT, atau REJECT.
Struktur IPTABLES

       Tiga jenis Chain pada tabel Filter ialah:
  • Forward chain: filter paket menuju server yang dilindungi oleh firewall.
  • Input chain: filter paket yang menuju ke firewall.
  • Output chain: filter paket yang keluar dari firewall.

       Ada tiga jenis NAT, yaitu:
  • Static NAT
    Static Network Address Translation (NAT) menerjemahkan sejumlah IP address tidak terdaftar menjadi sejumlah IP address yang terdaftar sehingga setiap client dipetakkan kepada IP address terdaftar yang dengan jumlah yang sama.
    Jenis NAT ini merupakan pemborosan IP address terdaftar karena setiap IP address yang tidak terdaftar (unregistered IP) dipetakan kepada satu IP address terdaftar. Static NAT ini juga tidak seaman jenis NAT lainnya, karena setiap komputer secara permanen diasosiasikan kepada address terdaftar tertentu, sehingga memberikan kesempatan kepada para penyusup dari Internet untuk menuju langsung kepada komputer tertentu pada jaringan private Anda menggunakan address terdaftar tersebut.

    Static NAT
  • Dynamic NAT
    Dynamic Network Address Translation dimaksudkan untuk suatu keadaan di mana anda mempunyai IP address terdaftar yang lebih sedikit dari jumlah IP address unregistered. Dynamic NAT menerjemahkan setiap komputer dengan IP tak terdaftar kepada salah satu IP address terdaftar untuk terhubung ke internet. Hal ini agak menyulitkan para penyusup untuk menembus komputer di dalam jaringan anda karena IP address terdaftar yang diasosiasikan ke komputer selalu berubah secara dinamis, tidak seperti pada NAT statis yang dipetakan sama. Kekurangan utama dari dynamic NAT ini adalah bahwa jika jumlah IP address terdaftar sudah terpakai semuanya, maka untuk komputer yang berusaha terhubung ke Internet tidak lagi bisa karena IP address terdaftar sudah terpakai semuanya.

    Dynamic NAT
  • Masquerading NAT
    Masquerading NAT ini menerjemahkan semua IP address tak terdaftar pada jaringan anda dipetakan kepada satu IP address terdaftar. Agar banyak client bisa mengakses Internet secara bersamaan, router NAT menggunakan nomor port untuk bisa membedakan antara paket-2 yang dihasilkan oleh atau ditujukan komputer-komputer yang berbeda. Solusi Masquerading ini memberikan keamanan paling bagus dari jenis-jenis NAT lainnya karena asosiasi antara client dengan IP address tak terdaftar dengan kombinasi IP address terdaftar dan nomor port di dalam router NAT hanya berlangsung saat terjadi satu kesempatan koneksi saja, setelah itu dilepas.

    Masquerading NAT

       Mangle table berfungsi untuk melakukan modifikasi paket-paket data, namun fungsinya lebih kepada penandaan (marking) terhadap paket tersebut. Modifikasi tersebut terjadi pada level field-field tambahan dari protokol IP. Mangle table bisa digunakan untuk memberikan tanda pada sebuah paket, dan selanjutnya untuk diolah atau ditransmisikan pada kondisi tertentu.
      Chain prerouting dan chain postrouting merupakan dua jenis chain bawaan dari tabel NAT. Tujuan penggunaannya:
  • Chain Prerouting: untuk melakukan NAT terhadap paket data yang memasuki firewall. Kebanyakan digunakan untuk transparency proxy server dan membangun beberapa server dengan satu IP publik.
  • Chain Postrouting: untuk melakukan NAT terhadap paket data yang keluar dari firewall. Kebanyakan digunakan untuk translasi alamat IP.
       Tabel penjelasan special property pada bagian Target dalam penulisan IPTABLES.
Target Keterangan
ACCEPT Target
-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.
DROP Target
-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.
RETURN Target
-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.
MIRROR Target
-j MIRROR
Apabila komputer 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.
LOG Target
–j LOG
Ada beberapa opsi 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. Contoh sintaksnya adalah sebagai berikut.

iptables –A FORWARD –p tcp –j LOG --log-level debug
iptables –A INPUT –p tcp –j LOG --log-prefix "INPUT Packets"
REJECT Target
–j REJECT
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. Contoh sintaksnya adalah sebagai berikut.

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-unreachable, icmp-net-prohibited dan icmp-host-prohibited.
SNAT Target
-j SNAT
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. Contoh sintaksnya adalah sebagai berikut.

iptables –t nat –A POSTROUTING –o eth0 –j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT Target
-j DNAT
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. Contoh sintaksnya adalah sebagai berikut.

iptables –t nat –A PREROUTING –p tcp –d 15.45.23.67 --dport 80 –j DNAT --to-destination 192.168.0.2
MASQUERADE Target
-j MASQUERADE
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.

Contoh sintaksnya adalah sebagai berikut.

iptables –t nat –A POSTROUTING –o ppp0 –j MASQUERADE
REDIRECT Target
–j REDIRECT
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. Contoh sintaksnya adalah sebagai berikut.

iptables –t nat –A PREROUTING –i eth1 –p tcp --dport 80 –j REDIRECT --to-port 3128

Beda antara target DROP dan target REJECT adalah sebagai berikut.
       Target DROP (-j DROP atau --jump DROP) gunanya ialah untuk 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.
       Sedangkan untuk target REJECT (-j REJECT atau --jump REJECT), Secara umum, REJECT bekerja seperti DROP, yaitu memblok paket dan menolak untuk diproses lebih lanjut paket tersebut. Tetapi bedanya, 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.
Contoh sintaksnya adalah sebagai berikut.
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.

       Misalkan ada sintaks IPTABLES sebagai berikut.
iptables –A FORWARD –s 0/0 –i eth0 –d 192.168.1.58 –o eth1 –p TCP --sport 1024:65535 –m multiport --dports 80,443 –j ACCEPT
Penjelasan mengenai sintaks tersebut di atas adalah sebagai berikut:
  • -A FORWARD : menambahkan rule ke chain FORWARD dalam tabel 'filter'.
  • -s 0/0 : source address-nya adalah semua IP address
  • -i eth0 : input interface = eth0
  • -d 192.168.1.58 : destination address-nya adalah 192.168.1.58
  • -p TCP : memakai protokol TCP
  • --sport 1024:65535 : source port-nya adalah 1024 sampai dengan 65535
  • -m multiport : untuk tujuan port dan juga hanya dapat digunakan bersama dengan -p tcp atau -p udp.
  • --dports 80,443 : destination port-nya 80 (http) dan 443 (https)
  • -j ACCEPT : menerima paket yang cocok dengan rule ini
Mengenai implementasi IPTABLES dalam banyak kasus akan saya bahas di postingan berikutnya.