Metode Port Knocking Untuk Mengamankan Remote Akses SSH

Habis ngoprek si Slackware dan hardening ulang plus install ulang segala armornya, saya kepikiran untuk lebih meningkatkan lagi keamanan SSH server di laptop ini. Iseng-iseng kepikiran menggunakan port knocking, yaitu sebuah metode untuk melakukan percobaan koneksi ke kombinasi port tertentu dari klien. Jika kombinasi yang dihasilkan benar, maka daemon knockd pada sisi server akan mengeksekusi program tertentu yang sudah di setting. Analogi cara kerja port knocking jika diibaratkan itu, kalau suka nonton film-film hollywood ya, seperti mau masuk ke markas mafia hahaha. Coba aja liat di film-film, kalau mau masuk ke ruangan tertentu, setelah ngetok pintu, kita ‘kan harus menyebutkan kode khusus agar sang tuan rumah mau membukakan kita pintu dari dalam. Yap, seperti itu cara kerja port knocking.

Knock Knock Jokes
Knock Knock Jokes

Untuk percobaan saya, sudah di setting skenarionya pengamanannya adalah seperti ini:

  • Si Slackware secara default tidak saya set untuk menjalankan SSH server. Alias tidak mungkin bisa di remote oleh siapapun..
  • Saya membuat kombinasi port yang harus benar dalam satuan waktu tertentu. Jika benar, program knockd akan mengeksekusi script yang akan menjalankan SSH server
  • Ops, bukannya knockd bisa dimanfaatkan untuk mengijinkan spesifik IP Address untuk terkoneksi ke SSH? Ya, sebenarnya bisa saja. Tetapi saya lebih prefer untuk membuka saja service SSH to everyone. Toh saya sudah menggunakan script SSH anti-bruteforce kalau-kalau ada yang memanfaatkan momen SSH saya yang sudah open ini untuk percobaan login bertubi-tubi.
  • Jika sudah beres akses remote, saya bisa tutup service SSH ini dengan melakukan port knocking lagi ke kombinasi port tertentu. Sehingga siapapun kembali tidak bisa melakukan koneksi SSH.

Untuk melakukan itu semua, saya menggunakan program knockd dari Slackbuilds.org. Untuk distro lain, silahkan cari sendiri, di situs pembuatnya langsung juga boleh. Tinggal compile dan install. Tinggal lakukan perubahan di file /etc/knockd.conf:

Konfigurasi Knockd
Konfigurasi Knockd

Untuk konfigurasi saya seperti bisa dilihat di atas, yaitu knockd akan mengeksekusi perintah untuk menjalankan SSH server jika sequence port knock nya bertipe SYN dan dalam waktu 30 detik sequence port nya benar. Sedangkan knockd akan mengeksekusi perintah untuk stop SSH server jika sequence port knocknya bertipe FIN dan dalam waktu 30 detik sequence portnya benar. Silahkan bereksplorasi disini. Bebaskan hehehe. Misalnya diganti jika port sequence-nya ACK, perintahnya akan poweroff server hahaha.

Di bawah ini log knockd ketika saya melakukan knock untuk open SSH kemudian testing close SSH nya kembali. Saya menggunakan nmap secara berturut-turut dengan perintah:

$ nmap -p <port-kombinasi-#1> <ip-addr> *knock pertama
$ nmap -p <port-kombinasi-#2> <ip-addr> *knock kedua
$ nmap -p <port-kombinasi-#3> <ip-addr> *knock ketiga

dan untuk menutup port SSH dengan knocking menggunakan nmap juga, tapi ditambahkan embel-embel flag FIN:

$ nmap -sF -p <port-kombinasi-#1> <ip-addr> *knock pertama
$ nmap -sF -p <port-kombinasi-#2> <ip-addr> *knock kedua
$ nmap -sF -p <port-kombinasi-#3> <ip-addr> *knock ketiga

