Cara Menggunakan Port Knocking di Linux (dan Mengapa Anda Tidak Harus)
Diterbitkan: 2022-01-29Port knocking adalah cara untuk mengamankan server dengan menutup port firewall—bahkan yang Anda tahu akan digunakan. Port tersebut dibuka sesuai permintaan jika—dan hanya jika—permintaan koneksi menyediakan ketukan rahasia.
Port Knocking Adalah "Knock Rahasia"
Pada tahun 1920-an, ketika larangan sedang berjalan, jika Anda ingin masuk ke speakeasy, Anda harus mengetahui ketukan rahasia dan mengetuknya dengan benar untuk masuk ke dalam.
Port knocking adalah padanan modern. Jika Anda ingin orang memiliki akses ke layanan di komputer Anda tetapi tidak ingin membuka firewall Anda ke internet, Anda dapat menggunakan port knocking. Ini memungkinkan Anda untuk menutup port pada firewall Anda yang memungkinkan koneksi masuk dan membukanya secara otomatis ketika pola upaya koneksi yang telah diatur sebelumnya dilakukan. Urutan upaya koneksi bertindak sebagai ketukan rahasia. Ketukan rahasia lainnya menutup port.
Port knocking adalah sesuatu yang baru, tetapi penting untuk diketahui bahwa ini adalah contoh keamanan melalui ketidakjelasan, dan konsep itu pada dasarnya cacat. Rahasia cara mengakses suatu sistem aman karena hanya mereka yang berada dalam kelompok tertentu yang mengetahuinya. Tetapi begitu rahasia itu terungkap—entah karena terungkap, diamati, ditebak, atau berhasil—keamanan Anda menjadi batal. Anda sebaiknya mengamankan server Anda dengan cara lain yang lebih kuat, seperti mewajibkan login berbasis kunci untuk server SSH.
Pendekatan yang paling kuat untuk keamanan siber berlapis-lapis, jadi, mungkin port knocking harus menjadi salah satu dari lapisan itu. Semakin banyak lapisan, semakin baik, bukan? Namun, Anda dapat berargumen bahwa port knocking tidak menambah banyak (jika ada) pada sistem yang aman dan dikeraskan dengan benar.
Keamanan siber adalah topik yang luas dan rumit, tetapi Anda tidak boleh menggunakan port knocking sebagai satu-satunya bentuk pertahanan Anda.
TERKAIT: Cara Membuat dan Menginstal Kunci SSH Dari Shell Linux
Memasang knockd
Untuk mendemonstrasikan port knocking, kita akan menggunakannya untuk mengontrol port 22, yang merupakan port SSH. Kami akan menggunakan alat yang disebut knockd. Gunakan apt-get
untuk menginstal paket ini ke sistem Anda jika Anda menggunakan Ubuntu atau distribusi berbasis Debian lainnya. Pada distribusi Linux lainnya, gunakan alat manajemen paket distribusi Linux Anda.
Ketik berikut ini:
sudo apt-get install knockd
Anda mungkin sudah menginstal firewall iptables di sistem Anda, tetapi Anda mungkin perlu menginstal paket iptables-persistent
. Ini menangani pemuatan otomatis aturan iptable
yang disimpan.
Ketik yang berikut untuk menginstalnya:
sudo apt-get install iptables-persistent
Saat layar konfigurasi IPV4 muncul, tekan bilah spasi untuk menerima opsi "Ya".
Tekan bilah spasi lagi di layar konfigurasi IPv6 untuk menerima opsi "Ya" dan melanjutkan.
Perintah berikut memberi tahu iptables
untuk mengizinkan koneksi yang dibuat dan yang sedang berlangsung untuk melanjutkan. Kami sekarang akan mengeluarkan perintah lain untuk menutup port SSH.
Jika seseorang terhubung dengan SSH ketika kami mengeluarkan perintah ini, kami tidak ingin mereka terputus:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Perintah ini menambahkan aturan ke firewall, yang mengatakan:
- -A : Tambahkan aturan ke tabel aturan firewall. Artinya, tambahkan ke bagian bawah.
- INPUT : Ini adalah aturan tentang koneksi masuk.
- -m conntrack : Aturan firewall bertindak atas lalu lintas jaringan (paket) yang cocok dengan kriteria dalam aturan. Parameter
-m
menyebabkaniptables
menggunakan modul pencocokan paket tambahan—dalam hal ini, yang disebutconntrack
bekerja dengan kemampuan pelacakan koneksi jaringan dari kernel. - –cstate ESTABLISHED,RELATED : Ini menentukan jenis koneksi yang akan diterapkan aturan, yaitu koneksi ESTABLISHED dan RELATED. Koneksi yang dibuat adalah koneksi yang sudah berlangsung. Koneksi terkait adalah koneksi yang dibuat karena tindakan dari koneksi yang dibuat. Mungkin seseorang yang terhubung ingin mengunduh file; yang mungkin terjadi melalui koneksi baru yang diprakarsai oleh host.
- -j ACCEPT : Jika traffic cocok dengan aturan, lompat ke target ACCEPT di firewall. Dengan kata lain, lalu lintas diterima dan diizinkan melewati firewall.
Sekarang kita dapat mengeluarkan perintah untuk menutup port:
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT
Perintah ini menambahkan aturan ke firewall, yang mengatakan:
- -A : Menambahkan aturan ke tabel aturan firewall, yaitu menambahkannya ke bawah.
- INPUT : Aturan ini tentang koneksi masuk.
- -p tcp : Aturan ini berlaku untuk lalu lintas yang menggunakan Protokol Kontrol Transmisi.
- –dport 22 : Aturan ini secara khusus berlaku untuk lalu lintas TCP yang menargetkan port 22 (port SSH).
- -j REJECT : Jika lalu lintas cocok dengan aturan, lompat ke target REJECT di firewall. Jadi, jika lalu lintas ditolak, itu tidak diizinkan melalui firewall.
Kita harus memulai daemon netfilter-persistent
. Kita dapat melakukannya dengan perintah ini:
sudo systemctl start netfilter-persistent
Kami ingin netfilter-persistent
melalui siklus simpan dan muat ulang, sehingga memuat dan mengontrol aturan iptable
.
Ketik perintah berikut:
sudo netfilter-persisten save
Sudo netfilter-persistent reload
Anda sekarang telah menginstal utilitas, dan port SSH ditutup (semoga, tanpa memutuskan koneksi siapa pun). Sekarang, saatnya untuk mengkonfigurasi ketukan rahasia.
Mengonfigurasi knockd
Ada dua file yang Anda edit untuk mengkonfigurasi knockd
. Yang pertama adalah file konfigurasi knockd
berikut:
sudo gedit /etc/knockd.conf
Editor gedit
terbuka dengan file konfigurasi knockd
yang dimuat.
Kami akan mengedit file ini sesuai dengan kebutuhan kami. Bagian yang kami minati adalah "openSSH" dan "closeSSH". Empat entri berikut ada di setiap bagian:
- sequence : Urutan port yang harus diakses seseorang untuk membuka atau menutup port 22. Port default adalah 7000, 8000, dan 9000 untuk membukanya, dan 9000, 8000, dan 7000 untuk menutupnya. Anda dapat mengubah ini atau menambahkan lebih banyak port ke daftar. Untuk tujuan kami, kami akan tetap menggunakan default.
- seq_timeout : Jangka waktu di mana seseorang harus mengakses port untuk memicunya membuka atau menutup.
- command : Perintah yang dikirim ke firewall
iptables
saat tindakan buka atau tutup dipicu. Perintah-perintah ini baik menambahkan aturan ke firewall (untuk membuka port) atau mengeluarkannya (untuk menutup port). - tcpflags : Jenis paket yang harus diterima setiap port dalam urutan rahasia. Paket SYN (sinkronisasi) adalah yang pertama dalam permintaan koneksi TCP, yang disebut jabat tangan tiga arah.
Bagian “openSSH” dapat dibaca sebagai “permintaan koneksi TCP harus dibuat ke port 7000, 8000, dan 9000—dalam urutan itu dan dalam 5 detik—agar perintah untuk membuka port 22 dikirim ke firewall.”
Bagian “closeSSH” dapat dibaca sebagai “permintaan koneksi TCP harus dibuat ke port 9000, 8000, dan 7000—dalam urutan itu dan dalam 5 detik—agar perintah untuk menutup port 22 dikirim ke firewall.”
Aturan Firewall
Entri "perintah" di bagian openSSH dan closeSSH tetap sama, kecuali untuk satu parameter. Ini adalah bagaimana mereka terdiri:
- -A : Tambahkan aturan ke bagian bawah daftar aturan firewall (untuk perintah openSSH).
- -D : Hapus perintah dari daftar aturan firewall (untuk perintah closeSSH).
- INPUT : Aturan ini berkaitan dengan lalu lintas jaringan yang masuk.
- -s %IP% : Alamat IP perangkat yang meminta koneksi.
- -p : Protokol jaringan; dalam hal ini, itu TCP.
- –dport : Pelabuhan tujuan; dalam contoh kita, ini adalah port 22.
- -j ACCEPT : Lompat ke target terima di dalam firewall. Dengan kata lain, biarkan paket melewati sisa aturan tanpa bertindak berdasarkan itu.
Pengeditan File Konfigurasi knockd
Pengeditan yang akan kami lakukan pada file disorot dengan warna merah di bawah ini:
Kami memperpanjang "seq_timeout" menjadi 15 detik. Ini murah hati, tetapi jika seseorang secara manual mengaktifkan permintaan koneksi, dia mungkin membutuhkan waktu sebanyak ini.
Pada bagian “openSSH”, kita ubah opsi -A
(tambahkan) pada perintah menjadi -I
(masukkan). Perintah ini menyisipkan aturan firewall baru di bagian atas daftar aturan firewall. Jika Anda membiarkan opsi -A
, itu akan menambahkan daftar aturan firewall dan meletakkannya di bagian bawah .
Lalu lintas masuk diuji terhadap setiap aturan firewall dalam daftar dari atas ke bawah. Kami sudah memiliki aturan yang menutup port 22. Jadi, jika lalu lintas masuk diuji terhadap aturan itu sebelum melihat aturan yang mengizinkan lalu lintas, koneksi ditolak; jika melihat aturan baru ini terlebih dahulu, koneksi diperbolehkan.
Perintah close menghapus aturan yang ditambahkan oleh openSSH dari aturan firewall. Lalu lintas SSH sekali lagi ditangani oleh aturan "port 22 ditutup" yang sudah ada sebelumnya.
Setelah Anda melakukan pengeditan ini, simpan file konfigurasi.
TERKAIT: Cara Mengedit File Teks Secara Grafis di Linux Dengan gedit
Pengeditan File Kontrol knockd
File kontrol knockd
sama sekali lebih sederhana. Sebelum kita menyelam dan mengeditnya, kita perlu mengetahui nama internal untuk koneksi jaringan kita; untuk menemukannya, ketik perintah ini:
alamat IP
Koneksi yang digunakan mesin ini untuk meneliti artikel ini disebut enp0s3
. Catat nama koneksi Anda.
Perintah berikut mengedit file kontrol knockd
:
sudo gedit /etc/default/knockd
Inilah file knockd
di gedit
.
Beberapa pengeditan yang perlu kita lakukan disorot dengan warna merah:
Kami mengubah entri “START_KNOCKD=" menjadi dari 0 menjadi 1.
Kami juga menghapus hash #
dari awal entri "KNOCKD_OPTS=", dan mengganti "eth1" dengan nama koneksi jaringan kami, enp0s3
. Tentu saja, jika koneksi jaringan Anda adalah eth1
, Anda tidak akan mengubahnya.
Buktinya Ada di Puding
Saatnya untuk melihat apakah ini berhasil. Kami akan memulai daemon knockd
dengan perintah ini:
sudo systemctrl start knockd
Sekarang, kita akan beralih ke komputer lain dan mencoba menghubungkan. Kami menginstal alat knockd
di komputer itu juga, bukan karena kami ingin mengatur port knocking, tetapi karena paket knockd
menyediakan alat lain yang disebut knock
. Kami akan menggunakan mesin ini untuk menembak dalam urutan rahasia kami dan melakukan ketukan untuk kami.
Gunakan perintah berikut untuk mengirim urutan rahasia permintaan koneksi Anda ke port pada komputer host knocking port dengan alamat IP 192.168.4.24:
ketukan 192.168.4.24 7000 8000 9000 -d 500
Ini memberitahu knock
untuk menargetkan komputer pada alamat IP 192.168.4.24 dan menjalankan permintaan koneksi ke port 7000, 8000, dan 9000, secara bergantian, dengan -d
(penundaan) 500 milidetik di antara keduanya.
Seorang pengguna bernama “dave” kemudian membuat permintaan SSH ke 192.168.4.24:
ssh [email protected]
Koneksinya diterima, dia memasukkan kata sandinya, dan sesi jarak jauhnya dimulai. Prompt perintahnya berubah dari dave@nostromo
menjadi dave@howtogeek
. Untuk keluar dari komputer jarak jauh, dia mengetik:
keluar
Prompt perintahnya kembali ke komputer lokalnya. Dia menggunakan knock
sekali lagi, dan kali ini, ia menargetkan port dalam urutan terbalik untuk menutup port SSH pada komputer jarak jauh.
ketukan 192.168.4.24 9000 8000 7000 -d 500
Diakui, ini bukan sesi jarak jauh yang sangat bermanfaat, tetapi ini menunjukkan pembukaan dan penutupan port melalui ketukan port dan cocok dalam satu tangkapan layar.
Jadi, seperti apa ini dari sisi lain? Administrator sistem pada host port knocking menggunakan perintah berikut untuk melihat entri baru yang masuk ke log sistem:
tail -f /var/log/syslog
- Anda melihat tiga entri openSSH. Ini dinaikkan karena setiap port ditargetkan oleh utilitas ketukan jarak jauh.
- Ketika ketiga tahap urutan pemicu terpenuhi, entri yang mengatakan "BUKA SESAME," dicatat
- Perintah untuk memasukkan aturan ke dalam daftar aturan
iptables
dikirim. Ini memungkinkan akses melalui SSH pada port 22 dari alamat IP spesifik PC yang memberikan ketukan rahasia yang benar (192.168.4.23). - Pengguna "dave" terhubung hanya selama beberapa detik, dan kemudian terputus.
- Anda melihat tiga entri closeSSH. Ini dinaikkan karena setiap port ditargetkan oleh utilitas ketukan jarak jauh — ini memberi tahu host ketukan port untuk menutup port 22.
- Setelah ketiga tahap dipicu, kami mendapatkan pesan "OPEN SESAME" lagi. Perintah dikirim ke firewall untuk menghapus aturan. (Mengapa tidak “CLOSE SESAME” saat menutup port? Siapa yang tahu?)
Sekarang satu-satunya aturan dalam daftar aturan iptables
mengenai port 22 adalah yang kita ketik di awal untuk menutup port itu. Jadi, port 22 sekarang ditutup lagi.
Pukul Kepalanya
Itulah trik port knocking. Perlakukan itu sebagai pengalih perhatian dan jangan lakukan itu di dunia nyata. Atau, jika Anda harus, jangan mengandalkannya sebagai satu-satunya bentuk keamanan Anda.