Die DSGVO stellt Anforderungen an alle, die personenbezogene Daten verarbeiten. Server-Betreiber müssen technische und organisatorische Maßnahmen umsetzen.

Grundlagen

Was sind personenbezogene Daten?

- IP-Adressen
- E-Mail-Adressen
- Namen, Adressen
- Benutzernamen
- Cookies mit Personenbezug
- Standortdaten
- Geräte-IDs

Wann gilt die DSGVO?

- Verarbeitung personenbezogener Daten
- Automatisierte Verarbeitung
- Dateisysteme (auch Papier)
- Niederlassung in der EU oder
- Angebot von Diensten an EU-Bürger

Technische Maßnahmen

Verschlüsselung

# Nginx - SSL/TLS erzwingen
server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.de/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000" always;
}

Datenbank-Verschlüsselung

-- MySQL: Encryption at Rest
ALTER TABLE users ENCRYPTION = 'Y';

-- Sensitive Spalten verschlüsseln
CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARBINARY(255),
    name VARBINARY(255)
);

Backup-Verschlüsselung

# Verschlüsseltes Backup
mysqldump database | gpg -c > backup.sql.gpg

# BorgBackup mit Verschlüsselung
borg init --encryption=repokey /backup/repo

IP-Adressen anonymisieren

Webserver-Logs

# Nginx - IP anonymisieren
map $remote_addr $remote_addr_anon {
    ~(?P<ip>\d+\.\d+\.\d+)\.    $ip.0;
    ~(?P<ip>[^:]+:[^:]+):       $ip::;
    default                     0.0.0.0;
}

log_format anonymized '$remote_addr_anon - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log anonymized;

Apache

# Letzte Oktett entfernen
LogFormat "%{X-Forwarded-For}i - %u %t \"%r\" %>s %b" anonymized
# Oder mit mod_removeip

Matomo

Administration → Privatsphäre → IP anonymisieren
→ 2 Bytes anonymisieren (empfohlen)

Datenlöschung

Log-Rotation

# /etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Automatische Datenlöschung

#!/bin/bash
# Alte Logs löschen (DSGVO: Datensparsamkeit)

# Webserver-Logs älter als 7 Tage
find /var/log/nginx -name "*.log" -mtime +7 -delete

# Analytics-Rohdaten älter als 180 Tage
mysql -e "DELETE FROM matomo_log_visit WHERE visit_last_action_time < DATE_SUB(NOW(), INTERVAL 180 DAY)"

# Alte Backups löschen
find /backup -name "*.tar.gz" -mtime +30 -delete

Datenbank-Bereinigung

-- Alte Nutzerdaten löschen
DELETE FROM users WHERE last_login < DATE_SUB(NOW(), INTERVAL 2 YEAR);

-- Anonymisieren statt Löschen
UPDATE users SET
    email = CONCAT('deleted_', id, '@anonymized.local'),
    name = 'Gelöscht',
    phone = NULL
WHERE deletion_requested = 1;

Zugriffsschutz

SSH-Härtung

# /etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication no
AllowUsers admin deploy

# Fail2ban
apt install fail2ban

Datenbank-Zugriff

-- Minimale Berechtigungen
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'webapp'@'localhost';

-- Keine Remote-Zugriffe
# /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 127.0.0.1

Admin-Bereiche schützen

location /admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # IP-Beschränkung
    allow 192.168.1.0/24;
    deny all;
}

Auftragsverarbeitung

Verträge erforderlich mit

- Hosting-Provider
- Cloud-Dienste (AWS, Azure)
- Backup-Dienste
- CDN-Anbieter
- E-Mail-Provider
- Analytics-Dienste

AVV-Inhalte

1. Gegenstand und Dauer
2. Art und Zweck der Verarbeitung
3. Art der personenbezogenen Daten
4. Kategorien betroffener Personen
5. Technische und organisatorische Maßnahmen
6. Unterauftragnehmer
7. Unterstützungspflichten
8. Löschung nach Vertragsende

Dokumentation

Verfahrensverzeichnis

## Verarbeitungstätigkeit: Webserver-Betrieb

**Verantwortlicher:** Firma GmbH
**Datenschutzbeauftragter:** datenschutz@firma.de

### Zweck der Verarbeitung
- Bereitstellung der Website
- Sicherheit (Logfiles)
- Analyse (anonymisiert)

### Kategorien personenbezogener Daten
- IP-Adressen (anonymisiert nach 7 Tagen)
- Zugriffszeitpunkte
- Aufgerufene Seiten
- Browser-Informationen

### Empfänger
- Keine Weitergabe an Dritte

### Löschfristen
- Logfiles: 7 Tage
- Anonymisierte Analytics: 2 Jahre

### Technische Maßnahmen
- SSL/TLS-Verschlüsselung
- Firewall
- Regelmäßige Updates
- Zugriffskontrolle

TOMs dokumentieren

## Technische und Organisatorische Maßnahmen

