SSH sunucusunu kaba kuvvetlemeye karşı koruma


14

Küçük bir SVN sunucum var, debian çalışan eski dell optiplex. Sunucumda yüksek taleplerim yok, çünkü sadece küçük bir SVN sunucusu ... ama güvenli olmasını istiyorum.

Sunucumu daha yeni ve daha iyi bir optiplex'e yeniledim ve eski sunucuya biraz bakmaya başladım. Sorun yaşadıktan sonra indirdim. Günlükleri kontrol ettiğimde, kaba kuvvet denemeleriyle dolu ve bir şekilde makineme girmeyi başardı. Bu kişi iki kök "kök" ve "takas1" falan "knarkgosse" denilen ekstra bir hacim yarattı. Neden ve ne yaptıklarını gerçekten bilmiyorum, ama bunun tekrar olmasını önlemek istediğinizden emin olun. Bunu biraz garip buluyorum çünkü şifremi birkaç ay kadar değiştiriyorum ve şifreler her zaman rastgele harfler ve rakamlar bir araya geliyor ... kaba kuvvet yapmak kolay değil.

Kökün oturum açmasını engelleyebileceğimi ve sudoers kullandığımı ve SSH bağlantı noktasını değiştirebileceğimi biliyorum, ama daha ne yapabilirim?

Birkaç sorum var:

  1. X tutarındaki yanlış denemeden sonra 5 dakika boyunca oturum açmayı nasıl önleyebilirim? Veya her yanlış denemeden sonra yavaş denemeler mi?

  2. Bir sunucunun bağlanabileceği bir tür merkezi kara liste var mı? "Güvenli olmayan" ve asla erişim izni verilmemesi gereken IP adreslerini izleyen bir kara liste?

  3. Sunucuma güvenlik uygulamak için daha ne yapabilirim?

Daha önce de söylediğim gibi Debian 5'i Apache (www-data user problem?), Svn, mysql, php, phpmyadmin, hudson ile çalıştırıyorum. 80, 443, 8080, 8180, 23 ve 22'de port yönlendirme ile bir ev ağındadır.


Yanıtlar:


17

Fail2ban ve Port Knocking ihtiyaçlarınızın çoğunu karşılamalıdır.

SSH bağlantı noktanızın değiştirilmesi ve yalnızca Anahtar tabanlı kimlik doğrulamasına izin verilmesi de önerilir.

Ek güvenlik önlemleri ekleyerek geri dönüşlerin azaldığı bir noktaya gelebileceğiniz iddia edilebilir, ancak daha sonra, "yeterince güvenli" olduğunuza karar vermek size kalmıştır.

Kök girişine izin vermemek de iyi bir fikirdir.


2
Denyhosts kullanıyorum, ama fail2ban afaik ile hemen hemen aynı.
pfyon

Fail2Bana tanıdık gelebilir ... Buna bir göz atacağım.
Paul Peelen

1
+1 Hata2Ban, 5 başarısız deneme = 5 dakikalık IP bloğu. Gülünç derecede kolay bir parolanız yoksa, asla dakikada 1 parola ile bruteforced olmayacaktır.
Chris S

@Chris S Yea, favorilerimden biri. Script Kiddies genellikle zaman aşımlarıyla nasıl başa çıkılacağını bilmez ...
gWaldo

1
@gWaldo, onaylama yanlılığı , zaten doğru olduğunu düşündüğünüzü söylemek için okuduğunuz şeyleri yeniden yazarken uzun bir yol kat ediyor.
Chris S

7

Güvenli parolaların ve anahtar kimlik doğrulamasının yerini tutamaz. Bununla birlikte, Fail2Ban , birçok kez kimlik doğrulaması yapmaya çalışan kullanıcıların IP'lerini yasaklamak için harika bir araçtır. Çoğu dağıtım için önceden oluşturulmuş bir paket olarak da mevcuttur. Dikkatli olun, yanlışlıkla kendinizi yasaklayabilirsiniz, bu yüzden beyaz listelenmiş bir IP kurtarma veya kolay konsol erişimine sahip olduğunuzdan emin olun ...

