Denyhosts vs fail2ban vs iptables- kaba kuvvet oturumları önlemek için en iyi yolu?


62

Bir LAMP sunucusu kuruyorum ve SSH / FTP / etc'yi önlemem gerekiyor. kaba kuvvet oturum açma başarılı olmayı dener. Hem denyhost'lar hem de fail2ban için birçok öneri gördüm, ancak ikisinin karşılaştırılması çok az. Ayrıca bir IPTables kuralının aynı işlevi doldurabildiğini de okudum.

Neden bu yöntemlerden birini diğerinden tercih edeyim? Sunucu arızalarındaki insanlar bu sorunu nasıl ele alıyor?

Yanıtlar:


53

IIRC, DenyHosts sadece SSH servisinizi izleyecektir. Diğer hizmetleri de korumanız gerekiyorsa, Fail2ban kesinlikle daha iyi bir seçimdir. Konfigürasyonunu değiştirmek istemeniz durumunda hemen hemen her hizmeti izlemek için yapılandırılabilir, ancak Fail2ban'ın yeni sürümleri pek çok popüler sunucu servisine uygun kurallar içerdiği için gerekli olmamalıdır. Fail2ban'ı basit bir iptables rate limitinin üzerinde kullanmak, bir saldırganı sunucunuzu ne kadar hızlı çekiçleyebileceğini azaltmak yerine, belirli bir süre boyunca tamamen engelleme avantajına sahiptir. Bir çok üretim sunucusunda büyük sonuçları olan fail2ban'ı kullandım ve kullanmaya başladığımdan beri kaba kuvvet saldırısı nedeniyle bu sunuculardan birini hiç görmedim.


3
DenyHosts'un diğer servisleri engelleyeceğini unutmayın; temel fark fail2ban'ın iptables kullanmasıdır, DenyHosts ise hosts.deny'yi kullanır, bazı hizmetler Apache gibi host dosyalarına bakmaz.
jammypeach

Başka bir seçeneği masaya atmak için, yakın zamanda ufw firewall yapılandırıcısının herhangi bir TCP veya UDP bağlantı noktasına (yapılandırılamayan) bir hız limiti uygulamanıza izin verdiğini keşfettim. Zaten UFW kullanıyorsanız, ek bir arka plan programı yapılandırmak ve çalıştırmak yerine, bu iyi bir seçenek olabilir.
spiffytech

Bruteforce ihlallerini önlemek için yapılacak ilk şey, oldukça güçlü bir parola kullanmaktır (hatta parola kimlik doğrulamasını tamamen devre dışı bırakmak :). Oranı sınırlama (yalnız) bunun için zayıf. Alternatifleri denemedim ama fail2ban'ı kendim kullandım ve şifre arama botlarını engellemek için oldukça kullanışlı buldum.
Petr Gladkikh

Deneyimlerime göre, fail2ban aslında her şeyi yapmak için biraz daha fazla çalışmaya ihtiyaç duyuyor. Bunun aksine, denyhosts RPM'yi hemen hemen yükleyebilir ve daha karmaşık seçenekler üzerinde çalışırken sunucunuzu korumak için başlatabilirsiniz. Kesinlikle fail2ban'ın 'daha iyi' olduğuna katılıyorum, ancak kolay korunma için inkarcıları yenemezsin.
Ralph Bolton

21

kaba kuvvet oturum açmalarını önlemenin en iyi yolu?

İlk başta makinenize girmelerine izin vermeyin! Kaba kuvvet denemelerini ev sahibinize ulaşmadan önce, hatta SSH seviyesinden durdurmanın birçok yolu vardır.

İşletim Sisteminizi fail2ban gibi bir şeyle korumak harika bir fikir. Fail2ban, aynı alanda oynamalarına rağmen DenyHosts'tan biraz farklıdır. Fail2ban iptables kullanır.

http://en.wikipedia.org/wiki/Fail2ban

Fail2ban, DenyHosts'a benzer ... ancak SSH'ye odaklanan DenyHosts'tan farklı olarak, fail2ban, oturum açma girişimlerini bir günlük dosyasına yazan herhangi bir hizmeti izlemek ve yalnızca IP adreslerini / ana bilgisayarlarını engellemek için /etc/hosts.deny kullanmak yerine yapılandırılabilir. fail2ban Netfilter / iptables ve TCP Wrappers /etc/hosts.deny komutunu kullanabilir.

