Langsung ke konten utama

Knock.. Knock | Who's there? - Linux Squence Port Knocking



Beberapa waktu yang lalu karena sebuah keisengan, saya mendapatkan kunjungan tak diharapkan. Keisengan yang saya lakukan adalah membuat user pada Linux yaitu test dengan password test. Saya tidak habis pikir jika server seharga Chiki-Chiki yang nggak ada apa-apanya ini bakalan kena brute force. Itu pikiran awal saya. Tapi setelah saya lihat, resource server milik saya hampir habis terutama pada CPU-nya. Setelah menjalankan perintah htop barulah kelihatan. Ternyata user test tadi sedang menjalankan script yang diduga sebagai script mining. Karena yang menjalankan script tersebut adalah user test, besar kemungkinan pelaku mendapatkan username dan password menggunakan metode acak (brute force).


Proses htop dengan user test

Log pada file /var/log/auth.log mengindikasikan upaya brute force

Proces yang di inisiasi oleh user test di terminate dengan pkill

Sebelumnya saya sudah menuliskan berbagai alasan kenapa kita harus menambah lapisan keamanan pada setiap jaringan yang dibuat (baca kembali: Knock.. Knock | Who's there? - MikroTik Squence Port Knocking). Namun, implementasinya masih terbatas pada platform RouterOS dan bisa dibilang   cukup mudah. Oleh karena itu, pada kesempatan kali ini saya akan menuliskan tutorial bagaimana melakukan Sequence Port Knocking pada Platform Linux.


Konsep Dasar
Konsep dasar dari port knocking Linux sangat mirip sekali dengan port knocking yang diposting sebelumnya (baca di Knock.. Knock | Who's there? - MikroTik Squence Port Knocking). Hanya saja, mungkin ada sedikit perbebeda pada praktiknya. Selain itu, saya akan menggunakan iptables sebagai aplikasi pendukung untuk membuat firewall

1. Basic Stateful Firewall
Merupakan konfigurasi firewall dasar yang mengatur trafik apa saja yang diperbolehkan masuk dan ditetapkan sebagai koneksi yang sah.

# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 8 -d x.x.x.x -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -d x.x.x.x -j ACCEPT


Keterangan (berdasarkan baris):
1. Setiap koneksi yang mempunyai kondisi sudah ada (established) dan yang berhubungan (related) akan diterima (diloloskan). Hal ini dimaksudkan agar koneksi yang sudah dibuat tidak tiba-tiba terputus. Fitur ini membutuhkan module conntrack dengan parameter ctstate
2. Setiap koneksi yang masuk melalui interface loopback akan diloloskan. Beberapa aplikasi/service membutuhkan komunikasi melalui loopback.
3. Kita juga perlu meloloskan trafik ping agar nanti tidak mengganggu proses knocking
4.(opsional) Beberapa server memiliki service yang sifatnya dapat diakses secara publik (misalnya web server ). Sebaiknya service ini tidak dimaksukkan dalam port knocking

(note: x.x.x.x adalah IP address dari interface masuk. Boleh juga didefinisikan interface masuk-nya juga, misalkan interface eth0)


2. Level Ketukan (knocking level)
Kita dapat menentukan berapa kali jumlah ketukan yang harus dilakukan sebelum membuka akses ke service yang dimaksud. Semakin banyak jumlah ketukannya, semakin aman server yang kita miliki dari akses ilegal. Dalam tutorial ini, saya akan membuat 3 kali ketukan.

Setiap ketukan yang dilakukan akan disimpan pada custom chain pada firewall. Selain jumlah ketukan, proses ketukan dan trafik yang diizinkan pun juga harus menggunakan custome chain.

# iptables -N 1knock
# iptables -N 2knock
# iptables -N 3knock
# iptables -N knocking
# iptables -N passed



3. Arahkan trafik knocking
Trafik yang tidak sesuai dengan stateful connection pada poin 1 harus dianggap sebagai upaya knocking. Sehingga trafiknya harus diarahkan pada custom chain knocking

# iptables -A INPUT -d x.x.x.x -j knocking


4. Ketukan Pertama
Misalkan pada ketukan pertama, saya menggunakan port 1234 dengan protokol tcp. Kita harus memasukkan rule yang berfungsi untuk menangkap setiap trafik yang masuk melalui port tcp 1234. Jika tidak sesuai, maka harus di drop

Selanjutnya kita juga harus memasang rule yang akan mengarahkan seluruh trafik yang tidak cocok dengan kriteria sebelumnya dari custom chain knocking menuju custom chain 1knock

# iptables -A 1knock -p tcp --dport 1234 -m recent --set --name ip1 --rsource -j DROP
# iptables -A 1knock -j DROP
# iptables -A knocking -j 1knock


Rule baris pertama akan melakukan pencocokan terhadap paket yang memiliki tcp port 1234. Apabila cocok source address (--rsource) akan disimpan pada list dengan nama ip1 dengan bantuan module recent. Selanjutnya paket tersebut akan di drop


5. Ketukan Kedua
Port yang digunakan untuk ketukan kedua adalah tcp 6969.

Sebelum proses knocking terjadi, trafik harus dialihkan dulu dari custom chain knocking menuju custom chain 2knocking dengan mengacu pada kriteria: Apabila paket memiliki source address yang terdapat pada list ip1. Selain itu, rule ini harus diletakan pada nomor urut 1

# iptables -I knocking 1 -m recent --rcheck --seconds 20 --rsource --name ip1 -j 2knock

Setelah paket dilempar ke custom chain, maka Setiap paket yang dikirimkan kemudian mendapatkan perlakuan drop, maka komputer pengirim akan mengirimkan kembali paket tersebut. Pada ketukan pertama, paket mengalami drop saat dilakukan pencatatan. Oleh karena itu, kita harus melakukan filtering terhadap paket sisa yang dihasilkan oleh ketukan pertama (residu).

# iptables -A 2knock -p tcp --dport 1234 -j DROP

Untuk menghindari ketukan acak yang dilakukan secara berulang, maka list IP address dari proses knocking sebelumnya harus dihapus.

# iptables -A 2knock -m recent --remove --name ip1 --rsource

Barulah ditambahkan rule yang digunakan untuk menangkap knocking dan source address.

# iptables -A 2knock -p tcp --dport 6969 -m recent --set --rsource --name ip2 -j DROP

Apabila kondisi diatas tidak memenuhi, maka akan dilempar lagi ke custome chain 1knock untuk diblok

# iptables -A 2knock -j 1knock

Rule yang Apabila trafik dengan port yang kedua, maka source address akan ditandai dengan ip2


6. Ketukan Ketiga
Port yang digunakan adalah tcp 2203
Sama seperti ketukan kedua, trafik harus dialihkan dulu dari custom chain knocking menuju custom chain 3knocking dengan mengacu pada kriteria: Apabila paket memiliki source address yang terdapat pada list ip2. Selain itu rule ini harus diletakan di posisi paling atas, sehingga menggeser rule yang sebelumnya sudah ada.

# iptables -I knocking 1 -m recent --rcheck --seconds 15 --rsource --name ip2 -j 3knock

Selebihnya, konsepnya sangat mirip dengan ketukan kedua.

# iptables -A 3knock -p tcp tcp --dport 6969 -j DROP
# iptables -A 3knock -m recent --rsource --name ip2 --remove
# iptables -A 3knock -p tcp --dport 2203 -m recent --set --rsource --name ip3 -j DROP
# iptables -A 3knock -j 1knock



7. Final Chain
Setelah serangkaian ketukan yang sudah dilakukan, didapatkan address list ip3. List itulah yang harusnya diloloskan oleh firewall. Pada custom chain knocking, harus ditambahkan rule yang memiliki kondisi: apabila ada paket datang dengan source address yang ada pada list ip3, maka paket akan diterima. Jika tidak, maka paket akan diarahkan ke custom chain 1knock untuk diproses ulang.

# iptables -A knocking -1 -m recent --rcheck --seconds 20 --rsource --name ip3 -j passed

Selanjutnya pada custom chain passed, lakukan drop pada port tcp 2203 yang dihasilkan oleh ketukan sebelumnya.

# iptables -A passed -p tcp --dport 2203 -j DROP

Barulah kita tambahkan rule yang menyatakan pembukaan akses pada port yang dimaksud, misalkan SSH (tcp 22.

# iptables -A passed -p tcp --dport 22 -j ACCEPT

Apabila pengguna mengakses port yang tidak dimasukkan pada custom chain ini, maka trafiknya akan di drop. Atau bisa juga dialihkan ke custom chain 1knock, sehingga trafik tersebut akan dianggap sebagai upaya port knocking

# iptables -A passed -j 1knock


Itu saja dari saya. Share dan tuliskan komentar anda dikolom bawah.






Reference:
- Ellingwood, J. (2018). How To Configure Port Knocking Using Only Iptables on an Ubuntu VPS | DigitalOcean. Retrieved from https://www.digitalocean.com/community/tutorials/how-to-configure-port-knocking-using-only-iptables-on-an-ubuntu-vps

Komentar

Postingan populer dari blog ini

Hubungan Manis antara Conan Edogawa dan Haibara Ai.

( Hubungan Manis antara Conan Edogawa dan Haibara Ai)  Halo para Conaners, tahu kenyataan unik nggak. Ternyata Haibara Ai tuh demen lho sama Conan Edogawa. Tapi dia berusaha menyembunyikannya lantaran dia udah tau kalo Conan (Shinichi) tuh suka dan cinta sama Ran. Haibara yang kita ketahui mempunyai kepribadian dingin ini, tak gampang putus asa nih buat nunjukin kegigihannya untuk mendapatkan perhatian dari Conan. Yuk kita lihat, usaha apa saja yang dilakukan Haibara untuk menaklukan Conan :

Live Streaming ke Banyak Media Sosial

Beberapa dekade terakhir, banyak sekali para gamer yang "nyambi" cari uang dengan melakukan live stream di media sosial terutama Facebook. Sebenarnya saya juga mulai kesel karena para fans live streamer sering membagikan live streaming-nya ke grup Facebook. Sehingga grup Facebook yang awalnya diperuntukkan sebagai media diskusi malah jadi ajang pencarian views. Spam dan annoying banget.

Instalasi FreeRADIUS ft. daloRADIUS | [UPDATE - Study case pada Debian Buster]

NOTE: Artikel ini telah mengalami perubahan. Sebelumnya, versi sistem operasi yang saya gunakan adalah Debian Wheezy. Dengan menggunakan Debian Buster beberapa versi package  juga ikut berubah. Update package akan saya beri warna font merah Remote Authentication Dial-In User Service atau sering disebut dengan RADIUS adalah sebuah protokol jaringan yang melayani administrasi pengguna dalam penggunaan jaringan secara terpusat. Aspek pelayanan yang diberikan meliputi  Authetication, Authorization dan Accounting  yang kemudian disingkat AAA atau triple A . RADIUS akan sangat dibutuhkan oleh provider skala besar, misalkan  Internet Service Provider (ISP) . Untuk platform MikroTik, RADIUS sering dikenal dengan userman ( user manager ) karena tugasnya memang manajemen pengguna.