Dieser Beitrag ist ein Nachtrag für Sys-Admins zu meinem vorherigen Artikel bzgl. der DSGVO und enthält außerdem nützliche Hinweise, wie Webseiten per SSL und per Header-Attribute gehärtet werden.

Fangen wir mit ein paar Änderungen an, die ich wegen der DSGVO auf meinem Server eingeführt habe. Auf allen Servern kommt systemd zum Einsatz. Logs dürfen maximal 7 Tage gespeichert werden, auch im Fehlerfall. Für journald erreicht man das mit folgenden Einstellungen in der /etc/systemd/journald.conf:

MaxRetentionSec=604800
MaxFileSec=86400

Das wird die Logs maximal 7 Tage im Journal speichern (RetentionSec) und jeden Tag rotieren (FileSec). Um die Änderungen direkt anzuwenden: journalctl --vacuum-time=7d. Wichtig ist: falls ein Programm das Journal nicht nutzt, muss es manuell in den Applikationseinstellungen geändert werden. Hier gelten die gleichen Richtlinien. Nötigenfalls muss man IP-Adressen automatisiert per Script aus den Log-Files entfernen. Falls man auf Analysen nicht angewiesen ist, empfehle ich jedoch die Access-Logs vollständig zu deaktivieren. Sonst gelten auch die 7 Tage. Das muss aber in der Datenschutzerklärung stehen. Einen Generator habe ich z.B. auf datenschutz-generator.de gefunden. Beachtet dabei jedoch den Hinweis von kuketz. Für Nginx können Access-Logs mit folgender Zeile in jedem Server-Block oder global in der nginx.conf ausgeschaltet werden: access_log off;.

Für mein längst überfälliges Security-Hardening bzgl. meiner Websites, die ich betreibe, habe ich außerdem mithilfe des Mozilla Observatory einige Checks durchgeführt und habe dementsprechend meine Nginx-Konfigurationen für einzelne Server-Blocks geändert. Falls das auch für eure Konfiguration nötig ist:

mkdir -p /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Für jeden Server-Block das Folgende setzen (evtl. CSP bearbeiten für Inline img oder script):

listen 443 ssl http2;

# enable session resumption to improve https performance
ssl_session_timeout 5m;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# enables server-side protection from BEAST attacks
ssl_prefer_server_ciphers on;

# disable SSLv3(enabled by default since nginx 0.8.19) since it's less secure then TLS http://en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
ssl_protocols TLSv1.2;

# ciphers chosen for forward secrecy and compatibility
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

# security hardened
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# Eventuell anpassen, falls ihr inline erlauben wollt!
add_header Content-Security-Policy "default-src 'self'; script-src 'self'";

# Wenn ihr den Referrer-Header ausschalten wollt
add_header Referrer-Policy "no-referrer";

Was ich auch noch wichtig finde ist, dass man die Nginx-Version nicht publiziert. Das erreicht ihr, indem ihr im http-Block der nginx.conf das Folgende einfügt: server_tokens off;. Prüfen könnt ihr Header und Serverversion mithilfe der Browser-Debugtools.

Falls PHP benutzt wird, sollte die php.ini angepasst werden, um nur "HttpOnly"-Cookies zu setzen und den PHP-Header zu verstecken:

session.cookie_secure = true
session.use_only_cookies = 1
session.cookie_httponly = true
expose_php = off 

Kommentare

Keine Daten vorhanden.

Mit dem Absenden des Formulars akzeptiere ich die Datenschutzbestimmungen dieses Dienstes.