Saya sedang menyiapkan server LAMP dan perlu mencegah SSH / FTP / etc. upaya masuk brute-force dari berhasil. Saya telah melihat banyak rekomendasi untuk denyhosts dan fail2ban, tetapi beberapa perbandingan keduanya. Saya juga membaca bahwa aturan IPTables dapat mengisi fungsi yang sama.
Mengapa saya memilih salah satu dari metode ini di atas yang lain? Bagaimana orang-orang di serverfault menangani masalah ini?
sumber
cara terbaik untuk mencegah masuknya brute force?
Jangan biarkan mereka sampai ke mesin Anda di tempat pertama! Ada banyak cara untuk menghentikan upaya kekerasan sebelum sampai ke tuan rumah Anda, atau bahkan di tingkat SSH.
Karena itu, melindungi Sistem Operasi Anda dengan sesuatu seperti fail2ban adalah ide bagus. Fail2ban sedikit berbeda dengan DenyHosts, meskipun mereka bermain di ruang yang sama. Fail2ban menggunakan iptables.
http://en.wikipedia.org/wiki/Fail2ban
Ada sejumlah teknik keamanan penting yang harus Anda pertimbangkan untuk membantu mencegah masuknya brute force:
SSH:
Aplikasi:
sumber
Saya menggunakan aturan iptables untuk menilai-membatasi koneksi baru dari alamat IP yang sama (terutama SSH, tetapi akan berfungsi dengan baik untuk FTP juga). Keuntungannya, seperti yang saya lihat, lebih dari "fail2ban" dan alat-alat lainnya adalah bahwa rute iptables benar-benar terjadi dalam mode kernel dan tidak bergantung pada alat mode pengguna untuk mengekor / mengurai file log.
Ratusan login ssh gagal
Jika Anda dapat melakukannya, membatasi alamat sumber yang dapat mengakses protcol yang bersangkutan tentu saja akan membantu.
Dengan SSH, Anda harus benar-benar menggunakan otentikasi sertifikat dan tidak menerima kata sandi.
sumber
CARA BESAR LAIN UNTUK MELINDUNGI SSH (Saya telah menggunakan ini selama satu dekade atau lebih baik) adalah dengan menggunakan perpustakaan terbaru di iptables secara native (tergantung pada distro Anda).
Pada dasarnya itu dapat digunakan sebagai port knocking yang dibangun menjadi iptables. Ini akan menghemat banyak sakit kepala. Selama Anda dapat menghubungkan tcp (telnet adalah satu cara. Saya juga telah menggunakan klien ssh dan mengarahkan mereka ke port. Apa pun yang akan melakukan koneksi tcp ke nomor port yang ditentukan. Saya sedang melihat Anda Putty!) Dari klien memulai koneksi ssh Anda dapat menggunakan ini.
Di bawah ini adalah contoh yang akan memiliki iptables port terbuka 22 ke host Anda ketika Anda telnet dari host Anda ke server pada port 4103. Anda kemudian dapat menggunakan telnet ke port 4102 atau 4104 untuk menutup pembukaan. Alasan untuk 4102 dan 4104 adalah untuk mencegah pemindaian tcp sederhana dari pembukaan 22. Hanya koneksi tcp (telnet) ke port 4103 yang memungkinkan Anda masuk.
Nikmati!
Oh dan aku mendukung Fail2Ban. Lebih fleksibel dan saya suka larangan itu terjadi di iptables daripada tcpwrappers.
PORTKNOCKING SSH
sumber
Perbedaan lain antara Fail2ban dan Denyhosts adalah bahwa Denyhosts dapat berbagi daftar blokir dengan pengguna Denyhosts lainnya. Dengan Fail2ban, Anda hanya dapat memblokir IP yang dilihat oleh server Anda sebelumnya - dengan Denyhosts, upaya brute-force bahkan mungkin tidak pernah sampai ke server Anda, jika orang lain melihatnya, dan daftar blok diunduh ke server Anda sebelum penyerang sampai ke komputer Anda.
Namun perbedaan lain adalah bahwa Fail2ban menggunakan iptables, sedangkan Denyhosts menggunakan tcpwrappers. Yang lain telah menyebutkan perbedaan ini sebelumnya, tetapi ada beberapa catatan tambahan yang layak disebutkan.
iptables terbatas dalam berapa banyak alamat IP yang dapat Anda blokir secara efisien. Itu mungkin salah satu alasan mengapa Fail2ban tidak memiliki mekanisme untuk berbagi daftar blokir.
Efek lainnya adalah ketika iptables diganti dengan nftables, Fail2ban mungkin akan berhenti bekerja atau perlu ditulis ulang. Denyhosts kemungkinan akan terus bekerja.
Jadi, keduanya memiliki kelebihan dan kekurangan. Saya suka keduanya; untuk diri saya sendiri, saya menggunakan Denyhosts karena biasanya saya hanya ingin melindungi SSH, dan saya suka berbagi daftar blokir.
sumber
Satu hal yang perlu diperhatikan tentang Fail2Ban adalah tampaknya menggunakan sekitar 10MB lebih banyak memori daripada DenyHosts. Jadi jika Anda menggunakan VPS 128MB, Anda mungkin ingin melihatnya. Juga, fail2ban out-of-the-box hanya setup pada SSH yang berarti bahwa tanpa perubahan pada konfigurasi - DenyHosts melakukan hal yang sama dalam memori kurang.
sumber
denyhosts adalah untuk ssh. fail2ban lebih komprehensif (HTTP, FTP, dll.). Keduanya menggunakan iptables di belakang layar.
sumber
Alih-alih mengacaukan iptables yang membosankan atau konfigurasi fail2ban, mengapa komunitas terbuka tidak melakukan semua pekerjaan untuk Anda, dan sebaliknya menggunakan CSF / LFD? Saya sangat merekomendasikannya di atas semua opsi lain yang disebutkan. Lihat http://configserver.com/cp/csf.html untuk mengetahui apa yang dapat dilakukannya untuk server Anda. CSF tidak memerlukan panel kontrol, ia menawarkan UI sederhana itu sendiri, bagi mereka yang tidak ingin melakukannya dengan shell. Dan itu banyak perl-scripting stabil non-penduduk yang dapat diandalkan.
sumber
fail2ban tampaknya tidak memiliki mekanisme untuk mengenali login ssh yang berhasil dan mengatur ulang jumlah kegagalannya.
Filter standar untuk sshd (setidaknya pada instalan debian saya), menghitung jumlah kegagalan untuk setiap kunci ssh yang disajikan oleh klien yang ditolak oleh server. Beberapa pengguna menampilkan banyak kunci pada setiap login dan secara teratur dikunci, meskipun login mereka berhasil setelah beberapa kunci dilewati.
Sebagai hasil dari hal di atas, saya saat ini berpikir untuk pindah dari fail2ban. Dalam hal ini setidaknya, denyhosts lebih baik. Namun, ini tampaknya bukan lagi pilihan yang baik, dan tidak lagi didukung dalam versi debian yang lebih baru (beberapa diskusi di https://www.chrissearle.org/2015/15/replacing-denyhosts-with-fail2ban-for- debian / )
Saya tidak punya solusi yang baik di sini.
sumber
Sebenarnya, saya pikir denyHost mampu mencegah banyak layanan lain selain layanan sshd. Dalam file konfigurasinya -
/etc/denyhosts.conf
, ada beberapa baris kode yang mengatakan:jadi jika kita mengatur
BLOCK_SERVICE
variabel menjadiALL
seperti di atas kita dapat menonton layanan ssh kami.sumber
Denyhosts versi 3.0: Setiap kali alamat IP muncul dalam file log, Denyhosts membuka file hosts.deny dan membaca semuanya untuk mencocokkan alamat tersebut. Setiap saat. Tidak ada yang di-cache dalam memori. Jika Anda memiliki file hosts.deny yang besar dan tunduk pada banyak probe (banyak entri file log), Denyhosts menjadi CPU yang membaca dan membaca kembali file hosts.deny untuk setiap alamat IP yang muncul. Tidak baik.
Jika Anda mengaktifkan dukungan iptables, Denyhosts akan membuat daftar alamat IP yang besar dan lambat. Denyhosts tidak menggunakan ipset atau nftables untuk membuat peta IP yang efisien.
sumber