Nginx HSTS-Security

Da ich viele verschiedene Websites betreue, brauche ich auch verschiedene nginx-Sicherheitsstufen um HSTS und weitere Sicherheitsfeatures zu aktivieren. Leider kann ich nicht immer aufs höchste Niveau gestellt werden, da es leider immer wieder passiert dass Google-Analytics oder andere Dritt-Scripts eingebunden werden.

Ich teile es in folgende Sicherheitsstufen ein

  • HTTPS High-Security
  • HTTPS Standard
  • HTTPS Low Security

Man muss aber anmerken, dass jegliche Konfiguration sicherer ist, als die Standard-Config.

High Security

#
# HTTPSconfig for enhanced security
#
ssl_session_cache shared:SSL:10m; access_log off; # Security headers add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; script-src 'self';";
# Allow only newer protocols
# Newer nginx supports also TLS1.3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 ssl_session_tickets off; # Requires nginx >= 1.5.9 ssl_stapling on; # Requires nginx >= 1.3.7 ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 91.239.100.100 89.233.43.71 valid=300s; resolver_timeout 5s;
# Diffie-Hellmann params ssl_dhparam /etc/ssl/private/dhparams.pem;
#Hide nginx version server_tokens off;

Standard Security

Diese erlaubt ein Laden von Drittresourcen, ideal beispielsweise für eine Nextcloud. HSTS ist aber immer noch für die Haupt- und Subdomains erzwungen.

#
# HTTPSconfig for enhanced security
#
ssl_session_cache shared:SSL:10m; access_log off;
# Security headers add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Content-Security-Policy "default-src https: "; add_header Referrer-Policy: same-origin;
# Allow only newer protocols ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+AESGCM:EECDH:EDH::DHE-RSA-AES256-GCM-SHA384:!MD5:!RC4:!LOW:!MEDIUM:!CAMELLIA:!ECDSA:!DES:!DSS:!3DES:!NULL"; # ssl_ecdh_curve secp384r1:prime256v1; Not compatible with Chrome ssl_session_tickets off; # Requires nginx >= 1.5.9 ssl_stapling on; # Requires nginx >= 1.3.7 ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 91.239.100.100 89.233.43.71 valid=300s; resolver_timeout 5s; ssl_ecdh_curve auto;
# Diffie-Hellmann params ssl_dhparam /etc/ssl/private/dhparams.pem;
# Hide nginx version server_tokens off;

Low Security

Dies ist eine herabgesetzte Config, die HSTS nicht erzwingt. Ideal für Websites, die nicht komplett in der alleinigen Kontrolle sind.

#
# HTTPSconfig for low security
#
ssl_session_cache shared:SSL:10m; access_log off;
# Security headers add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'";
# Allow only newer protocols ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 ssl_session_tickets off; # Requires nginx >= 1.5.9 ssl_stapling on; # Requires nginx >= 1.3.7 ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 91.239.100.100 89.233.43.71 valid=300s; resolver_timeout 5s;
# Diffie-Hellmann params ssl_dhparam /etc/ssl/private/dhparams.pem;
# Hide nginx version server_tokens off;

Weitere Absicherungsmöglichkeiten

In den Configs wurde bereits ein ssl_dhparam erwähnt. Durch moderne Algorithmen werden Diffie-Hellmann-Parameter zwar seltener verwendet, aber der Standard liegt bei 1024-Bit und damit sehr unsicher.

Wir generieren einen Key mit 4096-Bit Größe, um ausreichend abgesichert zu sein:

openssl dhparam -out dhparams.pem 4096

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.