Zabezpieczenie blogu przed atakami brute force

Jeżeli blogujemy na platformie typu Blogger czy Medium, nasz system jest zabezpieczony przez dostawcę usługi i nie musimy się martwić o żadne ataki. Duże platformy blogowe na ogół mają porządnie[citation needed] zrobione zabezpieczenia przeciwwłamaniowe.

Jeżeli jednak jesteśmy sobie sami sterem, żeglarzem lub okrętem, powinniśmy zadbać o bezpieczeństwo. Oczywiście stuprocentowej metody nie ma, ale nie chodzi o całkowitą gwarancję tylko o to, żeby utrudnić złym człowiekom utrudnianie życia dobrym człowiekom.

Nie wiem jak to wygląda u innych blągerów, ale u mnie cały czas coś się dzieje na porcie ssh. I nawet po zmianie portu serwera z 22 na wyższy, niestandardowy, dziesiątki botów w dalszym ciągu próbują się dobijać. Próby są skazane na niepowodzenie, bo boty używają głównie "słabych" loginów (a więc prostych haseł oraz popularnych nazw użytkownika), a ja mam długie hasło i niestandardową nazwę użytkownika, niemniej jednak takie dobijanie się do serwera jest nieco niepokojące. Czuję się trochę jakby przed moim domem przez cały czas przesuwał się korowód Chińczyków, każdy z pękiem kluczem w ręku, co chwilę któryś podchodzi do moich drzwi i próbuje je otworzyć jednym z kluczy. Niby wiem, że mam solidny zamek, ale jednak trochę dziwnie.

Przyjrzawszy się uważniej logom (generowanym do pliku /var/log/auth.log) zauważyłem, że większość adresów IP, z których przychodzą próby włamu powtarza się. Wygląda to tak, że włamywacz obchodzi całe osiedle kilkadziesiąt razy próbując za każdym razem innego klucza.

Noż kurdę.

Na szczęście nie jestem pierwszym, który takie coś zauważył. Problem został rozwiązany już dawno za pomocą niedużego, ale bardzo sprytnego programu fail2ban, który odkryłem całkiem niedawno. Działa on tak, że mówi mu się jakie porty i usługi ma sprawdzać pod kątem brute-force, po ilu nieudanych próbach ma banować i na jak długo - wszystko to ustawione bądź globalnie dla wszystkich usług, bądź też dla każdej usługi osobno.

Po zainstalowaniu fail2ban (za pomocą apt) wystarczy utworzyć w folderze /etc/fail2ban plik o nazwie jail.local i wkleić do niego następujące zaklęcie:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1d
findtime = 10m

Oczywiście musimy też włączyć usługę:

systemctl start fail2ban

… a także upewnić się, że uruchomi się ona automatycznie przy restarcie serwera:

systemctl enable fail2ban

Od tej pory jeżeli z jakiegokolwiek adresu IP nastąpią w ciągu maksymalnie dziesięciu minut trzy nieudane próby zalogowania się przez SSH, system zablokuje ten adres IP na firewallu na jeden dzień.

Oczywiście oprócz ssh mamy też bazylion innych usług, które fail2ban potrafi monitorować: z najważniejszych wymienię Apache, Sendmail, sftp - kompletna lista jest jednak o wiele, wiele dłuższa.

A co jeżeli niechcący zabanujemy się sami? Dajmy na to, zapomnimy hasła czy też niechcący użyjemy innego układu klawiatury do wpisywania znaków specjalnych - i klops. Co wtedy?

Wtedy musimy po pierwsze uzyskać dostęp do systemu z innego niż zabanowany adresu IP (na przykład przez KVM lub łącząc się na chwilę przez innego dostawcę internetu), po drugie dowiedzieć się pod którym adresem dostaliśmy bana, wreszcie po trzecie wykonać na serwerze polecenie:

fail2ban-client set sshd unbanip tu.podajemy.adres.ip

Powyższe zdejmie bana z naszego adresu IP.

Oczywiście to, co dotychczas napisałem to tylko wierzchołek góry lodowej tego, co potrafi fail2ban - tak naprawdę poza próbami zalogowania się aplikacja może przeglądać logi systemowe pod kątem występowania w nich różnych "podejrzanych" czynności, wysyłać powiadomienia e-mailem i uruchamiać różne inne (dowolnie definiowane) akcje w zależności od tego co wykryje.

