Własny serwer do nauki i testów, Debian w VirtualBox
Jeśli chcesz skonfigurować własny serwer do nauki i testowania bezpieczeństwa, na samym początku musisz, pobrać odpowiednią dystrybucję, na jakiej go postawisz. Ja do tego zadania wybieram dystrybucję Debian Linux. Wybieram dokładnie Debiana, ponieważ używam go od wersji 3.1. Był on dystrybucją, na której nauczyłem się korzystać z konsoli, dlatego też używam go do każdego zadania do jakiego mogę. Próbowałem dystrybucji RHEL, jednak nie było to to samo. Jeśli natomiast masz inne preferencje, to możesz wybrać inne środowisko. U mnie Debian się sprawdził, dlatego polecam go innym.
Instalację przeprowadzę za pomocą oprogramowania do wirtualizacji, jakim jest VirtualBox. Choć możliwe, że w internecie można odnaleźć już przygotowane obrazy, ja w ramach tego artykułu chcę przeprowadzić wszystko krok po kroku. Rozpoczynając od konfiguracji VirtualBox po instalację serwera, kończąc na konfiguracji SSH.
Pobieranie obrazu Debian Netinstall
Pierwsze, co robimy, to pobieramy stabilną wersję Debiana w formie netinstall. W momencie pisania tego artykułu jest to wersja 13.6.0 i taką możemy pobrać ze strony https://www.debian.org/.
W ramach wyjaśnień dla osób, które nigdy nie spotkały się z tą dystrybucją. Otóż Debian ma kilka swoich gałęzi, a dokładniej stable / testing / unstable /experimental. W gałęzi stable dostępne jest oprogramowanie dokładnie przetestowane i jeśli chodzi o poprawki, to są one związane jedynie z bezpieczeństwem. Nie ma tutaj nowych wersji. W przypadku serwerowym jest to idealne rozwiązanie, jednak w przypadku, gdy instalujemy taką wersję na komputerze domowym, blokujemy możliwość nowych opcji, jakie oferują nowsze wersje oprogramowania. Dlatego do zastosowań domowych, codziennych zaleca się stosowanie wersji testing. W niej znajduje się oprogramowanie pochodzące z gałęzi unstable, ale podczas gdy się w niej znajdowało nie odnotowano żadnych błędów. W tym miejscu ważna uwaga, etap z jakiego pochodzi wersja oprogramowania wchodząca w skład gałęzi testing, też nie jest najnowszy! Jak wspomniałem, musi ona przejść przez pewien etap testów w ostatniej gałęzi (experimental), zanim zostanie puszczona dalej. Dlatego jeśli chciałbyś korzystać z najnowszych wersji dostępnego oprogramowania, powinieneś zerknąć na gałąź experimental czy też unstable. Jednak korzystanie z tych wersji jest zalecane dla deweloperów lub osób posiadających duże umiejętności w pracy z Linuksem. Jest to spowodowane tym, że mogą w nich wystąpić częste sytuacje zawieszenia działania programu lub nawet całej dystrybucji.
W związku z tym podziałem, Debian zaliczany jest do jednych z najbardziej stabilnych dystrybucji Linuksa. Ma oczywiście swoje wady, które mogłeś wyczytać z powyższego opisu, ale jak niestety zawsze zawsze, coś za coś.
Natomiast w przypadku wersji instalatorów, jakie możemy pobrać, w obecnych czasach zawsze polecam skorzystać z wersji minimalnej, czyli tak zwanej wersji netinstall. Pobiera ona dosłownie minimum i zmieści się nawet na 2 GB pendrivie. W związku z ogromnym rozwojem nośników, jak i przepustowością łączy, nie ma sensu pobierać całych obrazów i tak jak kiedyś nagrywać na płyty CD/DVD. Zresztą sam już nie pamiętam, kiedy z takich korzystałem. Natomiast w przypadku braku połączenia internetowego pozostaje opcja pobrania całych obrazów i nagrania ich na wspomniany pendrive. Wymaga to jednak większej ilości pamięci, ale obecnie 32 czy 64 GB taki nośnik kosztuje grosze.
Pendrive czy płytę musielibyśmy wykorzystać, gdybyśmy chcieli zainstalować serwer na fizycznej maszynie. Natomiast my chcemy stworzyć tak zwany serwer wirtualny, wykorzystując do tego VirtualBox. Po pierwsze, jeśli tego jeszcze nie zrobiłeś, to po wejściu na stronę debian.org kliknij przycisk Pobieranie. Automatycznie pobierze się wersja NetInstall. Natomiast jeśli czytasz ten artykuł po dłuższym czasie od jego napisania, to wersji instalowanego serwera powinieneś szukać pod linkiem Inne wersje, znajdującym się dokładnie pod wspomnianym przyciskiem Pobieranie.
Własny serwer do nauki i testowania bezpieczeństwa w VirtualBox
Naszym celem jest stworzenie środowiska, w którym chcemy przetestować różnego rodzaju konfiguracja jak i również poddawać je weryfikacjom bezpieczeństwa. Jednak chciałbym abyś wiedział drugi czytelniku, że zastosowań własnego serwera jest mnóstwo. Natomiast w celach początkowego pozbawiania rozwiązanie proponowane uważam, za jak najbardziej wygodne, dlatego mając już pobrany plik instalacyjny, przejdźmy do konfiguracji VirtualBoxa.
Specyfikacja sprzętowa i wirtualny dysk
Po uruchomieniu VirtualBoxa klikamy przycisk Nowa znajdujący się w lewym górnym rogu.

Rysunek 1: Przycisk umożliwiający stworzenie nowej maszyny wirtualnej w VirtualBox
Pojawi się okno, w którym uzupełniamy pola w następujący sposób:

Rysunek 2: Konfiguracja ustawień podstawowych serwera
- VM Name podajecie nazwę maszyny wirtualnej, jaką tworzycie.
- VM Folder podajecie ścieżkę, gdzie będą się znajdowały pliki maszyny wirtualnej.
- ISO Image podajecie ścieżkę do pliku instalacyjnego, który przed chwilą pobraliście.
Na końcu bardzo istotna rzecz. Odznacz checkbox znajdujący się przy Proceed with Unattended Installation. Nie chcemy, aby standardowe oprogramowanie zostało zainstalowane automatycznie. Chcemy wybrać to, co zainstalujemy, a dokładniej, minimum konieczne do działania naszego serwera. Dlatego musimy odznaczyć tę opcję. Poza wskazanymi opcjami resztę z tej zakładki możemy pozostawić bez zmian. Wybieramy teraz Specify virtual hardware.

Rysunek 3: Konfiguracja zasobów sprzętowych dla serwera
Polecam pozostawić wszystko standardowo. Nie ma konieczności zwiększania zasobów, a jeśli robisz to, aby pobawić się konfiguracją lub przeprowadzić testy, można nawet zmniejszyć ilość pamięci do 1 GB. Kwestia tego, jakimi zasobami dysponujesz.
Przechodzimy do ostatniej konfiguracji, czyli do ustawienia miejsca na nasz serwer. Przejdź do Specify virtual hard disk.

Rysunek 4: Tworzenie wirtualnego dysku
Proponowane 20 GB na to, co zamierzamy zrobić, całkowicie wystarczy. Nawet jeśli dysponujesz mocną stacją roboczą z Windows 11 i 32 GB RAM, do uruchomienia własnego serwera do nauki i testowania bezpieczeństwa sieciowego powyższe zasoby są optymalne. Proponowane 20 GB przestrzeni dyskowej w pełni wystarczy na nasze eksperymenty. Szczególnie, że pokażę jak wykorzystywać migawki. Kliknij teraz przycisk Zakończ.
Konfiguracja sieci (NAT i Port Forwarding SSH)
Na liście powinna pojawić się nowa maszyna wirtualna, a jeśli podałeś wszystko identycznie jak ja, to wygląda ona jak na poniższym rysunku.

Rysunek 5: Maszyna wirtualna z serwerem
Nim jednak ją uruchomimy, musimy wykonać jeszcze jedną konfigurację, której nie mogliśmy zrobić podczas jej tworzenia. Zaznacz nowo powstałą maszynę i w górnym rogu wybierz przycisk Ustawienia. W nowo otwartym oknie z lewego menu wybierz Sieć.