Fail2Ban, sorduğunuz her şeyi nasıl yapılandıracağınıza dair birkaç iyi örneğe sahiptir ... ancak, hatalı adreslerin evrensel bir deposuna sahip değildir. Başka bir IP (dhcp renew / bot-net attack / vb ...) alma kolaylığı nedeniyle böyle bir havuz olduğunu sanmıyorum. Ben de en yaygın çarptım gibi ortak 'yönetici' türü kullanıcı adlarını (root / admin / yönetici / sysop / vb ..) kullanarak ssh ile oturum devre dışı bırakır.


Mükemmel cevap. Sana cesur bir metin katılıyorum ... bu yüzden harf şifreleri ile yanmış mektup. Anahtar kimlik doğrulaması bu sunucu için biraz fazla ... ama iyi bir fikir. Şimdi Fail2ban yükledim, ben yeniden yapılandırmak gerekir gibi görünmüyor ve bu küçük svn sunucusu evde olduğundan (kolay benim gömme dolap = S kapalı olduğunu düşünüyor) Thnx tavsiye için!
Paul Peelen

1
Spamhaus, bilinen spam gönderen ağların bir listesini yayınlar. Botnet'leri kapsamıyor, sadece "profesyonel" spam göndericiler olarak biliniyor: spamhaus.org/drop
Chris S


4

Burada sunulan bir dizi iyi öneri var. Üç şeyin bunu nispeten güvenli hale getirmesini öneriyorum:

  1. Sshd'yi rastgele yüksek bir bağlantı noktasında çalıştırın. Botlar tipik olarak sadece port 22'den sonra ve 2222 portu 2222 gibi varyasyonlardan sonra gider.
  2. Sshd yapılandırmasında parola tabanlı kimlik doğrulamayı devre dışı bırakın:

UsePAM no

  1. Bu siteyle yalnızca önceden paylaşılan SSH anahtar çiftleriyle kimlik doğrulaması yapın. PKI tabanlı kimlik doğrulama ile başlamak için ssh-keygen adam.

Bu yardımcı olur umarım.


2
Çok düşük bir stres çözümü için, standart olmayan bir bağlantı noktasında kesinlikle ikinci olarak ssh çalıştırıyorum. Gördüğüm kadarıyla, bu ssh sunucunuza kaba kuvvet bağlantı girişimlerini büyüklük sırasına göre düşecektir. Bir hafta boyunca, sunucularımdan biri (standart bağlantı noktasında ssh çalıştıran) 134 geçersiz bağlantı denemesi yaptı. Aynı zaman diliminde, aynı sunucudaki (standart olmayan bir bağlantı noktasında ssh çalıştıran) sanal bir örnek 0'a sahipti.
DF

1

Her zaman bruteforce, portscan ve diğer bazı seçenekleri denemek isteyen kişilerin IP adreslerini engelleyebilen büyük bir CSF / LFD hayranı oldum . Temelde IP tabloları için büyük bir perl sarmalayıcısıdır, ancak yapılandırma dosyasının okunması zor değildir ve belgeler kötü değildir.


Sunucuda bir bağlantı noktası taraması her yapıldığında bir uyarı (örn. E-posta yoluyla) olup olmadığını biliyor musunuz?
Paul Peelen

1

Ayrıca sshguard'a da bakabilirsiniz. Kullanmadım ama iyi şeyler duydum.

Kaynaklar:
http://isc.sans.edu/diary.html?storyid=9370

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

"Sshguard, sunucuları günlük tutma etkinliklerinden izler. Günlükler, bir kişinin Kötü Şey yaptığını ilettiğinde, sshguard biraz engelleyerek tepki verir. Sshguard'ın dokunaklı bir kişiliği vardır: yaramaz bir tüccar sunucunuzu rahatsız etmekte ısrar ettiğinde, daha sıkı ve daha sıkı. "


