Mengenal iptables: Si firewall serba bisa

Sudah lama saya tidak membahas masalah keamanan server Linux padahal ini hal yang sangat penting setelah sukses menginstall segala program yang dibutuhkan. Jelas tidak ingin ada yang berhasil membobol VPS dan kemudian dimanfaatkan untuk hal – hal tidak diinginkan bukan? Salah satu tool keamanan yang biasanya ada di setiap distro Linux secara default adalah sebuah firewall bernama iptables. Ini wajib anda kenali karena akan sering ditemui saat setting server.

Sistem kerja iptables adalah dengan melakukan filter dan tindakan apa yang akan diterapkan pada koneksi yang memenuhi aturan yang ada. Mau dilanjutkan? Diputus? Diblokir permanen? Ya, tergantung kebutuhan anda ini sangat relatif nanti aturannya.

Semisal di distro Linux yang anda pakai belum ada iptables (sangat kecil kemungkinan tidak disertakan secara default) maka anda bisa menginstallnya:

  • RHEL/CentOS/Fedora:
    yum install iptables
  • Debian/Ubuntu
    apt-get install iptables

Anda bisa melihat aturan iptables yang aktif dengan mengetikkan perintah:

iptables -L

Hasilnya akan mirip seperti ini:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Dimana:

  • INPUT – Filter ini berlaku untuk setiap koneksi yang masuk ke server. Koneksi HTTP? SSH? Ya dari sini firewallnya.
  • FORWARD – Ini tujuannya untuk meneruskan paket data, mirip seperti router. Nyatanya aturan jenis ini sangat jarang digunakan dalam VPS.
  • OUTPUT – Sedangkan aturan disini akan berlaku pada setiap koneksi yang keluar. Mau coba ping misalnya dari VPS?

Nah… bagaimana misalnya kalau kita ingin menambahkan aturan bahwa akses SSH lewat port 22 diperbolehkan? Kurang lebih akan seperti ini:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

Yang pertama tentu saja memperbolehkan akses SSH ke dalam server pada port 22, nah karena SSH sendiri komunikasinya 2 arah maka untuk keluar juga perlu diwhitelist.

Bagaimana kalau ingin memblokir akses? Saya menggunakan contoh SSH lagi, kasusnya saya ingin agar cuma bisa diakses dari alamat IP tertentu:

iptables -A INPUT -p tcp --dport 22 -s 192.168.10.10 -j ACCEPT

Maka SSH hanya akan bisa berasal dari alamat IP diatas.

Atau malah blokir akses kalau berasal dari IP tertentu?

iptables -A INPUT -p tcp --dport 22 -s 192.168.10.10 -j DROP

Patut diketahui bahwa iptables sendiri menyimpan aturannya pada memori, jadi kalau direstart VPSnya ya hilang semua. Anda perlu menyimpannya secara manual:

iptables save

Saya anjurkan agar default policy iptables anda agar memutuskan semua koneksi (DROP) dan dibuat whitelistnya satu per satu. Caranya adalah dengan mengetikkan perintah berikut:

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Ini saya letakkan di akhir karena kalau anda mengeksekusi di awal dan lupa membuat filter maka akses anda akan diblokir oleh firewallnya. Saya pernah merasakannya dan cukup frustasi karena tidak bisa terhubung sama sekali, untung bisa dipulihkan aksesnya. Jadi berhati – hatilah saat mengutak – atik ruleset dari iptables.

Apalagi kalau pas login SSH muncul pesan berikut, maka sudah patut anda tingkatkan keamanannya:

Last failed login: Sat Jan 30 12:46:15 EST 2016 from 111.1.56.31 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Jan 30 12:14:17 2016 from 192.168.133.19

Ini artinya ada yang berusaha login ke server anda lewat SSH dan gagal. Aslinya ribuan pas tadi saya login cuma lupa saya copas, jadi datanya kena reset dari proses login yang sukses terakhir.

Oh ya, kombinasikan dengan Fail2Ban agar aturannya bisa diupdate otomatis kalau ada bot – bot nakal yang sedang menyerang server anda.

2 Comments

Tinggalkan Balasan ke Chandra Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *