Linux Firewall (iptables concepts)

Posted on Posted in Linux Networking

logo -linux

Firewall

Firewall merupakan sebuah perangkat yang digunakan untuk kepentingan keamanan suatu sistem. Firewall akan melakukan pemeriksaan paket data baik yang masuk maupun yang keluar dari suatu sistem. Paket-paket data yang mencurigakan dan membahayakan sistem akan dibuang oleh firewall.

Firewall dapat dibedakan menjadi :

  • Dedicated firewall, firewall yang berupa perangkat keras khusus yang dirancang untuk kepentingan keamanan jaringan, misalnya Cisco PIX Firewall
  • Server Based-Firewall, berupa Network Operating System (misalnya Linux, UNIX) yang menjalankan fungsi-fungsi firewall.
  • Integrated Firewall, fungsi firewall yang ditambahkan pada suatu perangkat jaringan, misalnya router yang menjalan fungsi firewall.
  • Personal Firewall, berupa firewall yang dipasang pada personal computer (host dalam jaringan), biasanya merupakan bawaan OS, Anti Virus maupun software dari vendor tertentu.

 

Iptables (Linux Firewall)

Linux merupakan Network Operating System yang sudah dilengkapi dengan aplikasi firewall. Fungsi-fungsi firewall pada suatu sistem Linux dijalankan oleh Iptables. Pada sistem Linux terdahulu, fungsi firewall dijalankan oleh Ipchains.

Selain menjalankan fungsi firewall, Iptables juga dapat menjalankan fungsi NAT. NAT merupakan fungsi yang dijalankan oleh sebuah Internet Gateway untuk menghubungkan jaringan lokal (Private IP Address) dengan jaringan Internet (Public IP Address).

Secara default Iptables telah terinstall pada sistem Linux Fedora Core maupun RedHat. Untuk memeriksa apakah Iptables telah terinstall dapat digunakan perintah :

[root@gateway]# rpm –q iptables
iptables-1.3.5-1.2.1

 

 

Tables

Setiap paket data yang diterima oleh Sistem Linux yang menjalankan fungsi firewall akan diperiksa oleh Iptables. Iptables akan melakukan pemeriksaan dengan memasukkan setiap paket data ke dalam tabel-tabel

Iptables memiliki 3 buah tabel built-in, yaitu :

  • mangle, digunakan untuk manipulasi paket data, misalnya melakukan perubahan TCP Header
  • filter, digunakan untuk melakukan filter paket data yang diterima firewall
  • nat, digunakan untuk melakukan network address translation.

 

 

Chain

Setiap tabel memiliki rule-rule atau aturan-aturan yang disebut chain.

 Mangle, memiliki 5 buah built-in chains :

  • PREROUTING
  • POSTROUTING
  • INPUT
  • OUTPUT
  • FORWARD

Semua chains diperuntukkan untuk TCP Packet Quality of Service sebelum proses routing dijalankan.

 

Filter, memiliki 3 buah built-in chains :

  • FORWARD          : melakukan filter paket yang akan diforward dari suatu NIC ke NIC yang lain pada firewall, seperti fungsi router.
  • INPUT                   : melakukan filter paket yang ditujukan bagi firewall
  • OUTPUT              : melakukan filter paket yang akan keluar dari firewall.

 

Nat memiliki 3 buah built-in chains :

  •  PREROUTING      : digunakan untuk mentranslasi address sebelum proses routing terjadi. Dilakukan dengan merubah Destination IP Address dari paket data. Biasa dikenal dengan Destination NAT atau DNAT.
  • POSTROUTING   : digunakan untuk mentranslasi address setelah proses routing terjadi. Dilakukan dengan merubah Source IP Address dari paket data. Biasa dikenal dengan Source NAT atau SNAT.
  • OUTPUT                : digunakan untuk mentranslasi address paket data yang berasal dari firewall itu sendiri.

 

 

Target dan Jump

Setiap paket data memasuki sebuah lingkaran, chain akan memeriksa paket tersebut sesuai kriteria yang sudah ditentukan. Pemeriksaan biasanya dilakukan dengan mencocokan TCP Header dari paket data dengan suatu rule yang sudah di tentukan pada chain. Bila ternyata cocok, maka chain akan melakukan “jump” atau eksekusi terhadap paket tersebut. Jump  dapat berupa DROP (buang) atau ACCEPT (terima).