Aktifitas Knockd di Log Ketika Membuka dan Menutup SSH
Aktifitas Knockd di Log Ketika Membuka dan Menutup SSH

Port Knocing vs Security Threat?

Apakah dengan implementasi knockd ini, sekuritas system semakin meningkat atau justeru semakin memperparah keadaan? Kalau dilihat dari sisi pengguna mungkin mekanisme ini terlihat menjadi seperti pengamanan berlapis dan semakin menambah repot, karena mau konek SSH saja harus ketok-ketok segala haha (ingat, security berbanding terbalik dengan convenience). Tetapi jika dilihat secara teliti, sebenarnya terdapat celah keamanan pada metode port knocking, yaitu seluruh paket yang dikirimkan bisa di sniff oleh siapa saja yang berada di antara klien dan server. Sehingga kombinasi nomor port bisa dengan mudah diketahui juga oleh orang lain.

Capture Packet di Wireshark
Capture Packet di Wireshark

Seperti contoh di atas ini, sebuah packet dengan tujuan port echo (7) dengan mudah bisa diketahui. Jadi apakah anda benar-benar membutuhkan port knocking untuk mengamankan service tertentu? Ataukah justeru pemasangan metode ini semakin menyusahkan user dalam mengakses service? Semua kembali tergantung keadaan dan planning Anda dalam melakukan pengamanan suatu service.

Bagaimana dengan kasus saya ini? Saya masih tetap akan menggunakan port knocking, karena:

  • Untuk masuk ke service remote akses yang diproteksi (SSH) masih membutuhkan user dan password. Jadi pastikan user dan password juga kuat. Selain itu saya masih punya anti-bruteforce SSH. Just in case, ada yang berusaha menebak-nebak kombinasi user dan password ketika service SSH telah dibuka.
  • Meminimalisir peluang pihak luar untuk melakukan banner grabbing dan menebak sistem operasi dan versi SSH server. Karena service SSH di server saya ini tidak default open, hanya dibuka ketika dibutuhkan saja hehehe.

Semoga bermanfaat.

4 thoughts on “Metode Port Knocking Untuk Mengamankan Remote Akses SSH

  1. mas mw tnya ,,sya kan sdang skripsi ttng port knocking ,,tepatnya rancang bngn sistem keamanan jringan dgn metode port knocking utk mncegah http attack vulnerability,,, intinya sya mlkukan koneksi ke port 80 ato webservernya ,,sya sbgai client gt mas, lha sya pgn tw lgkahlangkah knocking webserver gmn ya mas?? sya udh coba kok blm bisa,,tlong bls scptmnya y mas ,, trmkasih

  2. mas ruben saya juga dulu skripsi saya tentang portknocking, dan saya menggunakan bahasa c untuk membangun aplikasi nya.,
    lebih lengkapnya liat artikel saya di http://mbahgarong.blogspot.com/2015/01/meningkatkan-keamanan-remote-server.html
    di situ penjelesan singkat dan cara menggunakan aplikasi nya.. system kerja nya hampir sama seperti di atas tapi prosesnya saya melakukan kombinasi pengetukan tiap port lebih banyak dan dalam waktu singkat seq_time nya bisa sampai 3 detik saja dan bisa juga di kembangkan untuk penutupan akses pada port2 lainnya seperti port 21 dan 25 FTP dan mailserver. selengkapnya lihat di blog saya aja.. tks

  3. saya menggunakan knockd bawaan dr linux ubuntu setinganx sudah sesuai di atas dan knockd juga sudah bisa membaca client yg melakukan ktukan tpi pas mau di remote masih connection refaused…mohon bantuannya..

  4. Saya sangat tertarik pada port knocking, dan rencananya saya ingin membuat sebuah metode dengan random port knocking. apa ada referensi atau literatur terkait yang bisa di share untuk membantu saya menyelesaikan tugas akhir saya. terima kasih mas..

Leave a Reply

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