Yüzlerce başarısız ssh girişi


81

Her gece RedHat 4 sunucumda yüzlerce, bazen binlerce başarısız ssh girişi oluyor. Uzak sitelerden güvenlik duvarı nedenleriyle, standart bağlantı noktasında çalıştırmam gerekiyor. Bunu engellemek için yapmam gereken bir şey var mı? Birçoğunun aynı IP adresinden geldiğini fark ettim. Bir süre sonra onları durdurmamalı mı?

Yanıtlar:


67

Yeni gelen bağlantıları SSH portu ile sınırlandırmak için iptables kullanabilirsiniz. Size anahtar teslim bir çözüm sunmak için tüm iptables yapılandırmanızı görmem gerekirdi, ancak temel olarak aşağıdaki gibi kurallar eklemekten bahsediyorsunuz:

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 

Bu kurallar, daha önce ESTABLISHED bağlantılarını tabloda daha önce kabul ettiğinizi varsayar (böylece yalnızca yeni bağlantılar bu kurallara varabilir). Yeni SSH bağlantıları bu kuralları vuracak ve işaretlenecektir. 60 saniyede, tek bir IP adresinden 5 deneme, bu IP'den gelen yeni bağlantıların kesilmesine neden olacaktır.

Bu benim için iyi çalıştı.

Düzenleme: Bu yöntemi "fail2ban" olarak tercih ederim, çünkü ek bir yazılım yüklenmez ve tamamen çekirdek modunda gerçekleşir. "Fail2ban" gibi log dosyalarının ayrıştırılmasını işlemez, ancak probleminiz sadece SSH ise, yazılım kurulumu gerektiren ve daha karmaşık bir kullanıcı modu kullanmazdım.


1
Bu çözümü sevdim ve bu gece yerine koymayı planlıyorum.
MattMcKnight

2
Saldırıları yavaşlatıyor ve tavsiye ediyorum, ancak orada dağıtılmış tarama botnetleri olduğu için, bu derde deva değil. Size karşı dağıtılmış taramalar yapan botnetlerden hala geçersiz oturum açmalar olacak. Bu konuda yapabileceğiniz çok fazla bir şey yok, içeri girmek istediğinizde SSH portunu uzaktan getirmek için bir tür "port çalma" şeması yetersiz kalıyor.
Evan Anderson

1
@ Evan'ın "liman çalma" önerisi için +1. Bazı bilgiler: linux.die.net/man/1/knockd . Ancak man page way (yani, iptables kuralları ekleme / silme) yapmayın, bunun yerine -m conditioniptables match yerine kullanın.
pepoluan

2
Bu kurallara göre sadece 22 ssh trafiğine uygulanmaları için - 22 koduna ihtiyacınız yok mu?
clime

2
@clime - Yep. Bunun 2 1/2 yıl geçtiğine ve hiç kimsenin farketmediğine inanmak zor! İyi yakalama.
Evan Anderson,


25

Yapabiliyorsanız SSH için standart olmayan bir bağlantı noktası kullanmanızı öneririm (örn. Bağlantı noktası 10222), ancak sizden bahsettiğinizden beri DenyHosts gibi bir şey kullanmanızı öneririm.

http://denyhosts.sourceforge.net/

Mükemmel paket, kurulumu ve yapılandırması kolay.


6
İnsanların bunu neden hakaret ettiğini bilmiyorum; SSH, standart bir 22 numaralı bağlantı noktasındadır. Bu, yabancı bir ağdayken, giden güvenlik duvarı üzerinden standart olmayan bir bağlantı noktası açma konusunda onlara güvenmediğiniz anlamına gelir. Bu sorunun asıl çözümü yukarıda belgelenmiştir, ya gelen güvenlik duvarınız üzerinden tekrarlanan bağlantıların sayısını ya da parola kapatma oturumunuzu kapatın.
Andrew Taylor

1
OpenSSH 6.7 , denyhost'ların kullandığı tcpwrappers desteğini düşürüyor.
Zoredache

15

Sisteminize Internet üzerindeki keyfi konumlardan ssh yapabilmek güzel olsa da, açık bir ssh portuna kilitlenecek ve sisteminize karşı çeşitli joe hesabı ve sözlük saldırıları uygulayacak otomatik parola saldırı sistemleri vardır. Bu, günlük kayıt özetinizde okumak için can sıkıcı olabilir ve bant genişliğinin bir israfıdır.

