Denyhosts vs fail2ban vs iptables- cara terbaik untuk mencegah masuknya brute force?

62

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?

spiffytech
sumber

Jawaban:

53

IIRC, DenyHosts hanya akan menonton layanan SSH Anda. Jika Anda membutuhkannya untuk melindungi layanan lain juga, Fail2ban jelas merupakan pilihan yang lebih baik. Dapat dikonfigurasi untuk menonton hampir semua layanan jika Anda ingin mengubah konfigurasinya, tetapi itu tidak perlu karena versi terbaru dari Fail2ban menyertakan aturan yang cocok untuk banyak daemon server populer. Menggunakan fail2ban pada batas kecepatan iptables yang sederhana memiliki keuntungan untuk sepenuhnya memblokir penyerang untuk jumlah waktu tertentu, bukan hanya mengurangi seberapa cepat ia dapat memalu server Anda. Saya telah menggunakan fail2ban dengan hasil yang luar biasa pada sejumlah server produksi dan belum pernah melihat salah satu server tersebut dilanggar oleh serangan brute force sejak saya mulai menggunakannya.

Ron
sumber
3
Perhatikan bahwa DenyHosts akan membuat blokir layanan lain - perbedaan utamanya adalah bahwa fail2ban menggunakan iptables sedangkan DenyHosts menggunakan hosts.deny, beberapa layanan tidak melihat file host seperti Apache.
jammypeach
Untuk melemparkan opsi lain ke atas meja, saya baru-baru ini menemukan bahwa konfigurator ufw firewall juga memungkinkan Anda untuk menerapkan batas tingkat (tidak dapat dikonfigurasi) untuk port TCP atau UDP. Jika Anda sudah menggunakan UFW, ini bisa menjadi pilihan yang baik, alih-alih mengonfigurasi dan menjalankan daemon tambahan.
spiffytech
Hal pertama yang harus dilakukan untuk mencegah pelanggaran bruteforce adalah menggunakan kata sandi yang cukup kuat (atau bahkan menonaktifkan kata sandi auth sama sekali :). Pembatasan nilai (sendirian) adalah untuk yang lemah untuk itu. Saya tidak mencoba alternatif tetapi saya menggunakan fail2ban sendiri dan merasa agak berguna untuk menangkis bot yang menyelidikinya.
Petr Gladkikh
Dalam pengalaman saya, fail2ban perlu sedikit lebih banyak pekerjaan untuk membuatnya benar-benar melakukan apa saja. Sebaliknya, Anda dapat menginstal RPM denyhosts dan memulainya untuk melindungi server Anda saat Anda mengerjakan opsi yang lebih kompleks. Saya pasti setuju fail2ban 'lebih baik', tetapi untuk perlindungan yang mudah, Anda tidak bisa mengalahkan denyhosts.
Ralph Bolton
21

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

Fail2ban mirip dengan DenyHosts ... tetapi tidak seperti DenyHosts yang berfokus pada SSH, fail2ban dapat dikonfigurasikan untuk memantau layanan apa pun yang menulis upaya masuk ke file log, dan alih-alih menggunakan /etc/hosts.deny hanya untuk memblokir alamat / host IP , fail2ban dapat menggunakan Netfilter / iptables dan TCP Wrappers /etc/hosts.deny.

Ada sejumlah teknik keamanan penting yang harus Anda pertimbangkan untuk membantu mencegah masuknya brute force:

SSH:

  • Jangan izinkan root masuk
  • Jangan izinkan kata sandi ssh (gunakan otentikasi kunci pribadi)
  • Jangan dengarkan di setiap antarmuka
  • Buat antarmuka jaringan untuk SSH (mis. Eth1), yang berbeda dengan antarmuka tempat Anda melayani permintaan (mis. Eth0)
  • Jangan gunakan nama pengguna umum
  • Gunakan daftar perbolehkan, dan hanya izinkan pengguna yang membutuhkan Akses SSH
  • Jika Anda memerlukan Akses Internet ... Batasi Akses ke kumpulan IP terbatas. Satu IP statis sangat ideal, namun menguncinya ke xx0.0 / 16 lebih baik dari 0.0.0.0/0
  • Jika mungkin menemukan cara untuk terhubung tanpa Akses Internet, dengan cara itu Anda dapat menolak semua lalu lintas internet untuk SSH (mis. Dengan AWS Anda bisa mendapatkan koneksi langsung yang melewati Internet, itu disebut Direct Connect)
  • Gunakan perangkat lunak seperti fail2ban untuk menangkap setiap serangan brute force
  • Pastikan OS selalu mutakhir, khususnya paket keamanan dan ssh