### 1. Zutrittskontrolle
- Server in gesichertem Rechenzentrum
- Zugang nur für autorisiertes Personal

### 2. Zugangskontrolle
- SSH nur mit Key-Authentifizierung
- Fail2ban gegen Brute-Force
- 2FA für kritische Systeme

### 3. Zugriffskontrolle
- Minimale Berechtigungen
- Rollenbasierte Zugriffe
- Protokollierung aller Zugriffe

### 4. Weitergabekontrolle
- Verschlüsselung bei Übertragung (TLS)
- Keine unverschlüsselten Protokolle

### 5. Eingabekontrolle
- Protokollierung von Änderungen
- Audit-Logs

### 6. Auftragskontrolle
- AVV mit allen Dienstleistern
- Regelmäßige Überprüfung

### 7. Verfügbarkeitskontrolle
- Regelmäßige Backups
- Disaster Recovery Plan
- Redundante Systeme

### 8. Trennungsgebot
- Getrennte Datenbanken pro Mandant
- Keine Vermischung von Kundendaten

Betroffenenrechte

Auskunft (Art. 15)

// API-Endpoint für Datenauskunft
public function exportUserData($userId) {
    $data = [
        'user' => User::find($userId),
        'orders' => Order::where('user_id', $userId)->get(),
        'logs' => ActivityLog::where('user_id', $userId)->get(),
    ];

    return response()->json($data)
        ->header('Content-Disposition', 'attachment; filename="data-export.json"');
}

Löschung (Art. 17)

// Recht auf Löschung
public function deleteUserData($userId) {
    // Prüfen ob Aufbewahrungspflichten bestehen
    $user = User::find($userId);

    // Anonymisieren oder Löschen
    $user->email = "deleted_{$userId}@anonymized.local";
    $user->name = "Gelöscht";
    $user->phone = null;
    $user->deleted_at = now();
    $user->save();

    // Logs bereinigen
    ActivityLog::where('user_id', $userId)
        ->where('created_at', '<', now()->subDays(7))
        ->delete();

    // Bestätigung
    return response()->json(['message' => 'Daten gelöscht']);
}

Sicherheitsvorfälle

Meldepflicht

Bei Datenpannen innerhalb von 72 Stunden:
1. Art der Verletzung
2. Kategorien betroffener Daten
3. Anzahl betroffener Personen
4. Wahrscheinliche Folgen
5. Ergriffene Maßnahmen

Incident Response

#!/bin/bash
# Incident Response Checkliste

# 1. Dokumentieren
echo "$(date): Vorfall erkannt" >> /var/log/incidents.log

# 2. Eindämmen
# iptables -A INPUT -s ATTACKER_IP -j DROP

# 3. Beweise sichern
tar -czf /backup/incident-$(date +%Y%m%d).tar.gz /var/log

# 4. Melden (wenn Personendaten betroffen)
# → Datenschutzbehörde innerhalb 72h
# → Betroffene bei hohem Risiko

Checkliste

Server-Härtung

□ SSL/TLS aktiviert
□ SSH nur mit Keys
□ Firewall konfiguriert
□ Automatische Updates
□ Fail2ban aktiv
□ Minimale Berechtigungen

Datenschutz

□ IP-Adressen anonymisiert
□ Logs zeitlich begrenzt
□ Verschlüsselung aktiviert
□ Backups verschlüsselt
□ TOMs dokumentiert
□ Verfahrensverzeichnis
□ AVV mit Dienstleistern

Website

□ Datenschutzerklärung
□ Cookie-Banner (wenn nötig)
□ Opt-Out-Möglichkeit
□ SSL-Verschlüsselung
□ Kontaktformular konform

Zusammenfassung

| Maßnahme | Umsetzung | |----------|-----------| | Verschlüsselung | TLS, Datenbank, Backups | | IP-Anonymisierung | Logs, Analytics | | Löschfristen | Log-Rotation, Cleanup-Jobs | | Zugriffsschutz | SSH, Datenbank, Admin | | Dokumentation | TOMs, Verfahrensverzeichnis |

| Recht | Umsetzung | |-------|-----------| | Auskunft | Datenexport-Funktion | | Löschung | Anonymisierung/Löschung | | Berichtigung | Bearbeitungsfunktion | | Widerspruch | Opt-Out |

Fazit

DSGVO-Compliance erfordert technische und organisatorische Maßnahmen auf Server-Ebene. Die wichtigsten Punkte sind Verschlüsselung, IP-Anonymisierung, Zugriffsschutz und dokumentierte Löschfristen. Verträge mit Dienstleistern (AVV) sind Pflicht. Die Dokumentation der Maßnahmen ist für Nachweispflichten essentiell. Bei Unsicherheiten sollte ein Datenschutzbeauftragter hinzugezogen werden.

Hinweis: Diese Informationen ersetzen keine Rechtsberatung. Bei konkreten Fragen sollte ein Rechtsanwalt oder Datenschutzbeauftragter konsultiert werden.