Firewall


1.      Definisi Firewall
Firewall adalah sebuah bagian dari sistem komputer atau jaringan yang didesain untuk memblok atau mengijinkan sebuah jaringan lain untuk mengakses jaringan kita. Firewall bisa berbentuk hardware atau software atau pun kombinasi dari keduanya. Firewall digunakan untuk melindungi jaringan kita dari jaringan-jaringan yang berpotensi menimbulkan bahaya ke dalam sistem kita. Seluruh pesan yang masuk atau meninggalkan jaringan kita melalui firewall akan dicek setiap pesan dan memblok setiap pesan yang tidak memenuhi kriteria yang telah kita tetapkan di dalam firewall. 
Firewall merupakan perangkat jaringan yang berada di dalam kategori perangkat Layer 3 (Network layer) dan Layer 4 (Transport layer) dari protocol 7 OSI layer. Seperti diketahui, layer 3 adalah layer yang mengurus masalah pengalamatan IP, dan layer 4 adalah menangani permasalahan port-port komunikasi (TCP/UDP). Pada kebanyakan firewall, filtering belum bisa dilakukan pada level data link layer atau layer 2 pada 7 OSI layer. Jadi dengan demikian, sistem pengalamatan MAC dan frame-frame data belum bisa difilter. Maka dari itu, kebanyakan firewall pada umumnya melakukan filtering dan pembatasan berdasarkan pada alamat IP dan nomor port komunikasi yang ingin dituju atau diterimanya. Firewall yang sederhana biasanya tidak memiliki kemampuan melakukan filtering terhadap paket berdasarkan isi dari paket tersebut. Sebagai contoh, firewall tidak memiliki kemampuan melakukan filtering terhadap e-mail bervirus yang kita download atau terhadap halaman web yang tidak pantas untuk dibuka. Yang bisa dilakukan firewall adalah melakukan blokir terhadap alamat IP dari mail server yang mengirimkan virus atau alamat halaman web yang dilarang untuk dibuka. Dengan kata lain, firewall merupakan sistem pertahanan yang paling depan untuk jaringan Anda.
2.      Jenis-jenis firewall

Ada empat jenis firewall, atau lebih tepatnya tiga jenis ditambah dengan satu tipe hybrid (campuran). Disini kita tidak akan membahas setiap jenis secara rinci karena itu membutuhkan pembahasan tersendiri yang lebih teknis dan umumnya sudah tersedia dalam dokumentasi-dokumentasi tentang firewall. Keempat jenis tersebut masing-masing adalah:
a.      Packet Filtering: Firewall jenis ini memfilter paket data berdasarkan alamat dan opsi-opsi yang sudah ditentukan terhadap paket tersebut. Ia bekerja dalam level IP paket data dan membuat keputusan mengenai tindakan selanjutnya (diteruskan atau tidak diteruskan) berdasarkan kondisi dari paket tersebut. Firewall jenis ini terbagi lagi menjadi tiga subtipe:
- Static Filtering: Jenis filter yang diiplementasikan pada kebanyakan router, dimana modifikasi terhadap aturan-aturan filter harus dilakukan secara manual.
- Dynamic Filtering: Apabila proses-proses tertentu di sisi luar jaringan dapat merubah aturan filer secara dinamis berdasarkan even-even tertentu yang diobservasi oleh router (sebagai contoh, paket FTP dari sisi luar dapat diijinkan apabila seseorang dari sisi dalam me-request sesi FTP).
- Stateful Inspection: Dikembangkan berdasarkan teknologi yang sama dengan dynamic filtering dengan tambahan fungsi eksaminasi secara bertingkat berdasarkan muatan data yang terkandung dalam paket IP.
Baik dynamic maupun stateful filtering menggunakan tabel status (state table) dinamis yang akan membuat aturan-aturan filter sesuai dengan even yang tengah berlangsung.
b.      Circuit Gateways: Firewall jenis ini beroperasi pada layer (lapisan) transpor pada network, dimana koneksi juga diautorisasi berdasarkan alamat. Sebagaimana halnya Packet Filtering, Circuit Gateway (biasanya) tidak dapat memonitor trafik data yang mengalir antara satu network dengan network lainnya, tetapi ia mencegah koneksi langsung antar network.
c.       Application Gateways: Firewall tipe ini juga disebut sebagai firewall berbasis proxy. Ia beroperasi di level aplikasi dan dapat mempelajari informasi pada level data aplikasi (yang dimaksudkan disini adalah isi [content] dari paket data karena proxy pada dasarnya tidak beroperasi pada paket data). Filterisasi dilakukan berdasarkan data aplikasi, seperti perintah-perintah FTP atau URL yang diakses lewat HTTP. Dapat dikatakan bahwa firewall jenis ini “memecah model client-server”.
d.      Hybrid Firewalls: Firewall jenis ini menggunakan elemen-elemen dari satu atau lebih tipe firewall. Hybrid firewall sebenarnya bukan sesuatu yang baru. Firewall komersial yang pertama, DEC SEAL, adalah firewall berjenis hybrid, dengan menggunakan proxy pada sebuah bastion hosts (mesin yang dilabeli sebagai “gatekeeper” pada gambar 1) dan packet filtering pada gateway (“gate”). Sistem hybrid seringkali digunakan untuk menambahkan layanan baru secara cepat pada sistem firewall yang sudah tersedia. Kita bisa saja menambahkan sebuah circuit gateway atau packet filtering pada firewall berjenis application gateway, karena untuk itu hanya diperlukan kode proxy yang baru yang ditulis untuk setiap service baru yang akan disediakan. Kita juga dapat memberikan autentifikasi pengguna yang lebih ketat pada Stateful Packet Filer dengan menambahkan proxy untuk tiap service.
Apapun basis teknologi yang digunakan, sebuah firewall pada dasarnya berlaku sebagai sebuah gateway yang terkontrol di antara dua atau lebih network dimana setiap trafik harus melewatinya. Sebuah firewall menjalankan aturan sekuriti dan meninggalkan jejak yang dapat ditelusuri.



3.      Letak dan topologi Firewall
Gambar 1.1. arsitektur firewall pada jaringan komputer


4.      Firewall IPTABLES
penerapan iptables pada firewall.
Gambar 1.2.  Skema Firewall Dalam Jaringan
Pada gambar di atas terdapat suatu firewall yang mempunyai dua antar muka. Firewall berhubungan dengan jaringan internet melalui antar muka eth0 dan berhubungan dengan jaringan privat melalui antar muka eth1.
Kemampuan pertama yang harus di miliki firewall adalah melakukan forward IP Address dari antarmuka eth0 menuju antarmuka eth1 dan sebaliknya dari antarmuka eth1 menuju antarmuka eth0 . Caranya adalah dengan memberi nilai 1 pada parameter ip_forward dengan perintah.
Dalam beberapa variant Linux dilakukan dengan memberi baris konfigurasi pada file /etc/sysconfig/network .
INISIALISASI
Inisialisasi aturan iptables digunakan untuk membuat kebijakan umum terhadap rantai iptables yang akan di terapkan pada firewall. Kebijakan ini akan di terapkan jika tidak ada aturan yang sesuai. Kebijakan umum yang diterapkan dalam suatu firewall umumnya adalah sebagai berikut:

1.      Kebijakan untuk membuang semua paket yang menuju, melintas dan keluar dari firewall.
2.      Kebijakan untuk menerima semua paket yang menuju dan meninggalkan perangkat loopback .
3.      Kebijakan menerima semua paket sebelum mengalami routing.
MENGIJINKAN LALU-LINTAS PAKET ICMP
Paket ICMP biasanya digunakan untuk menguji apakah suatu peralatan jaringan sudah terhubung secara benar dalam jaringan. Biasanya untuk menguji apakah suatu peralatan sudah terhubung secara benar dalam jaringan dapat dilakukan dengan perintah ping . Perintah ini akan mencoba mengirim paket ICMP ke alamat IP tujuan dan menggunakan tanggapan dari alamat IP tersebut. Untuk memberikan keleluasaan keluar, masuk dan melintasnya paket ICMP diterapkan dengan aturan tersebut.
Maksud perintah di atas adalah sebagai berikut:
1.      Firewall mengijinkan paket ICMP yang akan masuk.
2.      Firewall mengijinkan paket ICMP yang akan melintas.
3.      Firewall mengijinkan paket ICMP yang akan keluar.
Perintah ketiga ini memungkinkan firewall untuk mananggapi paket ICMP yang dikirim ke firewall. Jika perintah ketiga tidak diberikan, maka firewall tidak dapat mengirim keluar tanggapan paket ICMP.
Kadang-kadang paket ICMP digunakan untuk tujuan yang tidak benar, sehingga kadang-kadang firewall ditutup untuk menerima lalu lintas paket tersebut.  Jika firewall tidak diijinkan untuk menerima lalu lintas paket ICMP, maka perintah diatas tidak perlu dicantumkan.
MENGIJINKAN PAKET SSH MASUK FIREWALL
Untuk mengkonfigurasi komputer dalam jaringan, biasanya dilakukan secara jarak jauh. Artinya pengelolaan tidak harus datang dengan berhadapan dengan komputer tersebut. Termasuk dalam hal ini untuk pengelolaan firewall. Untuk mengelola firewall dari jarak jauh, dapat digunakan program SSH .
Program SSH menggunakan paket TCP dengan port 22 untuk menghubungkan antara dua komputer. Oleh sebab itu firewall harus mengijinkan paket dengan tujuan port 22 untuk masuk ke firewall. Firewall juga harus mengijinkan paket yang  berasal dari port 22 untuk keluar dari firewall. Berikut ini perintah yang diterapkan untuk mengijinkan akses SSH melalui antarmuka eth1 yaitu dari jaringan privat.
Maksud dari perintah di atas adalah sebagai berikut:
1.      Firewall mengijinkan masuk untuk paket TCP yang punya tujuan port 22 melalui antarmuka eth1.
2.      Firewall mengijinkan keluar untuk paket TCP yang berasal dari port 22 melalui antarmuka eth1.
Aturan tersebut memungkinkan akses SSH hanya dari jaringan privat melalui antarmuka eth1. Untuk alasan keamanan, akses SSH dari jaringan privat dapat dibatasi untuk akses yang hanya berasal dari alamat jaringan tertentu atau bahkan dari komputer tertentu (input). Hal ini dilakukan dengan menambah opsi –s diikuti alamat jaringan  atau alamat IP pada perintah pertama.
Sintaks diatas adalah aturan yang akan menerima input paket TCP pada eth1 yang berasal dari alamat IP 202.51.226.37 dengan tujuan port 22.
MENGIJINKAN AKSES HTTP MELINTAS FIREWALL
Akses http merupakan protokol yang paling banyak digunakan untuk berselancar di internet. Informasi yang disajikan pada internet umumnya menggunakan akses http ini. Akses http menggunakan port 80 dengan  jenis paket TCP.
Firewall biasanya mengijinkan akses http terutama yang melintas firewall baik yang keluar atau masuk jaringan privat. Akses http yang keluar jaringan privat digunakan untuk memberi akses http bagi komputer yang berada di jaringan privat. Sedangkan akses http dari internet terjadi apabila pada jaringan privat terdapat server web yang dapat diakses dari jaringan internet.
Penerapan aturan iptables untuk mengijinkan akses http adalah sbb :
Maksud dari perintah di atas adalah sebagai berikut:
1.      Firewall mengijinkan melintas untuk paket TCP yang punya tujuan port 80 melalui antarmuka eth1.
2.      Firewall mengijinkan melintas untuk paket TCP yang punya asal port 80 melalui antarmuka eth1.
3.      Firewall mengijinkan melintas untuk paket TCP yang punya tujuan port 80 melalui antarmuka eth0.
4.      Firewall mengijinkan melintas untuk paket TCP yang punya asal port 80 melalui antarmuka eth0.
Perintah pertama dan kedua digunakan untuk mengijinkan akses http yang berasal dari jaringan privat, sedangkan perintah ketiga dan keempat digunakan untuk mengijinkan akses http yang berasal dari internet.
Keempat perintah tersebut dapat diganti dengan satu perintah menggunakan opsi multiport sebagai berikut :
Perintah tersebut menyatakan bahwa firewall mengijinkan paket TCP yang punya port 80 (tujuan / asal) untuk melintas (dari eth0 atau eth1 ).
MENGIJINKAN QUERY SERVER DNS
Firewall biasanya mempunyai minimal satu alamat IP untuk server DNS. Untuk query server DNS digunakan paket UDP melalui port 53. Firewall memerlukan query server DNS untuk menentukan alamat IP yang berhubungan dengan suatu nama host. Query server DNS pada firewall ini biasanya diijinkan untuk query server DNS keluar firewall (baik via eth0 atau eth1 ) dan query server DNS melintasi server firewall. Aturan iptables yang diterapkan untuk mengijinkan query sever DNS keluar dari firewall adalah sebagai berikut :
Maksudnya :
1.      Firewall mengijinkan keluar untuk paket UDP yang punya tujuan port 53 melalui antarmuka eth1.
2.      Firewall mengijinkan keluar untuk paket UDP yang punya asal port 53 melalui antarmuka eth1.
3.      Firewall mengijinkan keluar untuk paket UDP yang punya tujuan port 53 melalui antarmuka eth0.
4.      Firewall mengijinkan keluar untuk paket UDP yang punya asal port 53 melalui antarmuka eth0.
Perintah pertama dan kedua digunakan untuk query server DNS keluar melalui antarmuka eth1, sedangkan perintah ketiga dan keempat digunakan untuk mengijinkan query server DNS keluar melalui antarmuka eth0.
Selanjutnya firewall akan mengijinkan query server DNS untuk melintas. Aturan iptables untuk mengijinkan query server DNS melintasi firewall adalah sebagai berikut :
Perintah tersebut menyatakan bahwa firewall mengijinkan paket UDP yang punya port 53 untuk melintas.
5.      Perintah-Perintah Iptables
Untuk melihat apakah di dalam sistem kita sudah terinstal paket-paket iptables, ketikkan perintah berikut:
# rpm -qa | grep iptables
Jika memang belum terinstal, ketikkan perintah berikut:
# yum -y install iptables*
Agar iptables dapat berjalan otomatis setelah restart, gunakan perintah:
# chkconfig iptables on
Untuk melihat status iptables, gunakan perintah:
# service iptables status
Untuk menyalakan iptables, gunakan perintah:
# /etc/init.d/iptables start
Untuk mematikan iptables, gunakan perintah:
# /etc/init.d/iptables stop
Untuk merestart iptables, gunakan perintah:
# /etc/init.d/iptables restart
Sebelum melangkah lebih lanjut, pastikan firewall di sistem kita di enable yaitu dengan cara ketik setup lalu pilih Firewall configuration. Setelah itu, pada bagian Security Level beri tanda bintang pada item Enabled lalu pilih tombol OK.
command pada baris perintah iptables yang akan memberitahu apa yang harus dilakukan terhadap lanjutan sintaks perintah. Berikut adalah beberapa command pada iptables:
command
Deskripsi
-A (–append)
Menambah aturan pada akhir rantai sehingga akan dieksekusi terakhir
-D (–delete)
Menghapus sebuah aturan pada rantai yang dilakukan dengan cara menyebutkan secara lengkap perintah yang ingin dihapus atau dengan menyebutkan nomor baris dimana perintah akan dihapus
-I (–insert)
Memasukkan aturan pada sebuah baris rantai. Berbeda dengan perintah append, perintah insert akan menempati baris yang dimaksud dan aturan awal yang menempati baris tersebut akan digeser ke bawah
-L (–list)
Menampilkan semua aturan pada sebuah tabel. Perintah ini akan dikombinasikan dengan opsi -v (verbose), -n (numeric), -x (exact), dan  –line-number
-F (–flush)
Mengosongkan aturan pada sebuah chain
-N (–new-chain)
Membuat rantai baru
-X (–delete-chain)
Menghapus rantai yang disebutkan
-E (–rename-chain)
Merubah suatu nama rantai
-P (–policy)
Membuat kebijakan default pada sebuah rantai
-p (–protocol)
Mengecek tipe protokol tertentu. Tanda inverse(!) berarti kecuali. Misalnya protocol ! tcp berarti kecuali tcp
-s (–source)
Mencocokkan paket berdasarkan alamat IP asal. Bisa berbentuk alamat tunggal (mis:192.168.0.1) atau alamat network (mis:192.168.0.0/255.255.255.0 atau 192.168.0.0/24)
-d (–destination)
Mencocokkan paket berdasarkan alamat tujuan
-i (–in-interface)
Mencocokkan paket berdasarkan interface dimana paket datang dan berlaku pada rantai INPUT, FORWARD, dan PREROUTING
-o (–out-interface)
Mencocokkan paket berdasarkan interface dimana paket keluar dan berlaku pada rantai OUTPUT, FORWARD, dan POSTROUTING
–sport (–source-port)
Mencocokkan paket berdasarkan port asal(bisa dilihat di /etc/services). Perintah ini bisa digunakan untuk range port tertentu. Misal range antara port 22 sampai 80 bisa ditulis –sport 22-80. Jika –sport :80 berarti paket dengan port 0-80. Jika –sport 1024: berarti paket dengan port asal 1024-65535
–dport (–destination-port)
Mencocokkan paket berdasarkan port tujuan. Penggunaannya sama dengan –sport
–syn
Memeriksa apakah flag SYN di set dan ACK dan FIN tidak di set. Perintah ini sama dengan kita menggunakan match –tcp-flags SYN,ACK,FIN SYN. Paket dengan perintah tersebut digunakan untuk melakukan request koneksi TCP yang baru terhadap server
-m mac -mac-source
Melakukan pencocokan paket berdasarkan MAC source address
-m multiport –source-port
Mendefinisikan port atau port range lebih dari satu
-j (–jump)
Perlakuan yang diberikan terhadap paket-paket yang memenuhi kriteria. Setelah perintah ini ada beberapa opsi yaitu:
ACCEPT: akan mengijinkan paket
DROP: akan menolak paket
REJECT: akan menolak paket. Berbeda dengan DROP, REJECT akan memberitahukan error kesalahan kepada user pengirim sedangkan DROP tidak memberitahukan error kesalahan. Opsi untuk REJECT adalah icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, dan icmp-host-prohibited. Namun untuk menggunakan opsi-opsi tersebut harus diawali dengan –reject-with
RETURN: akan membuat paket berhenti melintasi aturan-aturan pada rantai dimana paket tersebut menemui target RETURN
MIRROR: fungsi utamanya adalah membalik source address dan destination address. Misalnya PC A menjalankan target RETURN kemudian komputer B melakukan koneksi http ke komputer A, maka yang muncul adalah pada browser adalah website komputer B itu sendiri
LOG: digunakan untuk menentukan tingkat log. Tingkatan log yang bisa digunakan adalah debug, info, notice,warning, err, crit, alert dan emerg. perintah -j LOG –log-prefix digunakan untuk memberikan string yang tertulis pada awalan log, sehingga memudahkan pembacaan log tersebut.
SNAT Target: Berguna untuk melakukan perubahan alamat asal dari paket (Source Network Address Translation). Target ini berlaku untuk tabel NAT pada rantai POSTROUTING, dan hanya disinilah rantai POSTROUTING. Jika paket pertama dari sebuah koneksi mengalami SNAT, maka paket-paket berikutnya dalam koneksi tersebut juga akan mengalami hal yang sama
DNAT Target: 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 rantai PREROUTING dan OUTPUT atau rantai buatan yang dipanggil oleh kedua rantai tersebut
MASQUARADE Target: Target ini bekerja dengan cara yang hampir sama seperti target SNAT, tetapi target ini tidak memerlukan option –to-source. Target ini memang ini 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. Target ini hanya bekerja untuk tabel NAT pada rantai POSTROUTING
REDIRECT Target: 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 rantai PREROUTING dan OUTPUT atau pada rantai buatan yang dipanggil dari kedua rantai tersebut.