Kulağa hoş geliyor ... Buna bir göz atacağım. thnx
Paul Peelen

1

Varsayılan bağlantı noktasında internete bağlı bir SSH sunucum var ve hiç sorun yaşamadım ..

  • SSH için tcp_wrappers (ör. hosts.allow hosts.deny) .. Orada derlenmiş desteği olmayan bir SSH olduğunu sanmıyorum
  • iptables bu tcp_wrappers ile birlikte rastgele bağlantı noktası taramaları / bruteforce girişimlerimin yaklaşık% 99'unu ortadan kaldırdı .. Tek sorun, bu IP / IP aralıklarına izin vermek için nereden bağlanacağınızı bilmeniz gerek ... IP aralıklarını görmek ve izin vermek için bölgemdeki popüler sağlayıcılara bir arama .. çoğu tarama uzak topraklardan geliyor gibi görünüyor :)
  • Parola olmadan PermitRootLogin (yani yalnızca bir parola ile şifrelenen RSA / DSA anahtar çiftleri) otomatik görevler için harika çalışır .. Etkileşim için oturum açtığımda sudo erişimi ile yapılandırılmış olan hesabımı (normal) açıkça kullanıyorum
  • sudoers
  • sürekli güncellemeler .. Bu kutuyu tüm güvenlik / kritik güncellemelerle sık sık güncelliyorum
  • şifre / parola değişiklikleri
  • Herhangi bir sorun olup olmadığını görmek için her seferinde chkrootkit'i çalıştırın .. (bu işlevi gerçekleştiren birkaç tane var)

Umarım yardımcı olur!


1

Bunu yapmanın daha iyi bir yolu var, fail2ban kullanmak bir uygulama eklemeniz gerektiği anlamına gelir ve uygulama katmanında çalışır.

İptables kullanıyorsanız, ağ katmanında çalıştığından daha verimlidir ve fazladan bir uygulama yüklemenize gerek yoktur.

Yeni iptables modülünü kullanın http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT

0

Bir seçenek (diğer güvenlik önlemlerine ek olarak kullanılacak) 22 dışında bir bağlantı noktasında sshd dinlemiştir. Kendim denemedim, ancak botların saf kaba kuvvet saldırılarının sayısını azalttığını duydum.

Bunun gerçek bir güvenlik olmadığını, sadece otomatik kaba kuvvet saldırılarının sayısını azalttığını vurgulamalıyım. Sanırım her portu kontrol etmek için çok fazla iş.


Bunu da yaptım, 23 numaralı bağlantı noktasına swiched. Temel olarak 22 numaralı bağlantı noktasında başka bir sunucu (çünkü şimdi indirdim) vardı.
Paul Peelen

2
23, ayrılmış bir liman telnetolsa. Ayrılmamış bağlantı noktaları (> 60k gibi) kullanmak genellikle daha iyi bir fikirdir. iana.org/assignments/port-numbers size ayrılmış bağlantı noktası numaralarının bir listesini verir.
inkaphink

Bahşiş için teşekkürler. Bu makinede (henüz) ilkeyi kullanmıyorum ancak bağlantı noktasını değiştireceğim. Profesyonel sunucularımda kullandığım 52000 - 59000 arasında bir bağlantı noktası aralığım var, bunun için aynı şeyi kullanmayı düşünüyorum.
Paul Peelen

1
@ Paul: I don't use te[l]net on this machine- bu şekilde sakla. Çeşitli nedenlerle bir telnet istemcisi olmasını istediğinizde, ssh kullanılabilir olduğunda bir telnet sunucusu çalıştırmak için hiçbir neden yoktur. Tel üzerinden düz metin parolalar bozuk .
mlp

0

