Jak zatrzymać / zapobiec SSH bruteforce [zamknięte]

22

Jestem bardzo nowy w administrowaniu siecią, więc proszę pamiętać, że nie mam jeszcze takiego doświadczenia.

Mam serwer główny Ubuntu z panelem plesk.

Wczoraj zauważyliśmy z przyjaciółmi, że jakość mowy na naszym TS3 bardzo się pogorszyła. Wysłałem trochę pingów na serwer i nastąpiła bardzo duża utrata pakietów. Potem trochę googlowałem i odkryłem, że jest auth.log. Pobrałem go i przewróciłem trochę, a potem znalazłem:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Wygląda na to, że ktoś próbował zalogować się wielokrotnie przez SSH. Przewinąłem trochę i zobaczyłem, że ten ktoś próbuje użyć wielu różnych nazw użytkowników:student, tech, psi, news,...

Setki tych loginów zostały wyświetlone w pliku.

Sprawdziłem statystyki ruchu na stronie mojego centrum danych. To było tylko 17 MB na godzinę. Mam sieć szkieletową 100 Mb, więc sam transfer danych nie stanowi problemu.

W tej chwili nie mogę uzyskać dostępu do serwera w żaden sposób.

Moje pytanie brzmi: w jaki sposób mogę ponownie uzyskać dostęp, w jaki sposób mogę powstrzymać ten atak i zapobiec kolejnym atakom?


źródło
Wciąż uczę się moich rzeczy w tym dziale ... Ale czy nie byłoby to dobre zastosowanie do pukania portów?
mjrider

Odpowiedzi:

37

Jak uzyskać dostęp?

Nie jest jasne, dlaczego nie możesz uzyskać dostępu do swojego konta.

Jeśli twój komputer jest atakowany lub jest obciążony, powinieneś porozmawiać z dostawcą o ograniczeniu dostępu (Ograniczenia IP) lub przełączeniu serwera w tryb offline (rozłącz się z Internetem).

Możesz także wymagać dostępu poza pasmem, z którym twój dostawca może być w stanie pomóc.

Jeśli ktoś naruszył bezpieczeństwo Twojego serwera, być może trzeba będzie przywrócić dane z kopii zapasowych lub użyć obrazu odzyskiwania.

Jak zapobiegać atakom na serwer, w szczególności SSH

najlepszy sposób, aby zapobiec brutalnym logowaniom?

Nie pozwól im dostać się na twoją maszynę! Istnieje wiele sposobów na powstrzymanie prób użycia siły, zanim dotrą do twojego hosta, a nawet na poziomie SSH.

To powiedziawszy, ochrona systemu operacyjnego czymś w rodzaju fail2ban to świetny pomysł. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban jest podobny do DenyHosts ... ale w przeciwieństwie do DenyHosts, który koncentruje się na SSH, fail2ban można skonfigurować do monitorowania dowolnej usługi, która zapisuje próby logowania do pliku dziennika, i zamiast używać /etc/hosts.deny tylko do blokowania adresów IP / hostów , fail2ban może korzystać z Netfilter / iptables i TCP Wrappers /etc/hosts.deny.

Istnieje wiele ważnych technik bezpieczeństwa, które należy wziąć pod uwagę, aby zapobiec logowaniu przy użyciu siły brute:

SSH:

  • Nie zezwalaj rootowi na logowanie
  • Nie zezwalaj na hasła ssh (użyj uwierzytelniania kluczem prywatnym)
  • Nie słuchaj na każdym interfejsie
  • Utwórz interfejs sieciowy dla SSH (np. Eth1), który różni się od interfejsu, z którego obsługujesz żądania (np. Eth0)
  • Nie używaj wspólnych nazw użytkowników
  • Użyj listy dozwolonych i zezwalaj tylko użytkownikom wymagającym dostępu SSH
  • Jeśli potrzebujesz dostępu do Internetu ... Ogranicz dostęp do skończonego zestawu adresów IP. Jeden statyczny adres IP jest idealny, jednak zablokowanie go do xx0,0 / 16 jest lepsze niż 0,0,0,0/0
  • Jeśli to możliwe, znajdź sposób połączenia bez dostępu do Internetu, w ten sposób możesz zablokować cały ruch internetowy dla SSH (np. Dzięki AWS możesz uzyskać bezpośrednie połączenie, które omija Internet, nazywa się to Direct Connect)
  • Użyj oprogramowania, takiego jak fail2ban, aby złapać wszelkie ataki siłowe
  • Upewnij się, że system operacyjny jest zawsze aktualny, w szczególności pakiety bezpieczeństwa i ssh

