SSH / SSHD - Jak ustawić maksymalną liczbę prób logowania?

17

Jaki jest najłatwiejszy sposób ustawienia maksymalnej liczby prób logowania w środowisku LAMP (sshd instalowany przez yum)? Czy istnieje pakiet lub prosta reguła zapory?

John Himmelman
źródło
@Hyppy Dzięki, próbowałem szukać, ale niestety jest wiele źle nazwanych pytań / wątków.
John Himmelman

Odpowiedzi:

11

Używam Fail2ban ; W przeszłości korzystałem z Denyhosts i również działa całkiem dobrze. Teraz faworyzuję Fail2ban, ponieważ jest bardziej konfigurowalny i lepiej radzi sobie z monitorowaniem wielu różnych usług - na przykład jednocześnie sshd i strony logowania do aplikacji internetowej (pod warunkiem, że logujesz awarie).

Inną metodą, którą możesz rozważyć, jest implementacja reguły LIMIT w iptables; Niestety nie mogę ci w tym pomóc, chyba że chcesz zainstalować Shorewall , a następnie po prostu wskażę ci doskonałą dokumentację na tej stronie, w jaki sposób skonfigurować regułę LIMIT, aby, no cóż, ograniczyć zdolność kogoś do brutalnego działania - wymuś swój serwer.

Kromey
źródło
Powinienem dodać, że Fail2ban jest dostępny w repozytoriach wielu dystrybucji, więc jego instalacja jest bardzo prosta; Nie widziałem Denyhosts w żadnym, ale to nie znaczy, że nie ma go w żadnym, ani że nie został dodany od czasu ostatniego sprawdzenia.
Kromey
Mam problem z tym, że fail2ban v0.8.14 nie działał poprawnie z poleceniem iptables-multiport. Jest to znany problem z narzędziem fail2ban rozwiązanym w świeżych wersjach ... Oto opis: github.com/fail2ban/fail2ban/issues/798 Więc wierzę tylko w mechanizmy bezpieczeństwa opracowane w oprogramowanie serwera, ani narzędzia innych firm ...
George Gaál,
44

Nie lubię używać narzędzi stron trzecich. Dlatego użyłem kombinacji konfiguracji ssh i ustawień zapory. W przypadku następującego rozwiązania atakujący może wygenerować dokładnie 3 loginy błędów w ciągu 2 minut, w przeciwnym razie zostanie zablokowany na 120 sekund.

1) Dodaj następujący wiersz do /etc/ssh/sshd_config

MaxAuthTries 1

Umożliwi to tylko 1 próbę logowania na połączenie. Uruchom ponownie serwer ssh.

2) Dodaj następujące reguły zapory

Utwórz nowy łańcuch

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP

Zablokuj każdy adres IP na 120 sekund, co spowoduje ustanowienie więcej niż trzech połączeń w ciągu 120 sekund. W przypadku czwartej próby połączenia żądanie zostaje delegowane do SSHATTACKłańcucha, który jest odpowiedzialny za rejestrowanie możliwego ataku ssh i ostatecznie odrzuca żądanie.

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

3) Zobacz wpisy w dzienniku możliwych ataków ssh w /var/log/syslog

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
Nazywam się
źródło
2
Niesamowite! ale mam problem, jakiś facet / bot we Francji nie skonfigurował poprawnie swoich narzędzi hakerów, więc nadal się loguje, nawet pomimo spadku ruchu. W rezultacie moje dzienniki są co sekundę wypełniane danymi od tego faceta. Jakiś sposób na to?
Smarties89
2
Dla mniej doświadczonych ludzi takich jak ja: wiersze iptables są wpisywane po znaku zachęty, a nie gdzieś w pliku.
Andrew Swift,
4

Z SSH nie jest powiązany żaden konkretny pakiet do skonfigurowania tego. Możesz jednak zainstalować CSF, którym jest ConfigServer i Firewall.

CSF

W pliku zostaną wprowadzone dwie zmiany konfiguracji: / etc / ssh / sshd_config

Ogranicz maksymalną liczbę nieuwierzytelnionych połączeń obsługiwanych przez serwer ssh w tym samym czasie. Im jest to mniejsze, tym trudniej jest dzieciom skryptowym wykonywać równoległe, skoordynowane próby krakowania z wieloma połączeniami. edytuj sshd_config i zmień MaxStartups z domyślnej „10” na „3:50:10”. Wartości rozdzielone dwukropkiem nakazują serwerowi ssh, aby „zezwolił 3 użytkownikom na próbę zalogowania się w tym samym czasie oraz na losowe i coraz częstsze odrzucanie prób połączenia od 3 do maksymalnie 10”. Uwaga: należy to zwiększyć na serwerach, na których loguje się znaczna liczba ważnych użytkowników ssh.

  • Domyślnie : MaxStartups 10
  • MaxStartups 3:50:10

Skróć maksymalny dozwolony czas na pomyślne zalogowanie się przed rozłączeniem. Domyślnie 2 minuty to za dużo czasu, aby utrzymać otwartą nieuwierzytelnioną próbę połączenia (patrz wyżej); 30 sekund to więcej niż czas na zalogowanie się:

  • Domyślna : LoginGraceTime 2m
  • LoginGraceTime 30
Brendan
źródło
3

Korzystam z tych reguł IPTables do tego:

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 state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP

Pozwoli to tylko 4 pakietom TCP / SYN na port 22 z adresu IP w ciągu 5 minut. Jeśli podejmie więcej prób, drzwi zostaną zamknięte do końca 5 minut.

timkofu
źródło
Co wymagało edycji?
timkofu,
Niemal tak samo jak: -A INPUT -p tcp -m tcp --dport 22 -m limit --limit 48/hour -j ACCEPT.
Alix Axel,
Zrobiłem te dwie komendy iptables w Debian Jessie, ale nadal widzę próby logowania SSH co 2 sekundy z tego samego adresu IP. Jakieś pomysły?
Alexey Ozerov
1

istnieje opcja, którą możesz umieścić w pliku sshd_config dla serwera:

 MaxAuthTries
         Specifies the maximum number of authentication attempts permitted per
         connection.  Once the number of failures reaches half this value, additional 
         failures are logged.  The default is 6.
mdpc
źródło
Przydatne (szczególnie w połączeniu z innymi sugestiami, które już zostały wykonane), ale tak naprawdę nie rozwiązuje problemu samodzielnie, ponieważ jest to banalne dla kogoś, kto po prostu łączy się ponownie.
Kromey