8.7 KiB
AutoScript - Zautomatyzowana Konfiguracja Serwera
1. Przegląd
Ten projekt zawiera kompleksowy skrypt start.sh, który automatyzuje proces konfiguracji i zabezpieczania nowego serwera opartego na systemie Debian (lub jego pochodnych, jak Ubuntu). Skrypt instaluje niezbędne oprogramowanie, wzmacnia zabezpieczenia systemu (hardening) i wdraża środowisko aplikacyjne oparte na kontenerach Docker.
Jest to idealne rozwiązanie do szybkiego przygotowania serwera deweloperskiego lub produkcyjnego, z gotowym do użycia reverse proxy (Traefik) oraz pełnym stosem monitoringu (Prometheus, Grafana).
2. Główne Funkcje
- Automatyzacja: Uruchom jeden skrypt, aby w pełni przygotować serwer.
- Zabezpieczenia (Hardening):
- Konfiguracja firewalla
UFW. - Wzmocnienie zabezpieczeń SSH (zmiana portu, blokada logowania roota, autoryzacja kluczem).
- Tworzenie dedykowanego użytkownika
adminz uprawnieniamisudoi weryfikacją dwuetapową (TOTP). - Instalacja i konfiguracja
CrowdSec(system zapobiegania włamaniom). - Wdrożenie podstawowych zabezpieczeń jądra systemu.
- Konfiguracja firewalla
- Środowisko Docker:
- Instalacja i konfiguracja Docker Engine z najlepszymi praktykami (m.in.
userns-remap). - Wdrożenie
Traefikjako reverse proxy z automatycznym generowaniem certyfikatów SSL/TLS od Let's Encrypt (przy użyciu Cloudflare DNS).
- Instalacja i konfiguracja Docker Engine z najlepszymi praktykami (m.in.
- Monitoring i Alerty:
- Wdrożenie
Prometheusdo zbierania metryk. - Wdrożenie
Grafanado wizualizacji danych z gotową konfiguracją. - Wdrożenie
Alertmanagerdo wysyłania powiadomień o anomaliach (e-mailem). - Wdrożenie eksporterów metryk (
node-exporter,cAdvisor,blackbox-exporter).
- Wdrożenie
- Zarządzanie Sekretami:
- Bezpieczne zarządzanie hasłami i kluczami API przy użyciu
sopsiage, bez przechowywania ich w formie jawnego tekstu.
- Bezpieczne zarządzanie hasłami i kluczami API przy użyciu
3. Wymagania Wstępne
Zanim uruchomisz skrypt, upewnij się, że posiadasz:
- Nowy serwer z systemem operacyjnym Debian lub Ubuntu.
- Dostęp do konta
rootna tym serwerze. - Domenę internetową zarządzaną przez Cloudflare.
- Klucz API Cloudflare z uprawnieniami do edycji strefy DNS (
DNS:Edit). Możesz go wygenerować w panelu Cloudflare:My Profile > API Tokens > Create Token. - Publiczny klucz SSH (np. zawartość pliku
~/.ssh/id_ed25519.pub), który zostanie użyty do autoryzacji nowego użytkownikaadmin.
4. Konfiguracja
Skrypt jest konfigurowany za pomocą zmiennych środowiskowych.
Zmienne Wymagane
Musisz ustawić te zmienne przed uruchomieniem skryptu:
PUBLIC_KEY: Twój publiczny klucz SSH.# Przykład export PUBLIC_KEY='ssh-ed25519 AAAA... twoja_nazwa@twoj_komputer'CF_DNS_API_TOKEN: Twój token API od Cloudflare.# Przykład export CF_DNS_API_TOKEN='AbCdEfGhIjKlMnOpQrStUvWxYz1234567890'
Zmienne Opcjonalne
Możesz dostosować działanie skryptu, ustawiając poniższe zmienne (mają one wartości domyślne):
PRIMARY_DOMAIN: Twoja główna domena (np.mojadomena.com). Domyślnie:orzech.me.ADMIN_EMAIL: Adres e-mail do powiadomień (np. od Let's Encrypt, Alertmanager). Domyślnie:admin@orzech.me.TIMEZONE: Strefa czasowa serwera. Domyślnie:Europe/Warsaw.ALERT_SMTP_...: Zmienne do konfiguracji serwera SMTP do wysyłania alertów.*_VER: Wersje obrazów Docker (np.TRAEFIK_VER). Pozwala na przypięcie konkretnych wersji oprogramowania.
5. Użycie
- Sklonuj to repozytorium na swój lokalny komputer lub bezpośrednio na serwer.
- Przejdź do folderu projektu:
cd autoscript. - Ustaw wymagane zmienne środowiskowe (patrz punkt 4).
export PUBLIC_KEY='...' export CF_DNS_API_TOKEN='...' - Opcjonalnie ustaw inne zmienne, aby nadpisać wartości domyślne.
export PRIMARY_DOMAIN='twojadomena.pl' export ADMIN_EMAIL='admin@twojadomena.pl' - Uruchom skrypt z uprawnieniami
root.sudo ./start.sh - Skrypt wykona wszystkie kroki automatycznie. Proces może potrwać kilka minut.
6. Co robić po zakończeniu skryptu?
Po pomyślnym wykonaniu skryptu, twoje środowisko jest gotowe, ale musisz wiedzieć o kilku ważnych zmianach:
-
Nowy Port SSH: Port SSH został zmieniony na losowy numer z zakresu 10000-65535. Znajdziesz go w pliku
/root/ssh_port.txt.# Zaloguj się na serwerze jako root i wykonaj: cat /root/ssh_port.txt -
Logowanie na serwer:
- Logowanie na konto
rootjest zablokowane. - Możesz zalogować się tylko jako użytkownik
adminprzy użyciu podanego klucza SSH i nowego portu.
ssh admin@<IP_SERWERA> -p <NOWY_PORT_SSH> - Logowanie na konto
-
Konfiguracja Weryfikacji Dwuetapowej (TOTP):
- Przy pierwszej próbie użycia
sudoprzez użytkownikaadmin(np.sudo ls /root), zostaniesz poproszony o skonfigurowanie TOTP. - W terminalu wyświetli się kod QR. Zeskanuj go aplikacją do uwierzytelniania (np. Google Authenticator, Authy).
- Zapisz wyświetlone kody zapasowe w bezpiecznym miejscu!
- Przy pierwszej próbie użycia
-
Dostęp do Usług: Wdrożone usługi będą dostępne pod subdomenami Twojej
PRIMARY_DOMAIN:- Prometheus:
https://prometheus.twojadomena.pl - Grafana:
https://grafana.twojadomena.pl - Alertmanager:
https://alertmanager.twojadomena.pl - Traefik Dashboard: Domyślnie nie jest publicznie dostępny. Aby go udostępnić, musiałbyś dodać odpowiednią regułę routingu w plikach konfiguracyjnych Traefik.
- Prometheus:
-
Hasła i Sekrety:
- Hasło administratora Grafany jest generowane automatycznie.
- Wszystkie sekrety są zaszyfrowane w folderze
/opt/services/przy użyciusops. Aby je odczytać lub edytować, musisz użyćsopsbezpośrednio na serwerze, np.:# To polecenie odszyfruje i wyświetli plik w edytorze sudo sops /opt/services/monitoring/secrets/monitoring.env.sops
7. Szczegółowy Opis Działania Skryptu
Skrypt start.sh składa się z szeregu funkcji, które są wywoływane po kolei.
ensure_root: Sprawdza, czy skrypt jest uruchamiany z uprawnieniamiroot.install_node_and_gemini: Instaluje Node.js oraz Gemini CLI.install_base_tools: Instaluje podstawowe pakiety systemowe, takie jakufw(firewall),jq(przetwarzanie JSON),sops(zarządzanie sekretami),age(szyfrowanie),aide(monitorowanie integralności plików) orazCrowdSec(ochrona przed atakami).bootstrap_sops: Inicjalizuje konfiguracjęsopsz kluczemage, który będzie używany do szyfrowania wszystkich sekretów.create_admin_user: Tworzy nowego użytkownikaadmin, dodaje go do grupysudo, konfiguruje logowanie za pomocą klucza SSH i wymusza użycie weryfikacji dwuetapowej (TOTP) przy użyciusudo.harden_ssh: Zabezpiecza serwer SSH: generuje nowe klucze hosta, blokuje logowanie na kontorooti za pomocą hasła, zmienia domyślny port na losowy i ogranicza dostęp tylko do autoryzowanych grup.configure_firewall: Konfiguruje zaporę sieciowąUFW, otwierając tylko niezbędne porty (nowy port SSH, HTTP, HTTPS, poczta, etc.) i blokując resztę. Dodaje również reguły chroniące kontenery Docker.system_baseline: Wprowadza zmiany w konfiguracji jądra systemowego w celu poprawy bezpieczeństwa i wydajności. Konfiguruje trwałe logijournaldoraz automatyczne aktualizacje (unattended-upgrades).install_docker: Instaluje silnik Docker oraz wtyczkędocker-compose. Konfiguruje go zgodnie z zaleceniami bezpieczeństwa, m.in. włączając izolację przestrzeni nazw użytkowników (userns-remap).prepare_secrets: Przygotowuje wszystkie potrzebne sekrety (token Cloudflare, hasło do Grafany, hasło do SMTP) i szyfruje je za pomocąsops, aby nie były przechowywane na dysku jako jawny tekst.deploy_traefik: Wdraża kontener z Traefikiem. Konfiguruje go do obsługi ruchu HTTP/HTTPS, automatycznego przekierowywania na HTTPS oraz zamawiania certyfikatów SSL od Let's Encrypt.deploy_monitoring: Wdraża pełny stos monitoringu, w tym:- Prometheus: do zbierania danych.
- Grafana: do ich wizualizacji.
- Alertmanager: do wysyłania alertów.
- Exportery:
node-exporter(metryki systemu),cAdvisor(metryki kontenerów),blackbox-exporter(monitorowanie dostępności stron).
8. Plik .gitattributes
* text=auto
Ta linia w pliku .gitattributes jest ważna dla spójności projektu. Nakazuje ona systemowi Git automatyczne zarządzanie znakami końca linii w plikach tekstowych. Dzięki temu unikniesz problemów, jeśli będziesz pracować nad projektem na różnych systemach operacyjnych (np. Windows i Linux), które używają różnych standardów dla końca linii.