Na zakończenie powiem jaki efekt miało zainstalowanie fail2ban na Ignormatyku: przedtem miałem około 20-25 prób zalogowania się w ciągu każdej minuty. Po zainstalowaniu i uruchomieniu, w ciągu pół godziny zabanował około czterdziestu adresów IP, a intensywność brute-force spadła do około 10 prób na minutę. Po kolejnych 30 minutach miałem już tylko 3 próby na minutę.

Ciekawe jak to będzie wyglądać za kilka dni.

Pożyjemy - zobaczymy...

3 komentarze

  1. Piszę tutaj, gdyż TAM się nie da. TAM, czyli na stronie “Zagadka: Szósty element”.

    Przede wszystkim dziękuję w imieniu swoim oraz nieprzeliczonych rzesz rozwiązywaczy fantastycznych zadań na danie czasu do przemyśleń i skupienia uwagi na czymś innym niż smartfon. Smartfon zawsze łamie głowę w dół, a myślenie nad zadaniami w górę – przynajmniej koncepcyjnie.

    A teraz wracamy na Ziemię!
    1.
    W polach TAM do wpisywania rozwiązania i uwag nie znika ten szary, zachęcający napis. Po rozpoczęciu pisaniae mój tekst jest zamazany przez tę zachętę.
    2.
    Pole wpisywania ma tylko jeden wiersz (wysokości), nie rozszerza się w miarę przybywania treści. To niewygodne. To pole tutaj samo się rozsze… nie, raczej rozwyższa, gdy piszę. I to jest ok.
    3.
    Oprócz miejsca do publikacji rozwiązań powinien być też możliwy zwykły komentarz, do treści około-rozwiązaniowych, czyli pytań dotyczących zadania (ale nie sugerujących rozwiązania) lub do wymiany poglądów o pogodzie na wyspach, tudzież kontynencie.

    Czepiam się, bo jestem perfekcjonistą (w czepianiu się), ale poza tym to – brawo, brawo, brawo!
    Kierunek właściwy. Wymaga, rzecz jasna, dopracowania i odrobiny wysiłku, ale warto. Twoje zagadki z reguły są nieszablonowe i trudnawe, więc szkoda, by, ot tak, przepadały gdzieś w ciemnej otchłani Internetu.

    Pozdrówka
    Waldek

    1. Siemanko.

      Rzesze są jak najbardziej przeliczone. Do tej konkretnej zagadki póki co podeszło tyle ludzi, że dałoby się ich policzyć na palcach jednej ręki i jeszcze by trochę palców zostało 😉 Ale dzięki, sam lubię sobie łamać głowę, czemu by więc nie podzielić się tą kontuzją z resztą świata.

      Ad 1: TAM to są formularze Google, nie mam za bardzo wpływu na to jak działają. Mi szare znika, więc może masz jakiegoś script-killera? Czy coś? W każdym razie gwarantuję, że odpowiedzi docierają do mnie tamtą drogą całkiem sprawnie.

      Ad 2: Takoż, pole mi się “rozwyższa” w miarę pisania, więc musi być coś po twojej stronie. Ale nawet jakby się nie rozwyższało, nic nie mógłbym zrobić, bo to nie ja programuję te formularze tylko Duży G.

      Ad 3 wreszcie: Jeżeli dopuszczę komentarze “okołorozwiązaniowe” to prędzej czy później ktoś wrzuci tam rozwiązanie. Albo przez pomyłkę, albo ze zwykłej, naturalnej ludzkiej złośliwości 😉 Dlatego jeżeli chcesz doszczegółowić, dopytać tudzież pogwarzyć o pogodzie lub odwłoku Maryny, zawsze można skorzystać z formularza kontaktowego (dostępny w menu na górze).

      Sam z własnym perfekcjonizmem walczę przez większość życia. Ostatnio na szczęście coraz rzadziej, ale ciągle zdarza mi się. Zagadki są świetne, to prawda. Ale nie ma obawy, nie znikną z Internetu bo kradnę je z różnych innych (na ogół angielskojęzycznych) stron wuwuwu i przerabiam na polską modłę. Uczciwość nakazywałaby puszczenie każdorazowo linka do strony z oryginalną zagadką, ale tam przeważnie są też podane rozwiązania, więc bez sensu.

  2. Ja właśnie z lenistwa/wygodnictwa jestem na WordPress.com. Po pierwsze latają dziurawego WordPressa, po drugie nie muszę się martwić także innymi atakami. Rozwiazanie fail2ban są opisywane w poradnikach do zabezpieczania swoich tzw. VPS na serwisach hostingowych typu OVH itp.

    Ja bym chyba, gdybym się migrował, poszedł w Pelicana: https://blog.getpelican.com/ czy coś w tym stylu.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]