Zapobieganie brutalnym atakom na ssh?

49

Jakiego narzędzia lub techniki używasz, aby zapobiec atakom siłowym na twój port ssh. Zauważyłem w moich dziennikach bezpieczeństwa, że ​​mam miliony prób zalogowania się za pomocą ssh jako różni użytkownicy.

To jest na pudełku FreeBSD, ale wyobrażam sobie, że miałoby to zastosowanie wszędzie.

smucić
źródło

Odpowiedzi:

25

Oto dobry post na ten temat autorstwa Rainera Wichmanna.

Wyjaśnia zalety i wady tych metod, aby to zrobić:

  • Silne hasła
  • Uwierzytelnianie RSA
  • Użycie „iptables” do zablokowania ataku
  • Używanie dziennika sshd do blokowania ataków
  • Używanie tcp_wrappers do blokowania ataków
  • Pukanie do portu
paulgreg
źródło
39

Używam fail2ban, który zablokuje IP po kilku nieudanych próbach przez konfigurowalny okres czasu.

Połącz to z testowaniem siły hasła (używając Johna (Rozpruwacza)), aby upewnić się, że ataki siłowe nie powiodą się.

Brent
źródło
4
Fail2ban jest doskonały. Łatwo było go rozszerzyć o monitorowanie / var / log / maillog i zakazać uporczywym spamerom dostępu do mojego serwera pocztowego
Dave Cheney
Fail2ban można łączyć z łańcuchem iptables, który wysyła ruch tcp do TARPITcelu, jeśli czujesz się źle (z xtables-addons).
Tobu,
24

Jedyną rzeczą, którą możesz zrobić, to użyć czegoś takiego jak DenyHosts:

http://denyhosts.sourceforge.net/

Wykorzystuje wbudowane hosts.allow / hosts.deny do blokowania nadużyć SSH.

hernan43
źródło
16
  • Zmień używany port (jak wspomniano w Trydencie )
  • Wymagaj kluczy szyfrowania zamiast haseł. http://novosial.org/openssh/publickey-auth/
  • IPS atakujący z czarnej listy
  • Dodaj znanych użytkowników do białej listy, aby zapobiec przypadkowej czarnej liście. (jak wspomniała Samiuela)
Chris Ballance
źródło
15

Jednym z najprostszych sposobów uniknięcia tych ataków jest zmiana portu, na którym nasłuchuje sshd

trent
źródło
1
Jeśli, oczywiście, twój system może to znieść.
C. Ross
13
Bezpieczeństwo dzięki niejasności, skuteczne za każdym razem.
Chris Ballance
1
Nie miałbym nic przeciwko zmienianiu portu tak bardzo, ale dowiedziałem się, że większość zapór ogniowych (innych niż moje) ma tendencję do blokowania wszystkich portów innych niż zwykłe (80,22, 443 itd.). Jeśli jestem za tymi zaporami ogniowymi, nie mogę dostać się do mojego serwera domowego na tym niestandardowym porcie. Dla mnie nie ma mowy.
zasmucają
@grieve to zmienić naszą zaporę ogniową, aby wypuścić ten port?
Rory
@ Roy Mówię o zaporach ogniowych innych niż te, które posiadam. Na przykład, jeśli chcę ssh na moją maszynę domową ze Starbucks, ich zapora blokuje port wychodzący. Nie mogę tego zmienić. (Jako przykład użyłem Starbucks. Nie mam pojęcia, które porty faktycznie blokują, czy nie).
zasmucają
12

Jak podkreśla Chris, używaj kluczy szyfrujących zamiast haseł.

Dodaj do tego:

  • w miarę możliwości użyj białej listy.

Ile osób lub lokalizacji (z ruchomymi publicznymi adresami IP) naprawdę potrzebujesz dostępu do swoich publicznych połączeń ssh?

W zależności od liczby utrzymywanych publicznych hostów ssh i od tego, czy można zawęzić ogólne kryteria połączenia, może być prostsza konfigurowalna konfiguracja, aby ograniczyć dostęp do kilku hostów zewnętrznych.

Jeśli to działa, może naprawdę uprościć narzuty administracyjne.

samt
źródło
2
Umieszczenie na białej liście jest niezwykle ważne, jeśli wykonujesz jakąkolwiek czarną listę, chyba że chcesz zostać zablokowany.
Ryaner
2
+1 za proaktywne dodawanie do białej listy.
Chris Ballance
3
+1 za uzyskanie absolutnie najlepszej odpowiedzi. Te dwie rzeczy są jedynymi rozsądnymi krokami i są rzeczywiście bardzo skuteczne. Każdy z nich jest wart zachodu, a oba razem bardziej. Wygwizdać się na inne odpowiedzi opowiadające się za bezpieczeństwem przez niejasność!
dwc
11

