Konfigurasi Firewall Menggunakan Iptables pada Ubuntu

Mengaktifkan Firewall merupakan hal yang penting dilakukan untuk menambah keamanan server. Iptables merupakan firewall yang disertakan di banyak sistem operasi Linux.

Pada artikel ini saya akan menjelaskan bagaimana melakukan konfigurasi Firewall dengan menggunakan iptables pada sistem operasi Ubuntu 18.04, konfigurasinya sederhana saja tidak sampai yang rumit.

Tentang Iptables

Sebelum menuju ke perintah konfigurasi, ada baiknya saya jabarkan sedikit bagaimana konsep dasar iptables bekerja, sekaligus membuat agar artikel ini lebih panjang :).

Dalam iptables terdapat 3 buah table, dimana masing – masing table memiliki beberapa chain, untuk lebih jelasnya lihat table dibawah ini:

Table mangleTable natTable filter
– prerouting
– input
– forward
– output
– postrouting
– prerouting
– forward
– postrouting
– input
– forward
– output

sebenarnya iptables memiliki 5 tables, namun 3 table diatas adalah yang paling umum digunakan.

  • Table mangle digunakan untuk melakukan manipulasi packet misalnya, melakukan perubahan pada TTL, pada table ini juga dapat dilakukan proses menandai packet untuk mempermudah identifikasi pada chain selanjutnya. Yang biasa pakai Mikrotik pasti familiar dengan ini.
  • Table nat digunakan untuk melakukan proses NAT (Network Address Translation), misalnya melakukan perubahan source atau destination address, table ini akan berkaitan dengan proses routing. Redirect adalah salah satu contoh penggunaan pada table ini.
  • Table filter digunakan untuk untuk menolak atau mengizinkan paket yang masuk, keluar, maupun yang hanya numpang lewat.

Saya tidak akan menjelaskan detil table, chain, dan urutannya pada artikel ini karena iptables sedikit rumit, mari kita fokus saja ke table filter, disana ada 3 chain:

  • INPUT : menangani paket yang Masuk
  • FORWARD : menangani packet yang diteruskan/dirouting melalui server. chain ini biasanya digunakan pada linux yang bekerja sebagai router.
  • OUTPUT : menangani packet/koneksi keluar yang dibuat oleh server sendiri. contohnya: request curl, dan proses resolve dns keluar.

nah dari penjelasan diatas, kita akan menempatkan rules iptables di table filter chain INPUT.

Konfigurasi Iptables

Setelah sedikit teori diatas kini saatnya praktik, silahkan login ke server anda sebagai root, kemudian coba lihat rule yang sedang aktif di table filter

iptables -t filter -L

Output perintah diatas kurang lebih seperti dibawah ini jika belum pernah di konfigurasi.

Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Saya biasanya menggunakan prinsip Whitelist untuk konfigurasi firewall, yaitu Block Semua dan hanya Izinkan yang terdaftar, jadi rule yang akan saya tambahkan nanti ke iptables adalah rule – rule yang sifatnya mengizinkan (ACCEPT), trafik lain yang tidak ditentukan akan diblok dengan mengatur policy pada chain.

Tambahkan rules untuk mengizinkan ssh

iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

Penjelasan mengenai perintah diatas :

  • -t : Table, digunakan untuk menentukan nama table, pada contoh ini table filter
  • -A : Append, digunakan untuk menambahkan rule, parameter ini diikuti dengan nama chain, pada contoh diatas chain INPUT
  • -p : Protocol, adalah protocol yang akan di check untuk rule ini
  • –dport : Destination Port, port tujuan untuk di check, pada contoh diatas port 22 adalah nomor port default ssh
  • -j : Jump, target yang dituju ketika rule tersebut cocok, target pada parameter ini bisa berupa built-in chain maupun user-defined chain. pada contoh diatas targetnya adalah ACCEPT

jika perintah diatas berhasil tanpa error, berarti rule sudah berhasil ditambahkan, cobalah menambahkan beberapa rule lainnya sesuai dengan service – service yang berjalan pada server anda. contoh dibawah ini mengizinkan HTTP, HTTPS, dan FTP:

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT

FTP Passive Mode

FTP pada Passive Mode sesungguhnya tidak hanya menggunakan satu buah port. Selain satu buah port yang digunakan untuk command  (port 21), ia membutuhkan port lain untuk digunakan melakukan transfer data. Memberikan exception pada port 21 saja tidak cukup untuk membuat transfer file FTP berjalan dengan baik, kita juga perlu memberikan rule untuk mengizinkan data port yang digunakan oleh FTP. 

Untuk itu kita terlebih dahulu menentukan range passive port yang boleh digunakan oleh FTP Server, pada artikel ini saya menggunakan range 10090-10100, total 10 port. Berikut adalah command untuk menambahkan port tersebut pada firewall:

iptables -t filter -A INPUT -p tcp --dport 10090:10100 -j ACCEPT

Tentukan Port Range di Aplikasi

Setelah menambahkan port range pada firewall, anda juga perlu melakukan konfigurasi pada aplikasi FTP Server agar hanya membuka passive port pada range yang sudah ditentukan.

VSFTPD

bagi anda yang menggunakan vsftpd, anda dapat menambahkan konfigurasi berikut pada file /etc/vsftpd.conf

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090

Restart service nya

systemctl restart vsftpd

Pure-FTPd

bagi anda yang menggunakan Pure-FTPd, tambahkan file konfigurasi pada /etc/pure-ftpd/conf/PassivePortRange, untuk cara singkatnya seperti dibawah ini:

echo "10090 10100" > /etc/pure-ftpd/conf/PassivePortRange

Restart service nya

systemctl restart pure-ftpd-mysql 

Izinkan Koneksi Localhost

Pada server mungkin kita banyak menggunakan service yang berjalan pada localhost (127.0.0.1) misalnya MySQL Server, untuk itu izinkan saja semua trafik yang menggunakan localhost, toh localhost tidak terjangkau oleh jaringan luar.

iptables -t filter -A INPUT -i lo -j ACCEPT
  • -i : Interface, adalah nama interface dimana paket tersebut masuk, pada contoh diatas menggunakan interface lo atau loopback yaitu interface yang merujuk ke dirinya sendiri.

Connection Tracking

Komunikasi pada jaringan terjadi 2 arah, ada masuk dan ada keluar, ketika sebuah koneksi komunikasi terjadi, ada yang namanya Source Port dan Destination Port. Source Port adalah Port dimana komunikasi itu keluar dari server kita, sedangkan Destination Port adalah Port tujuan pada suatu server. Sederhananya setiap komunikasi atau koneksi yang dibuat terdapat pasangan SourcePort dan DestinationPort, ilustrasinya seperti dibawah ini

Koneksi Antar Komputer

Dari gambar diatas, ketika user akan membuka website, sebuah koneksi dibuat terlebih dahulu dari user menuju ke web server, source port pada user dapat ditentukan oleh sistem operasi. Ketika respon dikirimkan dari web server ke arah komputer kita, –dport pada packet tersebut bukanlah 80, melainkan 1025 (Ephemeral Port), jika saya tidak menambahkan rules untuk port tersebut pada firewall, koneksi ini akan di drop oleh firewall, sehingga komunikasi tidak dapat dilanjutkan.

Untuk mengatasi hal ini kita dapat menggunakan module conntrack pada iptables untuk dapat mengetahui mana koneksi yang sudah dibuat dan terkait dengan koneksi sebelumnya.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

setelah semua rules ditambahkan, saatnya mengubah default policy pada chain INPUT menjadi DROP. Jika anda melakukan konfigurasi pada VPS, pastikan rule ssh telah anda tambahkan sebelum menjalankan perintah dibawah ini:

iptables -P INPUT DROP

Sampai disini konfigurasi firewall dengan iptables telah cukup dilakukan, cobalah lakukan ping ke server, jika tidak ada respon berarti firewall sudah bekerja. 

Persistent Rule

Iptables tidak otomatis menyimpan konfigurasi yang ditambahkan,  konfigurasi diatas akan hilang ketika server di-restart. Untuk membuat rule iptables tetap ada setelah server di restart, install package iptables-persistent, kemudian pilih simpan konfigurasi.

apt-get install iptables-persistent

Jika anda melakukan perubahan, anda dapat mengunakan perintah dibawah ini untuk menyimpan konfigurasi.

iptables-save > /etc/iptables/rules.v4

Kadek Jayak
Seorang Web Developer di Denpasar Bali. Nulis blog hanya sekedar iseng dan berbagi pengalaman.
%d blogger menyukai ini: