Software
Oprogramowanie odpowiadające za działanie serwera
System wirtualizacyjny
Głównym motywem zakupu terminala o którym pisałem w poście nt. sprzętu była chęć nauki wirtualizacji. Po przestudiowaniu i przemyśleniu wyboru, postawiłem na Proxmox VE, ze względu na dobre wsparcie społeczności, oraz licencje APGLv3. Dzięki temu nie mogłem niskim kosztem uczyć się podstaw zarządzania maszynami wirtualnymi i kontenerami LXC, bez potrzeby opłacania licencji samego systemu.
Proxmox to genialne narzędzie dla entuzjastów, proste w instalacji i konfiguracji, oparte na Debianie, wydajne w kwestii użycia zasobów sprzętowych. Osobiście jestem bardzo zadowolony z wyboru i mogę go polecić innym.
Sam Proxmox to tylko podstawa, na jej fundamentach można budować domowe rozwiązanie serwerowe jakie tylko nam się wymarzy.
Mój główny panel wygląda tak:
Jak widać na załączonym obrazku, posiadam kilka instancji maszyn wirtualnych i kontenerów LXC, mimo to zużycie procesora wynosi średnio około 30%. A stoi na tym procesorze Blog, serwer DNS, dysk NAS, system Home Assistant i serwer gier(odpowiadający za większość zużycia RAM)
Samo skonfigurowanie systemu jest dość proste, w większości wykonywane przez webowy GUI, jest także w sytuacjach awaryjnych dostępna konsola, także przez SSH. Sam korzystałem z niej kilka razy gdy uczyłem się implementowania sieci VLAN i zasady działania mostków w systemach Linuxowych. Można powiedzieć że mam kartę stałego klienta w /etc/network/interfaces
Ze względu na opcjonalne ułatwienie komuś penetracji mojego domowego systemu nie będę się rozwodził na temat konkretnej konfiguracji, powiem jedynie, że maszyny działają w niezależnych od siebie sieciach, a ruch jest zarządzany przez proxmox i jego mostki, skąd dalej odpowiednie reguły firewalla blokują/przydzielają dostęp. Dzięki temu ograniczam możliwość ataku poprzez odizolowanie dostępu maszyn udostępnionych w sieć, a tych spełniających funkcje domowe jak NAS czy w przyszłości Home Assistant (Bo ten drugi aktualnie w celach pokazowych jest wystawiony na świat)
DNS - PiHole
Serwery DNS odpowiadają za literację “komputerowych” adresów sieciowych IP (np. 127.0.0.1) na przyjemniejsze dla ludzkiego umysłu adresy słowne. Dodatkowo domowy serwer DNS może wycinać dostęp do poszczególnych stron internetowych - w moim przypadku mam ustawione wycinanie złośliwych reklam, oraz stron oflagowanych przez CERT jako zagrażających bezpieczeństwu. PiHole działa w kontenerze LXC, ruch do niego jest domyślnie kierowany z routera, przez co każde urządzenie chcące połączyć się z internetem najpierw skorzysta z niego, w przypadku braku dostępności PiHole, oczywiście mam ustawione zapasowe DNSy Googla czy Cloudflare.
Tak wygląda mój panel startowy Pi-Hole, widać na nim ładne natężenie ruchu sieciowego :)
Blokowanie irytujących reklam i niebezpiecznych stron
Samo zarządzanie PiHole jest jeszcze łatwiejsze niż w przypadku proxmoxa, mamy intuicyjny interfejs graficzny, dostępny przez przeglądarke. W łatwy sposób możemy dodawać listy blokowanych stron, każdy ma swoje osobiste preferencje więc polecam wpisać w wyszukiwarce “Pihole listy” i dobrać samemu te najbardziej odpowiadające. Jedyną którą mogę polecić jest oficjalna lista niebezpiecznych stron aktualizowana przez CERT Polska - Tu link do niej
Panel konfiguracji list wygląda tak:
Używając takiego blokera chronimy nie tylko siebie, lecz także i bliskich połączonych z naszą siecią Wi-Fi, nawet gdy klikną w niebezpieczny odnośnik w mailu, nie dostaną się do oszusta - serwer DNS odrzuci takie zapytanie
Po wpisaniu przykładowego adresu z końca listy CERT, pojawi nam się w przeglądarce taka informacja:
Lokalne adresy
Oprócz powyższego zastosowania, w przypadku bardziej rozbudowanych sieci domowych z serwerami NAS, systemami smart home - przydatna będzie transformacja cyfrowych adresów lokalnych, na lepiej zrozumiałe literowe. Sam z tego korzystam, wystarczy raz przypisać odpowiednią domenę (w moim przypadku *.local.lan) do danego stałego adresu IP i voila, koniec z zapamiętywaniem ciągów cyfr, wystarczy teraz wpisać adres jak w zwyczajnej stronie internetowej i mamy dostęp!
Panel konfiguracyjny jest praktycznie indentyczny z tym stosowanym do zarządzania blokowanymi adresami.
Przykładem niech będzie Home Assistant - zamiast wpisywać adresu IP, wystarczy że wpiszę “homeassistant.local.lan” i gotowe!
Instalacja
Aby zainstalować na Proxmox PiHole, trzeba najpierw stworzyć i skonfigurować kontener z systemem operacyjnym, w moim przypadku był to Debian instalowany z pliku .ISO. (w przypadku instalacji LXC mamy dostępne proste paczki TurnKey), po instalacji aktualizujemy system i instalujemy narzędzie CURL.
apt update && apt upgrade -y |
apt install curl -y
Następnie podążamy z oficjalną ścieżką instalacji serwera dostępną na stronie Pi-Hole. W skrócie - wpisujemy poniższą komendę i po chwili w terminalu pokaże nam się instalator.
curl -sSL https://install.pi-hole.net | bash
Po instalacji PiHole możemy na routerze czy firewallu ustawić odpowiednie przekierowanie do serwera DNS, tak aby nasz domowy był traktowany priorytetowo.
Serce bloga - Jekyll + LAMP
Od prostszych rzeczy - Jekyll
Jekyll jest silnikiem do “prostszego” tworzenia statycznych stron internetowych - takich jak ten blog. Silnik jest skierowany głównie dla bardziej zaawansowanych użytkowników, w przeciwieństwie do np. WordPressa instalacja i późniejsza edycja wymaga trochę umiejętności, w zamian za to otrzymujemy lekkie strony idealne do wykorzystania jako wizytówki czy blogi. O tym silniku dowiedziałem się dzięki innemu blogowi, poświęconemu prywatności - blog ciemnastrona.
Po krótce gotowy moduł silnika dla użytkownika ukazuje zawartość pogrupowaną w odpowiednie foldery, możemy w łatwy sposób zmieniać czy styl strony, czy jej poszczególne moduły, silnik po wpisaniu polecenia budowy przekonwertuje to na odpowiednie pliki html i css, dzięki czemu nie muszę na przykład robić osobnej strony dla każdego postu - silnik robi wszystko za mnie jak już go skonfigurowałem.
Przykładowy proces tworzenia posta wygląda jak na obrazku poniżej. Piszę prosty tekst korzystając ze składni MarkDown, potem blog to konwertuje w odpowiednie znaczniki HTML i dodaje style przewidziane przezemnie w plikach .sass
Instalacja
W celu instalacji polecam zapoznanie się z oficjalną stroną silnika, przytoczoną na początku poprzedniego akapitu. Od siebie zwrócę uwagę na korzystanie z odpowiednich uprawnień, nie radzę odpalać gem install jekyll build
jako użytkownik o uprawnieniach administratora, sporo mi to krwi napsuło przywracanie dostępu dla mniej uprawnionych użytkowników (czyli tego za pomocą którego buduje strone silnikiem i użytkownika apache który strone udostępnia). Polecam także zainstalowanie dodatku Jekyll-Postfiles, ułatwia on znacząco prace nad postami, pozwalając użytkownikowi po prostu stworzyć profil z postem i w nim umieszać obok pliku tekstowego - pliki z grafikami.
Korzystanie - szybko i zwięźle
Posty piszemy w języku markdown, nazywamy je odpowiednio(u mnie rok-miesiąc-dzień-nazwaposta), wrzucamy do tak samo nazwanego folderu umieszczonego w _posts i gotowe. Jeśli chcemy zmienić stronę wizualną, korzystamy z języka .scss i plików umieszczonych w folderze _sass, kolejną opcją zmiany wizualnej jest ustawienie własnych schematów strony, dostępnych w folderze _layout, one korzystają z języka HTML i składni Liquid, dobra dokumentacja jak korzystać z silnika jest oczywiście na stronie projektu. Konfiguracje samego jądra znajdziemy w pliku _config.yml i Gemfile - polecam poczytać na ten temat w źródłach, oszczędza to sporo pracy! Pisząc post możemy używać komendy
jekyll serve --livereload
a następnie przejść do strony którą nam poda terminal - będzie to automatycznie odświeżana strona, dzięki której zobaczymy na żywo jak wygląda postęp naszych prac, w terminalu pojawią się także wszelkie błędy jeśli coś naknocimy.
Gdy chcemy mieć gotową stronę wpisujemy
jekyll build
Ja mam w pliku konfiguracyjnym ustawioną lokalizację z której korzysta apache, więc gdy jekyll skończy zbudować, wystarczy że zrestartuje serwer apache i mam świeżą stronę bloga!
LAMP - Linux, Apache, MySQL(albo inne bazy danych), Perl/PHP/Python.
Linux w tym akronimie to debian, na którym stoi zarówno jekyll jak i wymieniony następnie Apache. Korzystam z bazy danych MariaDB i języka PHP. Dzięki zastosowaniu Jekylla, nie muszę samodzielnie kodować stron, wystarczyło zainstalować wymieniony pakiet LAMP, skonfigurować apache aby miał odpowiednie uprawnienia(do systemu i baz danych), korzystał z wymaganych plików i gotowe. Gdy skończę pisać post, wystarczy w terminalu z uprawnieniami administratora wpisać
/etc/init.d/apache2 restart
i serwer apache się momentalnie uruchomi ponownie.
Łatwiejsze zarządzanie - FTP i klucze SSH
FTP
Aby nie wklejać po kolei poleceń kopiowania plików przez konsolę (scp), korzystam z vsftpd i programu FileZilla, w ten sposób logując się na konto odpowiedniego użytkownika przenoszę pliki jak obrazki do postów, dzięki korzystaniu z konta użytkownika mają one automatycznie poprawnego właściciela i reguły dostępów. Doświadczenie mnie nauczyło wielu problemów korzystania z konta roota do tego celu ;)
SSH
Kluczy ssh używam aby nie musieć podawać hasła za każdym razem gdy korzystam z VisualStudioCode lub gdy korzystam z terminala PowerShell, po ustawieniu par kluczy, zapisaniu w pliku konfiguracyjnym z której tożsamości programy mają korzystać - serwer i host łączą się automatycznie bez prośby o hasło!