Ubuntu sunucusunu bruteforce ssh saldırılarından nasıl koruyabilirim?


21

Şifrelerimi güvende tutuyorum, ancak bir brütörek saldırısı meydana geldiğinde insanların bir sunucunun performansının şiddetli bir şekilde düşmesinden şikayet ettiğini duydum. Ubuntu 10.10 sunucumu bu tür saldırılardan nasıl koruyabilirim? Bunun için bir apparmor profili var mı? Ya da ele almak için başka bir yol?

Yanıtlar:


19

Farklı çözümler var. En iyisi, kullanıcıların kimliğini doğrulamak için ortak / özel anahtarlar kullanan RSA kimlik doğrulaması kullanıyor.

Farklı yaklaşımlar için bu harika el kitabına bakın (RSA kimlik doğrulaması dahil): http://www.la-samhna.de/library/brutessh.html

Sunucumda 3. çözümü kullanıyorum, çünkü teknik olmayan kullanıcılarım için karmaşıklaştırmak istemiyorum: iptablesbrütforce saldırılarını verimsiz ve etkisiz kılan dakikadaki bağlantı sayısını sınırlamak için kullanmak .

İşte kullandığım çözüm:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Belirtildiği gibi burada : Bu üç port 60 saniyelik bir süre içinde herhangi bir IP adresinden 22 bağlantılara izin verir ve tekrar izin bağlantılarını devam edecek önce hiçbir Sonraki bağlantı girişimlerine 60 saniye gerekir. --Rttl seçeneği ayrıca, eşleştirilen kaynak adreslerine karşı hafifletmeye çalışmak için paketleri eşleştirirken datagramın TTL'sini de dikkate alır.

Söz konusu kılavuzda belirtildiği gibi, güvenilir kullanıcıları bu kurallardan ayırmak için beyaz bir liste kullanmak daha iyidir:

iptables -N SSH_WHITELIST

sonra güvenilir ana bilgisayarlar ekleyin:

iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT

ve bundan sonra kuralları yapın:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

Parola kapatma özelliğini kapatmayla ilgili olarak, genel anahtarını kaybedersem bir sunucuya nasıl giriş yaparım? (Bir sunucuya fiziksel erişimim yok, bu bir VPS)
Dziamid

Ortak anahtar istediğiniz her yerde yayınlanabilir. Bu konuda endişelenmeyin. Kamuya açık yerleri bile unutmayacağınızdan emin olduğunuz bir yere koyabilirsiniz.
Pedram


Sorulduğunda sunucuyu ortak anahtarını ortaya çıkarmak için kurmanın bir yolu var mı?
Dziamid

1
Ssh kullanarak sanmıyorum. Apache gibi bir web sunucunuz varsa, anahtarı web kullanarak paylaşabilirsiniz.
Pedram

8

Sunucularımda günde 1 ila 2 oranında kaba kuvvet ssh saldırıları alıyorum. Ben denyhosts kurdum (ubuntu paketi: denyhosts). Bu amaç için çok basit ama etkili bir araçtır: temel olarak kaba kuvvet saldırılarını tespit etmek için günlüklerinizi tarar ve bu saldırıların kaynaklandığı yerden /etc/hosts.deny dosyasına IP'leri koyar. Onlardan bir daha haber almayacaksınız ve yükünüz önemli ölçüde azaltılmalıdır. Kaç tane hatalı girişimin bir saldırı oluşturması gibi sorunları düzeltmek için /etc/denyhosts.conf yapılandırma dosyası ile yapılandırılabilir.

Şeffaf çalışmaları sayesinde neler olup bittiğini kolayca görebilirsiniz (e-posta bildirimi: 'aha, başka bir korkakça saldırı!') Ve kullanıcılarınızın şifrelerini tekrar tekrar yanlış yazması nedeniyle hataları geri alabilirsiniz.

Elbette, daha önce başka kimlik doğrulama yöntemlerine geçmekle ilgili söylenen her şey geçerli, ancak bazen gereksinimleriniz kullanıcılarınızınkilerle aynı fikirde değil.

Ayrıca, iptables'daki yeni bağlantı hızı sınırlaması, hosts.deny üzerinden erişimi engellemekten daha iyi bir seçim olabilir. Öyleyse, fail2ban'a da bir göz atın. Ancak, ssh brute-kuvvetinin asıl endişeniz olduğunu biliyorsanız (bunu belirlemek için /var/log/auth.log adresine el ile bakın), bu çok kolay ve düşük etkili araçla devam edin.


1
/Var/log/auth.log'um son zamanlarda önemli ölçüde büyüyor. Bunun gibi bir giriş Mar 27 10:28:43 smartfood sshd[17017]: Failed password for root from 218.15.136.38 port 33119 ssh2 Mar 27 10:28:47 smartfood sshd[17019]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.136.38 user=rootbir saldırıya işaret ediyor mu?
Dziamid

1
Bu, IP 218.15.136.38’deki birisinin root olarak giriş yapmaya çalıştığı anlamına gelir. Sen olabilir miydin, ama muhtemelen çünkü tools.whois.net/whoisbyip kullanarak , bu IP’nin Minsk’ten oldukça kolay bir yolu olan Çin'de kayıtlı olduğunu görebiliyorum ;-) Yani, evet, bu şifrenizin bir tahminine benziyor . Ahlaki: Kök girişini ssh (PermitRootLogin no / etc / ssh / sshd_config dosyasında) ile devre dışı bırak çünkü bunu açık bırakmak için iyi bir neden yok. Ve sonra inkarcıları veya fail2ban'ı düşünün. Ayrıca, yalnızca 22 numaralı bağlantı noktasından ve ihtiyaç duyduğunuz her şeyden (ancak daha fazlasını değil) yalnızca temel erişime izin verecek bir güvenlik duvarınızın olduğundan emin olun
DrSAR

6
  1. Sshd portunu standart olmayan bir şeye değiştirin
  2. knockdBir port vurma sistemi uygulamak için kullanın
  3. Ardışık SSH girişimlerini sınırlamak için iptables ' recentve hashlimiteşleşmelerini kullanın.
  4. Parola kullanmayın, bunun yerine SSH anahtarlarını kullanın.

3
-1 ilk tavsiye için, gerçek bir güvenlik artışı olmaması için işleri karmaşıklaştırır
steabert

Eğer ssh anahtarlarını kullanıyorsanız ve ssh ile parola doğrulamayı kapatıyorsanız, gerçekten 1,2,3'e ihtiyacım var mı?
Dziamid

4
@steabert, 22 numaralı bağlantı noktasında yoluna zorla girmeye çalışan senaryo çocuklarına karşı yardımcı oluyor. Limanı hareket ettirdim ve uyarılar azaldı.
pepoluan

@ Dziamid ssh anahtarları sisteminize girmesini engeller. ama onların 22
numaralı