Oprócz innych dobrych sugestii, jedną naprawdę łatwą rzeczą jest ograniczenie połączeń przychodzących. Ogranicz do 3 połączeń na minutę na IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Sherbang
źródło
Być może coś nie rozumiem, ale wiele popularnych przeglądarek łączy 4-6 połączeń naraz - mimo że standard HTTP ustawia to na 2
Joshua Enfield
1
Tak, byłby to problem, gdybyś próbował ograniczyć port 80. Nie łączysz się z ssh za pomocą przeglądarki internetowej, a sesje ssh to sesje długotrwałe, które utrzymują stan, a nie krótkotrwałe sesje bezstanowe, takie jak http. Takie równoległe sesje ssh nie mają sensu. To nie znaczy, że nie ma jakiegoś niszowego użycia ssh, które by to zepsuło, ale jest to rzadkie.
sherbang
To rozwiązanie nie jest tak dobre, jeśli podobnie jak ja służysz Subversion przez ssh. Pojedyncze zapytanie SVN może szybko nawiązać dużą liczbę połączeń. Jeśli zapewniasz tę usługę, możesz użyć drugiej usługi sshd na innym porcie lub białej listy znanych adresów IP. Zastanawiam się nad użyciem fail2ban lub sshdfilter do łapania oczywistych ataków za pierwszym razem, bez karania moich legalnych użytkowników.
paddy
dobrze wiedzieć też o tej opcji ...
ZEE
6

Użyj opcji „AllowUsers” w sshd_config, aby mieć pewność, że tylko niewielka grupa użytkowników może się w ogóle zalogować. Wszystkie pozostałe zostaną odrzucone, nawet jeśli ich nazwa użytkownika i hasło są prawidłowe.

Można nawet ograniczyć dostęp użytkowników do logowania z danego hosta.

na przykład,

AllowUsers user1 [email protected]

Spowoduje to zmniejszenie przestrzeni wyszukiwania i uniknie tych starych użytkowników, którzy przypadkowo zostali pozostawieni lub zostali włączeni (chociaż ci i tak powinni zostać wyłączeni, jest to łatwy sposób, aby powstrzymać ich przed wykorzystywaniem do wpisu opartego na SSH).

To nie całkowicie powstrzymuje ataki brutalnej siły, ale pomaga zmniejszyć ryzyko.

David Gardner
źródło
3

Użyj czegoś takiego z PF:

tabela <ssh-brute>
trwa blok w szybkim dzienniku z etykiety ssh_brute
przekazać proto $ ext_if proto tcp do ($ ext_if) port ssh modulować stan \
(max-src-conn-rate 3/10, przeciążenie globalne)


źródło
2

Pukanie portów jest dość solidnym sposobem na uniknięcie tego rodzaju problemów. Nieco skrzypiące, czasem irytujące, ale zdecydowanie to rozwiązuje problem.

Łukasz
źródło
Próbowałem tego i użytkownicy uważają to za irytujące. Jeśli jest to tylko jedna lub dwie osoby, może to być dobra opcja i prawie wyeliminuje ataki siłowe
Brent
2

Kontekst jest ważny, ale poleciłbym coś takiego:

  • Ponieważ korzystasz z FreeBSD, rozważ uruchomienie zapory ogniowej PF i skorzystanie z jej funkcji ograniczających szybkość stałego połączenia. Umożliwi to wysyłanie brutalnych siłowników na czarną listę, jeśli często się łączą
  • Jeśli do tego pola trzeba uzyskać dostęp ze świata zewnętrznego, rozważ użycie reguły rdr PF, aby nie zezwalać na ruch do portu 22, ale przekierować do niego jakiś niejasny port. Oznacza to, że musisz połączyć się z portem 9122 zamiast 22. Jest to niejasne, ale nie pozwala na dostęp do kołatek
  • rozważ przejście tylko na uwierzytelnianie oparte na kluczach, dzięki czemu ataki słownikowe będą bezużyteczne
Michael Gorsuch
źródło
2

Oprócz sugestii ograniczającej szybkość Sherbanga ważna jest długość opóźnienia. Zwiększając opóźnienie między grupami 3 prób logowania z 2 minut do 20 minut, liczba różnych adresów IP, które spowodowały więcej niż trzy próby logowania, spadła, porównując dwa tygodniowe okresy na jednym komputerze, z 44 prób do 3 Żaden z tych trzech adresów nie próbował przez dłużej niż 11 godzin.

Bardzo niepotwierdzona, ale auth.log stał się dla mnie o wiele bardziej czytelny ...

Charles Stewart
źródło
1

Po prostu mnie to nie obchodzi. Pozwólcie im odpłynąć do portu, nie będą brutalnie naciskać klucza.

womble
źródło
-1 Czy słyszałeś kiedyś o atakach DoS?
Chris Ballance
8
Tak, ponieważ SSH jest jedyną usługą podatną na ataki siłowe. Jeśli masz port otwarty do Internetu, można go użyć do wbicia maszyny w zapomnienie. Prawdopodobnie umieściłeś również swój serwer HTTP na dziwnych portach i za pukaniem portów, aby „uniknąć ataków DoS” ...
womble
1

zainstaluj OSSEC. nie tylko monitoruje powtarzające się logowanie, ale również wprowadzi tymczasowy blok z iptables dla niepoprawnego adresu IP. A na koniec wyśle ​​ci raport z podaniem szczegółów. rejestruje wszystko, co jest miłe. Ktoś kiedyś próbował ponad 8000 nazw logowania, aby się zalogować. przeanalizowałem dzienniki i nie znalazłem fajnej listy użytkowników;)

Marcin
źródło