Aplikasi:

  • Pastikan aplikasi Anda selalu terbaru, dalam paket keamanan tertentu
  • Kunci halaman 'admin' aplikasi Anda. Banyak saran di atas berlaku untuk area admin aplikasi Anda juga.
  • Kata sandi Lindungi area admin Anda, sesuatu seperti htpasswd untuk konsol web akan memproyeksikan setiap kerentanan aplikasi yang mendasarinya dan menciptakan penghalang tambahan untuk masuk
  • Kunci izin file. 'Unggah folder' terkenal karena menjadi titik masuk dari segala macam hal buruk.
  • Pertimbangkan untuk meletakkan aplikasi Anda di belakang jaringan pribadi, dan hanya mengekspos penyeimbang beban front-end dan kotak lompatan (ini adalah pengaturan khas di AWS menggunakan VPC)
Drew Khoury
sumber
1
Bisakah Anda menguraikan pernyataan "Ada banyak cara untuk menghentikan upaya kekerasan sebelum mereka sampai ke host Anda, atau bahkan di tingkat SSH." Saya secara khusus tertarik jika Anda memiliki saran untuk mesin yang dihosting di mana Anda tidak memiliki kendali atas jaringan eksternal. Terima kasih!
Kevin Keane
7

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.

Evan Anderson
sumber
@ MC0E - Saya tidak mengikuti.
Evan Anderson
7

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

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP
Jeff Moore
sumber
6

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.

Kevin Keane
sumber
5

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.

Xeoncross
sumber
2
Coba tambahkan "ulimit -s 256" ke / etc / default / fail2ban. Turunkan 10MB di sistem saya.
pkoch
3

denyhosts adalah untuk ssh. fail2ban lebih komprehensif (HTTP, FTP, dll.). Keduanya menggunakan iptables di belakang layar.

Ignacio Vazquez-Abrams
sumber
Baik "denyhosts" dan "fail2ban" menggunakan iptables untuk menyelesaikan perilaku "pemblokiran" mereka, tetapi mereka tidak menggunakan iptables untuk menilai-batas. Mereka mengurai log di "tanah pengguna" dan bertindak atas entri log.
Evan Anderson
10
@ Evan, denyhosts tidak menggunakan iptables (secara default). Ia menggunakan pembungkus TCP dan memperbarui /etc/hosts.deny Anda saat sebuah sistem akan diblokir.
Zoredache
@Zoredache: Saya berdiri dikoreksi. Setelah enver menggunakan "denyhosts" sebelumnya, saya membuat asumsi yang salah tentang bagaimana ia memanggil fungsionalitas "blocking" -nya. Namun, sebagai alat log-parsing / reaksi pengguna, saya lebih suka menggunakan solusi berbasis iptables ketat untuk "denyhosts".
Evan Anderson
1

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.

Ben
sumber
8
Ini terdengar lebih seperti iklan, dan menyoroti pertanyaan yang sebenarnya.
Drew Khoury
Yah tidak, saya tidak mengabaikan pertanyaan yang sebenarnya. Saya menyerahkan alternatif yang akan mencegah Anda harus repot-repot dengan pertanyaan ini. Serius, CSF / LFD bukan hanya sistem kontrol firewall lain, ia telah meningkat dari jenis masalah dengan sini. Mengapa ada orang yang TIDAK mau berevolusi? Ini menghemat banyak waktu, karena orang lain sudah menyelesaikannya. Itu sebabnya CSF ada.
Ben
Untuk apa nilainya, sebagai seseorang yang menghargai kemampuan menghasilkan waktu saya, jika harganya tepat, saya lebih suka memiliki solusi "plug 'n play" untuk hal semacam ini, bahkan jika harganya beberapa dolar. Dengan begitu saya tidak perlu membuang waktu mempelajari hal-hal yang benar-benar tidak saya pedulikan, tetapi kenali pentingnya memiliki perlindungan.
David
1

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.

mc0e
sumber
Ada masalah serupa jika Anda menggunakan otentikasi LDAP. Terlalu banyak login yang berhasil akan menyebabkan Anda terkunci: bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
Mike
Untuk mencegah semua kunci disajikan, tunjukkan kepada pengguna Anda cara menentukan kunci yang akan digunakan dalam file ~ / .ssh / config mereka.
BillThor
0

Sebenarnya, saya pikir denyHost mampu mencegah banyak layanan lain selain layanan sshd. Dalam file konfigurasinya - /etc/denyhosts.conf, ada beberapa baris kode yang mengatakan:

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

jadi jika kita mengatur BLOCK_SERVICEvariabel menjadi ALLseperti di atas kita dapat menonton layanan ssh kami.

MathNoob
sumber
0

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.

Ian D. Allen
sumber