Rysunek 6: Konfiguracja sieci – połączenie z siecią LAN
Powinno pojawić się okno jak na Rysunku 6. W polu Podłączona do ustaw tak jak powyżej, czyli NAT. Pozostałe elementy pozostaw bez zmian. Teraz kliknij w Przekierowanie portów w celu ustawienia możliwości komunikacji przez SSH z maszyną wirtualną.

Rysunek 6a: Konfiguracja sieci – przekierowanie portu SSH
Standardowy port, z jakiego korzysta SSH, to 22, dlatego też go udostępniamy. Natomiast gdybyś kiedyś zajmował się hardeningiem serwera, to port ten należy zmienić i pamiętaj, aby też dokonać zmian lub najlepiej zastąpić istniejący. Po wykonaniu wszystkich powyższych kroków wciśnij dwukrotnie przycisk OK. Ustawienia zostaną zapisane.
Instalacja dystrybucji Debian 13 krok po kroku
Uruchom maszynę wirtualną, klikając na nią dwa razy lewym przyciskiem myszy, lub zaznacz ją i w górnej części kliknij przycisk Uruchom.

Rysunek 7: Wybór instalacji dystrybucji Debian
Pierwsze okno, jakie się pojawi, wygląda tak jak na Rysunku 7. Najłatwiej jest wcisnąć ENTER, bo po 30 sekundach bezczynności pojawi się instalator, ale tekstowy. Choć mam ogromny sentyment do przeprowadzania instalacji w ten sposób, bo kiedyś tak to się robiło, to jednak proponuję wcisnąć ENTER, wybierając pierwszą opcję Graphical install, czyli graficzny instalator.
Język i lokalizacja

Rysunek 8: Instalacja Debian – wybór języka
Aby wybrać język polski, wystarczy, że wpiszesz „p”, a drugą opcją będzie „Polska”. Zaznaczasz i klikasz przycisk Dalej.

Rysunek 9: Instalacja Debian – wybór lokalizacji
Wybieramy teraz lokalizację, w jakiej się znajdujemy.

Rysunek 10: Instalacja Debian – układ klawiatury
Pozostawiamy standardowo, chyba że korzystamy z innego układu. Po wciśnięciu przycisku Dalej musimy chwilę zaczekać, aż załadują się wszystkie niezbędne pakiety i zostanie przeprowadzona wstępna konfiguracja.
Nazwa hosta i domena

Rysunek 11: Instalacja Debian – nazwa hosta
Możesz pozostawić domyślną nazwę lub zmienić na, na przykład debian-serwer.

Rysunek 12: Instalacja Debian – nazwa domeny
Pozostawiamy puste.
Konta i hasła (root i użytkownik)

Rysunek 13: Instalacja Debian – konto root
Jest to bardzo ważny krok, gdybyś stawiał serwer, który byłby ogólnie dostępny. W naszym przypadku robimy to dla testów różnego rodzaju oprogramowania, dlatego wymyśl takie hasło, które łatwo zapamiętasz.

Rysunek 14: Instalacja Debian – nazwa konta użytkownika
Ustaw nazwę dla swojego konta użytkownika.

Rysunek 15: Instalacja Debian – skrócona nazwa użytkownika
W tym oknie pozostaw identyczną nazwę jak w poprzednim lub wróć do poprzedniego kroku, tam wpisz swoje imię i nazwisko, a tutaj jego skróconą formę.

Rysunek 16: Instalacja Debian – hasło do konta użytkownika
Tak jak poprzednim razem, gdyby był to serwer wystawiony na zewnętrz, to hasło powinno być bardzo skomplikowane. W naszym wypadku wymyśl takie, które łatwo zapamiętasz. Instalator w tym momencie wykona kolejne podstawowe czynności konfiguracyjne i pojawi się okno partycjonowania.
Partycjonowanie dysku

Rysunek 17: Instalacja Debian – pierwszy etap partycjonowania
Jeśli posiadasz kilka dysków, to świetną możliwością jest skorzystanie z opcji drugiej lub trzeciej. LVM to mechanizm łączący wszystkie dostępne dyski w jeden. Oznacza to, że nie musimy określać, co znajduje się na, którym dysku. Po prostu łączy całą przestrzeń z kilku dysków, tak jakby był to jeden duży dysk, i umiejscawia dane bez konieczności określania fizycznego miejsca.
Jednak my wydzieliliśmy sobie tylko 20 GB, jako jeden dysk dlatego skorzystamy z opcji pierwszej.

Rysunek 18: Instalacja Debian – wybór dysku
Jak wspomniałem przed chwilą, mamy wydzieloną tylko jedną przestrzeń o pojemności 20 GB, dlatego klikamy Dalej.

Rysunek 19: Instalacja Debian – sposoby partycjonowania dysku
W przypadku partycjonowania serwera, który byłby dostępny publicznie, w jednym z poprzednich kroków użyłbym ręcznego sposobu partycjonowania, gdzie stworzyłbym partycje takie jak:
- /
- /boot
- /var
- /home
- /tmp
Natomiast w naszym, nazwijmy to testowym środowisku, nie ma to żadnego znaczenia. Dlatego opcja pierwsza będzie jak najbardziej prawidłowa.

Rysunek 20: Instalacja Debian – akceptacja partycjonowania
Akceptujemy partycje, wciskając Dalej.

Rysunek 21: Instalacja Debian – ostatni etap partycjonowania
Jeśli wszystko się zgadza, wybieramy opcję Tak i wciskamy przycisk Dalej. Teraz musimy chwileczkę zaczekać, aż dysk zostanie podzielony na partycje i zainstalowany system podstawowy.
Menedżer pakietów

Rysunek 22: Instalacja Debian – dodatkowy nośnik danych
Wybraliśmy netinstall po to, aby pobrać wszystko z internetu, dlatego w tym wypadku klikamy po prostu Dalej. W sytuacji, gdybyśmy mieli jakiś dodatkowy nośnik (bo na przykład instalację przeprowadzamy bez dostępu do internetu), to jest to miejsce, w którym należy go dodać.

Rysunek 23: Instalacja Debian – konfiguracja menedżera pakietów
Oczywiście wybieramy Polska, w następnym oknie deb.debian.org, a pole z możliwością wprowadzenia danych serwera pośredniczącego pozostawiamy puste. Niezbędne oprogramowanie zostanie pobrane. Dodatkowo instalator zapyta nas, czy chcemy anonimowo przesyłać dane dotyczące najpopularniejszych pakietów. Decyzję pozostawiam Tobie, ale w przypadku rzeczywistego serwera im mniej jest zainstalowane, tym lepiej.
Wybór minimalnej ilości instalowanych pakietów
W kolejnym kroku otrzymamy możliwość wybrania pakietów, jakich potrzebujemy. Tutaj zaznaczamy tylko to, co niezbędne.

Rysunek 24: Instalacja Debian – wybór pakietów
Odznaczamy Środowisko graficzne Debiana i Podstawowe składniki środowiska graficznego. Pozostaw jedynie zaznaczony serwer SSH i Podstawowe narzędzia systemowe. Pomimo możliwości fizycznego dostępu do maszyny wirtualnej chciałbym, abyś zobaczył, w jaki sposób robi się to, gdy nie ma takiej możliwości. W tym pomoże nam właśnie serwer SSH.
Po wybraniu przycisku Dalej zostanie przeprowadzona instalacja wybranych przez nas pakietów. Teraz pozostaje uzbroić się w cierpliwość.

Rysunek 25: Instalacja Debian – programu rozruchowego GRUB
Program rozruchowy GRUB można określić jako listę, na której znajdują się dostępne systemy/dystrybucje. Umożliwia on również, w razie awarii, uruchomienie dystrybucji w trybie naprawczym. W naszym wypadku pozostawiamy domyślną opcję Tak i wciskamy Dalej.

Rysunek 26: Instalacja Debian – wybór miejsca na instalacje GRUB
Teraz zaznaczamy dostępny dysk/partycję. W przypadku instalacji na fizycznym urządzeniu należy pamiętać, że jeśli GRUB nie będzie zainstalowany na dysku, który w BIOS-ie jest ustawiony jako Primary (czyli główny), to aby dostać się do GRUB, będziesz musiał w trakcie ładowania BIOS-u najczęściej wcisnąć odpowiedni klawisz, aby wyświetlić listę i wybrać dysk, z którego ma zostać przeprowadzony rozruch.

Rysunek 27: Instalacja Debian – koniec instalacji
I na tym kończymy instalację dystrybucji Debian. Zostanie przeprowadzony restart i na końcu pojawi się ekran:

Rysunek 28: Konsola Debian – Okno logowania
W ten sposób zainstalowaliśmy nasz serwer na dystrybucji Debian. Możesz teraz zalogować się jako użytkownik root lub na konto, które stworzyłeś.
Konfiguracja SSH
Pomimo tego, że jest to serwer testowy i masz do niego bezpośredni dostęp, chciałbym, abyś poczuł, jak to wygląda w rzeczywistości. Dlatego podczas instalacji dystrybucji Debian zaznaczyliśmy pakiet SSH. To dzięki SSH będziemy w stanie połączyć się z naszym serwerem. Kiedyś w systemie Windows należało doinstalować dodatkowy program do obsługi SSH. Obecnie możemy to zrobić z poziomu konsoli, tak jak to się robi w Linuksie. W systemie Windows 11 wbudowany jest już klient OpenSSH, dzięki któremu możemy nawiązać połączenie.
Na samym początku uruchommy PowerShell, czyli wiersz poleceń z wbudowanym językiem skryptowym dostępny w Windows 11. Oczywiście możesz skorzystać z klasycznego CMD, ale nie ukrywam, że ostatnio preferuję korzystanie właśnie z tego pierwszego rozwiązania (mówiąc prościej – rozpocząłem zabawę z PowerShellem 😊). W celu uruchomienia konsoli wystarczy kliknąć ikonę lupy lub rozwinąć menu (ikona systemu Windows), kiedyś zwane „Startem”. Następnie w polu tekstowym wpisać powershell i kliknąć Windows PowerShell. Pojawi się okno konsoli. Spróbujemy teraz nawiązać połączenie z naszym serwerem za pomocą polecenia:
ssh root@localhostOtrzymasz komunikat informujący, że po raz pierwszy nawiązujesz sesję ze swoim nowym serwerem do testowania bezpieczeństwa i nie tylko:
The authenticity of host 'localhost (127.0.0.1)' can't be established. ED25519 key fingerprint is SHA256:lAojRhZda/BRG7HVSgr5qr/j16a6eNP/1x83kjCYIS0. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])?Jest to naturalny mechanizm obronny. Informuje nas, że po raz pierwszy próbujemy nawiązać połączenie z serwerem, i żąda od nas potwierdzenia. Wpisujemy yes i już nie będziemy o to ponownie proszeni. Jednak próba zalogowania się do konta administratora jest niemożliwa. Ciekawi mnie, czy wpisywałeś kilkukrotnie poprawne hasło, a i tak nie udało się zalogować? Jest to naturalny mechanizm zabezpieczający przed logowaniem zdalnym do konta root. Musimy zalogować się na nasze konto użytkownika, które stworzyliśmy podczas instalacji:
ssh kgodzisz@localhostPo podaniu hasła zalogujemy się do systemu i z tego poziomu będziemy nim zarządzać. Jeśli korzystasz z dystrybucji Debian, to zastanów się, czy warto zainstalować sudo. Czy w ogóle powinieneś je instalować? Jak nie wiesz, co to sudo, to masz już trzy zadania do wykonania.
Ułatwimy sobie teraz logowanie do naszego serwera, a zarazem zabezpieczymy do niego dostęp tak, że na nasze konto będzie można zalogować się tylko mając odpowiedni klucz. Pierwsze, co należy zrobić, to wrócić do konsoli PowerShell, dlatego wpisujemy exit. Gdy już będziemy w PowerShellu, wpisujemy polecenie:
ssh-keygen -t ed25519 -a 100 -C "klucz_serwer_debian"Możesz się zastanawiać nad opcjami, jakich tu użyłem. Otóż po -t określamy algorytm kryptograficzny, jaki zostanie użyty w naszym kluczu. Opcja -a powoduje, że hasło, jakie podamy, zostanie zahashowane około 100 razy, co znacznie zwiększy bezpieczeństwo. I na końcu podajemy etykietę, pod jaką nasz klucz ma występować. Po wciśnięciu ENTER:
Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\kgodz/.ssh/id_ed25519):Otrzymasz pytanie, gdzie klucz ma być przechowywany. Możesz po prostu nacisnąć ENTER i zostanie on zapisany we wskazanym standardowym miejscu lub podać, gdzie ma zostać zapisany.
Enter passphrase (empty for no passphrase):Tutaj podajemy dodatkowe hasło zabezpieczające, o którym wspominałem. Możesz pozostawić puste, ale zawsze polecam takie stworzyć. Oczywiście w środowisku dostępnym publicznie powinno ono być skomplikowane; w naszym przypadku możesz wymyślić łatwe do zapamiętania.
W tym miejscu ważna uwaga. Jeśli chcesz sobie ułatwić logowanie nie twórz tego dodatkowego hasła. Jeśli chcesz wzmocnić bezpieczeństwo logowania podaj tutaj hasło. W przypadku gdy tego nie zrobisz będziesz mógł zalogować się do serwera za pomocą klucza jaki za chwilę dodasz do swojego systemu.
Przyszła kolej na przeniesienie tego klucza do naszego serwera. Najpierw musimy go wyświetlić:
cat $env:USERPROFILE\.ssh\id_ed25519.pubNastępnie logujemy się na serwer:
ssh kgodzisz@localhostTworzymy folder, w którym umieścimy klucz:
mkdir -p ~/.sshTworzymy w tym folderze plik:
nano ~/.ssh/authorized_keysWklejamy klucz i zapisujemy za pomocą skrótu klawiszowego CTRL+O, a wychodzimy przez CTRL+X. Przyszła pora nadać odpowiednie uprawnienia folderowi i plikowi:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysWpisujemy teraz exit i ponownie próbujemy się zalogować na nasz serwer. Tym razem logując się, łączysz się za pomocą klucza zapisanego na twoim dysku oraz hasła. Tu dochodzi do pewnych sprzeczności. Czy tak naprawdę jest to drugie hasło potrzebne? W pewnym sensie i tak, i nie. Dla takiego środowiska, gdzie dopiero się uczymy, może okazać się zbędne, ale czy powinniśmy korzystać z tego w przypadku serwera produkcyjnego? To kolejny temat, nad którym warto się zastanowić.
To, co chciałem Ci pokazać w związku z SSH, to właśnie zrobiłem. Przejdźmy do ostatniego etapu tego artykułu.
Kopia bezpieczeństwa w VirtualBox (Migawki)
Otóż jeśli masz włączony swój wirtualny serwer, wyloguj się i wyłącz go. VirtualBox posiada bardzo fajną funkcję migawek, które znacznie ułatwią Ci życie podczas instalacji i testowania różnych konfiguracji oraz aplikacji. Mamy obecnie zainstalowany czysty serwer i możemy łączyć się z nim za pomocą SSH. Zapiszmy sobie ten etap tak, byśmy w późniejszym czasie mogli do tego momentu wrócić.
W VirtualBoxie zaznacz serwer i w górnym menu kliknij Maszyna > Narzędzia > Migawki.