Kaba kuvvet girişlerinin engellenmesine yardımcı olmak için göz önünde bulundurmanız gereken bazı önemli güvenlik teknikleri vardır:

SSH:

  • Root'un giriş yapmasına izin verme
  • Ssh şifrelerine izin verme (özel anahtar kimlik doğrulaması kullan)
  • Her arayüzde dinleme
  • SSH için talep ettiğiniz hizmetten farklı olan (örn. Eth0) bir ağ arayüzü oluşturun (örn. Eth1)
  • Yaygın kullanıcı adlarını kullanma
  • Bir izin listesi kullanın ve yalnızca SSH Erişimi gerektiren kullanıcıların izin ver
  • İnternet Erişimi gerekiyorsa ... Erişimi sınırlı bir IP grubuyla sınırlandırın. Bir statik IP idealdir, ancak onu xx0.0 / 16'ya kilitlemek 0.0.0.0/0'tan daha iyidir
  • Mümkünse İnternet Erişimi olmadan bağlanmanın bir yolunu bulursanız, SSH için tüm internet trafiğini reddedebilirsiniz (örneğin, AWS ile İnterneti atlayan doğrudan bir bağlantı elde edebilirsiniz, buna Doğrudan Bağlantı)
  • Herhangi bir kaba kuvvet saldırılarını yakalamak için fail2ban gibi bir yazılım kullanın
  • İşletim sisteminin her zaman, özellikle de güvenlik ve ssh paketlerinin güncel olduğundan emin olun

Uygulama:

  • Uygulamanızın her zaman güncel olduğundan emin olun, özellikle de güvenlik paketleri
  • Uygulamanızın 'yönetici' sayfalarını kilitleyin. Yukarıdaki tavsiyelerin çoğu uygulamanızın yönetici alanı için de geçerlidir.
  • Parola Yönetici alanınızı koruyun; web konsolu için htpasswd gibi bir uygulama, tüm temel uygulama açıklarını yansıtır ve giriş için ekstra bir engel oluşturur
  • Dosya izinlerini kilitleyin. 'Klasörleri yükle', her türden kötü şeyin giriş noktaları olarak bilinir.
  • Uygulamanızı özel bir ağın arkasına koymayı ve yalnızca ön uç yük dengeleyicinizi ve bir atlama kutusunu göstermeyi düşünün (bu, VPC kullanan AWS’de tipik bir kurulumdur)

1
"Kaba kuvvet girişimlerini ev sahibinize ulaşmadan önce, hatta SSH seviyesinde bile durdurmanın bir çok yolu var" ifadesini açıklayabilir misiniz? Dış ağ üzerinde kontrol sahibi olmadığınız barındırılan makineler için herhangi bir öneriniz varsa özellikle ilgileniyorum. Teşekkürler!
Kevin Keane,

7

Aynı IP adresinden yeni bağlantıları derecelendirmek için iptables kurallarını kullanıyorum (çoğunlukla SSH, ancak FTP için de iyi sonuç verir). Gördüğüm gibi, "fail2ban" ve benzeri diğer araçlara göre iptables yolunun tamamen çekirdek modunda gerçekleşmesi ve günlük dosyalarını kuyruklamak / ayrıştırmak için herhangi bir kullanıcı modu aracına güvenmemesidir.

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

Bunu yapabiliyorsanız, söz konusu protokollere erişebilecek kaynak adreslerini sınırlandırmak da elbette yardımcı olacaktır.

SSH ile gerçekten sertifika kimlik doğrulaması kullanıyor olmalısınız ve şifreleri yine de kabul etmemelisiniz.


@ mc0e - Takip etmiyorum.
Evan Anderson

7

