Mencegah serangan brute force terhadap ssh?

49

Alat atau teknik apa yang Anda gunakan untuk mencegah serangan brute force terhadap port ssh Anda. Saya perhatikan di log Keamanan saya, bahwa saya memiliki jutaan upaya untuk masuk sebagai berbagai pengguna melalui ssh.

Ini ada pada kotak FreeBSD, tapi saya bayangkan itu akan berlaku di mana saja.

bersedih hati
sumber

Jawaban:

25

Berikut adalah pos yang bagus tentang hal itu oleh Rainer Wichmann.

Ini menjelaskan pro dan kontra tentang metode tesis untuk melakukannya:

  • Kata sandi yang kuat
  • Otentikasi RSA
  • Menggunakan 'iptables' untuk memblokir serangan
  • Menggunakan log sshd untuk memblokir serangan
  • Menggunakan tcp_wrappers untuk memblokir serangan
  • Mengetuk port
paulgreg
sumber
39

Saya menggunakan fail2ban yang akan mengunci IP setelah beberapa upaya gagal untuk jumlah waktu yang dapat dikonfigurasi.

Gabungkan ini dengan pengujian kekuatan kata sandi (menggunakan john (John the Ripper)) untuk memastikan serangan brute-force tidak akan berhasil.

Brent
sumber
4
Fail2ban sangat baik. Sangat mudah untuk memperpanjang itu untuk memantau / var / log / maillog dan membuatnya untuk melarang spammer terus-menerus dari memukul server email saya
Dave Cheney
Fail2ban dapat dikombinasikan dengan rantai iptables yang mengirimkan lalu lintas tcp ke TARPITtarget, jika Anda merasa tidak enak (dari xtables-addons).
Tobu
24

Satu hal kecil yang dapat Anda lakukan adalah menggunakan sesuatu seperti DenyHosts:

http://denyhosts.sourceforge.net/

Ia menggunakan hosts.allow / hosts.deny bawaan untuk memblokir pengguna SSH.

hernan43
sumber
16
  • Ubah port yang digunakan (seperti yang disebutkan Trent )
  • Membutuhkan kunci enkripsi, bukan kata sandi. http://novosial.org/openssh/publickey-auth/
  • Ips penyerang daftar hitam
  • Pengguna yang diketahui masuk daftar putih untuk mencegah daftar hitam yang tidak disengaja. (seperti yang Samiuela sebutkan)
Chris Ballance
sumber
15

Salah satu cara termudah untuk menghindari serangan ini adalah dengan mengubah port yang didengarkan sshd

trent
sumber
1
Jika, tentu saja, sistem Anda dapat bertahan.
C. Ross
13
Keamanan melalui ketidakjelasan, efektif setiap saat.
Chris Ballance
1
Saya tidak keberatan mengubah port terlalu banyak, tetapi saya telah belajar bahwa kebanyakan firewall (selain saya sendiri) cenderung mengunci semua port selain yang umum (80,22, 443, dll). Jika saya berada di belakang firewall itu, saya tidak bisa sampai ke server rumah saya di port yang tidak standar itu. Bagi saya itu tidak perlu.
Berduka
@grieve lalu ubah firewall kami untuk membiarkan port itu keluar?
Rory
@ Roy Saya berbicara tentang firewall selain yang saya miliki. Sebagai contoh jika saya ingin ssh ke mesin rumah saya dari Starbucks, firewall mereka memblokir port keluar. Saya tidak bisa mengubahnya. (Saya hanya menggunakan Starbucks sebagai contoh. Saya tidak tahu port apa yang sebenarnya mereka blokir atau tidak).
berduka
12

Seperti yang ditunjukkan Chris, gunakan kunci enkripsi dan bukan kata sandi.

Tambahkan itu:

  • gunakan daftar putih jika memungkinkan.

Berapa banyak orang atau lokasi (dengan IP publik mengambang) yang Anda perlukan untuk mengakses koneksi ssh publik Anda?

Bergantung pada jumlah host ssh publik yang Anda pertahankan dan apakah Anda dapat mempersempit kriteria koneksi umum Anda, maka itu mungkin konfigurasi yang lebih sederhana dan dapat dikelola untuk membatasi akses ke beberapa host eksternal.

Jika ini cocok untuk Anda, ini benar-benar dapat menyederhanakan overhead administrasi Anda.

samt
sumber
2
Daftar putih sangat penting jika Anda melakukan segala jenis daftar hitam kecuali Anda ingin dikunci.
Ryaner
2
+1 untuk masuk daftar putih secara proaktif.
Chris Ballance
3
+1 karena mendapat jawaban terbaik mutlak. Kedua hal itu adalah satu-satunya langkah yang masuk akal, dan memang sangat efektif. Hanya berdua saja yang berharga, dan keduanya bersama-sama lebih dari itu. Boo pada jawaban lain yang menganjurkan keamanan melalui ketidakjelasan!
DWC
11