6.      Alur paket data
membahas prinsip dasar firewall iptables, mengelola akses internet berdasarkan alamat IP,port aplikasi dan MAC address. Firewall IPTables packet filtering memiliki tiga aturan (policy), yaitu:
·         INPUT
Mengatur paket data yang memasuki firewall dari arah intranet maupun internet. kita bisa mengelolakomputer mana saja yang bisa mengakses firewall. misal: hanya komputer IP 192.168.1.100 yang bisa SSHke firewall dan yang lain tidak boleh.
·         OUTPUT
Mengatur paket data yang keluar dari firewall ke arah intranet maupun internet. Biasanya output tidak diset,karena bisa membatasi kemampuan firewall itu sendiri.
·         FORWARD
Mengatur paket data yang melintasi firewall dari arah internet ke intranet maupun sebaliknya. Policy forward paling banyak dipakai saat ini untuk mengatur koneksi internet berdasarkan port, mac address dan alamat IP Selain aturan (policy) firewall iptables juga mempunyai parameter yang disebut dengan TARGET, yaitu status yang menentukkan koneksi di iptables diizinkan lewat atau tidak. TARGET ada tiga macam yaitu:
o   ACCEPT
Akses diterima dan diizinkan melewati firewall
o   REJECT
Akses ditolak, koneksi dari komputer klien yang melewati firewall langsung terputus, biasanya terdapatpesan “Connection Refused”. Target Reject tidak menghabiskan bandwidth internet karena akses langsung ditolak, hal ini berbeda dengan DROP.
o   DROP
Akses diterima tetapi paket data langsung dibuang oleh kernel, sehingga pengguna tidak mengetahui kalau koneksinya dibatasi oleh firewall, pengguna melihat seakan – akan server yang dihubungi mengalami permasalahan teknis. Pada koneksi internet yang sibuk dengan trafik tinggi Target Drop sebaiknya jangan digunakan.