# Basis-System ## Übersicht Diese Kategorie umfasst Playbooks und Rollen für grundlegende Systemkonfiguration und Infrastruktur-Services wie ClamAV-Antivirus, Zeitsynchronisation (Chrony) und allgemeine System-Setup-Aufgaben. **Anwendungsfälle**: - Installation von ClamAV-Antivirus-Server - NTP-Zeitserver-Konfiguration (Chrony) - Docker-Installation und -Konfiguration - Basis-Tools-Installation - System-Härtung - MOTD-Konfiguration - Admin-Benutzer-Erstellung --- ## Playbooks ### deploy-clamav-server.yml Bereitstellung eines dedizierten ClamAV-Antivirus-Servers. **Datei**: `playbooks/deploy-clamav-server.yml` **Zweck**: Installation und Konfiguration eines zentralen ClamAV-Servers für Antivirus-Scanning. Dieser Server wird von Mailcow-Instanzen für Malware-Scanning verwendet. **Ziel-Hosts**: `clamav-servers` (Inventory-Gruppe) **Benutzer**: `tincadmin` (mit sudo-Rechten) **Verwendete Rollen**: - `deploy-clamd` **Verwendungsbeispiel**: ```bash # ClamAV-Server bereitstellen ansible-playbook playbooks/deploy-clamav-server.yml \ -i inventories/icp-fra-pve1.yml \ -K # Mit spezifischer ClamAV-Version ansible-playbook playbooks/deploy-clamav-server.yml \ -i inventories/icp-fra-pve1.yml \ -e "clamd_version=1.4.3" \ -K ``` **Abhängigkeiten**: - `deploy-clamd` Rolle - Build-Tools (gcc, cmake, Rust) - Internet-Zugriff für ClamAV-Source-Download **Besonderheiten**: - **Kompiliert ClamAV von Source** (Version 1.4.2) - Installiert FreshClam für Signatur-Updates - Konfiguriert systemd-Services - Erstellt dedizierte clamav-User/Group **Workflow**: 1. Installiert Build-Dependencies 2. Erstellt clamav-Benutzer und -Gruppe 3. Lädt ClamAV-Source herunter 4. Kompiliert mit CMake 5. Installiert Binärdateien 6. Konfiguriert ClamAV-Daemon 7. Konfiguriert FreshClam (Signatur-Updates) 8. Erstellt und startet systemd-Services **Integration**: Siehe [Mail-Server → migrate-clamd.yaml](04-Mail-Server-Verwaltung.md#migrate-clamdyaml) **⚠️ Hinweis**: Kompilation kann 10-20 Minuten dauern je nach System-Performance. --- ### setup-chronyd.yml Setup des Chronyd-NTP-Zeitservers. **Datei**: `playbooks/setup-chronyd.yml` **Zweck**: Installation und Konfiguration von Chrony für präzise Zeitsynchronisation auf Debian/Ubuntu-Systemen. **Ziel-Hosts**: `all` (gefiltert auf Debian/Ubuntu) **Benutzer**: `tincadmin` (mit sudo-Rechten) **Verwendete Rollen**: - `system` (Task: `setup-timeserver`) **Verwendungsbeispiel**: ```bash # Chrony auf allen Hosts installieren ansible-playbook playbooks/setup-chronyd.yml \ -i inventories/icp-fra-pve1.yml \ -K # Auf einzelnem Host ansible-playbook playbooks/setup-chronyd.yml \ -i inventories/icp-fra-pve1.yml \ --limit timeserver.example.com \ -K ``` **Abhängigkeiten**: - `system` Rolle - Debian/Ubuntu Betriebssystem **Besonderheiten**: - **Einfaches Playbook** ohne komplexe Logik - **Deinstalliert NTPd** (falls vorhanden, Konflikt mit Chrony) - Installiert Chrony - Konfiguriert NTP-Pools - Startet und aktiviert chronyd-Service **Workflow**: 1. Entfernt ntpd (falls installiert) 2. Installiert chrony-Paket 3. Konfiguriert NTP-Server-Pools 4. Startet chronyd-Service 5. Aktiviert Service beim Boot **Warum Chrony statt NTP**: - ✅ Bessere Performance bei instabilen Verbindungen - ✅ Schnellere Synchronisation nach Boot - ✅ Geringerer Ressourcenverbrauch - ✅ Moderne Alternative zu ntpd --- ## Rollen ### Rolle: deploy-clamd **Zweck**: Kompiliert, konfiguriert und stellt ClamAV-Antivirensoftware bereit. **Pfad**: `roles/deploy-clamd/` **Hauptaufgaben**: #### 1. install-dependencies.yml Installiert Build-Tools und Abhängigkeiten. **Installierte Pakete**: - Build-Essentials: `gcc`, `g++`, `make`, `cmake` - Rust-Toolchain (für ClamAV 1.4.x) - Python3 und pip - Entwicklungsbibliotheken: `libssl-dev`, `libjson-c-dev`, `libpcre2-dev` - Zusatztools: `wget`, `curl`, `pkg-config` **Besonderheit**: Installiert Rust über rustup (erforderlich ab ClamAV 1.4.x) #### 2. setup-clamav-user-group.yml Erstellt System-Benutzer und -Gruppe für ClamAV. **Funktionen**: - Erstellt Gruppe `clamav` - Erstellt System-User `clamav` (no-login) - Erstellt Verzeichnisse: - `/var/lib/clamav` (Datenbank) - `/var/log/clamav` (Logs) - `/var/run/clamav` (PID-Files) - Setzt korrekte Berechtigungen #### 3. compile-clamav.yml Lädt ClamAV-Source herunter und kompiliert. **Funktionen**: - Download von GitHub (Version 1.4.2) - Entpackt Source - Konfiguriert mit CMake: ```bash cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DENABLE_SYSTEMD=ON \ -DENABLE_JSON_SHARED=ON ``` - Kompiliert mit `make -j$(nproc)` - Installiert mit `make install` **Dauer**: 10-20 Minuten je nach CPU #### 4. configure-clamav.yml Konfiguriert ClamAV-Daemon und FreshClam, erstellt systemd-Services. **Funktionen**: - Generiert `clamd.conf` aus Template - Generiert `freshclam.conf` aus Template - Erstellt systemd-Service-Files: - `clamav-daemon.service` - `clamav-freshclam.service` - Reload systemd - Startet Services **Standardvariablen** (`defaults/main.yml`): | Variable | Default | Beschreibung | |----------|---------|-------------| | `clamd_version` | `1.4.2` | ClamAV-Version zum Kompilieren | **Templates**: #### clamav-config.j2 ClamAV-Daemon-Konfiguration. **Wichtige Einstellungen**: ```ini LogFile /var/log/clamav/clamd.log LogFileMaxSize 10M LogTime yes LogSyslog yes # Scanning-Parameter MaxThreads 4 MaxDirectoryRecursion 15 MaxFileSize 100M # Network TCPSocket 3310 TCPAddr 0.0.0.0 # Lauscht auf allen Interfaces ``` #### freshclam-config.j2 FreshClam-Konfiguration (Virus-Signatur-Updates). **Wichtige Einstellungen**: ```ini DatabaseDirectory /var/lib/clamav LogFile /var/log/clamav/freshclam.log # Update-Häufigkeit Checks 24 # 24x pro Tag (jede Stunde) # Update-Quellen DatabaseMirror database.clamav.net DatabaseMirror db.local.clamav.net # SecureInfo URLs für Premium-Signaturen # (optional, falls lizenziert) ``` #### systemd-clamav-service.j2 Systemd-Service für ClamAV-Daemon. ```ini [Unit] Description=ClamAV Antivirus Daemon After=network.target [Service] Type=forking ExecStart=/usr/local/sbin/clamd Restart=on-failure User=clamav Group=clamav [Install] WantedBy=multi-user.target ``` #### systemd-freshclam-service.j2 Systemd-Service für FreshClam. ```ini [Unit] Description=ClamAV Virus Database Updater After=network.target [Service] Type=simple ExecStart=/usr/local/bin/freshclam -d Restart=on-failure User=clamav Group=clamav [Install] WantedBy=multi-user.target ``` **Handler**: | Handler | Funktion | |---------|----------| | `Reload Systemd Daemon` | Lädt systemd-Konfiguration neu | | `Start Clamd Service` | Startet ClamAV-Daemon | | `Start Freshclam Service` | Startet FreshClam-Service | **Verwendung**: ```yaml - name: Deploy ClamAV Server hosts: clamav-servers become: true roles: - deploy-clamd ``` **Weiterführende Informationen**: - Scanning-Performance: 50-200 MB/s je nach Hardware - RAM-Bedarf: ~1-2 GB (für Signatur-Datenbank) - Signatur-Updates: Automatisch jede Stunde - Network-Port: 3310 (TCP) --- ### Rolle: system **Zweck**: Grundlegende Systemkonfiguration und Administration. **Pfad**: `roles/system/` **Hauptaufgaben**: #### 1. install-basic-tools.yaml Installiert essenzielle System-Tools. **Installierte Pakete**: - `git` - Versionskontrolle - `curl`, `wget` - Download-Tools - `vim` - Editor - `htop` - Prozess-Monitor - `net-tools` - Netzwerk-Tools (ifconfig, netstat) - `tcpdump` - Netzwerk-Paket-Analyse - `bind9-dnsutils` - DNS-Tools (dig, nslookup) - `gnupg` - GPG-Verschlüsselung - `sudo` - Privilege Escalation **Verwendung**: ```yaml - include_role: name: system tasks_from: install-basic-tools ``` #### 2. install-docker.yaml Installiert Docker von offiziellem Repo oder tinc-Mirror. **Funktionen**: - Fügt Docker GPG-Key hinzu - Konfiguriert Docker APT-Repository - Installiert Docker CE, CLI, containerd - Konfiguriert Docker-Daemon - Startet und aktiviert Service **Variablen**: ```yaml docker_install_source: "official" # oder "tinc" ``` **Verwendung**: ```yaml - include_role: name: system tasks_from: install-docker ``` **Siehe auch**: [Container-Management → install-docker.yml](03-Container-Management.md#dockerinstall-dockeryml) #### 3. install-docker-image-mirror.yaml Konfiguriert Docker HTTP-Proxy für Image-Mirror. **Funktionen**: - Installiert CA-Zertifikat für Proxy - Konfiguriert systemd-Override für Docker - Setzt HTTP_PROXY, HTTPS_PROXY Environment-Variablen - Restart Docker-Daemon **Variablen**: ```yaml use_docker_image_mirror: true docker_mirror_location: "SC" # oder "tinc" ``` **Proxy-Server**: - SC (ServerCow): `dim.servercow.com:3128` - tinc: `[2a07:6fc0:c:2809::20]:3128` **Verwendung**: ```yaml - include_role: name: system tasks_from: install-docker-image-mirror ``` #### 4. setup-timeserver.yaml Installiert und konfiguriert Chrony für NTP. **Funktionen**: - Deinstalliert ntpd (Konflikt-Vermeidung) - Installiert chrony - Konfiguriert NTP-Pools: - `0.debian.pool.ntp.org` - `1.debian.pool.ntp.org` - `2.debian.pool.ntp.org` - `3.debian.pool.ntp.org` - Startet und aktiviert chronyd **Verwendung**: ```yaml - include_role: name: system tasks_from: setup-timeserver ``` #### 5. ssh-hardening.yaml Ruft SSH-Schlüssel von URL ab und härtet sshd_config. **Funktionen**: - Download autorisierter SSH-Keys von URL - Konfiguriert sshd_config mit Härtung: - `PermitRootLogin without-password` - `PasswordAuthentication no` - `PubkeyAuthentication yes` - Moderne Krypto-Algorithmen - Restart SSH-Service **Template**: `templates/sshd_config.j2` **Verwendung**: ```yaml - include_role: name: system tasks_from: ssh-hardening ``` **⚠️ Vorsicht**: Testen Sie auf einem Host zuerst, um Aussperrung zu vermeiden! #### 6. check-disk-utilization.yaml Prüft mindestens 4 GB verfügbaren Speicherplatz. **Funktionen**: - Ermittelt verfügbaren Speicher auf `/` - Schlägt fehl wenn weniger als 4 GB frei - Nützlich vor großen Updates **Verwendung**: ```yaml - include_role: name: system tasks_from: check-disk-utilization ``` **Verwendung in**: [Mail-Server → update-mailcow.yaml](04-Mail-Server-Verwaltung.md#update-mailcowyaml) #### 7. special-admin-create.yaml Erstellt Admin-Benutzer mit Sudo ohne Passwort. **Funktionen**: - Erstellt Benutzer `specialadmin` (konfigurierbarer Name) - Fügt zu `sudo`-Gruppe hinzu - Konfiguriert passwordless sudo - Kopiert SSH-Keys **Verwendung**: ```yaml - include_role: name: system tasks_from: special-admin-create vars: admin_username: myadmin ``` #### 8. install-motd.yaml Installiert custom Message of the Day (MOTD). **Funktionen**: - Kopiert MOTD-File von `files/motd` - Zeigt bei jedem SSH-Login - Kann Branding, Warnungen, Informationen enthalten **File**: `roles/system/files/motd` **Verwendung**: ```yaml - include_role: name: system tasks_from: install-motd ``` **Standardvariablen**: ```yaml # Docker-Konfiguration use_docker_image_mirror: true docker_mirror_location: "SC" # oder "tinc" docker_install_source: "official" # NTP-Server ntp_servers: - 0.debian.pool.ntp.org - 1.debian.pool.ntp.org - 2.debian.pool.ntp.org - 3.debian.pool.ntp.org ``` **Handler**: | Handler | Funktion | |---------|----------| | `Reload systemd` | Lädt systemd-Konfiguration neu | | `Restart SSH` | Startet SSH-Daemon neu | | `Restart Docker` | Startet Docker-Service neu | | `Restart chronyd` | Startet Chrony-Service neu | | `Enable Docker` | Aktiviert Docker beim Boot | | `Start Docker` | Startet Docker-Service | **Templates**: #### sshd_config.j2 SSH-Daemon-Konfiguration mit Härtung. **Wichtige Einstellungen**: ```ini # Authentifizierung PermitRootLogin without-password PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no # Krypto Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org # Sicherheit PermitEmptyPasswords no X11Forwarding no MaxAuthTries 3 LoginGraceTime 20 ``` **Files**: #### files/motd Custom Message of the Day. Kann enthalten: - Systemidentifikation - Sicherheitshinweise - Kontaktinformationen - Maintenance-Ankündigungen **Verwendung der Rolle**: ```yaml # Vollständige System-Setup - name: System Base Configuration hosts: all become: true roles: - system ``` --- ### Rolle: updates **Zweck**: Verschiedene Update-Mechanismen für unterschiedliche Distributionen. **Pfad**: `roles/updates/` **Hauptaufgaben**: #### 1. apk-based-update.yaml Für Alpine Linux Updates. **Funktionen**: - `apk update` - `apk upgrade` #### 2. apt-based-update.yaml Für Debian/Ubuntu Updates. **Funktionen**: - `apt update` - `apt dist-upgrade` - Kernel-Update-Prüfung #### 3. apt-cleaning.yaml APT-Cache-Bereinigung. **Funktionen**: - `apt clean` - `apt autoclean` - `apt autoremove` #### 4. debian-major-upgrade-apt.yaml Upgrade auf neue Debian-Hauptversion. **Funktionen**: - Ändert Paketquellen - `apt update` - `apt dist-upgrade` **Verwendung**: Diese Rolle wird als **Fallback** verwendet, wenn spezifischere Rollen nicht passen. **Siehe bevorzugt**: [`os-updates` Rolle](01-OS-Management.md#rolle-os-updates) --- ## Best Practices ### 1. ClamAV-Server-Dimensionierung **Empfohlene Hardware**: - CPU: 2+ Cores - RAM: 4 GB (2 GB für ClamAV, 2 GB für System) - Disk: 20 GB (10 GB für Signaturen und Logs) - Network: Gbit-Ethernet empfohlen ### 2. Chrony-Konfiguration Verwenden Sie mehrere NTP-Server für Redundanz: ```yaml ntp_servers: - 0.de.pool.ntp.org - 1.de.pool.ntp.org - ptbtime1.ptb.de # Deutsche Physikalisch-Technische Bundesanstalt - ptbtime2.ptb.de ``` ### 3. Docker-Mirror nutzen Für schnellere Image-Downloads in internen Netzwerken: ```yaml use_docker_image_mirror: true docker_mirror_location: "tinc" ``` ### 4. Basis-Tools konsistent installieren Installieren Sie Basis-Tools auf allen Hosts: ```bash ansible all -i inventories/icp-fra-pve1.yml \ -m include_role \ -a "name=system tasks_from=install-basic-tools" \ -b ``` ### 5. Regelmäßige ClamAV-Signatur-Updates FreshClam aktualisiert automatisch. Überprüfen Sie regelmäßig: ```bash # Auf ClamAV-Server freshclam --version journalctl -u clamav-freshclam -n 50 ``` --- ## Fehlerbehebung ### Problem: ClamAV-Kompilation schlägt fehl **Symptome**: Build-Fehler während `compile-clamav.yml` **Lösung**: 1. Überprüfen Sie Rust-Installation: ```bash rustc --version cargo --version ``` 2. Installieren Sie fehlende Dependencies manuell 3. Überprüfen Sie Internet-Verbindung für Source-Download 4. Erhöhen Sie RAM (ClamAV-Build benötigt ~2 GB) ### Problem: Chrony synchronisiert nicht **Symptome**: Uhrzeit ist falsch oder driftet **Lösung**: 1. Überprüfen Sie Chrony-Status: ```bash chronyc tracking chronyc sources -v ``` 2. Testen Sie NTP-Server-Erreichbarkeit: ```bash chronyc -n sources ping 0.debian.pool.ntp.org ``` 3. Restart Chrony: ```bash systemctl restart chronyd ``` ### Problem: Docker-Mirror funktioniert nicht **Symptome**: Image-Pulls schlagen fehl oder sind langsam **Lösung**: 1. Testen Sie Proxy-Erreichbarkeit: ```bash curl -I http://dim.servercow.com:3128 ``` 2. Überprüfen Sie Docker-Daemon-Config: ```bash cat /etc/systemd/system/docker.service.d/http-proxy.conf ``` 3. Restart Docker: ```bash systemctl restart docker ``` ### Problem: SSH-Härtung sperrt aus **Symptome**: Kein SSH-Zugriff nach Härtung **Prävention**: - Testen Sie zuerst auf einem Non-Production-Host - Halten Sie Console-Zugriff bereit (Proxmox, IPMI) - Behalten Sie eine offene SSH-Session während Änderungen **Lösung**: 1. Zugriff über Console 2. Revert sshd_config: ```bash cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config systemctl restart sshd ``` --- ## Nützliche Kommandos ### ClamAV-Operationen ```bash # Signatur-Version prüfen clamdscan --version # Manueller Scan clamdscan /path/to/directory # Signatur-Update manuell freshclam # ClamAV-Status systemctl status clamav-daemon journalctl -u clamav-daemon -f ``` ### Chrony-Operationen ```bash # Zeitquellen anzeigen chronyc sources -v # Synchronisations-Status chronyc tracking # Force-Sync (bei großer Drift) chronyc makestep # Statistiken chronyc sourcestats -v ``` ### System-Tools ```bash # Installierte Basis-Tools prüfen dpkg -l | grep -E 'git|curl|wget|vim|htop' # Docker-Version docker --version docker compose version # Verfügbarer Speicher df -h ``` --- **Navigation**: [← Zurück: Virtualisierung](06-Virtualisierung.md) | [Nächstes: Cleanup-Aufgaben →](08-Cleanup-Aufgaben.md)