Część Praktyczna
Moduł 1: Konfiguracja poinstalacyjna - zadania
Czas Trwania: 10 minut
Konfiguracja serwera SSH: instalacja, generowanie kluczy RSA.
Ćwiczenia do wykonania:
- Wygeneruj parę kluczy RSA za pomocą ssh-keygen
- Wyeksportuj klucz publiczny z klienta do serwera za pomocą ssh-copy-id
- Zaloguj się za pomocą hasła poprzez ssh do serwera i przełącz na konto root za pomocą komendy sudo - su lub sudo -i
- Włącz logowanie kluczami i wyłącz logowanie hasłem. Zapisz zmiany i zrestartuj usługę ssh.
- Nie zamykaj bieżącej sesji. Otwórz nową sesję ssh i zaloguj się do serwera za pomocą klucza prywatnego.
- Jeśli udało ci się zalogować, zabezpiecz serwer korzystając z poniższych informacji a następnie zrestartuj usługę ssh na drugiej sesji.
- Pamiętaj, by pierwszą sesję ssh cały czas mieć otwartą, by w razie potrzeby móc cofnąć zmiany.
- Zrestartuj usługę ssh i sprawdź, czy możesz zalogować się za pomocą trzeciej sesji do serwera. Jeśli tak, udało ci się poprawnie skonfigurować serwer ssh.
- Dla chętnych napisz skrypt z użyciem sed lub awk, który dokona zmian po stronie serwera w pliku sshd_config, aby nie trzeba było ręcznie nanosić zmian.
OpenSSH : KeyBoard-Intereractive Auth
OpenSSH jest już domyślnie zainstalowany, więc nie ma potrzeby instalowania nowych pakietów. Domyślnie możesz logować się za pomocą KeyBoard-Interactive Authentication, ale zmień niektóre ustawienia dla bezpieczeństwa jak poniżej.
Jeśli OpenSSH jednak nie jest jeszcze zainstalowany możesz go zainstalować za pomocą następującego polecenia:
SLES
Aby zainstalować OpenSSH wpisz:
|
|
Debian
Aby zainstalować OpenSSH wpisz:
|
|
Red Hat
Aby zainstalować OpenSSH wpisz:
|
|
Następnie na maszynie z Linux, za pomocą której zamierzasz łączyć się do serwera, musisz zainstalować odpowiedniego klienta:
SLES
Aby zainstalować OpenSSH wpisz:
|
|
Debian
Aby zainstalować OpenSSH wpisz:
|
|
Red Hat
Aby zainstalować OpenSSH wpisz:
|
|
Instalacja firewalld
SLES
Aby zainstalować firewalld wpisz:
|
|
Debian
Aby zainstalować firewalld wpisz:
|
|
Red Hat
Aby zainstalować firewalld wpisz:
|
|
Domyślnie firewalld po instalacji ma zaimplementowaną usługę SSH jako dozwoloną. Jeśli nie, zawsze możesz zezwolić na usługę SSH.
SLES
|
|
Debian
|
|
Red Hat
|
|
Konfiguracja klienta SSH
Połącz się z serwerem SSH za pomocą zwykłego użytkownika.
|
|
Uwierzytelnianie parą kluczy SSH
Skonfiguruj serwer SSH do logowania za pomocą Key-Pair Authentication. Utwórz klucz prywatny dla klienta i klucz publiczny dla serwera, aby to zrobić.
Utwórz Key-Pair dla każdego użytkownika, więc zaloguj się wspólnym użytkownikiem na SSH Server Host i pracuj jak poniżej.
|
|
Aby wygenerować passphrase możesz użyć następującego polecenia w osobnym oknie CLI
|
|
Wylistuj parę kluczy
|
|
Skopiuj klucz publiczny z klienta na serwer
|
|
Podaj hasło
Zaloguj się z kluczem do serwera
|
|
Podaj passphrase
Automatyzacja
Dodaj poniższe wpisy do pliku .bashrc lub .zshrc znajdującego się w katalogu /home/user. Pierwszy wpis uruchamia agenta ssh, a drugi ładuje do niego Twój klucz prywatny. Jeśli ustawiłeś passphrase na swoim kluczu, agent zapyta o jego wpisanie. Możesz dodać więcej niż jeden klucz. Należy pamiętać, że za każdym razem, gdy Bash lub Zsh uruchomi proces restartu lub rozruchu systemu operacyjnego, w CLI poprosi o podanie passphrase.
|
|
Zabezpieczanie SSH
Edytuj /etc/ssh/sshd_config
|
|
|
|
Aby odłączyć nieaktywnych klientów, jeśli używasz bash jako powłoki, możesz ustawić wartość TMOUT w ogólnosystemowym profilu domyślnym lub na użytkownika:
|
|
Bezpieczna konfiguracja szyfrów/MAC/Kex dostępnych w SSH
|
|
Upewnij się, że twój klient ssh może używać tych szyfrów, uruchom:
|
|
Polecam przeczytać ten artykuł::
Secure Configuration of Ciphers/MACs/Kex available in SSH
Automatyzacja za pomocą skryptu w Bash
Przeładuj usługę SSH
|
|
Wprowadzenie do bezpieczeństwa systemu.
Wprowadzenie do bezpieczeństwa systemu Linux
- Aktualizacja systemu i oprogramowania
- Zadanie: Przeprowadź pełną aktualizację systemu operacyjnego i zainstalowanych pakietów na maszynie z systemem Linux. Użyj menedżera pakietów specyficznego dla Twojej dystrybucji (np.
apt
dla Debian/Ubuntu,yum
dla CentOS,dnf
dla Fedora). - Cel: Zrozumienie znaczenia utrzymywania aktualności oprogramowania w kontekście bezpieczeństwa.
- Zadanie: Przeprowadź pełną aktualizację systemu operacyjnego i zainstalowanych pakietów na maszynie z systemem Linux. Użyj menedżera pakietów specyficznego dla Twojej dystrybucji (np.
Aktualizujemy system
- openSUSE/SLES
|
|
- Yast
Wzmianka o Yast nie zawiera bezpośrednich poleceń, ponieważ Yast (Yet another Setup Tool) jest graficznym i tekstowym narzędziem do zarządzania systemem dostępnym w openSUSE i SLES. Można go użyć do zarządzania pakietami, ale konkretnych poleceń CLI nie podano.
- RPM-based (RedHat/Fedora/CentOS)
|
|
DEB-based (Debian/Ubuntu)
|
|
Konfiguracja firewall
- Zadanie: Skonfiguruj
ufw
(Uncomplicated Firewall) lubfirewalld
w zależności od dystrybucji, aby zezwolić tylko na ruch na portach 22 (SSH), 80 (HTTP) i 443 (HTTPS). - Cel: Nauka podstawowych zasad ograniczania dostępu do usług sieciowych w celu zwiększenia bezpieczeństwa systemu.
ufw
-
Instalacja i włączenie
ufw
- Zadanie: Upewnij się, że
ufw
jest zainstalowany na Twoim systemie. Jeśli nie, zainstaluj go za pomocą menedżera pakietów. Następnie włączufw
.1 2
sudo apt install ufw # Na Debianie/Ubuntu sudo ufw enable
- Zadanie: Upewnij się, że
-
Konfiguracja podstawowych zasad
- Zadanie: Skonfiguruj
ufw
, aby domyślnie blokować wszystkie przychodzące połączenia i zezwalać na wszystkie wychodzące.1 2
sudo ufw default deny incoming sudo ufw default allow outgoing
- Zadanie: Skonfiguruj
-
Otwieranie portów dla usług
- Zadanie: Otwórz porty 22 (SSH), 80 (HTTP) i 443 (HTTPS) w
ufw
, aby zezwolić na przychodzące połączenia do tych usług.1 2 3
sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443
- Zadanie: Otwórz porty 22 (SSH), 80 (HTTP) i 443 (HTTPS) w
-
Sprawdzenie statusu i reguł
ufw
- Zadanie: Wyświetl status
ufw
oraz aktualne reguły, aby sprawdzić, czy konfiguracja jest zgodna z oczekiwaniami.1
sudo ufw status verbose
- Zadanie: Wyświetl status
firewalld
-
Instalacja i uruchomienie
firewalld
- Zadanie: Upewnij się, że
firewalld
jest zainstalowany i uruchomiony na Twoim systemie. Jeśli nie, zainstaluj go i uruchom.1 2 3
sudo yum install firewalld # Na CentOS/Red Hat sudo systemctl start firewalld sudo systemctl enable firewalld
- Zadanie: Upewnij się, że
-
Ustawienie domyślnej polityki
- Zadanie: Skonfiguruj
firewalld
, aby domyślnie blokować wszystkie przychodzące połączenia i zezwalać na wszystkie wychodzące.1 2
sudo firewall-cmd --set-default-zone=public sudo firewall-cmd --zone=public --change-interface=eth0 # eth0 dostosuj do swojej karty sieciowej
- Zadanie: Skonfiguruj
-
Otwieranie portów dla usług
- Zadanie: Otwórz porty 22 (SSH), 80 (HTTP) i 443 (HTTPS) w
firewalld
, aby zezwolić na przychodzące połączenia do tych usług.1 2 3
sudo firewall-cmd --zone=public --add-service=ssh --permanent sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=https --permanent
- Zadanie: Otwórz porty 22 (SSH), 80 (HTTP) i 443 (HTTPS) w
-
Zastosowanie zmian i sprawdzenie konfiguracji
- Zadanie: Zastosuj zmiany w konfiguracji i sprawdź aktualne zasady
firewalld
.1 2
sudo firewall-cmd --reload sudo firewall-cmd --list-all
- Zadanie: Zastosuj zmiany w konfiguracji i sprawdź aktualne zasady
Utworzenie i zarządzanie użytkownikami
- Zadanie: Utwórz nowego użytkownika z ograniczonymi uprawnieniami (bez dostępu sudo/root). Skonfiguruj dla tego użytkownika silne hasło i zapoznaj się z plikiem
/etc/sudoers
w kontekście zarządzania uprawnieniami. - Cel: Zrozumienie znaczenia zasady najmniejszych uprawnień i zarządzania dostępem użytkowników.
Zadania
-
Tworzenie nowego użytkownika
- Zadanie: Utwórz nowego użytkownika o nazwie
test_admin
za pomocą poleceniauseradd
lubadduser
(w zależności od dystrybucji). Następnie ustaw hasło dla tego użytkownika.1 2
sudo useradd -m test_admin sudo passwd test_admin
- Cel: Nauka tworzenia kont użytkowników i ustawiania haseł.
- Zadanie: Utwórz nowego użytkownika o nazwie
-
Przypisywanie użytkownika do grupy
- Zadanie: Dodaj
test_admin
do grupysudo
(na Debianie/Ubuntu) lubwheel
(na CentOS/Fedora), aby umożliwić mu wykonanie poleceń jako superużytkownik.1 2
sudo usermod -aG sudo test_admin # Debian-based sudo usermod -aG wheel test_admin # RHEL-based
- Cel: Zrozumienie zarządzania członkostwem w grupach i delegowania uprawnień.
- Zadanie: Dodaj
-
Ograniczenie dostępu do sudo
- Zadanie: Edytuj plik
/etc/sudoers
za pomocąvisudo
, abytest_admin
mógł wykonywać polecenia sudo bez podawania hasła (opcjonalnie, dla zaawansowanych użytkowników).Dodaj na końcu pliku:1
sudo visudo
test_admin ALL=(ALL) NOPASSWD: ALL
- Cel: Nauka zaawansowanego zarządzania uprawnieniami za pomocą
sudo
.
- Zadanie: Edytuj plik
-
Zmiana powłoki domyślnej
- Zadanie: Zmień powłokę domyślną dla
test_admin
nabash
, jeśli nie została ona ustawiona podczas tworzenia konta.1
sudo chsh -s /bin/bash test_admin
- Cel: Zrozumienie, jak zarządzać powłokami użytkowników i dostosowywać środowisko pracy.
- Zadanie: Zmień powłokę domyślną dla
-
Usuwanie użytkownika
- Zadanie: Usuń
test_admin
z systemu, zachowując jego katalog domowy jako backup.1
sudo userdel -r test_admin
- Cel: Nauka bezpiecznego usuwania kont użytkowników i zarządzania danymi użytkownika.
- Zadanie: Usuń
Pamiętaj, że działania związane z sudo
i edycją /etc/sudoers
powinny być wykonywane ostrożnie, aby uniknąć problemów z uprawnieniami i bezpieczeństwem systemu.
Przeglądanie dzienników systemowych w Linux
- Przeglądanie dzienników za pomocą
journalctl
- Zadanie: Wykorzystaj narzędzie
journalctl
do przeglądania i filtrowania dzienników systemowych. Znajdź i wyświetl wpisy dziennika dotyczące usługi SSH (sshd
) z ostatnich 24 godzin. - Cel: Nauka korzystania z
journalctl
do analizy dzienników systemowych i zrozumienie struktury dzienników w systemie Linux.
- Zadanie: Wykorzystaj narzędzie
Zadania do przeglądania dzienników za pomocą journalctl
-
Podstawowe wykorzystanie
journalctl
- Zadanie: Wyświetl wszystkie dostępne dzienniki systemowe. Następnie użyj przewijania (scrollowania) do przeglądania wpisów.
1
journalctl
- Cel: Zapoznanie się z podstawową funkcjonalnością
journalctl
i nauka nawigacji po dziennikach.
- Zadanie: Wyświetl wszystkie dostępne dzienniki systemowe. Następnie użyj przewijania (scrollowania) do przeglądania wpisów.
-
Filtrowanie dzienników dla określonego zakresu czasu
- Zadanie: Wyświetl wpisy dziennika dla konkretnego zakresu czasu. Na przykład, znajdź wszystkie wpisy od początku bieżącego dnia.
1
journalctl --since today
- Cel: Nauka filtrowania dzienników na podstawie czasu, co jest przydatne do analizy zdarzeń w określonych okresach.
- Zadanie: Wyświetl wpisy dziennika dla konkretnego zakresu czasu. Na przykład, znajdź wszystkie wpisy od początku bieżącego dnia.
-
Wyszukiwanie wpisów od konkretnego serwisu
- Zadanie: Wyświetl wszystkie wpisy dziennika dla usługi SSH (
sshd
).1
journalctl -u sshd
- Cel: Zrozumienie, jak filtrować dzienniki dla określonej usługi, co jest kluczowe przy diagnozowaniu problemów związanych z tą usługą.
- Zadanie: Wyświetl wszystkie wpisy dziennika dla usługi SSH (
-
Zaawansowane filtrowanie z użyciem kilku kryteriów
- Zadanie: Znajdź wszystkie wpisy dziennika związane z usługą
sshd
zawierające słowo “Failed”. Użyj grep do filtrowania wyników.1
journalctl -u sshd | grep 'Failed'
- Cel: Nauka zaawansowanego filtrowania dzienników, co pozwala na dokładne analizowanie wpisów związanych z konkretnymi problemami.
- Zadanie: Znajdź wszystkie wpisy dziennika związane z usługą
-
Wyświetlanie dzienników dla konkretnego urządzenia
- Zadanie: Wyświetl dzienniki związane z konkretnym urządzeniem, np. dyskiem (
/dev/sda
).1
journalctl _DEVNAME=/dev/sda
- Cel: Zrozumienie, jak identyfikować i analizować zdarzenia związane z określonymi urządzeniami w systemie.
- Zadanie: Wyświetl dzienniki związane z konkretnym urządzeniem, np. dyskiem (
-
Monitorowanie w czasie rzeczywistym
-
Zadanie: Użyj
tail -f
lubjournalctl -f
do monitorowania w czasie rzeczywistym dzienników dotyczących autentykacji użytkowników. Obserwuj próby logowania i identyfikuj nieudane próby. -
Cel: Zrozumienie, jak monitorować aktywność systemu w czasie rzeczywistym oraz identyfikować potencjalne próby nieautoryzowanego dostępu.
-
Zadanie: Użyj
journalctl
, aby monitorować dzienniki w czasie rzeczywistym. To przydatne do obserwacji bieżącej aktywności systemu.1
journalctl -f
-
Cel: Nauka, jak śledzić dzienniki w czasie rzeczywistym, co jest niezbędne przy debugowaniu bieżących problemów.
-
Te zadania oferują solidne wprowadzenie do korzystania z journalctl
do pracy z dziennikami systemowymi w Linuxie. Opanowanie journalctl
jest kluczowe dla każdego, kto zajmuje się administracją systemami, zapewniając umiejętności niezbędne do monitorowania, debugowania i utrzymania zdrowia systemu.
Zadania dla monitorowania w czasie rzeczywistym z użyciem tail -f
-
Monitorowanie dziennika systemowego
- Zadanie: Użyj
tail -f
do monitorowania głównego dziennika systemowego. Dla systemów używających rsysloga (typowo w dystrybucjach takich jak Debian, Ubuntu), plik ten zazwyczaj znajduje się w/var/log/syslog
. Dla systemów opartych nasystemd
, których głównym narzędziem do logowania jestjournald
, możesz monitorować tradycyjne pliki logów w/var/log
, np./var/log/messages
w dystrybucjach takich jak Fedora, CentOS.1 2
tail -f /var/log/syslog # Debian-based tail -f /var/log/messages # RHEL-based
- Cel: Nauka monitorowania ogólnego dziennika systemowego, co jest kluczowe do obserwacji bieżącej aktywności systemu.
- Zadanie: Użyj
-
Obserwacja logów autentykacji
- Zadanie: Skorzystaj z
tail -f
do monitorowania logów autentykacji. Wiele systemów przechowuje te informacje w pliku/var/log/auth.log
(Debian/Ubuntu) lub/var/log/secure
(CentOS/RedHat).1 2
tail -f /var/log/auth.log # Debian-based tail -f /var/log/secure # RHEL-based
- Cel: Nauka identyfikacji i reagowania na próby logowania, zarówno udane, jak i nieudane, co jest kluczowe dla bezpieczeństwa systemu.
- Zadanie: Skorzystaj z
Wykorzystanie tail -f
do monitorowania plików dzienników w czasie rzeczywistym jest podstawową, ale potężną techniką w diagnostyce systemów i aplikacji. Pozwala administratorom systemów i deweloperom na bieżąco obserwować aktywność systemową i aplikacji, ułatwiając szybkie identyfikowanie i rozwiązywanie problemów.
- Analiza logów zabezpieczeń
- Zadanie: Znajdź w dziennikach systemowych informacje o aktualizacjach bezpieczeństwa, które zostały zastosowane, oraz wszelkie ostrzeżenia związane z bezpieczeństwem. Możesz użyć
grep
lubawk
do filtrowania odpowiednich wpisów. - Cel: Zrozumienie znaczenia regularnego przeglądania dzienników systemowych w kontekście identyfikacji i reagowania na problemy związane z bezpieczeństwem.
- Zadanie: Znajdź w dziennikach systemowych informacje o aktualizacjach bezpieczeństwa, które zostały zastosowane, oraz wszelkie ostrzeżenia związane z bezpieczeństwem. Możesz użyć
Analiza logów zabezpieczeń to kluczowy element utrzymania bezpieczeństwa systemu i identyfikacji potencjalnych zagrożeń. Poniżej przedstawiam kilka zadań, które pomogą Ci rozwijać umiejętności związane z przeszukiwaniem i analizą dzienników w poszukiwaniu informacji o aktualizacjach bezpieczeństwa i ostrzeżeniach.
Zadania do analizy logów zabezpieczeń
-
Wyszukiwanie wpisów o aktualizacjach bezpieczeństwa
- Zadanie: Użyj
grep
do przeszukania dzienników systemowych w poszukiwaniu informacji o aktualizacjach bezpieczeństwa. Na przykład, w systemach opartych na Debianie/Ubuntu, informacje o aktualizacjach mogą być rejestrowane w/var/log/apt/history.log
. Szukaj wpisów zawierających frazę “security”.1
grep 'security' /var/log/apt/history.log
- Cel: Nauka identyfikowania wpisów dziennika dotyczących aktualizacji bezpieczeństwa, co pozwala śledzić, które łatki bezpieczeństwa zostały zainstalowane.
- Zadanie: Użyj
-
Filtrowanie ostrzeżeń bezpieczeństwa w dziennikach systemowych
- Zadanie: Skorzystaj z
awk
do przefiltrowania i wyświetlenia tylko tych linii z pliku dziennika systemowego (np./var/log/syslog
lub/var/log/messages
), które zawierają poziom ostrzeżenia (warn
lubwarning
).1
awk '/warn|warning/' /var/log/syslog
- Cel: Zrozumienie, jak wyszukiwać specyficzne poziomy ostrzeżeń bezpieczeństwa w dziennikach, co jest kluczowe do wczesnego identyfikowania potencjalnych problemów.
- Zadanie: Skorzystaj z
-
Analiza nieudanych prób logowania
- Zadanie: Użyj kombinacji
grep
i innych narzędzi tekstowych, jakcut
lubawk
, do zidentyfikowania i wyświetlenia szczegółów dotyczących nieudanych prób logowania. Dla systemów używającychsystemd
, możesz wykorzystaćjournalctl
do przefiltrowania logów usługi SSH (sshd
), a następnie użyćgrep
do wyszukiwania nieudanych prób.1
journalctl -u sshd | grep 'Failed'
- Cel: Nauka identyfikowania nieudanych prób logowania, co jest kluczowe dla monitorowania potencjalnych prób nieautoryzowanego dostępu.
- Zadanie: Użyj kombinacji
-
Śledzenie błędów systemowych i awarii
- Zadanie: Wykorzystaj
grep
lubawk
do wyszukiwania dzienników systemowych w celu znalezienia wpisów związanych z błędami systemowymi lub awariami. Możesz przeszukać/var/log/syslog
lub/var/log/messages
dla słów kluczowych takich jakerror
,fail
,critical
.1
grep -i -E "error|fail|critical" /var/log/syslog
- Cel: Rozwinięcie umiejętności szybkiego identyfikowania i reagowania na krytyczne błędy systemowe oraz awarie.
- Zadanie: Wykorzystaj
Te zadania są przeznaczone do rozwijania podstawowych umiejętności niezbędnych do efektywnej analizy dzienników zabezpieczeń. Praktyczne opanowanie tych technik pozwoli Ci lepiej zrozumieć stan bezpieczeństwa Twojego systemu i reagować na potencjalne zagrożenia.
- Konfiguracja syslog
- Zadanie: podejrzyj plik rsyslog.conf znajdujący się w katalogu /etc .
Poniższy przykład zawiera zmodyfikowany plik rsyslog.conf, który rozdziela ostrzeżenia i informacje pomiędzy odpowiednie pliki logów.
Znaki wykrzyknika oznaczają zaprzeczenie (negacja ta pochodzi z programowania).
Źródło: https://superuser.com/questions/351387/how-to-stop-kernel-messages-from-flooding-my-console
|
|
Dodatkowo zmień plik: /etc/audisp/plugins.d/syslog.conf
w taki sposób, jak poniżej:
|
|
Następnie zrestartuj auditd
i rsyslog
za pomocą poniższych poleceń:
|
|
Wiadomości pochodzące z jądra systemu (kernel) można modyfikować na przykład tak:
|
|
Przed modyfikacją i po modyfikacji możesz sprawdzić ustawienia za pomocą poniższego polecenia:
|
|
Konfiguracja parametrów jądra w czasie rzeczywistym - wyjaśnienie
Zobacz man sysctl
- „konfiguracja parametrów jądra w czasie rzeczywistym” aby dowiedzieć się więcej.
Przypomnienie o poziomach ważności i czterech wartościach kernel.printk:
- CUR = bieżący poziom ważności; tylko komunikaty ważniejsze niż ten poziom są wyświetlane
- DEF = domyślny poziom ważności przypisywany do komunikatów bez poziomu
- MIN = minimalny dopuszczalny CUR
- BTDEF = domyślny CUR przy uruchamianiu
Na moim CentOS: 7 4 1 7
|
|
To jest zbyt głośne
, chcę tylko krytyczne i wyżej (bez błędów). Komunikaty bez etykiety powinny być traktowane jako ostrzeżenia, więc DEF jest dobry:
|
|
Ustaw na: 3 4 1 3 i problem rozwiązany. Teraz, gdy użyjesz tail do oglądania logów, zobaczysz, że logi są dużo bardziej czytelne.
Wprowadzenie do fail2ban.
CentOS
Aby zainstalować Fail2Ban na CentOS 7.6, w pierwszej kolejności trzeba będzie zainstalować repozytorium EPEL (ang. Extra Packages for Enterprise Linux). EPEL zawiera dodatkowe pakiety dla wszystkich wersji CentOS, jednym z tych dodatkowych pakietów jest Fail2Ban.
|
|
Debian/Ubuntu
Dla Debian/Ubuntu wystarczy komenda:
|
|
W przypadku CentOS następnym kroku należy zaktualizować zasady SELinux. (uwaga: na mikr.us nie ma zainstalowanego SELinux).
|
|
Debian i Ubuntu posiadaja AppArmor.
Po zainstalowaniu, będziemy musieli skonfigurować i dostosować oprogramowanie za pomocą pliku konfiguracyjnego jail.local. Plik jail.local zastępuje plik jail.conf i jest używany w celu zapewnienia bezpieczeństwa aktualizacji konfiguracji użytkownika.
Zrób kopię pliku jail.conf i zapisz go pod nazwą jail.local: zaktualizuj politykę SELinux:
|
|
Otwórz plik jail.local do edycji w Vim za pomocą następującego polecenia:
|
|
Kod pliku może składać się z wielu linii kodów, które wykonują się, aby zapobiec zablokowaniu jednego lub wielu adresów IP, ustawić czas trwania bantime, itp. Typowy plik konfiguracyjny więzienia zawiera następujące linie:
|
|
- IgnoreIP służy do ustawienia listy adresów IP, które nie będą zakazane. Lista adresów IP powinna być podana z separatorem spacji. Ten parametr jest używany do ustawienia osobistego adresu IP (jeśli istnieje dostęp do serwera ze stałego adresu IP).
- Parametr Bantime służy do ustawienia czasu trwania sekund, na które host ma zostać zbanowany.
- Findtime jest parametrem, który służy do sprawdzenia, czy host musi zostać zbanowany czy nie. Gdy host generuje maksimum w ostatnim findtime, jest on banowany.
- Maxretry jest parametrem używanym do ustawienia limitu liczby prób przez hosta, po przekroczeniu tego limitu, host jest banowany.
Dodawanie pliku więzienia (ang. jail), w celu ochrony SSH.
Utwórz nowy plik za pomocą edytora Vim.
|
|
Do powyższego pliku należy dodać następujące wiersze kodu.
|
|
W przypadku, gdy używasz iptables , action ustaw jak poniżej:
|
|
- Parametr enable jest ustawiony na wartość true, w celu zapewnienia ochrony, aby wyłączyć ochronę, jest ustawiony na false. Parametr filtra sprawdza plik konfiguracyjny sshd, znajdujący się w ścieżce /etc/fail2ban/filter.d/sshd.conf.
- Parametr action służy do wyprowadzenia adresu IP, który musi być zakazany za pomocą filtra dostępnego w pliku /etc/fail2ban/action.d/iptables-allports.conf.
- Parametr port można zmienić na nową wartość, np. port=2244, jak to ma miejsce w tym przypadku. W przypadku korzystania z portu 22, nie ma potrzeby zmiany tego parametru.
- Ścieżka logowania podaje ścieżkę, na której zapisany jest plik logu. Ten plik dziennika jest skanowany przez Fail2Ban.
- Maxretry służy do ustawienia maksymalnego limitu nieudanych wpisów logowania.
- Parametr Bantime służy do ustawienia czasu trwania sekund, na który host musi zostać zablokowany.
Uruchomienie usługi Fail2Ban
Jeśli jeszcze nie używasz zapory sieciowej CentOS, uruchom ją:
|
|
Jeśli używasz iptables, to:
|
|
Wykonaj poniższe plecenia, aby uruchomić Fail2Ban na serwerze.
|
|
Śledzenie wpisów logowania fail2ban
Poniższe polecenie służy do sprawdzenia, które próby zalogowania się do serwera przez post ssh nie powiodły się.
|
|
Wykonanie powyższej komendy spowoduje wyświetlenie listy nieudanych prób wprowadzenia hasła głównego z różnych adresów IP. Format wyników będzie podobny do pokazanego poniżej:
|
|
Sprawdzanie zbanowanych adresów IP przez Fail2Ban
Poniższe polecenie służy do uzyskania listy zablokowanych adresów IP, które zostały rozpoznane jako zagrożenia metodą brute force.
|
|
Sprawdzanie statusu Fail2Ban
Użyj następującej komendy, aby sprawdzić status plików jail w Fail2Ban:
|
|
Wynik powinien być podobny do tego:
|
|
Poniższe polecenie wyświetli zbanowane adresy IP dla danego więzienia (jail).
|
|
Usunięcie zbanowanego adresu IP
W celu usunięcia adresu IP z zablokowanej listy, parametr IPADDRESS jest ustawiony na odpowiedni adres IP, który wymaga odbanowania. Nazwa „sshd” jest nazwą więzienia, w tym przypadku jest to więzienie „sshd”, które skonfigurowaliśmy powyżej. Poniższe polecenie pozwala usunąć adres IP.
|
|
Dodawanie własnego filtra w celu zwiększenia ochrony
Fail2ban umożliwia tworzenie własnych filtrów. Poniżej krótki opis konfiguracji jednego z nich.
1.Należy przejść do katalogu filter.d Fail2ban:
|
|
2.Utworzyć plik wordpress.conf i dodać do niego wyrażenie regularne.
|
|
|
|
Zapisać i zamknąć plik.
3.Dodać sekcję WordPress na końcu pliku jail.local:
|
|
|
|
Jeśli chcemy banować boty, wystarczy dodać akcję, czas bana oraz ilość prób, jak w przypadku jail sshd opisanego wyżej.
W tym celu użyty zostanie domyślny ban i akcja e-mail. Inne akcje mogą być zdefiniowane przez dodanie akcji = linia.
Zapisz i wyjdź, a następnie uruchom ponownie Fail2ban poleceniem:
|
|
Sprawdź również, czy Twój regex działa:
|
|
Celem opisanego zadania jest wprowadzenie do korzystania z Fail2Ban - narzędzia służącego do ochrony serwerów przed atakami brute-force i innymi próbami nieautoryzowanego dostępu. Zadanie obejmuje kroki instalacji Fail2Ban na różnych dystrybucjach Linuxa (CentOS i Debian/Ubuntu), konfigurację podstawowych ustawień bezpieczeństwa poprzez edycję plików konfiguracyjnych, oraz dodatkowe kroki takie jak aktualizacja zasad SELinux (dla CentOS) i konfiguracja zapor sieciowych. Zadanie zawiera również instrukcje dotyczące monitorowania i zarządzania zbanowanymi adresami IP, a także tworzenia własnych filtrów dla specyficznych potrzeb, takich jak ochrona aplikacji WordPress przed nieautoryzowanym dostępem.