Apa pro / kontra dari berbagai metode untuk memblokir serangan SSH brute force?

20

Ada sejumlah paket berbeda di luar sana untuk mematikan IP dari mana serangan SSH brute-force diluncurkan pada sistem Anda. Sebagai contoh:

Apa pro / kontra dari ini, atau yang lain?

Solusi saya saat ini adalah mengambil email yang dihasilkan logwatch setiap hari dan membuang alamat IP mengerikan ke file teks yang saya masukkan ke dalam skrip yang kemudian membangun kembali iptables. Ini peretasan, memakan waktu dan manual, dan saya ingin cara yang lebih baik.

(Perhatikan bahwa saya tidak bertanya apa cara "terbaik" untuk menyelesaikan masalah, karena tidak ada cara "terbaik" untuk melakukan apa pun.)

Andy Lester
sumber

Jawaban:

15

Saya menggunakan DenyHosts, jadi saya setidaknya bisa menjawab untuk itu:

Pro

  • Ini sepenuhnya otomatis
  • Ini dapat dikonfigurasi (berapa banyak upaya gagal sebelum daftar hitam, untuk nama pengguna yang tidak ada, nama pengguna yang ada, dan entri khusus untuk root)
  • Ini dapat mengirimkan email kepada Anda daftar host yang baru masuk daftar hitam secara berkala, dan / atau menjalankan program yang diberikan setiap kali host baru masuk daftar hitam
  • Ini mendukung penghentian daftar host secara otomatis setelah beberapa saat

Cons

Saya tidak punya kontra yang tidak dapat diperbaiki, selama Anda menggunakannya dengan benar:

  • Dalam konfigurasi defaultnya, ia tidak akan memberi tahu Anda tentang host yang masuk daftar hitam, jadi jika seseorang menyerang jaringan Anda dari ratusan alamat yang berbeda, Anda mungkin tidak akan langsung melihat seperti yang Anda lakukan jika Anda sedang memantau log Anda secara manual, tetapi (seperti disebutkan dalam bagian pro) dapat mengirimkan email kepada Anda atau menjalankan executable untuk memberi tahu Anda ketika host baru ditambahkan
  • Secara default itu akan membuat daftar hitam host Anda sama dengan yang lain, jadi Anda mungkin ingin menambahkannya /etc/hosts.allow. Saya mengunci diri saya sekali saja gagal mengetik kata sandi saya, dan sekali seseorang dari kantor mencoba masuk ke akun root saya sebagai lelucon dan memasukkan IP pekerjaan saya ke daftar hitam, dan saya butuh beberapa hari untuk mencari tahu mengapa saya tiba-tiba tidak dapat terhubung ke jaringan saya dari kantor lagi
Michael Mrozek
sumber
19

Yang lain adalah fail2ban , yang bergantung pada iptables (jadi ia berfungsi dengan layanan apa pun, bukan hanya ssh). Dengan fail2ban, Anda dapat:

  • Tentukan path ke file log apa saja (apache, ssh, nginx, server mail, ...).
  • Tentukan regex untuk pola serangan (mis., Lebih dari 10 "404 kesalahan" oleh ip yang sama pada log akses nginx dalam 6 detik)
  • Tentukan regex untuk mengabaikan pola tertentu (sangat berguna!)
  • Tentukan waktu larangan
  • Kirim email (atau peringatan lainnya ...)
  • Dapat disesuaikan sepenuhnya (Anda dapat menulis lansiran dan filter Anda sendiri)

Salah satu "kelemahan" dari DenyHosts adalah ia membutuhkan pembungkus tcp, jadi itu hanya akan bekerja dengan layanan yang melihat file /etc/hosts.deny. Tetapi agar adil dengan DenyHosts, sshd dikompilasi untuk menggunakan TCP Wrappers pada sebagian besar distribusi Linux. Saya juga menemukan DenyHosts lebih mudah untuk dikonfigurasi di luar kotak daripada fail2ban (tapi kurang kuat).

Referensi ke pertanyaan SF serupa

Barthelemy
sumber
fail2ban, untungnya, juga bekerja dengan pf - bukan hanya iptables
Orang Baik
10

Perlindungan sederhana dan praktis yang efektif terhadap serangan berbasis pemindaian tidak menggunakan port standar. 443 (port https) membuat Anda terkena berbagai serangan brute-force yang tidak akan memecahkan kata sandi Anda yang lemah, dan mungkin bekerja melalui lebih banyak firewall daripada port default (22).

Sebagian besar metode untuk mencegah serangan ssh brute force adalah cara terbaik untuk melakukan sendiri DoS (oops, saya mengacaukan konfigurasi! Ups, saya melakukan banyak rsync cepat dan sekarang dilarang untuk hari itu!) Atau DoS mandiri (Ups) , penyerang berasal dari / telah menumbangkan mesin di subnet yang sama dengan saya (rentang IP dinamis, jaringan perguruan tinggi ...) dan saya juga akan diblokir!).