Aynı sistemde bir web sunucunuz varsa, ssh gelen trafiğini bilinen sistemlerle sınırlamak için php ve tcp sarmalayıcılarını kullanabilir, ayrıca internetteki keyfi sistemlerden erişmenize izin vermek için bir arka kapı anahtarı verebilirsiniz.

İşte bunu nasıl yapıyorsunuz:

/etc/hosts.deny'in içindeki tüm ssh bağlantılarını reddet:

# /etc/hosts.deny fragment
sshd:  all

Bilinen sistemlerin /etc/hosts.allow içinde IP ile izin ver ve geçici erişim için bir dosya ekle:

# /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

Web sunucunuzda bir php dosyası oluşturun ve dosyaya my-sshd-access.php gibi açık olmayan bir ad verin:

<?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);
?>

PHP kodunu affedin - başka bir yerden kopyaladım, bu yüzden muhtemelen bir demet temizlemeye dayanabilirdi. Tek yaptığı, bağlantı zamanında sshd ile okunan /etc/hosts.allow.temporary-sshd-access dosyasına /etc/hosts.allow.temporary-sshd-access dosyasına erişen sistemin IP adresini eklemektir. .

Artık web’de keyfi bir sistemdeyken ve bu sisteme ssh yapmak istediğinizde, önce bir web tarayıcısı kullanın ve bu dosyaya basın (veya wget veya equivilent kullanın):

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

Şimdi sisteminize ssh yapabilmelisiniz. Bu, sık sık girdiğiniz bir yer ise, /etc/hosts.allow.temporary-sshd-access dosyasının içeriğini okumak ve IP adresini kalıcı olarak / etc / hosts dosyasına eklemek önemsizdir. izin vermek.


Bunu daha güvenli hale getirmek için bu sayfayı https'de çalıştırın.
Robert Munteanu

Komut dosyasını "izin verilen geçici IP adresi" dosyasının içeriğini çıkarmayacak şekilde değiştirirseniz, bir keskin nişancı koklamanız için hiçbir şey olmaz. Sonra http yerine https ile çalıştırabilirsiniz.
Barry Brown

"İzin verilen geçici IP adresi" her zaman istekte bulunanın adresidir (sizindir). Öyle ya da böyle önemli olduğunu sanmıyorum. Https, istenen URL’nin şifrelenmiş olduğu anlamına gelir; bu, kabloyu çekmenin önemsiz olmadığı anlamına gelir.
David Mackintosh

HTTP bağlantılarını proxy'ye bağlayan bir ağdaysanız bu işe yaramaz, ancak internete doğrudan yönlendirmeniz farklı bir çıkış üzerinden gerçekleşir.
Andrew Taylor

OpenSSH 6.7 , tcpwrappers desteğini düşürür; cevabınızda ne kullanılırsa kullanılır.
Zoredache


8