Selain saran bagus lainnya, satu hal yang sangat mudah dilakukan adalah batas koneksi masuk. Batasi hingga 3 koneksi per menit per IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
sherbang
sumber
Saya mungkin salah paham tentang sesuatu, tetapi banyak peramban utama menghubungkan antara 4-6 koneksi dalam satu waktu - meskipun standar HTTP menetapkannya pada 2.
Joshua Enfield
1
Ya, itu akan menjadi masalah jika Anda mencoba untuk menilai port batas 80. Anda tidak terhubung ke ssh dengan browser web Anda, dan sesi ssh adalah sesi yang tahan lama yang mempertahankan status, bukan sesi stateless yang berumur pendek seperti http. Menyejajarkan sesi ssh seperti itu tidak masuk akal. Itu bukan untuk mengatakan bahwa tidak ada beberapa penggunaan niche ssh bahwa ini akan pecah, tetapi jarang.
sherbang
Solusi ini tidak begitu baik jika, seperti saya, Anda melayani Subversion via ssh. Satu permintaan SVN dapat membuat sejumlah besar koneksi secara berurutan. Jika menyediakan layanan itu, Anda bisa menggunakan layanan sshd kedua di port lain, atau daftar putih IP yang dikenal. Saya berpikir untuk menggunakan fail2ban atau sshdfilter untuk menangkap serangan yang jelas pertama kali, tanpa menghukum pengguna yang sah.
padi
senang mengetahui opsi ini juga ...
ZEE
6

Gunakan opsi "AllowUsers" di sshd_config untuk memastikan hanya sekelompok kecil pengguna yang bisa masuk sama sekali. Semua yang lain akan ditolak, bahkan jika nama pengguna dan kata sandi mereka benar.

Anda bahkan dapat membatasi pengguna untuk login dari host tertentu.

misalnya,

AllowUsers user1 [email protected]

Ini akan mengurangi ruang pencarian dan menghindari pengguna lama yang secara tidak sengaja dibiarkan bertelur atau diaktifkan (meskipun ini tentu saja harus dinonaktifkan, ini adalah cara mudah untuk menghentikan mereka digunakan untuk entri berbasis SSH).

Ini tidak sepenuhnya menghentikan serangan brute-force, tetapi membantu mengurangi risiko.

David Gardner
sumber
3

Gunakan sesuatu seperti itu dengan PF:

tabel <ssh-brute> bertahan
di blok log cepat dari label ssh_brute,
lewati $ ext_if proto tcp ke ($ ext_if) port ssh modate state \
(max-src-conn-rate 3/10, kelebihan flush global)


sumber
2

Mengetuk port adalah cara yang cukup solid untuk mencegah hal seperti ini terjadi. Sedikit cerewet, kadang-kadang menjengkelkan, tapi itu pasti membuat masalah itu hilang.

Luke
sumber
Saya sudah mencoba ini dan pengguna merasa menjengkelkan. Jika hanya satu atau dua orang, ini bisa menjadi pilihan yang baik, dan hampir akan menghilangkan serangan brute-force
Brent
2

Konteks itu penting, tetapi saya akan merekomendasikan sesuatu seperti ini:

  • Karena Anda menggunakan FreeBSD, pertimbangkan untuk menjalankan firewall PF dan menggunakan fitur pembatasan tingkat koneksi yang solid. Ini akan memungkinkan Anda untuk mengirim brute forcers ke daftar hitam jika mereka sering terhubung
  • Jika kotak ini harus diakses dari dunia luar, pertimbangkan untuk menggunakan aturan PF rdr untuk tidak mengizinkan lalu lintas ke port 22, tetapi untuk mengarahkan ulang beberapa port yang tidak dikenal ke sana. Artinya, Anda harus terhubung ke port 9122 alih-alih 22. Ini tidak jelas, tetapi membuat pengetuk jauh
  • pertimbangkan pindah ke otentikasi berbasis kunci saja, membuat serangan kamus tidak berguna
Michael Gorsuch
sumber
2

Lebih lanjut untuk saran membatasi laju sherbang ini , panjang penundaan itu penting. Dengan meningkatkan penundaan antar kelompok dari 3 upaya login dari 2 menit menjadi 20 menit, jumlah alamat IP yang berbeda yang membuat lebih dari tiga upaya untuk login turun, membandingkan dua periode selama seminggu di satu mesin tambang, dari 44 upaya menjadi 3 Tidak satu pun dari ketiga alamat itu yang terus mencoba selama lebih dari 11 jam.

Sangat anekdotal, tetapi auth.log menjadi jauh lebih mudah dibaca bagi saya ...

Charles Stewart
sumber
1

Aku hanya tidak peduli tentang itu. Biarkan mereka sabuk di pelabuhan, mereka tidak akan memaksa paksa kunci.

womble
sumber
-1 Pernah dengar tentang serangan DoS?
Chris Ballance
8
Ya, karena SSH adalah satu-satunya layanan yang rentan terhadap serangan brute force. Jika Anda memiliki port yang terbuka ke Internet, port itu dapat digunakan untuk menghapus mesin Anda. Anda mungkin menempatkan server HTTP Anda pada port aneh juga, dan di belakang port mengetuk, untuk "menghindari serangan DoS" ...
womble
1

instal OSSEC. tidak hanya memonitor untuk login berulang, itu akan memasuki blok sementara dengan iptables untuk ip yang menyinggung. Dan pada akhirnya akan mengirimkan Anda laporan yang menyatakan detailnya. itu mencatat semuanya, yang bagus. Seseorang pernah mencoba lebih dari 8000 nama login untuk masuk. saya pars log dan mendapat daftar pengguna yang bagus dari kesepakatan;)

Marcin
sumber