Firewall iptables Port Knocking

Berbagi tips untuk meningkatkan keamanan server dengan menggunakan teknik port knocking iptables firewall.

Kali ini saya ingin berbagi tips untuk meningkatkan keamanan server dengan menggunakan teknik port knocking. Port knocking adalah sebuah cara untuk membuka port tertentu dengan cara mengirimkan paket ke sedetetan port-port tertentu yang telah ditentukan sebelumnya.

Q : Tujuannya untuk apa?

A : Tujuannya untuk menghindari serangan dari pentester yang melakukan scanning port untuk mendapatkan service-service yang mungkin bisa diexploitasi oleh mereka. Karena jika pentester yang melakukan scanning tersebut tidak mengetuk port yang telah ditentukan sebelumnya secara berurutan, maka port yang ingin kita lindungi tersebut tidak akan terbuka.

Q : Bisa lebih detail?

A : Misalnya kita punya service SSH yang listen di port 22, sedangkan pentester punya 0day remote root exploit untuk aplikasi OpenSSH tersebut misalnya. Maka server akan terancam keamanannya karena port 22 tersebut terbuka. Dengan menggunakan teknik port knocking, hanya mereka yang mengetahui port mana yang harus di “hit” terlebih dahulu yang dapat membuka dan mengakses port 22 tersebut.

Supaya lebih jelas, saya ambil contoh dari thread saya sebelumnya tentang celeng Lawang Sewu CTF (http://devilzc0de.org/forum/thread-20071.html). Challange yang ke-2 adalah mengenai port knocking.

Port knocking ini bisa kita konfigurasi dengan iptables firewall (yang biasanya sudah dimiliki kernel Linux pada kebanyakan distro linux).

Pada kesempatan kali ini saya share bagaimana cara konfigurasi port knocking menggunakan iptables.

Disclaimer: Dengan mengikuti tutorial ini, author tidak bertanggung jawab jika ada kesalahan dan kehilangan remote akses ke server.

VIDEO TUTORIAL : http://youtu.be/0zFQocf7C_0.

Yang dibutuhkan pada tutorial kali ini :

  • Server & Client dengan OS Linux (pada tutorial kali ini ane menggunakan CentOS)
  • iptables (server firewall)
  • nmap (untuk scan dan knocking port dari client)
  • Pengetahuan dasar mengenai iptables.

Studi Kasus:

Saya punya sebuah server (IP : 192.168.0.100), saya menggunakan SSH untuk melakukan manajemen server tersebut. SSH port untuk remote aksesnya adalah default (Port 22). Saya ingin menutup port 22 dan hanya terbuka pada saat dibutuhkan.

Disinilah kita gunakan teknik port knocking, dimana saya sudah menge-set konfigurasi supaya user harus mengirimkan paket TCP ke port (misalnya) 1111 lalu 2222, lalu 3333, dan terakhir 4444 baru kembudian port 22 (SSH) tersebut terbuka.

  • IP Server : 192.168.0.100.
  • OS : CentOS.
  • SSH Port : 22.
  • Skema Port Knocking : Paket TCP Port 1111 => 2222 => 3333 => 4444 => Port 22 terbuka.

Untuk bawaan server CentOS, konfigurasi firewall sudah membuka port 22 untuk SSH.

Port 22 open

Maka kita perlu mengkonfigurasi ulang iptables firewallnya. Kita dapat menggunakan perintah iptables-save > iptables.rules untuk melakukan dump / backup rules firewall.

Coba lihat pada hasil konfigurasi firewall yang baru saja kita dump, kurang lebih seperti berikut (untuk CentOS):

1-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
2-A INPUT -p icmp -j ACCEPT 
3-A INPUT -i lo -j ACCEPT 
4-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
5-A INPUT -j REJECT --reject-with icmp-host-prohibited 
6-A FORWARD -j REJECT --reject-with icmp-host-prohibited

iptables dump config

Perhatikan pada rules berikut :

1-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

terlihat bahwa iptables memperbolehkan akses melalui port 22.

Mari kita buat iptables rules sesuai keinginan kita di studi kasus ini, yaitu kita ingin menutup port 22 tersebut, dan hanya terbuka pada saat port 1111,2222,3333,4444 mendapatkan paket TCP secara berurutan.

Copy iptables.rules yang sebelumnya sudah kita dapatkan ke iptables-new.rules, kemudian edit.

1cp iptables.rules iptables-new.rules
2vi iptables-new.rules

dan edit seperti pada gambar dibawah :

iptables port knocking rules

Dengan kata lain, saya membuka port 80, kemudian menambahkan firewall rules baru yang secara dinamis dapat membuka port 22 selama 15 detik jika port 1111, 2222, 3333, 4444 mendapatkan kiriman paket TCP secara berurutan dalam jangka waktu 5 detik.

Setelah dirasa udah oke, kita restore konfigurasi firewall yang baru dengan menggunakan iptables-restore, lalu restart iptables servicenya.

1iptables-restore < iptables-new.rules
2service iptables save
3service iptables restart

kemudian untuk memastikan rules yang baru sudah berjalan gunakan perintah :

1iptables -L -n

iptables rules list

Nah kalau udah, mari kita coba cek scan port 22 pada server dari komputer kita menggunakan nmap, maka akan terlihat port tersebut tertutup oleh firewall.

1nmap -Pn 192.168.0.100 -p22

nmap port 22

Setelah itu kita buat script bash sederhana untuk melakukan knocking port.

1#!/bin/bash
2HOST=$1
3shift
4for ARG in "$@"
5do
6    nmap -PN --host_timeout 201 --max-retries 0 -p $ARG $HOST
7done

Simpan dengan nama knock.sh lalu chmod +x agar script tersebut dapat dieksekusi.

cara penggunaan:

1# ./knock.sh [ip server] [list port]
2# misalnya:
3./knock.sh 192.168.0.100 1111 2222 3333 4444

Dengan mengetuk port 1111, 2222, 3333, 4444 secara berurutan maka port 22 yang telah kita tentukan dari rules firewall akan terbuka. Dengan begitu kita dapat melakukan koneksi SSH ke server.

nmap port knocking

Sekian tutorial mengenai port knocking.

Silahkan dikembangkan sendiri dengan kreatifitas masing2, protocol dan paket yang dikirimkan tidak hanya terbatas pada TCP saja, kita juga bisa memanfaatkan kombinasi protokol TCP, UDP atau bahkan ICMP.

Referensi: