Skip to content

Latest commit

 

History

History
304 lines (231 loc) · 10.2 KB

README.md

File metadata and controls

304 lines (231 loc) · 10.2 KB

Raspberry Installation

Datum Beschreibung
13.01.2023 Anleitung erstellt
09.09.2023 Komplette Überarbeitung der Anleitung

Vorbereitungen

  1. Raspberry Pi Imager runterladen & installieren

  2. Windows Terminal herrunterladen

  3. Raspberry Pi OS auf Medium schreiben

    • Raspberry Pi OS (other)
    • Raspberry Pi OS Lite (64-bit) (with no desktop enviroment)
    • SD-Karte: Externes Medium auswählen
    • Einstellungen:
      • SSH aktivieren
      • Passwort und Benutzername setzen
      • Spracheinstellungen festlegen
    • schreiben
  4. SSH Verbindung herstellen

    • Windows Terminal öffnen
    • ssh username@[DYNAMISCHE IP vom Raspberry]

Grundkonfiguration

# Paketquellen aktualisieren und updaten
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean -y

# Raspberry Hardwarekonfiguration ändern
# Hier wird u.A. WLAN, BT, Audio sowie die HDMI Schnittstelle deaktiviert
sudo nano /boot/config.txt

# Statische IP-Adresse konfigurieren
sudo nano /etc/dhcpcd.conf

# IPv6 deaktivieren
sudo nano /etc/sysctl.conf

# SysCtl Konfig übernehmen
sudo sysctl -p

# DCHP Dienst neustarten und Status überprüfen
sudo systemctl restart dhcpcd.service
sudo service dhcpcd status

# Hostname ändern
sudo nano /etc/hostname

# Hosts ändern
sudo nano /etc/hosts

# Locale einstellen
sudo raspi-config nonint do_change_locale de_DE.UTF-8 UTF-8
sudo raspi-config nonint do_change_locale de_DE.UTF-8

# Timezone einstellen
sudo raspi-config nonint do_change_timezone Europe/Berlin

# Neustart
sudo reboot

config.txt dhcpcd.conf sysctl.conf hostname hosts

Automatische Updates einrichten

# unattended-upgrades installieren und konfigurieren
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

# Konfigurationsdateien anpassen inkl. Push-Notification via Gotify
# Der Notify-Container Gotify wird später noch eingerichtet
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

# Push-Benachrichtigung, wenn automatische Updates installiert wurden
sudo mkdir ~/skripte -v
sudo nano /home/erik/skripte/unattended-upgrades-notify.sh
sudo chmod +x /home/erik/skripte/unattended-upgrades-notify.sh

# Neustart (zwingend erforderlich wegen SSH Konfiguration)
sudo reboot

20auto-upgrades 50unattended-upgrades unattended-upgrades-notify.sh

SSH einrichten

# SSH Backup erstellen 
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak -v

# zum root-User wechseln
sudo su

# SSH Schlüssel löschen und neu generieren
rm /etc/ssh/ssh_host_*
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""

# entfernt kleine Diffie-Hellman-Module
awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.safe
mv /etc/ssh/moduli.safe /etc/ssh/moduli

# Beschränkt den Schlüsselaustausch auf (key exchange), Chiffrier- (cipher) und MAC-Algorithmen.
nano /etc/ssh/sshd_config.d/ssh-audit_hardening.conf

# wechselt zum normalen Benutzer zurück.
exit

# Generiert einen sicheren SSH-Key (ed25519) - mit y Bestätigen.
sudo ssh-keygen -o -a 100 -t ed25519 -N "" -f /etc/ssh/ssh_host_ed25519_key -C "$(date '+%Y%m%d')-$(hostname -s)-ed25519_key"

# .ssh Ordner und authorized_keys erstellen
mkdir ~/.ssh
touch ~/.ssh/{authorized_keys,config}

# Verschiebt den ssh_host_ed25519_key.pub nach authorized_keys.
sudo cat /etc/ssh/ssh_host_ed25519_key.pub >> ~/.ssh/authorized_keys

# Das .ssh-Verzeichnis für andere Benutzer und Gruppen das leserecht entziehen.
chmod 700 ~/.ssh

# Legt fest, dass die SSH-Schlüsselpaare nur gelesen werden können.
sudo chmod 400 /etc/ssh/ssh_host_ed25519_key*

# Setzt den lokalen Benutzer als Besitzer des Public-Keys.
chown $USER:$USER ~/.ssh/authorized_keys

# Platzhalter erstellen für zukünfige Server zu Server Verbindungen etc.
sudo nano ~/.ssh/config

# zeigt den ssh_host_ed25519_key an.
sudo cat /etc/ssh/ssh_host_ed25519_key >> $(date '+%Y%m%d')-$(hostname -s)-ed25519_key
   # --> Windows -> in Datei speichern ODER scp pi-docker-1:~/*key C:\Users\erikw\.ssh\
   # --> !! ACHTUNG ZEILENENDESEQUENZ LF, NICHT CRLF !!!
   # --> Am besten in VSC öffnen und speichern 
   # --> Dateiname: echo $(hostname)-$(date -I)

# startet den SSH-Dienst neu
sudo service ssh restart

# sshd_conf übernehmen 
sudo nano /etc/ssh/sshd_config

# issue.net anpassen
sudo nano /etc/issue.net

# MOTD löschen
sudo rm /etc/motd
sudo rm /etc/update-motd.d/10-uname

# Gotify Benachrichtigung via SSH 
sudo nano /opt/shell-login.sh
sudo chmod 755 /opt/shell-login.sh
echo "/opt/shell-login.sh > /dev/null 2>&1" | sudo tee -a /etc/profile

ssh-audit_hardening.conf config sshd_config issue.net motd shell-login.sh

Firewall unf Fail2Bann einrichten

# UFW installieren
sudo apt install ufw -y && sudo apt autoclean -y && sudo apt autoremove -y

# eingehende Verbindungen werden abgelehnt und ausgehende Verbindungen zugelassen.
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH Verbindungen zulassen
# ACHTUNG: bitte SSH-Port-Nummer anpassen
sudo ufw allow 62253 comment "ssh"

# UFW aktivieren - mit y bestätigen
sudo ufw enable

# installiert die neueste Fail2ban Version
sudo apt install fail2ban -y -y && sudo apt autoclean -y && sudo apt autoremove -y

# erstellt eine Kopie der Konfigurationsdatei.
sudo cp /etc/fail2ban/jail.{conf,local} -v

# zum root-User wechseln
sudo su

# [sshd] Jail konfigurieren
# Zeilennummer vom sshd-Jail in Variable speichern
i=$(grep -n '\[sshd\]' /etc/fail2ban/jail.local | awk 'NR==2 {print}' | cut -d ':' -f 1 | awk '{print $1 + 1}')

# Grundeinstellungen vom Jail entfernen
sudo sed -i "${i},$((i+7))d" /etc/fail2ban/jail.local

# Neue Einstellungen für den Jail hinzufügen
# Folgende Einstellungen werden mit dem echo-Befehl hinzugefügt:
# Wenn Änderungen gewünscht (z.B. SSH-Port) dann bitte den echo befehl anpassen,
# nicht die untenstehenden Kommentarzeilen!
# enabled = true		port = 62253	logpath = %(sshd_log)s	bantime = 2h	
# backend = %(sshd_backend)s	maxretry = 3	ignoreip = 127.0.0.1/8	findtime = 1d
echo -e "enabled = true\nport = 62253\nlogpath = %(sshd_log)s\nbackend = %(sshd_backend)s" \
	"\nmaxretry = 3\nfindtime = 1d\nbantime = 2h\nignoreip = 127.0.0.1/8" | \
	 sed -i "${i}r /dev/stdin" /etc/fail2ban/jail.local

# wechselt zum normalen Benutzer zurück.
exit

# Fail2ban neu starten.
sudo service fail2ban restart

# Fail2ban nach Reboot automatisch starten
sudo systemctl enable fail2ban

20auto-upgrades 50unattended-upgrades unattended-upgrades-notify.sh

Docker und Portainer

# Docker installieren
sudo mkdir ~/docker_files -v
sudo curl -fsSL https://get.docker.com -o get-docker.sh &&  sudo sh get-docker.sh 
sudo rm get-docker.sh
sudo groupadd docker
sudo usermod -aG docker $USER

# Neustart zwingend durch führen!
sudo reboot

# Docker Netzwerke erstellen
docker network create --subnet=10.0.10.0/24 --gateway=10.0.10.1 intern
docker network create --subnet=10.0.20.0/24 --gateway=10.0.20.1 extern

# Portainer deployen
docker run -d -p 9000:9443 --name portainer \
	--restart=always \
	-v /var/run/docker.sock:/var/run/docker.sock \
	-v portainer:/data \
	--label "com.centurylinklabs.watchtower.enable=true" \
	--network intern \
	portainer/portainer-ce:latest

###################### OPTIONAL ###########################
### Weitere Docker-Hosts via Portainer Agent hinzufügen ###

docker run -d \
  -p 9001:9001 \
  --name portainer_agent \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  --label "com.centurylinklabs.watchtower.enable=true" \
  --network intern \
  portainer/agent:latest

Optional: Server Schlüsselpare austauschen

# 1. Schlüssel vom Server 1 (pi-docker-1) dem Server 2 (pi-docker-2) mitteilen
scp C:\Users\erik/.ssh/20230910-pi-docker-1-ed25519_key pi-docker-1:~/.ssh/20230910-pi-docker-2-ed25519_key

# 2. Auf Server 2 Schlüsseldatei die richtigen Berechtigungen geben
sudo chmod 600 ~/.ssh/20230910-pi-docker-2-ed25519_key

# 3. SSH-Agenten starten
eval "$(ssh-agent -s)"

# 4. Schlüssel hinzufügen via ssh-add
ssh-add 20230910-pi-docker-1-ed25519_key

# Ausgabe: Identity added: 20230910-pi-docker-1-ed25519_key (20230910-pi-docker-1-ed25519_key)

# 5. SSH-Profil anpassen
sudo nano ~/.ssh/config

# Zukünftig kann man via ssh pi-docker-1 eine Verbindung herstellen oder via scp docker-pi-1 Dateien senden

config

Quellen