Werkzeugleiste in Adobe Acrobat Reader DC beim Öffnen ausblenden

Der Adobe Acrobat Reader DC blendet standartmäßig beim öffnen von PDF Dateien automatisch die Werkzeugleiste ein.

Adobe Acrobat Reader DC Werkzeugfenster
Adobe Acrobat Reader DC Werkzeugfenster

Dieses Verhalten stört mich extrem, da es erheblichen Platz zum lesen wegnimmt. Über die Einstellungen ist es möglich den Reader so zu konfigurieren, dass er sich merkt, ob die Werkzeugleiste zuletzt ein oder ausgeblendet war. Wenn diese Einstellung gesetzt ist wird die Werkzeugleiste beim Starten automatisch ausgeblendet, wenn sie dies bei dem letzten schließen auch war. Weiterlesen

Mittels sslh SSL, SSH und OpenVPN unter Raspbian Jessie Lite auf Port 443 betreiben

sslh erlaubt es mehrere Dienste wie SSL, SSH und OpenVPN gleichzeitig auf Port 443 zu betreiben. Es unterscheidet anhand des Headers beim Aufbau der TLS Verbindung an welchen Dienst die Anfrage weitergeleitet werden muss. Dies ist z.B. nützlich, wenn das WLAN in Hotels oder Cafés nur Verbindungen auf bestimmte Ports erlauben. In diesem Beitrag beschreibe ich wie sslh unter Raspbian installiert und konfiguriert werden kann.

Weiterlesen

Eigene DNS Einträge im DNS Server von Pi-hole hinterlegen

Pi-hole ist ein Werbeblocker auf DNS-Ebene. Das heißt Werbung wird auch geblockt, wenn kein Adblocker verwendet wird, da die anfragen zum Anzeigen der Werbung ins Leere laufen. Im Beitrag Pi-hole unter Raspbian Jessie Lite unter nginx mit SSL betreiben habe ich beschreiben wie es unter Raspbian Jessie Lite installiert werden kann.

In diesem Beitrag möchte ich beschreiben wie es möglich ist im DNS Server von Pi-hole eigene DNS Einträge zu hinterlegen. Dies könnte Beispielsweise Namen sein unter denen die Rechner im eigenen Netzwerk erreichbar sein sollen.

Weiterlesen

Pi-hole unter Raspbian Jessie Lite mit nginx und SSL betreiben

Pi-hole ist ein Werbeblocker auf DNS-Ebene. Das heißt Werbung wird auch geblockt, wenn kein Adblocker verwendet wird, da die anfragen zum Anzeigen der Werbung ins Leere laufen. Im Beitrag Pi-hole unter Raspbian Jessie Lite mit nginx und SSL betreiben habe ich beschreiben wie es unter Raspbian Jessie Lite installiert werden kann.

Pi-hole erlaubt es standardmäßig nicht, dass über SSL auf das Webinterface zugegriffen werden kann. Außerdem verwendet es den lighttpd Webserver. Ich würde die Webseite aber gerne nur über SSL erreichbar machen sowie nginx als Webserver verwenden. In diesem Beitrag beschreibe ich wie nginx installiert und konfiguriert werden kann damit die pi-hole Webseite darüber via SSL erreichbar ist.

Weiterlesen

OpenVPN Server auf einem Raspberry Pi mit Raspbian Jessie Lite einrichten

OpenVPN ist eine Open Source Software zum Aufbauen eines VPNs. Es existieren Server und Clients für die meisten Betriebssysteme wie Linux, Windows. Mac OS, Android und iOS. In diesem Beitrag beschreibe ich wie ein OpenVPN Server unter Raspbian Jessie Lite eingerichtet werden kann. Ich verwende eine Zertifikatsbasierte Authentifizierung bei meinem OpenVPN Server, was eine höhere Sicherheit als die Authentifizierung basierend auf Passwörtern hat.

Zertifikate generieren

Wie die Zertifikate generiert werden können habe ich im Beitrag Zertifikate mittels Easy-RSA 3 zur OpenVPN Authentifizierung generieren beschrieben.

Installieren

Der OpenVPN Server kann einfach über nachfolgenden Befehl installiert werden.

$ sudo apt-get install openvpn

Konfigurieren

Schlüssel, Zertifikate und CRL

Zuerst muss ein Verzeichnis erstellt werden in dem die ganzen Schlüssel des Servers abgelegt werden sollen. Ich erzeuge diesen immer im OpenVPN Verzeichnis.

$ sudo mkdir /etc/openvpn/keys

Dort müssen nun folgende Dateien, welche durch easy-rsa3 geniert wurden, hinterlegt werden:

  • server.key
  • server.crt
  • crl.pem
  • ca.crt
  • dh.pem

Da diese Dateien teilweise sensitive Informationen enthalten sollten sie mit restriktive Dateiberechtigungen ausgestattet werden. Es reicht wenn root sie lesen kann – mit Ausnahme der crl.pem, welche auch vom Benutzer nobody gelesen werden muss, da der OpenVPN Server unter diesem ausgeführt wird.

$ sudo chown -R root:root /etc/openvpn/keys/
$ sudo find /etc/openvpn/keys/ -type f -exec chmod 400 {} \;
$ sudo chmod 404 /etc/openvpn/keys/crl.pem

Server

Nun kann die Konfiguration des Servers angelegt werden. Sie befindet sich in der Datei /etc/openvpn/server.conf. Ich verwende nachfolgende Konfiguration für meinen VPN Server.

# Adapter, Protocol, Port, and IP range
dev     tun
proto   tcp
port    1194
server  10.8.0.0 255.255.255.0

# Keys, certificates, and security settings
ca               keys/ca.crt
cert             keys/server.crt
key              keys/server.key
dh               keys/dh.pem
crl-verify       keys/crl.pem
remote-cert-tls  client
cipher           AES-256-CBC
auth             SHA512
tls-cipher       TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
tls-server
tls-version-min  1.2
auth-nocache
remote-cert-tls  client

# Logging
status           /var/log/openvpn-status.log 20
log-append       /var/log/openvpn.log
verb             3

# Use low privileged user/group to run the daemon but allow restart via SIGUSR1
user             nobody
group            nogroup
persist-key
persist-tun

# Allow connections between clients
#client-to-client

# Enable compression
comp-lzo

# Allow multiple clients with the same common name
#duplicate-cn

# Keep the connection alive
keepalive        10 120

# Set the DNS Server
push "dhcp-option DNS <IP-des-Routers>"

# Route all traffic through VPN
push "redirect-gateway"

Auch bei dieser Datei benötigt nur root Lesezugriff

$ sudo chown root:root /etc/openvpn/server.conf
$ sudo chmod 400 /etc/openvpn/server.conf

Nun kann der Server neu gestartet werden, damit die Konfiguration geladen wird

$ sudo service openvpn restart

Bei mir hat der OpenVPN Server die Konfiguration nicht gefunden. Ich musste den Raspberry Pi erst komplett neu starten, damit der OpenVPN Server die Konfigurationsdatei findet. Auch muss ich den Raspberry Pi neu starten, wenn ich die Konfigurationsdatei umbenenne.

Zum Überprüfen, ob die Konfiguration geladen wurde kann einfach geschaut werden ob OpenVPN auf dem konfigurierten Port auf Verbindungen wartet. Falls dies der Fall ist sollte nachfolgender Befehl etwas zurückliefern.

$ sudo netstat -tulpn | grep 1194
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      532/openvpn

Falls es beim Starten des OpenVPN Servers Probleme gibt kann er manuell über die Konsole gestartet werden um an zusätzliche Informationen zu kommen.

$ sudo openvpn --config /path/to/server.conf

Falls sich keine Verbindung herstellen lässt sollte überprüft werden, dass der TCP Port 1194 auf dem Router zum Raspberry Pi weitergeleitet wird.

Internet über VPN weiterleiten

Nun muss Raspbian noch so konfiguriert werden, dass die Clients über das VPN eine Verbindung ins Internet herstellen können. Dazu zuerst folgende Befehle ausführen. Falls anstatt eth0 ein anderer Netzwerkadapter verwendet werden soll muss eth0 durch diesen ersetzt werden.

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Nun muss in der Datei /etc/sysctl.conf noch der Kommentar vor nachfolgender Zeile entfernt werden.

net.ipv4.ip_forward=1

Und anschließend neu geladen werden.

$ sudo sysctl -p

Zuletzt muss die Weiterleitung der Pakete noch persistent gespeichert werden, da iptables-Regeln beim Neustart automatisch gelöscht werden. Falls wie im Beitrag Nützliche Tools für Ubuntu Linux 16.04 Server beschrieben das Paket iptables-persistent installiert wurde kann dies einfach mit nachfolgendem Befehl erledigt werden.

$ sudo bash -c "iptables-save > /etc/iptables/rules.v4"

