Port knocking adalah metode membuka port jaringan secara dinamis dengan "mengetuk" (yaitu menghubungkan) pada urutan port yang telah ditentukan. Ini sangat berguna untuk mengaburkan port jaringan yang terbuka dari pemindaian port karena port yang bersangkutan akan ditutup kecuali jika urutan port knocking dijalankan. Urutan port knocking yang cukup panjang secara praktis tidak mungkin dilakukan secara brute force:misalnya, untuk berhasil menebak (dengan brute force) kombinasi dari 3 port TCP, penyerang harus mencoba mengetuk masing-masing dari 281 triliun kombinasi yang mungkin, dan memindai buka port setelah setiap urutan knocking port. Seperti yang mungkin bisa Anda bayangkan, ini akan memakan waktu yang sangat lama.
Panduan ini akan membantu Anda melalui penginstalan knockd, daemon pengetuk port fleksibel, pada Debian 10. Untuk tujuan demonstrasi, kami akan mengonfigurasinya untuk mengaburkan port SSH, meskipun port/layanan lain dapat dilindungi dengan pendekatan ini.
Persyaratan
- Server yang menjalankan Debian 10.
- Akses root ke server Anda.
- Variabel lingkungan $EDITOR harus disetel.
- Sistem kedua untuk pengujian.
CATATAN:Jika Anda bermaksud menggunakan port knocking untuk mengaburkan port SSH, pastikan Anda memiliki metode akses alternatif (melalui konsol misalnya), yang akan berguna jika Anda secara tidak sengaja mengunci diri.
Sebelum menginstal knockd, periksa nama antarmuka jaringan publik sistem Anda dengan perintah berikut:
ip link show | grep -v lo
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
Catat nama antarmuka (ens18 dalam kasus ini). Itu akan dibutuhkan nanti.
Langkah 1:Memasang Knockd
knockd adalah daemon port-knocking yang mendengarkan koneksi dan membuka port yang sesuai. Kami akan menggunakan knockd dengan aturan iptables untuk mengimplementasikan port knocking. Instal paket yang diperlukan sebagai berikut:
apt update apt install knockd iptables-persistent
Langkah 2:Konfigurasi Knockd
Knockd menggunakan file konfigurasi tunggal, /etc/knockd.conf, untuk menentukan urutan knocking dan parameter lainnya. Ada dua mode operasi praktis. Yang pertama membutuhkan urutan ketukan tunggal untuk membuka dan menutup port yang telah ditentukan, sementara yang lain menggunakan urutan pembukaan dan penutupan yang terpisah. Kami akan menggunakan yang pertama karena memerlukan lebih sedikit interaksi pengguna.
Pertama, backup file konfigurasi yang ada:
mv /etc/knockd.conf /etc/knockd.conf.bak
Kedua, buka file konfigurasi di editor teks Anda:
$EDITOR /etc/knockd.conf
Dan masukkan konfigurasi yang ditunjukkan di bawah ini:
(ganti ens18 dengan nama antarmuka jaringan Anda.)
[options] UseSyslog Interface = ens18 [SSH] sequence = 1000,2000,3000 seq_timeout = 15 tcpflags = syn start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 20
Ini akan menginstruksikan knockd untuk mengaktifkan lalu lintas ke port 22 setelah menerima urutan ketukan yang benar (dalam kasus ini 1000,2000,3000), kemudian menonaktifkan kembali lalu lintas setelah penundaan 20 detik. Dengan demikian, koneksi SSH hanya akan diterima selama periode 20 detik ini.
Selanjutnya, aktifkan knockd dengan mengedit file /etc/default/knockd:
$EDITOR /etc/default/knockd
Dan setel START_KNOCKD ke 1:
START_KNOCKD=1
Simpan file dan keluar. Kami juga akan memodifikasi unit systemd untuk knockd. Untuk melakukannya, buat file unit baru untuk mengganti default:
$EDITOR /etc/systemd/system/knockd.service
Dan rekatkan yang berikut ini:
[Unit] Description=Port-Knock Daemon After=network.target Requires=network.target Documentation=man:knockd(1) [Service] EnvironmentFile=-/etc/default/knockd ExecStartPre=/usr/bin/sleep 1 ExecStart=/usr/sbin/knockd $KNOCKD_OPTS ExecReload=/bin/kill -HUP $MAINPID KillMode=mixed Restart=always SuccessExitStatus=0 2 15 ProtectSystem=full CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN [Install] WantedBy=multi-user.targetmulti-pengguna.
Kemudian gunakan perintah berikut untuk memuat dan mengaktifkan unit baru:
systemctl daemon-reload systemctl enable --now knockd.service
Langkah 3:Aturan Firewall
Pada titik ini, Knockd sudah siap, tetapi semua lalu lintas diaktifkan melalui firewall secara default. Kami akan membuat aturan firewall untuk menolak akses ke port 22/tcp.
Perintah berikut memastikan bahwa koneksi yang ada tidak terputus.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Berikut ini adalah aturan untuk memutuskan koneksi ke port 22/tcp:
iptables -A INPUT -p tcp --destination-port 22 -j DROP ip6tables -A INPUT -p tcp --destination-port 22 -j DROP
Kemudian, simpan rantai aturan saat ini untuk kegigihan di seluruh reboot:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6
Langkah 4:Pengujian
Dari sistem yang berbeda, coba mulai sesi SSH baru ke server Anda. Anda seharusnya tidak dapat terhubung. Untuk melakukan urutan ketukan, alat yang berbeda dapat digunakan, meskipun kami akan mendemonstrasikan dengan ketukan, klien ketukan disertakan dengan Knockd. Instal paket knockd seperti yang ditunjukkan pada Langkah 1 ke sistem yang berbeda, lalu jalankan perintah:
knock server_ip_address 1000 2000 3000 ssh [email protected]_ip_address
Koneksi SSH sekarang seharusnya berhasil.
Konfigurasi Alternatif
Knockd alternatif dapat dikonfigurasi untuk memerlukan dua urutan yang berbeda untuk membuka dan menutup port jaringan. Ini berguna jika Anda ingin port tetap terbuka untuk waktu yang lama. Untuk mengkonfigurasi Knockd dengan cara, buka file konfigurasinya:
$EDITOR /etc/knockd.conf
Dan ganti konfigurasi yang ada dengan berikut ini:
[options] UseSyslog Interface = your_interface [openSSH] sequence = 1000,2000,3000 seq_timeout = 15 tcpflags = syn start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [closeSSH] sequence = 3000,2000,1000 seq_timeout = 15 tcpflags = syn start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Kemudian restart layanan untuk memuat konfigurasi baru:
systemctl restart knockd.service
Kesimpulan
Knockd bisa menjadi solusi efektif untuk serangan brute force, yang sangat umum di SSH dan layanan lainnya. Meskipun systemd akan memulai ulang Knockd jika gagal, Anda harus selalu memiliki metode cadangan untuk mengakses server Anda jika Anda menggunakan port-knocking untuk menyembunyikan port SSH.