Pertanyaan Ratusan ssh login yang gagal


Setiap malam saya mendapatkan ratusan, terkadang ribuan, dari ssh login yang gagal di server RedHat 4 saya. Untuk alasan firewall dari situs jauh, saya harus menjalankan pada port standar. Apakah ada yang harus saya lakukan untuk memblokir ini. Saya perhatikan bahwa banyak yang berasal dari alamat IP yang sama. Bukankah seharusnya menghentikan mereka setelah beberapa saat?


76
2018-06-02 16:18






Jawaban:


Anda dapat menggunakan iptables untuk menilai-membatasi koneksi masuk baru ke port SSH. Saya harus melihat seluruh konfigurasi iptables Anda untuk memberi Anda solusi turnkey, tetapi pada dasarnya Anda berbicara tentang menambahkan aturan seperti:

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

Aturan-aturan ini mengasumsikan bahwa Anda menerima koneksi ESTABLISHED sebelumnya dalam tabel (sehingga hanya koneksi baru yang akan memukul aturan-aturan ini). Koneksi SSH baru akan mencapai aturan ini dan ditandai. Dalam 60 detik, 5 upaya dari satu alamat IP akan menghasilkan koneksi masuk baru dari IP yang dijatuhkan.

Ini telah bekerja dengan baik untuk saya.

Edit: Saya lebih memilih metode ini untuk "fail2ban" karena tidak ada perangkat lunak tambahan yang akan diinstal, dan terjadi sepenuhnya dalam mode-kernel. Tidak menangani parsing file log seperti "fail2ban" akan, tetapi jika masalah Anda hanya dengan SSH saya tidak akan menggunakan sesuatu mode pengguna yang memerlukan instalasi perangkat lunak dan lebih kompleks.


63
2018-06-02 16:25



Saya suka solusi ini dan saya berencana membuatnya di tempat malam ini, setelah saya mendapatkan kebakaran hari ini. - MattMcKnight
Ini memperlambat serangan dan saya merekomendasikannya, tetapi karena ada botnets scanning yang ditributed di luar sana, itu bukan obat mujarab. Masih akan ada login yang tidak valid dari botnet yang menjalankan scan terdistribusi terhadap Anda. Tidak terlalu banyak yang dapat Anda lakukan tentang hal itu, singkat dari beberapa jenis "port knocking" skema untuk jarak jauh membawa port SSH ketika Anda ingin masuk. - Evan Anderson
+1 untuk saran "port knocking" dari Evan. Beberapa info: linux.die.net/man/1/knockd . Tapi jangan lakukan itu cara halaman manual (yaitu, menambahkan / menghapus aturan iptables), tetapi sebagai gantinya gunakan -m condition iptables cocok sebagai gantinya. - pepoluan
dont Anda perlu --dport 22 dalam aturan-aturan ini sehingga mereka diterapkan hanya untuk lalu lintas ssh? - clime
@clime - Ya. Sulit dipercaya ini sudah ada di sini 2 1/2 tahun dan tidak ada yang memperhatikan! Tangkapan yang bagus. - Evan Anderson


fail2ban dapat membantu dengan ini dengan memblokir alamat IP dengan terlalu banyak upaya masuk gagal.


38
2018-06-02 16:20



saya tidak suka alat / skrip membaca log dan mengeluarkan perintah atas nama pengguna sysadmin - asdmin
@ asdmin, ya, terutama ketika mereka memiliki rekam jejak yang bagus ... - maxschlepzig


Saya akan merekomendasikan menggunakan port non-standar untuk SSH jika Anda dapat (mis. Port 10222) tetapi karena Anda menyebutkan Anda tidak dapat melakukan itu, saya akan merekomendasikan menggunakan sesuatu seperti DenyHosts.

http://denyhosts.sourceforge.net/

Paket hebat, mudah dipasang dan dikonfigurasi.


25
2018-06-02 17:16



Saya tidak tahu mengapa orang-orang menaikkan suara ini; SSH pada port standar 22. Ini berarti bahwa ketika Anda berada di jaringan asing, Anda tidak bergantung pada mereka memiliki membuka port non-standar melalui firewall keluar. Solusi nyata untuk masalah ini didokumentasikan di atas, baik membatasi jumlah koneksi berulang melalui firewall masuk Anda, atau, menonaktifkan kata sandi login. - Andrew Taylor
OpenSSH 6,7 tetes dukungan tcpwrappers, yang menggunakan apa yang ditolak. - Zoredache


Meskipun mungkin bagus untuk bisa ssh ke sistem Anda dari lokasi yang sewenang-wenang di internet, ada sistem serangan kata sandi otomatis yang akan mengunci ke ssh port terbuka dan menerapkan berbagai akun joe dan serangan kamus terhadap sistem Anda. Hal ini dapat mengganggu untuk membaca dalam ringkasan log malam Anda dan membuang-buang bandwidth Anda.

Jika Anda memiliki server web pada sistem yang sama, Anda dapat menggunakan pembungkus php dan tcp untuk membatasi lalu lintas masuk ssh ke sistem yang dikenal, plus memberi Anda kunci pintu belakang untuk memungkinkan Anda mengakses dari sistem sewenang-wenang di internet.

Begini cara Anda melakukannya:

tolak semua koneksi ssh di /etc/hosts.deny:

# /etc/hosts.deny fragment
sshd:  all

Izinkan sistem yang dikenal oleh IP di /etc/hosts.allow, plus tambahkan file untuk akses sementara:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

Buat file php di server web Anda dan berikan nama yang tidak jelas seperti my-sshd-access.php:

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