Rysunek 29: VirtualBox – Migawki
W górnej części będzie widniał tylko aktualny stan. Natomiast w dolnej masz możliwość wpisywania tekstu w dwóch polach. Wpisz podobnie jak ja lub według własnych preferencji. Następnie wciśnij w dolnym prawym rogu przycisk Zrób. Na górnej liście pojawi się zapisany stan, i jeśli wykonasz jakiekolwiek zmiany w systemie, będziesz mógł wrócić do tego momentu. Docenisz to, gdy okaże się, że dokonałeś takich konfiguracji, które całkowicie posypały serwer.
Podsumowanie
W tej drugiej części, dotyczącej w szczególności SSH, celowo nie podawałem wszystkich informacji na tacy. SSH jest bardzo ważne i warto się z nim zapoznać. W internecie istnieje ogromna ilość poradników, które pozwolą oswoić się z tym narzędziem. Zachęcam do tego szczególnie, bo jest ono podstawą komunikacji między Tobą, a serwerem. Natomiast masz już swój serwer testowy, z którym możesz robić wszystko, co Ci się podoba. Dlatego do dzieła; próbuj, ucz się, psuj! W ten sposób nauczysz się najwięcej. Zachęcam również do zajrzenia tutaj od czasu do czasu i zapisania się do newslettera. Zamierzam co jakiś czas pisać artykuły o tym, jak można wykorzystać taki serwer.
