Artikel:Memblokir usaha login brute force
[draft artikel infolinux]
Keberadaan Internet yang memberi manfaat konektivitas global menjadi
pedang bermata dua: kita menjadi terbuka juga terhadap serangan dari
seluruh dunia. Begitu sebuah server online dengan alamat IP publik,
dalam hitungan menit sudah ramailah ia disambut "ramah" dengan
berbagai pindaian dan percobaan masuk dari pihak lain yang tidak
dikenal. Dan jika server ini diberi password yang terlalu pendek
dan/atau mudah ditebak, atau diinstali sistem operasi yang tidak
terkini dan memiliki kelemahan, cukup bisa dipastikan bahwa dalam
waktu singkat ia akan ditembus.
Di tempat saya bekerja, sebuah server shared server hosting Linux yang
ditaruh di dalam Indonesia (IIX) maupun di luar negeri setiap harinya
dapat memperoleh 1000-2000 atau lebih percobaan login yang gagal,
umumnya terhadap servis SSH, terkadang juga FTP. Dan hampir selalu,
percobaan login ini dilakukan oleh host asing tertentu secara
berentetan untuk mencoba berbagai user maupun password yang umum
(brute force).
Alangkah baiknya jika kita dapat memblokir host-host nakal tersebut,
karena jika dibiarkan, maka bisa saja lama kelamaan sebuah host yang
mencoba selama berhari-hari bahkan berminggu-minggu dapat menembus
salah satu akun shell yang berada di server tersebut.
Artikel ini hendak menjelaskan skrip shell sederhana yang dapat kita
pakai untuk melakukannya. Skrip ini ditulis dalam bahasa bash dan
disesuaikan untuk distro Debian/Ubuntu. Anda dapat menyesuaikan
beberapa path jika memang kurang sesuai dengan distro Anda.
Cara kerja skrip
Setiap otentikasi, berhasil atau gagal, akan dicatat oleh syslog. Di
Debian/Ubuntu file lognya ada di /var/log/auth.log. Log SSH yang gagal
akan berbentuk seperti ini:
Feb 7 02:30:30 serverXX sshd[3632]: (pam_unix) authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=evil.host user=root
di mana evil.host adalah nama host atau alamat IP
pengakses. Skrip tinggal melihat apakah ada baris-baris seperti ini
yang banyak jumlahnya dari sebuah host. Jika ada (di skrip dibatasi
minimal 100, baris 14) maka host ini menjadi target untuk kita
masukkan dalam daftar hitam agar diblokir.
Bagaimana cara memblokirnya? Yaitu dengan memasukkannya ke dalam
/etc/hosts.deny. Setiap kali otentikasi, daemon SSH atau proftpd akan
berkonsultasi pada file ini (dan pasangannya, /etc/hosts.allow). Jika
sebuah host ada di /etc/hosts.deny, maka akan ditolak.
Skrip akan mendaftarkan host-host jahat ke dalam baris-baris di file
/etc/hosts.deny.ssh untuk SSH dan /etc/hosts.deny.proftpd untuk
ProFTPD, misalnya:
evil.host #1202019905
Angka pada baris di atas hanyalah komentar, berisi timestamp Unix. Timestamp ini
kita catat agar dapat melepas blokir secara otomatis. Di skrip diset
agar sebuah host yang telah terdaftar selama 1 minggu atau lebih
(baris 15) akan dihapus dari daftar hitam. Mekanisme penghapusan entri
lama ini dilakukan di baris 19-33.
Cara menginstal dan memakai skrip
Ketik dan simpanlah skrip misalnya di /usr/sbin/bfa. Setelah itu,
pasanglah sebagai entri cron agar dijalankan secara
otomatis. Misalnya, untuk dijalankan setiap hari sekali:
# cd /etc/cron.daily
# echo -e '#!/bin/sh\n[ -f /usr/sbin/bfa ] || exit 0\n/usr/sbin/bfa' > bfa
# chmod +x bfa
bisa juga dijalankan setiap jam, Anda tinggal mengganti cron.daily
dengan cron.hourly.
Selanjutnya, tambahkan 2 baris ini di /etc/hosts.deny:
sshd: /etc/hosts.deny.sshd
proftpd: /etc/hosts.deny.proftpd
Penutup
Listing skrip dapat juga diambil di
http://people.masterwebnet.com/steven/files/bfa.
Selain skrip buatan sendiri ini, Anda dapat juga melihat tool gratis
seperti bfd (brute force detector). Cara kerjanya kurang lebih
mirip.
Dokumentasi lengkap mengenai format file /etc/hosts.deny dapat dilihat
pada manpage Unix.
Terima kasih kepada rekan Dudi Indrasetiadi yang pertama kali menulis
skrip ini.
|