Namun bila kriteria TCP Headernya tidak cocok, maka pemeriksaan akan diserahkan kepada chain selanjutnya. Bila sampai akhir chain tidak ada yang cocok, maka penentuan “jump” paket akan ditentukan oleh chain default dari Iptables. Jump default dari Iptables adalah default DROP ataupun default ACCEPT.

Berikut berbagai jenis “jump” yang dapat diterapkan pada paket data :

  • ACCEPT              : paket akan diterima oleh Iptables dan diteruskan kepada aplikasi yang membutuhkan atau diteruskan ke sistem operasi untuk diproses selanjutnya.
  • DROP                   : paket akan di-blok (tidak dijinkan masuk ke iptables)
  • LOG                      : informasi dari paket akan dimasukan ke syslog untuk keperluan logging, setelah di logging paket diserahkan ke chain berikutnya dalam tabel
  • REJECT               : paket akan di-blok (sama seperti DROP), namun dengan memberikan pesan error kepada host pengirim bahwa paket di-blok.
  • DNAT                   : destination IP address dari paket akan dirubah
  • SNAT                    : source IP address dari paket akan dirubah, source IP address baru yang akan digunakan harus ditentukan.
  • MASQUERADE  : source IP Address dari paket akan dirubah, source IP address baru yang akan digunakan sama dengan IP address dari interface firewall.

 

 

General Iptables Match Criteria

Dalam proses pencocokan kriteria paket  pada chain digunakan beberapa perintah sebagai berikut :

  • -t  <table>                :   mendefinisikan tabel yang akan digunakan (mangel, filter atau nat). Bila tidak didefinisikan, asumsi yang digunakan adalah tabel filter.
  • -j <target>                :   mendefinisikan jump yang akan diberlakukan pada suatu paket yang cocok dengan kriteria (rule) yang diterapkan.
  • -A                                :   menambahkan chain baru sesudah chain terakhir.
  • -F                                :   menghapus semua chain pada suatu tabel.
  • -p <protocol-type>  :   mencocokan protocol yang digunakan (TCP, UDP, ICMP dan lain-lain)
  • -s <ip address>         :   mencocokan source IP address pada paket data (host pengirim)
  • -d <ip address>         :   mencocokan destination IP address pada paket data (host tujuan)
  • -i <interface-name> :   mencocokan “input” interface dimana paket akan diterima.
  • -o <interface-name>  :   mencocokan “output” interface dimana paket akan dikeluarkan.

 Contoh :

iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1  -p tcp -j ACCEPT

perintah yang mengkonfigurasikan iptables, sehingga firewall dapat menerima paket TCP yang masuk pada interface eth0 (192.168.1.1), dimana paket tersebut dapat berasal dari sembarang host

 

 


TCP dan UDP Match Criteria

Untuk pencocokan kriteria berdasarkan protokol TCP dan UDP, terdapat beberapa perintah tambahan, yaitu :

  • -p tcp –-sport  <port>    :    TCP source port, dapat berupa satu buah port atau range port. Untuk menggunakan range port formatnya adalah : startport:endport
  • -p tcp –-dport  <port>    :    TCP destination port
  • -p tcp –-syn                  :   mencocokan TCP Request Connection yang baru
  • -p udp –-sport  <port>    :    UDP source port, dapat berupa satu buah port atau range port. Untuk menggunakan range port formatnya adalah : startport:endport
  • -p udp –-dport  <port>    :    UDP destination port

Contoh :

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p TCP 
         –sport 1024:65535 –dport 80 -j ACCEPT

 perintah yang mengkonfigurasikan iptables, sehingga firewall dapat menerima paket TCP yang masuk pada interface eth0 (192.168.1.58 )untuk dilakukan routing, kemudian paket data tersebut dikeluarkan melalui ineterface eth1, dimana paket tersebut dapat berasal dari sembarang host dengan source port dalam range 1024 s/d 65535 dan destination port 80 (aplikasi www atau http)

ICMP (ping) Match Criteria

Pencocokan kriteria untuk protokol ICMP, perintah yang dapat digunakan :

  • -p icmp-type <type>     :   mencocokan tipe pesan ICMP, apakah icmp echo-request atau icmp echo-reply