Kendinize bir iyilik yapın ve şifre giriş devre dışı bırakın. Yalnızca kimlik doğrulama anahtarlarını kullanın (örneğin, google ssh-keygen - Örneğin: http://www.puddingonline.com/~dave/publications/SSH-wey-Keys-HOWTO/document/html/SSH-wey-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html ) Sunucunuz daha güvenli olacak, daha rahat bağlanacaksınız (ssh-agent, ssh-add, keychain kontrol edin) ve ssh brute force saldırılarının kurbanı olmayacaksınız.


2

Başka bir çözüm, sadece ssh başka bir bağlantı noktasına taşımaktır. Bu solucanlar oldukça aptal.


3
Orijinal poster standart limanda koşması gerektiğini söyledi.
kbyrd

1
üzgünüm, soruları daha dikkatli
okumalıyım

1
Aynı fikirdeyim ... SSH'mi "alternatif" bağlantı noktalarında çalıştırıyorum ve günlüklerde DÜNYA fark yaratıyor. Solucanlar bir tuğla kadar zekidir, bu yüzden aptal otomasyon senaryolarına karşı iyi çalışır; insan saldırganlara karşı pek iyi değil. Yine de kütüklerin içinde kutsal bir sessizlik sesi var ...
Avery Payne

.. Bu botlar "aptal" değil, düşük asılı meyve aramak için tasarlanmış olmasıdır. Yani SSH portunu hareket ettirmek ... meyvelerini yerden uzak tutmak tarzında.
elrobis

2

Başka bir seçenek, tüm ssh bağlantılarının bir sertifika ile doğrulanmasını ve şifreleri tamamen ortadan kaldırmasını gerektirebilir.

Denyhosts kullanmak için kullanıyorum, ancak bir avuç yerden yalnızca düzenli olarak uzaktan bağlandığımı fark ettim, bu yüzden başka bir yer dışındaki tüm 22 numaralı bağlantı noktasını engelledim ve gerektiğinde dizüstü bilgisayarımla herhangi bir yerden bağlanabilmem için bağlantı noktası çalma işlevini kullandım .


1

Birden fazla hatadan sonra IP'lerin otomatik olarak engellenmesini içeren herhangi bir çözüm, hizmet reddi saldırıları riskini doğurur. Kaba kuvvet veya sözlük saldırılarının etkinliğini azaltmak için iyi bir şifre politikası uygulandığı sürece, onlar için fazla endişelenmem.

Kullanıcıları / grupları yalnızca ilk başta ssh ile izin vermesi gerekenlerle sınırlarsanız ve root olarak giriş yapmayı devre dışı bırakırsanız, yeterince güvende olmanız gerekir. Ve, bu yeterli değilse, her zaman anahtar tabanlı kimlik doğrulaması vardır.


1

Açıkçası, eğer SSH'yi (ve 22 numaralı bağlantı noktasını) çalıştırmanız gerekiyorsa, bunlardan kaçınamazsınız. Şifreleri kabul etmeniz gerekiyorsa, daha da kötü durumdasınız.

En iyisi, günlük analizi yazılımınızı SSH günlüklerini hariç tutacak şekilde yapılandırmaktır. Ardından, yalnızca SSH günlüklerine bakmak için ayrı bir örnek çalıştırın ve başarısız girişimleri filtrelemek için procmail kullanın. Birden fazla başarısız denemeyle IP adreslerinden başarılı girişleri izlemek için komut dosyaları bile yazabilirsiniz.

İnsanların SSH sunucunuzu araştırmasını engellemenin bir yolu yok. Denyhosts, fail2ban ve iptables örneği bir noktaya kadar çalışacak, ancak meşru kullanıcıları yanlışlıkla tıkama tehlikesiyle karşı karşıya kalacak. En iyi yöntem, onu emmek ve düşünmeniz gereken süreyi azaltmak için log analiz sürecini otomatikleştirmeye çalışmaktır.


0

Kırmızı şapka sunucunuzdaki oturum açma oturumlarında başarısız olduğunuzu söylerken, arkasında ne tür bir güvenlik duvarı var ve içine kaç kişinin girmesi gerektiğini. Güvenlik duvarındaki girişimleri, gerçek sunucunuza yaklaşmadan önce sınırlamak isteyip istemediğinizi öneririm.

Yasal olarak erişime ihtiyaç duyan ip adreslerinin aralığını sınırlandırabilirseniz, yangın duvarında bir erişim listesi oluşturabilmelisiniz. Güvenlik duvarındaki trafiği kısıtlayabiliyorsanız, sunucunuzun bir şey tarafından hedef alındığı anlaşılıyor gibi ağ saldırı sistemlerine bakmanızı öneririm.


0

Çoğu webhost, başarısız SSH girişlerini engellemek için APF + BFD kullanır. Günümüzde , LFD adlı, aynı şeyi yapan bir araç içeren CSF (Yapılandırıcı güvenlik duvarı) ve daha fazlası, sunucunuza erişmek istemediğiniz belirli ülkelerden gelen IP'leri engellemek de dahil (örneğin, Kore, Çin vb. SSH'imin probları) kaynaklı gibi görünüyor).



0

Bu konuyu birden fazla ana bilgisayarda ele almanız gerekiyorsa, OSSEC'e göz atmak isteyebilirsiniz: http://www.ossec.net/main/ossec-architecture

Bu, birden fazla aracıyı kaba kuvvet saldırılarına otomatik olarak yanıt verecek şekilde merkezi bir konumdan yapılandırmanıza olanak tanır (günlüklerden çıkarabileceğiniz diğer tüm biçimlerle birlikte).

Çok güzel bir yazılım parçası :)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.