Nun sollte der OpenVPN Server auch nach einem Neustart automatisch starten und es erlauben das Internet über diese Verbindung zu nutzen.

Let’s Encrypt SSL Zertifikate unter Raspbian Jessie Lite mittels nginx und webroot Plugin beziehen

Let’s Encrypt stellt kostenfreie SSL Zertifikate aus, welche von den gängigen Betriebssystemen und Browsern akzeptiert werden. Diese sind jeweils nur 90 Tage gültig und müssen daher regelmäßig erneuert werden. Damit dies nicht immer manuell geschehen muss gibt es Tools welche diesen Vorgang automatisieren. Das offizielle Tool dafür ist certbot. In diesem Beitrag beschreibe ich wie unter Raspbian Jessie Lite mit nginx, certbot und dem webroot Plugin Zertifikate für Webseiten angefragt und automatisch erneuert werden können.

Installation

In den offiziellen Paketquellen von Raspbian Jessie Lite ist keine Version von certbot verfügbar. Allerdings enthält das Backports Repository von Debian Jessie, auf welchem Raspbian Jessie Lite basiert, eine recht aktuelle Version von certbot. Damit diese Installiert werden kann muss allerdings zuerst das Backports Repository aktiviert werden. Wie dies funktioniert habe ich im Beitrag Debian Backports in Raspbian Jessie Lite aktivieren und verwenden beschrieben.

Nachdem das Backports Repository aktiviert wurde kann nach dem Aktualisieren der Paketlisten certbot installiert werden.

$ sudo apt-get update
$ sudo apt-get install certbot

Zertifikate beziehen

Das beziehen der Zertifikate funktioniert unter Raspbian Jessie Lite genauso wie unter Ubuntu Linux 16.04 Server. Deshalb verweise ich hier auf den „Zertifikate beziehen“ Abschnitt in meinem Beitrag Let’s Encrypt SSL Zertifikate unter Ubuntu Linux 16.04 Server mittels nginx und webroot Plugin beziehen in welchem ich es für Ubuntu Linux 16.04 Server beschrieben habe.

Debian Backports in Raspbian Jessie Lite aktivieren und verwenden

Debian Backports erlauben es neuere Software als in den Debian Repositorien vorhanden zu installieren. Die für Debian Jessie können auch bei Raspbian Jessie Lite verwendet werden, welches auf Debian Jessie basiert. Auf der Webseite https://packages.debian.org/jessie-backports/ kann die aktuelle Paketliste der Debian Jessie Backports eingesehen werden. In diesem Beitrag beschreibe ich wie die Backports aktiviert und verwendet werden können.

Aktivierung

Zuerst müssen die Debian Signing Keys importiert werden.

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.xGPUEnTXKm --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
gpg: requesting key 2B90D010 from hkp server keyserver.ubuntu.com
gpg: key 2B90D010: public key "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.MUv0nBzzUP --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
gpg: requesting key 46925553 from hkp server keyserver.ubuntu.com
gpg: key 46925553: public key "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Jetzt kann das Backports Repository hinzugefügt werden.

$ echo 'deb http://httpredir.debian.org/debian jessie-backports main contrib non-free' | sudo tee -a /etc/apt/sources.list.d/jessie-backports.list

Damit die Pakete im Backports Repository auch gefunden werden muss die Paketliste noch aktualisiert werden.

$ sudo apt-get update

Verwendung

Das Backports Repository hat eine niedrigere Priorität als die übrigen Repositorien. Deshalb sollten es keine normalen Raspbian Pakete überschreiben. Deshalb muss aber apt jedes Mal explizit gesagt werden, dass es Backports verwenden soll. Der Befehl zum Installieren eines Paketes aus dem Backports Repository sieht dann folgendermaßen aus.

$ sudo apt-get -t jessie-backports install <packetname>

nginx unter Raspbian Jessie Lite mit sicherer SSL Konfiguration und PHP installieren und konfigurieren

In diesem Beitrag beschreibe ich wie nginx mit einer sicheren SSL Konfiguration und PHP auf Raspbian Jessie installiert und konfiguriert werden kann.

nginx & PHP installieren

Zuerst müssen nginx und PHP mit nachfolgendem Befehl installiert werden.

$ sudo apt-get install nginx php5-fpm

PHP testen

Nun sollte überprüft werden das PHP auch tatsächlich funktioniert. Dazu muss die Konfiguration der nginx Standardseite (/etc/nginx/sites-available/default) angepasst werden. Es müssen vor folgenden Zeilen die Kommentarzeichen entfernt werden.