Jika Anda hanya masuk dari beberapa tempat, Anda bisa memasukkan daftar putih sumber alamat IP. Itu jelas tidak baik jika Anda ingin ssh dari laptop atau ponsel Anda saat bepergian.

Memiliki daemon ssh yang hanya mendengarkan koneksi IPv6 akan melindungi Anda dari pemindaian selama beberapa tahun. Tetapi banyak firewall tidak akan membiarkan Anda mengangkut IPv6 dengan cara yang masuk akal.

Metode lain yang tidak Anda sebutkan adalah port knocking . Itu tidak menderita sebagai masalah DoS diri (selain dari kesalahan konfigurasi), tetapi tidak menyeberangi firewall dengan baik, dan dapat menambahkan latensi beberapa detik ke pembentukan koneksi.

Jika Anda memiliki kata sandi yang baik, atau Anda dapat hidup tanpa otentikasi kata sandi, nonaktifkan otentikasi kata sandi. (Kunci dan kata sandi satu kali cukup untuk sebagian besar kasus penggunaan: jika Anda tidak cukup mempercayai mesin klien untuk menyimpan kunci ssh, Anda juga tidak percaya untuk tidak memiliki keylogger). Kemudian serangan brute force akan dikenakan biaya sedikit CPU dan bandwidth tetapi jangan biarkan Anda ke gangguan (selama Anda memeriksa tidak ada kunci Anda berasal dari OpenSSL rendah entropi Debian ).

Secara keseluruhan, harap dicatat bahwa mengubah port tidak secara signifikan mengurangi eksposur Anda. Anda akan mendapatkan lebih sedikit pemindaian , tetapi yang bisa Anda potong hanyalah buah yang mudah digantung yang berupaya mengeksploitasi kerentanan lama dan kata sandi yang lemah. Selama Anda memperbarui daemon Anda dan menerapkan kata sandi yang masuk akal atau dan batas tingkat upaya yang wajar, beralih port lebih merupakan tanggung jawab daripada tindakan keamanan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Saya setuju bahwa perlu beberapa latihan untuk tidak mencekal diri Anda ;-) Mengubah port default dan tidak mengandalkan kata sandi tetapi pada kunci yang dilindungi kata sandi juga merupakan saran yang bagus. Tapi saya benar-benar tidak tahu mengapa saya harus membiarkan jaringan bot mengisi file log akses saya sementara ssh dan server web saya harus menolak ribuan permintaan per jam. Dengan fail2ban, log akses saya bersih dan aplikasi server saya tidak melihat lalu lintas ini sama sekali (kecuali permintaan X pertama yang buruk :-)).
Barthelemy
Menggunakan port yang tidak standar tidak menambah banyak perlindungan sama sekali. Memindai SSH pada port yang tidak standar hanya membutuhkan beberapa menit lebih lama daripada memindai SSH pada port 22 (Dengan asumsi bahwa cracker melakukan pemindaian dan pemindaian tidak diblokir oleh IDS. Tetapi jika Anda memiliki IDS, maka kebingungan port mungkin tidak perlu ). Jika saya seorang cracker dan saya menemukan SSH pada port non-standar, saya bahkan akan LEBIH tertarik karena saya tahu admin berpikir layanan ini cukup berharga untuk disembunyikan, dan mengandalkan keamanan dengan ketidakjelasan.
Stefan Lasiewski
1
@Stefan: Sebagian besar serangan tidak terhadap host yang diberikan tetapi terhadap layanan yang diberikan. Untuk itu jauh lebih efektif untuk memindai satu port pada banyak alamat daripada banyak port pada setiap alamat. Dan jika Anda benar-benar memiliki penyerang yang menargetkan Anda, Anda sebaiknya tahu, jadi Anda ingin kata sandi yang kuat atau terlarang dan serangannya dicatat.
Gilles 'SANGAT berhenti menjadi jahat'
1
@Stefan Saya melihat port tidak standar sebagai solusi efektif untuk gangguan (brute-force scan) dan tidak benar-benar sebagai tindakan keamanan (yaitu, mencegah seseorang mengambil kendali server saya).
Barthelemy
1
@dimiliki Menentukan port yang berbeda hampir tidak merepotkan. Hanya ada satu baris .ssh/config. Lockout adalah masalah jika firewall tidak membiarkan Anda lewat, dan solusi termudah adalah tetap pada port 22 dan juga mendengarkan 443. Saya setuju bahwa beralih port tidak benar-benar meningkatkan keamanan, mungkin saya harus membuatnya lebih jelas . Saya tidak tahu mengapa Anda menganggap mustahil untuk daemon SSH untuk tidak mendukung otentikasi kata sandi: itu hanya masalah menambahkan baris ke sshd_configdengan OpenSSH, implementasi yang paling umum.
Gilles 'SO- berhenti bersikap jahat'