Contoh :

 iptables -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT

iptables -A INPUT  -p icmp –icmp-type echo-reply   -j ACCEPT

 perintah yang mengkonfigurasikan iptables, sehingga firewall dapat mengirimkan paket ICMP echo-request (ping) dan kemudian dapat menerima kembali ICMP echo-reply.

 

 

 

Menjalankan Iptables

Untuk menjalankan Iptables, dapat digunakan perintah :

[root@gateway etc]# systemctl start iptables.service
[root@gateway etc]# systemctl status named.service
named.service – LSB: start|stop|status|restart|try-restart|reload|force-reload DNS server
          Loaded: loaded (/etc/rc.d/init.d/named)
          Active: active (running) since Wed, 29 Aug 2012 15:25:24 +0800; 7min ago
         Process: 9872 ExecStop=/etc/rc.d/init.d/named stop (code=exited, status=0/SUCCESS)
         Process: 9941 ExecReload=/etc/rc.d/init.d/named reload (code=exited, status=0/SUCCESS)
         Process: 9907 ExecStart=/etc/rc.d/init.d/named start (code=exited, status=0/SUCCESS)
        Main PID: 9912 (named)
          CGroup: name=systemd:/system/named.service
                  â 9912 /usr/sbin/named -u named

 

Untuk menghentikan Iptables, dapat digunakan perintah sebagai berikut :

[root@gateway etc]# systemctl stop iptables.service
[root@gateway etc]# systemctl status iptables.service
iptables.service – IPv4 firewall with iptables
          Loaded: loaded (/lib/systemd/system/iptables.service; enabled)
          Active: inactive (dead)
                  start condition failed at Wed, 29 Aug 2012 15:11:01 +0800; 20min ago
          CGroup: name=systemd:/system/iptables.service

Untuk memastikan Iptables selalu dijalankan pada saat sistem akan boot, dapat digunakan perintah :

[root@gateway ~]# systemctl enable iptables.service
 
 
 
 

Konfigurasi Iptables

Konfigurasi iptables dapat dilihat pada  file /etc/sysconfig/iptables

Bila dilakukan pengeditan pada file tersebut, harus diikuti dengan perintah #systemctl restart iptables.service sehingga konfigurasi yang baru dapat dijalankan. Namun bila konfigurasi iptables diberikan pada shell prompt, maka konfigurasi tersebut akan langsung dijalankan oleh iptables.

Untuk melihat konfigurasi yang sedang digunakan oleh iptables, dapat digunakan perintah :

 [root@gateway etc]# iptables-save
# Generated by iptables-save v1.4.12 on Wed Aug 29 15:35:27 2012
*mangle
: PREROUTING ACCEPT [154:11803]
:INPUT ACCEPT [154:11803]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [132:13336]
: POSTROUTING ACCEPT [132:13336]
COMMIT
# Completed on Wed Aug 29 15:35:27 2012
# Generated by iptables-save v1.4.12 on Wed Aug 29 15:35:27 2012
*nat
: PREROUTING ACCEPT [1:119]
:INPUT ACCEPT [1:119]
:OUTPUT ACCEPT [1:108]
: POSTROUTING ACCEPT [1:108]
COMMIT
# Completed on Wed Aug 29 15:35:27 2012
# Generated by iptables-save v1.4.12 on Wed Aug 29 15:35:27 2012
*filter
:INPUT ACCEPT [164:12203]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [166:16816]
COMMIT
# Completed on Wed Aug 29 15:35:27 2012

 

Untuk mengosongkan konfigurasi Iptables, dapat digunakan perintah :

 [root@gateway]#iptables –flush

 

Back Up Configuration

 Bila ingin melakukan back-up terhadap konfigurasi iptables dapat digunakan perintah :

[root@gateway]#iptables-save > firewall-config-backup

(perintah menyimpan konfigurasi iptables pada file firewall-config-backup)

Bila ingin me-restore konfigurasi iptables yang telah disimpan, dapat digunakan perintah

[root@gateway]#iptables-restore < firewall-config-backup

 (perintah me-restore  konfigurasi iptables dari  file firewall-config-backup)

 

 


 

— end of chapter —

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *

*