Zabezpieczenie własnego serwera – sześć zasad z praktyki
Serwer w internecie jest skanowany od pierwszej minuty. Widać to najpóźniej przy pierwszym spojrzeniu w logi. Odkąd utrzymuję własny serwer Linux – z kilkoma stronami, własnym DNS i serwerem poczty – bezpieczeństwo nie jest dla mnie dodatkiem, tylko częścią każdej zmiany. Oto zasady, według których pracuję.
1. Domyślnie wszystko zamknięte
Firewall (u mnie UFW) domyślnie blokuje połączenia przychodzące. Otwieram tylko to, czego usługa naprawdę potrzebuje – i każde nowe otwarcie to świadoma decyzja. Lekcja po drodze: Docker tworzy własne reguły firewalla i potrafi ominąć UFW. Dlatego porty kontenerów publikuję tylko na interfejsie lokalnym.
2. Usługi tylko tam, gdzie są potrzebne
Baza danych, z której korzystają tylko aplikacje na tym samym serwerze, nie musi być dostępna z internetu. Moje bazy nasłuchują tylko lokalnie. Czego nie da się osiągnąć, tego nie da się zaatakować.
3. SSH: klucz plus drugi składnik
Same hasła to za mało. U mnie każde logowanie przez SSH wymaga klucza i jednorazowego kodu opartego na czasie (TOTP). Ważny jest plan awaryjny: kody zapasowe i dostęp przez konsolę dostawcy – inaczej jeden błąd odcina dostęp.
4. Automatyczne aktualizacje i ochrona przed brute force
Aktualizacje bezpieczeństwa instaluje automatycznie unattended-upgrades. fail2ban blokuje adresy, z których wielokrotnie nie udaje się zalogować do SSH lub poczty.
5. Minimalne uprawnienia
Serwer WWW może czytać pliki stron – nic więcej. Pliki należą do mojego użytkownika, serwer WWW ma dostęp tylko przez grupę. Jeśli aplikacja zostanie przejęta, nie może zmienić własnego kodu.
6. Szyfrowanie wszędzie – i osobno
Każda strona ma własny certyfikat TLS od Let’s Encrypt z automatycznym odnawianiem. Kiedyś kilka domen dzieliło jeden certyfikat – gdy jedna z nich zniknęła, odnowienie nie udawało się dla wszystkich. Osobne certyfikaty czynią system odporniejszym. Dla poczty dochodzą SPF, DKIM, DMARC, MTA-STS i DANE, a strefa jest podpisana DNSSEC.
Podsumowanie
Żaden z tych środków sam w sobie nie jest spektakularny. Bezpieczeństwo bierze się z ich połączenia – i z nawyku sprawdzania każdej zmiany, zanim trafi na produkcję: przetestować konfigurację, potem przeładować, potem sprawdzić z zewnątrz.
Więcej o budowie serwera w projekcie Własny serwer Linux.