Burada bahsedilmeyen ve gerçekten olması gereken bir şey, güvenlik duvarı üzerinden erişimi sınırlamaktır. Bu her duruma uymaz, ancak ana bilgisayara statik IP ile tutarlı bir konumdan bağlanıyorsanız, bu IP dışında SSH'yi tamamen engelleyebilirsiniz. Bu davetsiz misafirlerin içeri girememesini sağlayacaktır. Yine de belirttiğim gibi, bu, özellikle IP'niz dinamik ve sık sık değişiyorsa, her duruma uymaz.


Genel olarak çözümünüzü kabul ediyorum. Bunun çalıştığım şirkette standart olduğuna inanıyorum ... ama bunun benim için bir şey olduğunu düşünmüyorum. Sorun esas olarak macbook pro'yu evden (yerel ağ), işten (statik IP) veya hareket halindeyken (3G modem / iPhone kullanarak) kullanmam. Sanırım çok fazla abartısız bir VPN yoksa son bir sorun. Cevabınız için teşekkürler.
Paul Peelen

0

DenyHosts, http://denyhosts.sourceforge.net/ , şanslı olduğum iyi bir proje. Denyhosts'u senkronize etmek için ayarlarsanız, denyhosts kullanarak diğer sistemleri bruteforce etmek zorunda olan bir yasak listesine eklemek için yeni IP'ler indirir. Ayrıca, bir süredir kuvveti kırmaya çalışmayan IP'lerin süresinin dolması da söz konusu.

Ortak anahtar kimlik doğrulamasını kullanmak ve şifre günlüğünü devre dışı bırakmak, muhtemelen yapabileceğiniz en iyi şeydir. Herhangi bir kaba kuvvet saldırısını yener.


0

Benim için etkili olan:

  1. Diğerlerinin söylediği gibi, root girişi yok, PasswordAuthentication, sshd_config içinde no olarak ayarlandı (yalnızca giriş w / key)

  2. Yalnızca bir veya iki kullanıcının ssh ile giriş yapmasına izin verildi ve yaygın kaba kuvvet aracı kullanıcı adı listelerinde olmayan (ör., "Admin" veya "apache" veya "web" veya " johnny ")

  3. Kısıtlayıcı güvenlik duvarı kuralları (temelde, her şey engellendi, ancak servis portum ve ssh). Hatta ping'i kısıtlıyorum, daha kaba taramayı önlemek için (eşimin çaresizliğine çok).

  4. Web sunucumda, belirli birkaç IP adresine erişimi kısıtlıyorum - ancak bu sizin için bir seçenek değil gibi görünüyor. Kesinlikle tüm ana bilgisayarlarda kendim yapamam. Ayrıca "port-vurma" ya bakmak isteyebilirsiniz.

  5. Ve benim favorim: OSSEC'in diğer kaba kuvvet koşullarını ve diğer hatalarla ilgili uyarıları engellemek için aktif yanıt modülü. Y geçersiz zaman içinde x geçersiz giriş tespit eder ve sonra belirli bir süre bloke eder (iptables güvenlik duvarı bırakma komutu ile). Eğlence için yaklaşık 12 saat boyunca engelliyorum. :)

Burada yanlış şeyi çok fazla engellemediğimden emin olmak için yaptığım bir şey, /etc/ossec.conf dosyasında yüksek bir seviyeye (varsayılan yapılandırmada mevcut olmayan) etkin yanıt ayarladığım ve sonra sshd_rules.xml gidin ve o seviyeye engellemek istiyorum blokları ayarlamak ve gerektiğinde blok vs uyarı eşikleri değiştirmek.

Apache çalıştırıyorsanız, apache kurallarını ihlal eden şeyleri de engelleyebilirsiniz. Bunları sadece NAT sorunu nedeniyle engellemiyorum, tüm üniversiteyi falan engellemeyi düşünmek istiyorum. :) Ayrıca, günlük dosyalarındaki belirli koşulları engellemek için özel kurallar yazabilirsiniz, bu da gerçekten yararlı olabilir.

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.