3
@ Dziamid Hayır, doğru değil. Diğer kimlik doğrulama yöntemleri (RSAAndentication, PubkeyAuthentication, #KerberosAuthentication vb.) Hepsi hala 22
numaralı

3

Öncelikle şifreleri kullanmamayı düşünmelisiniz ve bunun yerine anahtarları kullanmalısınız. Şifre kullanmanıza gerek yoktur. Bu sizin için çalışıyorsa, OpenSSH sunucusunu şifre girişlerine tepki vermeyecek şekilde yapılandırabilirsiniz.

https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html

Fail2ban kullanmak da bir seçenek olabilir.

https://help.ubuntu.com/community/Fail2ban


Genel anahtarını kaybedersem bir sunucuya nasıl bağlanabilirim?
Dziamid

1
Sadece konsol veya doğrudan erişim yoluyla. Bir sunucuyu yönetebiliyorsanız anahtarınızı kaybetmeyeceğinizden eminim.
ddeimeke

0

Sunucu ağda ne kadar yaygın olarak kullanılıyor? Belki ağ yöneticisi ile konuşabilir ve sunucuya ağ erişimini izleyip kısıtlamanın mümkün olup olmadığını kontrol edebilirsiniz. Hesap girişleri güvenli olsa bile, sunucunun basit DoS / DDoS saldırısından zarar görebileceği anlaşılıyor.


0

Fail2ban'a bir alternatif CSF'dir : ConfigServer Güvenlik ve Güvenlik Duvarı .

LFD ile birlikte gelir: çeşitli servislerde birden fazla başarısız oturum açma girişimini tespit edebilen ve rahatsız edici IP adresini engelleyen (geçici veya kalıcı).

Taşkın saldırılarına karşı yardımcı olabilecek ve muhtemelen izinsiz girişleri tespit edebilecek başka seçenekleri de vardır.

Dezavantajları:

  • LFD'nin işini yapması için CSF'yi güvenlik duvarı olarak kullanmanız gerekir. Bu nedenle, mevcut bir güvenlik duvarınız varsa, onu CSF ile değiştirmeniz ve yapılandırmanızı yerleştirmeniz gerekir.
  • Ubuntu için paketlenmedi. Configserver.com adresinden otomatik güncellemelere güvenmeniz veya otomatik güncellemeleri devre dışı bırakmanız gerekir.
  • Oldukça popüler olduğunu duydum, bu nedenle akıllı davetsiz misafirler tespit edilmeden önce izinsiz giriş tespitinin nasıl devre dışı bırakılacağını biliyor olacak!

0

SSH hizmetinin dünyaya girmesine izin vermek istiyor musunuz? Ya da sadece belirli yerlerdeki ekip üyelerine? Cevabım biraz zorluğunuza bağlıdır.

Her iki durumda da, yapmanız gereken tek şey, SSH sunucusunun kök kullanıcı için parola girişlerine izin vermediğinden emin olmaktır.

  1. / Etc / ssh / sshd_config dosyasında, SSH anahtarı dışında asla kök girişine izin vermediğinizden emin olun.

Sistemlerimde bu ayar var

PermitRootLogin without-password

ama yeni Ubuntu'da olduklarını farkettim

PermitRootLogin prohibit-password

Eğer "man sshd_config" i okursanız, bunun daha yeni "yasak-şifre" anlamına geldiğini düşünüyorum ve anlam olarak kesinlikle daha açık olduğunu düşünüyorum. Bazı Linux sistemlerinde bu varsayılan DEĞİLDİR, ancak muhtemelen olması gerekir.

Şimdi, senin problemin hakkında. Sistem sunucunuz yalnızca belirli yerlerdeki bazı kullanıcıları mı kullanıyor? Bunu yap!

  1. /etc/hosts.deny ve insert düzenle

    TÜMÜ: TÜMÜ

Ardından /etc/hosts.allow dosyasını düzenleyin ve SSH'yi kullanmak için izin vermek istediğiniz IP numaralarını veya aralığı yazın. Buradaki açıklama biraz kafa karıştırıcı çünkü 111.222.65.101 ila 111.222.65.255 gibi IP numaraları olan tüm sistemlere izin vermek istiyorsanız, hosts.allow içine böyle bir giriş yaptınız.

ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.

Bu bir kaba güç, güçlü bir çözümdür. Kullanıcılarınız IP aralığına göre sıralanabilirse, yapın!

IP tabloları oluşturulmadan önce bu çözüm mevcuttu, (bence) yönetimi çok daha kolay, ancak IP tabloları çözümü kadar iyi değil çünkü IP tabloları yordamları düşmanları hosts.allow ve ana bilgisayarların yönettiği programlardan daha erken görecek. .reddetmek. Ancak bu kesin bir yangın, sadece SSH'den değil, birçok sorunu kapatmanın basit bir yolu.

Kendiniz için yarattığınız sorunu not alın. Bir FTP sunucusu, web sunucusu veya başka bir şey açmak istiyorsanız, ana makinelere girişleri izin vermeniz gerekir.

İptables ve firewall ile uğraşarak aynı temel amacı elde edebilirsiniz. Bir anlamda, bu tercih edilen bir çözüm, çünkü dış sınırdaki düşmanları engelliyorsunuz. Ubuntu'da "ufw" (karmaşık güvenlik duvarı) ve "man ufw" pek çok örnek var. Bunu çözmek için iyi bir GUI istiyorum, bunu her zaman yapmak zorunda değilim. Belki başkaları bize bir tane olup olmadığını söyleyebilir.

  1. Buradaki diğer yayınlar, yalnızca kullanıcılarınız için SSH ortak anahtarını kullanmanızı önerdi. Bu kesinlikle, kullanıcılarınız için karmaşıklık ve hayal kırıklığı fiyatına yardımcı olacaktır. Laboratuvarımızda 15 bilgisayar var. Kullanıcılar bilgisayarlar arasında gider. SSH anahtar kimlik doğrulaması istemek, insanlar bir bilgisayardan diğerine geçtiği için büyük bir güçlüğe neden olur.

Bazı kullanıcılar çeşitli sunucular için farklı ssh anahtarları biriktirdiklerinde başka bir hayal kırıklığı kaynağı ortaya çıkacaktır. Yaklaşık 12 farklı proje için SSH anahtarlarım olduğu için, şimdi ssh başarısız oluyor çünkü çok fazla ortak anahtarım var ("ssh -o PubkeyAuthentication = false" ya da .ssh / config dosyasında bir giriş oluşturulması gerekiyor. Bu bir PITA)

  1. Sunucuyu büyük geniş dünyadan SSH'ye açık bırakmanız gerekiyorsa, sık sık giriş yapmayı deneyen yerleri engellemek için kesinlikle bir reddetme rutini kullanmanız gerekir. Bunun için 2 güzel program var, kullandıklarımız denyhosts ve fail2ban. . Bu programlar, suçluları yasaklamanızı sağlayan bir süreye, istediğiniz bir süre için izin veren ayarlara sahiptir.

Centos Linux sistemlerimizde, denyhosts paketini düşürdüklerini ve sadece fail2ban teklif ettiklerini fark ettim. Sorunlu kullanıcıların / ip aralıklarının bir listesini oluşturduğundan ve daha sonra hosts.deny'de bu listeye dikkat çekildi, çünkü inkarcıları sevdim. Bunun yerine fail2ban'ı yükledik ve sorun değil. Anladığım kadarıyla, bu kötü kullanıcıları sunucunun dış tarafında engellemeyi tercih ediyorsunuz, bu nedenle fail2ban gibi ip tabloları tabanlı engelleyiciler aslında daha iyi. Denyhosts ikincil seviyede çalışır, düşmanlar iptables'ı geçtikten sonra sshd daemonu tarafından reddedilir.

Bu programların her ikisinde de, kullanıcıların şifrelerini unutmaları ve giriş yapmak için birkaç kez denemeleri durumunda hapisten çıkmaları biraz zahmetlidir. İnsanları giriş hatası yaptıklarında geri almak biraz zordur. İnsanları içeri sokup bırakabilecekleri bir tıkla ve tıkla GUI olacağını tahmin edersiniz, ama bu böyle değildir. Bunu sadece birkaç ayda bir yapmak zorundayım ve zamanlar arasında nasıl olduğumu unutuyorum, bu yüzden kendime talimatlarmı web sayfamda yazdım http://pj.freefaculty.org/blog/?p=301

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.