Istnieją różne rozwiązania. Najlepszym z nich jest uwierzytelnianie RSA, które używa kluczy publicznych / prywatnych do uwierzytelniania użytkowników.
Sprawdź ten świetny podręcznik dla różnych podejść (w tym uwierzytelnianie RSA): http://www.la-samhna.de/library/brutessh.html
Korzystam z trzeciego rozwiązania na moim serwerze, ponieważ nie chcę komplikować moich nietechnicznych użytkowników: iptables
ograniczenie liczby połączeń na minutę powoduje, że ataki bruteforce są nieefektywne i nieefektywne.
Oto rozwiązanie, którego używam:
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
Jak wspomniano tutaj : pozwoli to na trzy połączenia portu 22 z dowolnego adresu IP w ciągu 60 sekund i nie będzie wymagać 60 sekund kolejnych prób połączenia, zanim wznowi zezwalanie na połączenia. Opcja --rttl bierze również pod uwagę TTL datagramu podczas dopasowywania pakietów, aby starać się złagodzić fałszywe adresy źródłowe.
Jak wspomniano we wspomnianym przewodniku, lepiej jest użyć białej listy, aby oddzielić zaufanych użytkowników od następujących zasad:
iptables -N SSH_WHITELIST
następnie dodaj zaufane hosty:
iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT
a następnie ustal zasady:
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
Dostaję ataki ssh typu brute-force na moje serwery z częstością 1 do 2 dziennie. Zainstalowałem denyhosts (pakiet ubuntu: denyhosts). Jest to bardzo proste, ale skuteczne narzędzie do tego celu: w zasadzie okresowo skanuje dzienniki w celu wykrycia ataków siłowych i umieszcza adresy IP, z których pochodzą te ataki, w pliku /etc/hosts.deny. Nie będziesz od nich więcej słyszeć, a twoje obciążenie powinno zostać znacznie zmniejszone. Jest bardzo konfigurowalny za pomocą pliku konfiguracyjnego /etc/denyhosts.conf w celu dostrojenia problemów, takich jak liczba błędnych prób stanowiących atak itp.
Ze względu na przejrzyste działanie możesz łatwo zobaczyć, co się dzieje (powiadomienie e-mail: „aha, kolejny złośliwy atak udaremniony!”) I cofnąć błędy, ponieważ użytkownicy wielokrotnie błędnie wpisują swoje hasła.
Oczywiście wszystko, co poprzednio mówiono o przejściu na inne metody uwierzytelniania, jest ważne, ale czasami twoje wymagania nie zgadzają się z wymaganiami użytkowników.
Również ograniczenie szybkości nowych połączeń w iptables może być lepszym wyborem niż odmowa dostępu przez hosts.deny. Więc spójrz również na fail2ban. Ale jeśli wiesz, że Twoim głównym zmartwieniem jest ssh brute-force (ręcznie przejrzyj /var/log/auth.log, aby to ustalić), skorzystaj z tego bardzo łatwego i niewielkiego narzędzia.
źródło
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=root
wskazuje na atak?knockd
do wdrażania systemu pukania portówrecent
ihashlimit
dopasowań, aby ograniczyć kolejne próby SSHźródło
Przede wszystkim należy rozważyć nieużywanie haseł i używanie kluczy. Nie ma potrzeby używania hasła. Jeśli to Ci odpowiada, możesz skonfigurować serwer OpenSSH, aby nie reagował na loginy hasła.
https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html
Opcją fail2ban może być również opcja.
https://help.ubuntu.com/community/Fail2ban
źródło
Jak szeroko serwer jest eksponowany w sieci? Być może możesz porozmawiać z administratorem sieci i sprawdzić, czy możliwe jest monitorowanie i ograniczanie dostępu do sieci do serwera. Nawet jeśli logowanie do konta jest bezpieczne, wydaje się, że serwer może cierpieć z powodu prostego ataku DoS / DDoS.
źródło
Alternatywą dla fail2ban jest CSF: ConfigServer Security & Firewall .
Jest wyposażony w LFD: demon niepowodzenia logowania, który może wykryć wiele nieudanych prób logowania w różnych usługach i zablokuje naruszający adres IP (tymczasowo lub na stałe).
Ma kilka innych opcji, które mogą pomóc w walce z atakami powodziowymi i być może wykryć włamania.
Niedogodności:
źródło
Czy zamierzasz zezwolić na obsługę SSH na świecie? A może tylko członkom zespołu w określonych miejscach? Moja odpowiedź zależy trochę od powagi twojego wyzwania.
W obu przypadkach należy upewnić się, że serwer SSH nie zezwala na logowanie się do haseł dla użytkownika root.
W moich systemach mam to ustawienie
ale zauważam, że mają nowsze Ubuntu
Jeśli czytasz „man sshd_config”, myślę, że oznacza to, że to nowsze hasło „zabrania hasła” oznacza to samo i jest z pewnością bardziej oczywiste w znaczeniu. To NIE jest domyślne w niektórych systemach Linux, ale prawdopodobnie tak powinno być.
Teraz o twoim problemie. Czy serwer systemowy ma tylko niektórych użytkowników w określonych miejscach? Zrób to!
edytuj /etc/hosts.deny i wstaw
WSZYSTKO WSZYSTKO
Następnie edytuj /etc/hosts.allow i wypisz numery IP lub zakresy, które chcą zezwolić na korzystanie z SSH. Notacja jest nieco myląca, ponieważ jeśli chcesz zezwolić wszystkim systemom o numerach IP, takich jak 111.222.65.101 do 111.222.65.255, umieść taki wpis w pliku hosts.allow
To brutalne, potężne rozwiązanie. Jeśli twoich użytkowników można wyliczyć według zakresu adresów IP, zrób to!
To rozwiązanie istniało przed utworzeniem tablic IP, jest (myślę) o wiele łatwiejsze w administrowaniu, ale nie jest tak dobre jak rozwiązanie tablic IP, ponieważ procedury tablic IP wykryją wrogów wcześniej niż programy sterowane przez hosts.allow i hosty .zaprzeczać. Ale to pewny ogień, prosty sposób na rozwiązanie wielu problemów, nie tylko z SSH.
Zwróć uwagę na problem, który sam stworzyłeś. Jeśli chcesz otworzyć serwer FTP, serwer WWW lub coś takiego, musisz zezwolić na wpisy na hostach.
Możesz osiągnąć ten sam podstawowy cel, bawiąc się iptables i firewallem. W pewnym sensie jest to preferowane rozwiązanie, ponieważ blokujesz wrogów na zewnętrznej granicy. Ubuntu ma „ufw” (nieskomplikowana zapora ogniowa), a „man ufw” ma wiele przykładów. Wolę mieć fajny GUI do przebrnięcia przez to, nie muszę tego robić cały czas. Może inni powiedzą nam, czy już istnieje.
Kolejne źródło frustracji nastąpi, gdy niektórzy użytkownicy gromadzą różne klucze ssh dla różnych serwerów. Ponieważ mam klucze SSH dla około 12 różnych projektów, teraz ssh kończy się niepowodzeniem, ponieważ mam zbyt wiele kluczy publicznych (Wymaganie albo „ssh -o PubkeyAuthentication = false” lub utworzenie wpisu w pliku .ssh / config. Jest to PITA)
W naszych systemach Linux Centos zauważyłem, że porzucili pakiet denyhosts i oferują tylko fail2ban. Podobało mi się denyhosts, ponieważ utworzył listę kłopotliwych zakresów użytkowników / ip, a następnie w hosts.deny ta lista została odnotowana. Zamiast tego zainstalowaliśmy fail2ban i jest OK. Rozumiem, że wolisz blokować tych złych użytkowników na zewnętrznej krawędzi serwera, więc blokery oparte na tablicach ip, takie jak fail2ban, są w rzeczywistości lepsze. Denyhosts działa na poziomie drugorzędnym, po tym jak wrogowie miną iptables, są następnie odrzucani przez demona sshd.
W obu tych programach wyciąganie użytkowników z więzienia jest trochę uciążliwe, jeśli zapomną hasła i spróbują się zalogować kilka razy. Trudno jest odzyskać dostęp do konta, gdy popełniają błędy logowania. Można by się domyślić, że istnieje interfejs GUI typu „wskaż i kliknij”, w którym można po prostu wskazywać i wpuszczać ludzi z powrotem, ale nie jest tak. Muszę to robić tylko co kilka miesięcy i od czasu do czasu zapomnieć, więc napisałem dla siebie instrukcje na swojej stronie http://pj.freefaculty.org/blog/?p=301
źródło