SSH'NİN KORUNMASI İÇİN BÜYÜK BİR YOL, (bunu on yıl ya da daha iyi bir süredir kullandım) son kitaplıkları yerel olarak iptables'ta kullanmak (dağıtımınıza bağlı olarak) kullanmaktır.
Temelde iptables içine yerleştirilmiş olan bu port vurmak olarak kullanılabilir. Bu size çok fazla baş ağrısı kazandıracaktır. Tcp connect yapabildiğiniz sürece (telnet bir yoludur. Ben de ssh istemcileri kullandım ve onları limana işaret ettim. Belirtilen bir port numarasına tcp bağlantısı yapacak olan herhangi bir şey. Sana Macun! ssh bağlantısını başlatan müşteri bunu kullanabilirsiniz.

Aşağıda, ana bilgisayardan 4103 numaralı bağlantı noktasındaki sunucuya telnet yaptığınızda iptables'ın 22 numaralı bağlantı noktasını ana sunucunuza açacağını gösteren bir örnektir. Daha sonra, açılışını kapatmak için 4102 veya 4104 numaralı bağlantı noktasına bir telnet kullanabilirsiniz. Hem 4102 hem de 4104'ün nedeni basit bir tcp taramasının 22 numaralı açılıştan uzak tutulmasıdır. Yalnızca bir tcp bağlantısı (telnet) bağlantı noktası 4103'e izin verir.

Keyfini çıkarın!

Oh ve ben Fail2Ban'ı tercih ediyorum. Daha fazla esneklik ve yasağın tcpwrappers yerine iptables'da gerçekleşmesini seviyorum.

SSH PORTKNOCKING

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --rcheck --name SSH -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4102 -m recent --name SSH --remove -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4103 -m recent --name SSH --set -j DROP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 4104 -m recent --name SSH --remove -j DROP

6

Fail2ban ve Denyhosts arasındaki diğer bir fark, Denyhosts'in blok listesini diğer Denyhosts kullanıcıları ile paylaşabilmesidir. Fail2ban ile, sadece sunucunuzun daha önce gördüğü IP'leri engelleyebilirsiniz - Denyhosts ile, başkaları görmüşse kaba kuvvet denemesi hiçbir zaman sunucunuza bile ulaşamaz ve saldırgandan önce sunucunuza indirilir. bilgisayarınıza alır.

Diğer bir fark ise, Fail2ban'ın iptables kullanırken Denyhosts'da tcpwrappers kullanmasıdır. Diğerleri bu farktan önce bahsetti, ancak bahsetmeye değer birkaç not var.

iptables, kaç tane IP adresini verimli bir şekilde engelleyebileceğiniz konusunda sınırlıdır. Muhtemelen Fail2ban'ın blok listeleri paylaşma mekanizması bulunmamasının sebeplerinden biri budur.

Başka bir etki iptables nftables ile değiştirildiğinde, Fail2ban'ın muhtemelen çalışmayı durduracağı ya da yeniden yazılması gerektiğidir. Denyhosts muhtemelen çalışmaya devam edecek.

Dolayısıyla, her ikisinin de avantajları ve sakıncaları vardır. İkisini de severim; kendim için Denyhosts kullanıyorum çünkü genellikle sadece SSH'yi korumak istiyorum ve blok listesini paylaşmayı seviyorum.


5

Fail2Ban hakkında dikkat edilmesi gereken bir şey, DenyHosts'a göre yaklaşık 10 MB daha fazla bellek kullandığı görünüyor. Eğer 128 MB'lık bir VPS kullanıyorsanız, buna bakmak isteyebilirsiniz. Ayrıca, yalnızca başarısız fail2ban yalnızca SSH üzerine kuruludur, yani yapılandırmada değişiklik yapmadan anlamına gelir - DenyHosts aynı şeyi daha az bellekte yapar.


2
"Ulimit-s 256" komutunu / etc / default / fail2ban dosyasına eklemeyi deneyin. Sistemimde 10 MB düşürdüm.
pkoch

3

denyhosts ssh içindir. fail2ban daha kapsamlı (HTTP, FTP vb.). Her ikisi de sahne arkasında iptables kullanır.


Hem "denyhosts" hem de "fail2ban", "engelleme" davranışlarını gerçekleştirmek için iptables kullanırlar, ancak oran sınırlaması için iptables kullanmazlar. Günlükleri "kullanıcı ülkesi" nde ayrıştırırlar ve günlük girişlerine göre hareket ederler.
Evan Anderson,

10
@Evan, denyhosts iptables kullanmaz (varsayılan olarak). TCP sarmalayıcıları kullanır ve bir sistem yasaklandığında /etc/hosts.deny dosyasını günceller.
Zoredache

@Zoredache: Düzeltilmiş duruyorum. Enver daha önce "denyhosts" kullanmış, "engelleme" işlevini nasıl çağırdığı konusunda yanlış bir varsayımda bulundum. Yine de, bir kullanıcının log ayrıştırma / reaksiyon aracı olması, "denyhosts" için kesinlikle iptables tabanlı bir çözüm kullanmayı tercih ederim.
Evan Anderson

1

Sıkıcı iptables veya fail2ban config ile uğraşmak yerine, neden açık topluluk sizin için tüm işleri yapmıyor ve bunun yerine CSF / LFD kullanıyor? Belirtilen diğer seçeneklerin üzerinde kesinlikle tavsiye ederim. Sunucularınız için neler yapabileceğini görmek için http://configserver.com/cp/csf.html adresine bakın . CSF bir kontrol paneline ihtiyaç duymaz, kabuktan yapmak istemeyenlere basit bir kullanıcı arayüzü sunar. Ve bir çok kararlı, güvenilir yerleşik olmayan perl betiğidir.


8
Bu daha çok bir reklam gibi geliyor ve asıl soru üzerine parlıyor.
Drew Khoury

Hayır, asıl soruya değinmedim. Kendini bu soruyla rahatsız etmene engel olacak bir alternatif verdim. Cidden, CSF / LFD sadece başka bir güvenlik duvarı kontrol sistemi değildir, tam da burada ortaya çıkan sorunlardan doğmuştur. Neden biri evrimleşmek istemiyor? Size zaman kazandırır, çünkü diğerleri çoktan çözmüştür. Bu yüzden CSF var.
Ben

Ne kadar değerliyse, zamanımın kazanma kabiliyetine değer veren biri olarak, eğer fiyat doğruysa, birkaç dolara mal olsa bile, bu tarz bir şeye "tak ve kullan" çözümünü tercih ederim. Bu şekilde gerçekten umursamadığım şeyleri öğrenmekle zaman harcamak zorunda kalmıyorum, fakat korumanın önemini kabul ediyorum.
David,

1

fail2ban, başarılı bir ssh girişini tanımak ve hata sayısını sıfırlamak için bir mekanizmaya sahip görünmüyor.

Sshd için standart filtre (en azından debian kurulumumda), istemcinin sunucunun reddettiği her ssh anahtarı için bir başarısızlık sayımını hızlandırır. Bazı kullanıcılar her oturum açmada birçok anahtar sunar ve birkaç anahtar geçtikten sonra girişleri başarılı olmasına rağmen düzenli olarak kilitlenirler.

Yukarıdakilerin bir sonucu olarak, şu anda fail2ban'dan uzaklaşmayı düşünüyorum. Bu bakımdan en azından, inkarcıların daha iyi. Bununla birlikte, görünüşe göre artık iyi bir seçenek değil ve artık debian'ın daha yeni versiyonlarında desteklenmiyor ( https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for- debian / )

Burada iyi bir çözümüm yok.


LDAP kimlik doğrulaması kullanıyorsanız benzer bir sorun var. Çok fazla başarılı giriş yapmak kilitli kalmanıza neden olur: bugs.launchpad.net/ubuntu/+source/libpam-ldap/+bug/562388
Mike

Tüm anahtarların sunulmasını önlemek için, kullanıcılarınıza ~ / .ssh / config dosyasında kullanılacak anahtarı nasıl belirteceklerini gösterin.
BillThor

0

Aslında, denyHost’un sshd servisinin yanı sıra diğer birçok servisi de önleyebileceğini düşünüyorum. Configure dosyasında - /etc/denyhosts.confsöylenen bazı kod satırları var:

# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY
#
# man 5 hosts_access for details
#
# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1
#
# To block all services for the offending host:  
BLOCK_SERVICE = ALL
# To block only sshd:
# BLOCK_SERVICE  = sshd

BLOCK_SERVICEDeğişkenleri ALLyukarıdaki gibi ayarladıysak ssh hizmetimizi izleyebiliriz.


0

Denyhosts sürüm 3.0: Her IP adresi bir günlük dosyasında göründüğünde, Denyhosts hosts.deny dosyasını açar ve adresle eşleşmesi için her şeyi okur. Her zaman. Hafızada hiçbir şey önbelleğe alınmaz. Çok büyük bir hosts.deny dosyanız varsa ve birçok sondaya (birçok günlük dosyası girişi) maruz kalırsanız, Denyhosts görünen her IP adresi için hosts.deny dosyasını okuyan ve tekrar okuyan bir CPU hog'u haline gelir. İyi değil.

İptables desteğini etkinleştirirseniz, Denyhosts engellenmiş, IP adreslerinin yavaş, yavaş bir listesini oluşturacaktır. Denyhosts, verimli IP haritaları oluşturmak için ipset veya nftables kullanmaz.

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.