Podanie:

  • Upewnij się, że Twoja aplikacja jest zawsze aktualna, w szczególności pakiety bezpieczeństwa
  • Zablokuj strony administratora aplikacji. Wiele powyższych porad dotyczy również obszaru administracyjnego Twojej aplikacji.
  • Hasło Chroń swój obszar administracyjny, coś takiego jak htpasswd dla konsoli internetowej spowoduje wyświetlenie wszelkich luk w zabezpieczeniach aplikacji i stworzy dodatkową barierę wejścia
  • Zablokuj uprawnienia do plików. „Prześlij foldery” są znane z tego, że są punktami wejścia różnego rodzaju nieprzyjemnych rzeczy.
  • Rozważ umieszczenie aplikacji za siecią prywatną i odsłanianie tylko modułu równoważenia obciążenia frontonu i skoczka (jest to typowa konfiguracja w AWS przy użyciu VPC)
Drew Khoury
źródło
1
Zainstalowałem Fail2ban za pośrednictwem help.ubuntu.com/community/Fail2ban Wygląda na to, że jest bardzo wydajny i przyjazny dla użytkownika (powiadomienia pocztą, ...)
Otrzymałem wiadomość z mojego centrum danych: nastąpił atak powodziowy (co to jest?), Co spowodowało, że połączenie było bardzo złe dla wielu serwerów. Szczególnie nie był to atak na mój serwer.
1
Ciekawy. Wygląda więc na to, że moje centrum danych było celem ataku. Ale wiedza o tym, że zostałam okrutna, jest bardzo dobra. Fail2ban jest naprawdę dobrym narzędziem. Przeczytam o Iptables i SSH Config przez następne dni i postaram się uczynić to znacznie bezpieczniejszym.
3
Skonfiguruj openssh, aby nasłuchiwał na porcie innym niż 22, i skonfiguruj iptables, aby upuszczał wszystko przychodzące do portu 22. Jeśli nie spodziewasz się, że będziesz ssh z innego kraju niż kraj ojczysty, utwórz listę bloków na countryipblocks.net/country_selection. php i używaj go z iptables.
ThoriumBR
4

jak mogę powstrzymać ten atak i zapobiec kolejnym atakom

Zwykle zmieniam domyślny port ssh z 22 na inny, np. 1122. Zapobiega to wielu automatycznym atakom z bota, ale proste skanowanie portu może go wykryć. Tak czy inaczej:

vi /etc/ssh/sshd_config

i edytuj Port 22 do Port 1122 , ale to nie wystarczy.

Automatyczne reguły IPTables dotyczące brutalnej siły

zamiast tego używam log2iptables https://github.com/theMiddleBlue/log2iptables zamiast Fail2ban, ponieważ jest to prosty skrypt Bash, który analizuje dowolny plik dziennika za pomocą wyrażenia regularnego i wykonuje iptables. Na przykład, gdy wystąpi 5 dopasowań, log2iptables upuszcza określony adres IP. To fajne, ponieważ użyj Telegram API i może wysłać mi wiadomość na mój telefon, gdy znajdzie problem :)

mam nadzieję, że to pomoże!

środek
źródło
8
Zgaduję z korelacji między adresem URL projektu a uchwytem SF, że jesteś zaangażowany w ten projekt. Proszę zobaczyć nasze wytyczne na przedstawieniu własnych produktów, w szczególności zwracając uwagę na wymóg, że „ Państwo musi ujawnić swoją przynależność w swoich odpowiedziach ”.
MadHatter obsługuje Monikę
1

Właśnie to zmontowałem, uruchamiam co 15 minut jako cronjob itp:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done
znak
źródło
0

To jest moje alternatywne rozwiązanie dla ataków SSH. Chodzi o to, aby nadal zamykać demona SSH, jeśli nie jest używany. Brak otwartego portu, brak ataku. Możesz tego spróbować. Jest to open source https://github.com/indy99/nnet_port_guard

indy99
źródło
1
Witaj w Server Fault! Twoja odpowiedź sugeruje, że praktyczne pytanie jest dostępne na innej stronie internetowej. Rodzina stosów pytań i odpowiedzi Stack Exchange generalnie marszczy brwi w odpowiedzi na tego typu odpowiedzi, ponieważ inne strony internetowe mogą się przenosić, usuwać lub zmieniać. Proszę przeczytać Jak napisać dobrą odpowiedź? i zastanów się nad poprawieniem swojej odpowiedzi, aby uwzględnić kroki wymagane do rozwiązania problemu. I nie zapomnij wybrać się na wycieczkę .
Paul,
0

Zautomatyzowane rozwiązanie dla Centos / RHEL w celu zablokowania złych aktorów

Oto skrypt dla Centos, aby sprawdzić, czy ssh nie powiodło się logowanie dla niepoprawnych kont użytkowników i złe hasła dla prawidłowych kont. Jeśli źródłowy adres IP uderzył nas więcej niż 3 razy i nie znajduje się już na liście odmów, zostaje dodany do listy odmów. Uruchamiam to co 15 minut z crontab roota. Nie zezwalam także na logowanie do roota przez ssh, więc kombinacja sprawia, że ​​wszystko jest dość ciche.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done
David Lash
źródło
1
Spójrz, fail2banktóry robi to samo i jest testowany w walce.
Patrick Mevzek,