location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Anschließend muss noch die nginx Konfiguration neu geladen werden, damit die Änderungen wirksam werten. Vorher sollte getestet werden, dass die Konfiguration keine Fehler enthält.

$ sudo /etc/init.d/nginx configtest
[ ok ] Testing nginx configuration:.
$ sudo /etc/init.d/nginx reload
[ ok ] Reloading nginx configuration (via systemctl): nginx.service.

Nun kann einfach eine Datei phpinfo.php mit nachfolgendem Inhalt im Verzeichnis der Standardwebsite (/var/www/html/) angelegt werden.

<?php phpinfo(); ?>

Abschließend kann die Datei einfach über den Webbrowser aufgerufen werden (z.B. über http://example.com/phpinfo.php). Die Ausgabe sollte folgendermaßen aussehen.

Beispielhafte Ausgabe von phpinfo()
Beispielhafte Ausgabe von phpinfo()

nginx Konfigurieren

Nach der Installation muss nginx noch konfiguriert werden. Dies ist etwas aufwendiger als für PHP. Die Hauptkonfigurationsdatei ist /etc/nginx/nginx.conf. Die Konfiguration der einzelnen Seiten befindet sich im Verzeichnis /etc/nginx/sites-available/ und die Konfiguration der aktuell aktivierten Seiten im Verzeichnis /etc/nginx/sites-enabled/.

/etc/nginx/nginx.conf

Schauen wir uns zuerst die Hauptkonfigurationsdatei genauer an.

Zu Beginn werden generelle Parameter festgelegt.

  • user definiert den Linux Benutzer unter dem nginx laufen soll. www-data ist der Standardnutzer unter dem Webserver unter Debian/Ubuntu laufen.
  • worker_processes ist die Anzahl der nginx Prozesse. auto versucht den besten Wert automatisch zu finden.
  • pid ist zur Kommunikation mit dem Betriebssystem und sollte auch bei dem Standardwert (\run\nginx.pid) belassen werden.
  • woker_connections innerhalb von events definiert die maximale Anzahl von Verbindungen pro nginx Prozess (768 ist der Standardwert).
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {

worker_connections 768;
        # multi_accept on;
}

[...]

Der nächste Block (http) definiert die Parameter für die eigentlichen Verbindungen.

  • Basiseinstellungen
    • sendfile, tcp_nopush und tcp_nodelay erhöhen die Performance von nginx
    • keepalive_timeout definiert die Zeit in Sekunden zu welcher eine Verbindung vom Webserver geschlossen wird. Danach muss eine neue TCP und TLS Verbindung aufgebaut werden.
    • types_hash_max_size beschleunigt hashtable lookups
    • server_tokens gibt an ob nginx seine Version als Antwort mitsenden soll oder nicht
    • include /etc/nginx/mime.types lädt die mime Typen
    • defaul_type setzt den zu verwendenden Standardtyp
  • SSL (Die hier verwendeten Parameter orientieren sich an dem Beitrag Strong SSL Security on nginx)
    • ssl_protocols erlaubt nur TLS in Version 1.0, 1.1 oder 1.2.
    • ssl_ciphers erlaubt nur Algorithmen mit Perfect Forward Security. Das bedeutet, dass auch wenn später der Private Key kompromittiert wurde die alten Verbindungen nicht entschlüsselt werden können.
    • ssl_prefer_server_ciphers sagt das die Algorithmenpreferenz des Servers und nicht des Clients verwendet werden soll.
    • ssl_session_cache definiert, dass es einen 10 MB Cache gibt in welchem Verbindungsinformationen zwischengespeichert werden. Dies erlaubt es bei Wiederaufnahme einer Verbindung einige Schritte im Verbindungsaufbau zu sparen.
    • ssl_dhparam verweist auf selbst generierte EECDH/EDH Parameter welche verwendet werden sollen. Sie sind länger als die Standardmäßig verwendeten Parameter. Wie diese generiert werden beschreibe ich weiter unten.
    • ssl_stapling und ssl_stapling_verify sagt das der Server Informationen über die Gültigkeit des Zertifikates überprüfen und beim Verbindungsaufbau an den Client schicken soll.
    • ssl_ecdh_curve spezifiziert die Kurve welche für ECDHE verwendet werden soll. Die hier angegebene Kurve verwendet längere Schlüssel als die standardmäßig verwendete.
    • ssl_session_tickets deaktiviert Session Tickets, da diese Forward Security aushebeln können.
  • Header
    • add_header X-Content-Type-Options verbietet mime-sniff in Chrome und Internet Explorer
    • add_header X-Frame-Options verbietet es die Website auf einer anderen Domain in einem frame oder iframe zu laden.
  • Logging
    • access_log legt fest in welcher Datei alle Zugriffe geloggt werden sollen
    • error_log legt fest in welcher Datei alle Fehlermeldungen geloggt werden sollen
  • Gzip
    • gzip setzt ob gzip aktiviert werden soll oder nicht. Da all meine Webseiten nur per TLS erreichbar sind und gzip mit TLS ein Sicherheitsrisiko darstellt habe ich es deaktiviert.
  • Vitual Host Konfigurationen
    • Lädt zusätzliche Konfigurationsdateien aus dem Unterordner conf.d sowie die aktiven Seiten im Unterordner sites-enabled.
[...]

http {

        ##
        # Basic Settings
        ##

        sendfile                      on;
        tcp_nopush                    on;
        tcp_nodelay                   on;
        keepalive_timeout             65;
        types_hash_max_size           2048;
        server_tokens                 off;

        include         /etc/nginx/mime.types;
        default_type    application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers                     'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers       on;
        ssl_session_cache               shared:SSL:10m;
        ssl_dhparam                     /etc/ssl/certs/dhparam.pem;
        ssl_stapling                    on;
        ssl_stapling_verify             on;
        ssl_ecdh_curve                  secp384r1;
        ssl_session_tickets             off;

        ##
        # Header
        ##

        add_header X-Content-Type-Options       nosniff;
        add_header X-Frame-Options              "SAMEORIGIN";

        ##
        # Logging Settings
        ##

        access_log      /var/log/nginx/access.log;
        error_log       /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip    off;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

dhparam generieren

Da ich längere Parameter verwenden möchte als die Standardkonfiguration müssen die dhparam selber generiert werden. Dies kann wie nachfolgend beschrieben im Terminal erledigt werden – es kann einige Stunden dauern bis der Befehl zum Generieren erfolgreich ausgeführt wurde.

$ cd /etc/ssl/certs
$ sudo openssl dhparam -out dhparam.pem 4096

Generating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
 ........................................................................................................................................................................................................................................................................................................................+......................................................................................................................................................................................................+.............................................................................+..........................................................................................................................................................................................................................................................+...............................................................................................................+......................+..........................................+......................................................................................................................................+......................................+................................+........................................+........................................................................................+...............................................+..............................................................................................................................+..........................................................................+.................................................................................+........+......................................................+...................................................................................................................................................................................................+................+................................................+.............................................................+....................................................................................................................+...............................................+...................................................................................................................................................................................................................................................+......................

[...]

Konfiguration für eine neue Seite erstellen

Die Konfigurationsdateien der einzelnen Seiten befinden sich im Verzeichnis /etc/nginx/sites-available/. Ich verwende immer nachfolgendes Template als Basis für meine PHP-Seiten. Die Konfiguration leitet HTTP Verbindungen automatisch auf verschlüsselte HTTPS Verbindungen um. Parameter wie der Domainname, Pfad zum SSL-Zertifikat und das Verzeichnis müssen natürlich für jede Website angepasst werden.

Die Konfiguration besteht aus zwei server Blöcken. Einer für Port 80 (HTTP) und einer für Port 443 (HTTPS).

Die Konfiguration des ersten server Blocks (HTTP)

  • listen gibt an auf welchen IP-Adressen und Ports die Website reagieren soll. 80 sagt aus, dass über alle verfügbaren IPv4 Adressen Verbindungen auf Port 80 akzeptiert werden sollen. [xxx:xxx:xxx::42]:80 sagt aus, dass die Website via IPv6 nur über die IP-Adresse xxx:xxx:xxx::42 und Port 80 erreichbar ist. Falls die Konfiguration als Standard verwendet werden soll, falls keine andere zur Anfrage passt, muss jeweils hinter der 80 noch default_server ergänzt werden.
  • server_name gibt die Domain an, für welche die Konfiguration gilt.
  • return leitet auf eine andere Website weiter. In diesem Fall mittels 301 (Dauerhaft Verschoben) auf die verschlüsselte Verbindung (HTTPS).

Die Konfiguration des zweiten Blocks (HTTPS). Die Pfade zum SSL Zertifikat bzw. dem zugehörigen privaten Schlüssel entsprechen denen, wenn Let’s Encrypt mit certbot verwendet wird. Wie dies Konfiguriert wird habe ich im Beitrag Let’s Encrypt SSL Zertifikate unter Raspbian Jessie Lite mittels nginx und webroot Plugin beziehen beschrieben.

  • listen ist identisch wie für den ersten Block außer das der Block auf Port 443 hört und nicht 80.
  • server_name gibt wie beim ersten Block die Domain an, für welche die Konfiguration gilt.
  • ssl_certificate gibt den Pfad zum SSL Zertifikat der Website an.
  • ssl_certificate_key gibt den Pfad zum Privaten Schlüssel des SSL Zertifikats der Website an.
  • add_header Strict-Transport-Security sagt dem Client, dass er die Website nur über HTTPS aufrufen soll und dies auch für alle Subdomains gilt. An dieser Stelle muss man vorsichtig sein und prüfen ob dies auch wirklich für alle Subdomains gilt. Außerdem sagt max-age für wie lange diese Einstellung gilt. Innerhalb dieser Zeit leitet der Browser den Besucher automatisch auf HTTPS weiter. Das heißt es ist nicht einfach möglich HTTPS abzuschalten, sondern benötigt eine Vorlaufzeit. Der Wert 63072000 entspricht 2 Jahren. Zum Testen sollte ein niedriger Wert wie z.B. 300 (5 Minuten) verwendet werden, welcher langsam erhöht wird. Es kann auch beantragt werden diese Einstellung fest in die gängigsten Browser aufzunehmen. Details dazu gibt es auf der Website der HTST Preload List.
  • root gibt das Verzeichnis an, in dem die Website liegt.
  • index gibt den Dateinamen der Datei an, welche angezeigt werden soll, falls ein Verzeichnis als URL angegeben wurde. Damit dies geschieht muss eine Datei mit diesem Namen in dem angefragten Verzeichnis vorhanden sein.
  • location \ sagt, dass zuerst nach einer Datei mit dem angefragten Namen gesucht werden soll, anschließend ob ein Verzeichnis mit dem Namen existiert. Falls beides nicht existiert wird ein 404 Fehler zurückgegeben.
  • location ~ \.php$ leitet PHP-Dateien an den Interpreter weiter.
  • include snippets/certbot-webroot.conf lädt die Konfigurationsparameter zur Aktualisierung der Let’s Encrypt Zertifikate wie im Beitrag Let’s Encrypt SSL Zertifikate unter Raspbian Jessie Lite mittels nginx und webroot Plugin beziehen beschrieben.
server  {
        listen          80;
        listen          [xxx:xxx:xxx::42]:80;

        server_name     example.com;
        return          301 https://$server_name$request_uri;
}

server  {
        listen          443 ssl;
        listen          [xxx:xxx:xxx::42]:443 ssl;

        server_name     example.com;

        ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
        add_header              Strict-Transport-Security "max-age=63072000; includeSubdomains;";

        root    /var/www/com.example;

        index   index.php;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass the PHP scripts to FastCGI server
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

        # snippet for updating letsencrypt certificates
        include snippets/certbot-webroot.conf;
}

Nun muss noch das Verzeichnis für die Webseitendaten erstellt werden.

$ sudo mkdir -p /var/www/com.example

Neue Seite aktivieren

Um die Konfiguration einer Seite im Verzeichnis /etc/nginx/sites-available/ zu aktivieren muss ein Symmetrischer Link zu dieser Datei im Verzeichnis /etc/nginx/sites-enabled angelegt werden.

$ sudo ln -s /etc/nginx/sites-available/com.example /etc/nginx/sites-enabled/

Konfiguration übernehmen

Nachdem die Konfiguration wie oben beschrieben geändert wurde muss sie nur noch von nginx neu geladen werden. Bevor sie geladen wird sollte allerdings noch geprüft werden, ob sie Fehler enthält.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo /etc/init.d/nginx reload
[ ok ] Restarting nginx (via systemctl): nginx.service.

Nun kann noch die Seite des Qually Labs SSL Tests aufgerufen werden, welches die verwendete Sicherheitsverfahren und Algorithmen von Webservern prüft und bewertet. Wenn alles wie oben beschrieben konfiguriert wurde sollte die Bewertung A+ sein, was der Best möglichen Bewertung entspricht.

Ergebnis des Qualys SSL Labs SSL Server Test
Ergebnis des Qualys SSL Labs SSL Server Test