====== Server-Sicherheit ====== Ein Webserver dient dazu, Inhalte einem breiten Publikum verfügbar zu machen. Dies bedeutet zugleich, dass Dritte mit dem Server interagieren. In aller Regel mehrfach täglich (meist automatisierte) Angriffe auf Webserver. Das Ziel ist es dabei, durch die Ausnutzung von Sicherheitslücken an geschützte Daten zu kommen oder den Server für kriminelle Zwecke zu missbrauchen. Neben Angriffen von Außen werden Sie beim langfristigen Betrieb auch mit Problemen konfrontiert, welche von Innen kommen: Nutzer:innen, die versehentlich ihre Befragungsprojekte und Daten löschen, voll-laufende Festplatten oder unzureichende Rechenleistung. Es hat sich bewährt, einen Befragungsserver (welcher oftmals [[:de:general:dsgvo|personenbezogene Daten]] verarbeitet) auf einem separaten Server bzw. in einer eigenen VM zu betreiben. Dies hat zwei Vorteile: Zum einen kann die Software (Webserver-Applikation, PHP) ohne Rücksicht auf andere Software regelmäßig aktualisiert werden. Zum anderen vermeidet man das Risiko, dass Sicherheitslücken in anderer Software (z.B. eine nicht aktualisierte Wordpress-Instanz) Zugriff auf den Server und damit auf Befragungsdaten erlauben. Deshalb wird in der DSGVO auch explizit auf die Trennung von Datenverarbeitungsprozessen verwiesen. Um einen sicheren Server-Betrieb zu gewährleisten, sind folgende Punkte zu beachten: * Sichere Umgebung * Wahl eines zuverlässigen Hosters bzw. Rechenzentrums (bei einigen Hostern stehen die Server ungeschützt im Flur) * Verwendung sicherer und unterschiedlicher Passwörter für SSH (hier zusätzlich Keyfile), MySQL, Administrator-Konto in SoSci Survey, Serverüberwachung u.s.w. -- der Einsatz eines Passwort-Managers wie KeePass XC bietet hier große Vorteile. * Allgemeine Sicherheitsfunktionen * Firewall (z.B. ''iptables'') * Freigabe von Ports 80 und 443 (SMTP-Port 25 nur, wenn der Server auch eingehende Mails verarbeiten muss) * Restriktive IP-Beschränkung des SSH-Ports 22 * MySQL-Port 3306 nur durch einen SSH-Tunnel (z.B. via PuTTY) erreichbar * Malware-Scanner (z.B. ''chkrootkit'' und ''rkhunter'') * Automatisierte Sicherheitsupdates (z.B. ''unattended-upgrades'') * Zusätzlich wöchentliche oder monatliche Systemupdates * Absicherung von Teilnahmeschlüsseln (z.B. Teilnahmecodes) gegen Brute-Force-Angriffe ([[de:server:security:fail2ban]]) * Gängige Verschlüsselung einsetzen bzw. aktivieren * SSL-Verschlüsslung, sodass jeglicher Zugriff auf Fragebögen und Projektverwaltung nur über HTTPS möglich ist * Data-at-Rest-Verschlüsselung für die Datenbank (MariaDB [[https://mariadb.com/kb/en/data-at-rest-encryption-overview/|Data-at-Rest Encryption Overview]]) * Alternativ Verwendung einer verschlüsselten Partition auf dem Server, wenn auch hochgeladene Dateien abgesichert werden müssen (Sicherstellen dass der Server dann nach einem Neustart wieder automatisch anläuft!) * Datensicherung (verschlüsselt) auf einen Backup-Speicher außerhalb des Servers (z.B. Cloud-Speicher mittels ''duply'') * Tägliches Datenbank-Dump (''mysqldump'') inkl. Backup des Dumps -- hier empfehlen wir eine Aufbewahrung für 1 Monat bzw. 12 Monate, wenn die automatische Archivierung von Befragungsprojekten verwendet wird (Nutzer:innen bemerken oftmals erst nach 9 Monaten, dass ihr wichtiges Befragungsprojekt gelöscht wurde) * Inkrementelles Dateisystem-Backup * Kryptografische Schlüssel sicher verwahren und testen, ob die Wiederherstellung beider Backups von einem anderen Server aus tatsächlich möglich ist und funktioniert * Server-Stabilität im Langzeit-Betrieb * Serverüberwachung (z.B. mit ''monit'' und ''munin'') * Automatisierter Server-Neustart (z.B. einmal pro Woche oder pro Monat)