Maafkan kode php - Saya menggeseknya dari tempat lain, jadi mungkin bisa berdiri untuk membersihkan sejumlah besar. Yang dilakukan hanyalah menambahkan alamat IP dari sistem yang mengaksesnya ke file /etc/hosts.allow.temporary-sshd-access, yang dibaca oleh sshd (karena dimasukkan oleh /etc/hosts.allow) pada waktu koneksi .

Sekarang ketika Anda berada di beberapa sistem sewenang-wenang di web dan ingin ssh ke sistem ini, pertama-tama gunakan browser web dan tekan file ini (atau gunakan wget atau equivilent):

$ wget http://your.system.name/my-sshd-access.php

Sekarang Anda harus bisa masuk ke sistem Anda. Jika ini adalah tempat dimana Anda akan sering ssh'ing dari sering, itu akan menjadi sepele untuk membaca isi dari file /etc/hosts.allow.temporary-sshd-access dan secara permanen menambahkan alamat IP ke / etc / hosts. mengizinkan.


15
2018-06-02 17:07



Untuk membuat ini lebih aman, jalankan halaman ini di https. - Robert Munteanu
Jika Anda mengubah skrip sehingga tidak mengeluarkan konten dari file "alamat IP sementara", tidak akan ada apa pun yang bisa disadap untuk mengendus. Kemudian Anda dapat menjalankannya di http, bukan https. - Barry Brown
"Alamat IP sementara yang diizinkan" adalah selalu dari pemohon (yaitu milik Anda). Saya tidak berpikir itu penting satu atau lain cara. Https tidak berarti bahwa URL yang diminta dienkripsi berarti tidak sepele untuk mengendusnya dari kabel. - David Mackintosh
Ini tidak akan berfungsi jika Anda berada di jaringan yang mem-proxy koneksi HTTP tetapi rute langsung Anda ke internet adalah melalui jalan keluar yang berbeda. - Andrew Taylor
OpenSSH 6,7 tetes dukungan tcpwrappers, yang digunakan dalam jawaban Anda. - Zoredache


Anda mungkin ingin melihat denyhosts demikian juga.

FYI: OpenSSH 6,7 tetes dukungan tcpwrappers, artinya penolakan mungkin bukan solusi untuk instalasi baru.


9
2018-06-02 16:23





Bantulah diri Anda sendiri dan nonaktifkan login kata sandi. Gunakan secara eksklusif kunci otentikasi (google ssh-keygen misalnya - Contoh: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4.html ) Server Anda akan lebih aman, Anda akan terhubung dengan lebih nyaman (periksa ssh-agent, ssh-add, keychain) dan Anda tidak akan menjadi korban serangan ssh brute force.


8
2017-08-17 22:08





solusi lain hanya memindahkan ssh ke port lain. cacing ini sangat bodoh.


2
2018-06-02 16:28



Poster asli mengatakan dia harus berjalan di port standar. - kbyrd
maaf, saya harus membaca pertanyaan lebih hati-hati :) - disserman
Saya harus setuju ... Saya memiliki SSH saya yang berjalan di port "alternatif" dan itu membuat perbedaan DUNIA di log. Cacing itu sepintar batu bata, jadi ia bekerja dengan baik terhadap skrip otomatisasi bodoh; tidak begitu baik melawan penyerang manusia. Namun, log memiliki suara yang diberkati Diam di dalamnya ... - Avery Payne


Pilihan lain mungkin mengharuskan semua koneksi ssh diverifikasi oleh sertifikat dan menghapus password sama sekali.

Saya menggunakan Denyhosts, tetapi saya menemukan bahwa saya hanya terhubung secara rutin dari jarak jauh dari beberapa tempat, jadi saya memblokir semua koneksi port 22 kecuali dari tempat lain, dan menggunakan port knocking sehingga saya dapat terhubung dari mana saja dengan laptop saya jika saya harus .


2
2018-06-03 00:51





Setiap solusi yang melibatkan pemblokiran IP secara otomatis setelah beberapa kegagalan menimbulkan risiko penolakan serangan layanan. Selama ada kebijakan kata sandi yang bagus untuk mengurangi efektivitas serangan brute force atau kamus, saya tidak akan terlalu khawatir tentang mereka.

Jika Anda membatasi pengguna / grup hanya kepada orang-orang yang seharusnya diizinkan untuk masuk di tempat pertama, dan menonaktifkan masuk sebagai root, Anda harus lebih dari cukup aman. Dan, jika itu tidak cukup, selalu ada otentikasi berbasis kunci.


1
2018-06-02 17:03





Jujur saja, jika Anda harus menjalankan SSH (dan port 22), Anda tidak dapat menghindari ini. Jika Anda harus menerima kata sandi, Anda bahkan berada dalam kondisi yang lebih buruk.

Taruhan terbaik Anda adalah mengkonfigurasi perangkat lunak analisis log Anda untuk mengecualikan log SSH. Kemudian jalankan instance terpisah untuk hanya melihat log SSH, dan gunakan procmail untuk memfilter upaya yang gagal. Anda bahkan dapat menulis skrip untuk memantau proses masuk yang berhasil dari alamat IP dengan beberapa kali gagal.

Tidak ada cara untuk menghentikan orang dari probing server SSH Anda. Denyhosts, fail2ban, dan contoh iptables akan bekerja sampai titik tertentu, tetapi dengan bahaya tambahan secara tidak sengaja memblokir pengguna yang sah. Metode terbaik adalah dengan menyedotnya dan mencoba mengotomatisasi proses analisis log untuk mengurangi waktu yang harus Anda pikirkan.


1
2017-08-17 22:51