Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

Let’s Encrypt Zertifikate im Manual Mode abholen

Let’s Encrypt ist auf das automatische Abholen und Einrichten von TLS-Zertifikaten ausgelegt. Für Anwender, die mehr Kontrolle über den Prozess haben wollen, gibt es aber auch einen „Manual Mode“, der folgende Vorteile hat:

  • Die Zertifikate können von jedem Rechner aus abgeholt werden (Der LE Client muss nicht auf dem Zielserver laufen)
  • Der Webserver muss nicht wegen des LE Clients kurzzeitig abgeschaltet werden.

Und so funktioniert’s: Auf von einem beliebigen Rechner aus kann mit dem Let’s Encrypt ACME Client eine Zertifikatsanfrage abgeschickt werden. Zur Bestätigung des Domainbesitzes müssen in einem bestimmten Unterverzeichnis des Ziel-Webservers (Domain-Ziel) Dateien mit einem bestimmten Inhalt hinterlegt werden (=> Challenge-Dateien). Der ACME Server überprüft daraufhin, ob die Dateien unter den jeweiligen Domains erreichbar sind und der Inhalt korrekt ist. Wenn das der Fall ist, ist der Domainbesitz bestätigt und die Zertifikate werden ausgehändigt.

Weiterlesen ›


PHP-Anwendungen unter eigenen Benutzern ausführen

Kaum einer meiner Server läuft nur mit einer einzigen Anwendung. Der Webserver, auf dem dieser Blog läuft, beherbergt nicht nur thomas-leister.de, sondern auch noch zwei andere Blogs und weitere PHP-basierte Webdienste, die ich zur Verfügung stelle. Aus Sicht eines Hackers ein lohnenswertes Ziel: Wird über eine PHP-Anwendung wie z.B. einen schlecht gepflegten WordPress-Blog Zugriff auf das Dateisystem des Servers erlangt, kann der Hacker nicht nur die unsichere Webapplikation angreifen, sondern auch alle anderen Anwendungen, die unter dem PHP-User laufen. Aus diesem Grund ist es sinnvoll, die PHP-Anwendungen etwas voneinander abzuschotten, sodass ein Angreifer von der einen PHP-Anwendung aus keine andere PHP-Anwendung beeinträchtigen kann. Dies erreicht man, indem man für jede Anwendung einen eigenen User anlegt, der PHP ausführt. Die Verzeichnisrechte werden so gesetzt, dass nur der jeweils zugedachte PHP-User Zugriff auf die Anwendungsdateien hat und keine weiteren Änderungen im Dateisystem vornehmen kann.

Weiterlesen ›


Anleitung für Let’s Encrypt: Kostenlose TLS Zertifikate für alle

Das Let’s Encrypt Projekt (hinter dem unter anderem Mozilla, Facebook und Cisco als Sponsoren stecken) ist gestern in den Public Beta Betrieb übergegangen. Von nun an können nach belieben kostenlose TLS (aka SSL)-Zertifikate für die eigenen Domains erstellt werden. Für den Erhalt eines Zertifikats sind nur wenige, einfache Schritte erforderlich, die ich im Folgenden erkläre:

Weiterlesen ›


Linux Server: Geschwindigkeit der Internetverbindung prüfen (Uplink & Downlink)

Neben der Verfügbarkeit und der verfügbaren Hardwareressourcen spielt bei der Wahl des richtigen Server-Pakets bei einem Hoster natürlich auch die Netzanbindung eine bedeutende Rolle. Nur mit einer schnellen und zuverlässigen Anbindung lassen sich Fluten von Anfragen bewältigen. Da bei Hostern hier und da gerne getrickst oder nicht die erwartete Leistung bereitgestellt wird, ist ein kurzer Test der Netzwerk-Bandbreite zu empfehlen.

Für Desktop-Computer und Smartphones wird gerne das speedtest.net Netzwerk zusammen mit der gleichnamigen Website genutzt. Eine Flash-freie Alternative dazu wäre speedof.me, das auf HTML5 basiert. Da fähige Admins einen Linux Server natürlich niemals mit GUI administrieren würden ;) , sind die beiden Browser-basierten Speedtests jedoch uninteressant. Für speedtest.net gibt es zwar eine Python-Anwendung für das CLI – allerdings misst diese die Bandbreite für Up- und Downlink völlig unzuverlässig.

Weiterlesen ›


Nginx: Passwortschutz für Unterverzeichnis

In einigen Fällen ist es sinnvoll, den Zugriff auf vestimmte Verzeichnisse einer Website nur für bestimmte Nutzer zu erlauben. Die einfachste Möglichkeit für einen Passwortschutz ist die sog. HTTP Base Auth. Dabei wird dem Benutzer beim besuch einer bestimmten URL vom Browser ein Eingabefenster für Benutzername und Passwort angezeigt. Stimmen die Daten überein bzw sind im System vorhanden, wird der Zugriff ermöglicht – ansonsten wird er abgewiesen.

Weiterlesen ›


Nginx Proxy für TVHeadend mit Unterverzeichnis

Meine TVHeadend Instanz Zuhause sollte über das Internet erreichbar werden. Hinter dem DSL Router ist ein Webserver erreichbar, den ich dafür als Proxy zu meinem TVHeadend-Server nutzen will. Über den Webserver laufen allerdings noch ein paar andere Dienste, sodass ich TVH nicht das Rootverzeichnis überlassen will. Das THV Webinterface soll stattdessen über ein Unterverzeichnis „/tv/recorder“ erreichbar sein, also z.B. so: https://server.tld/tv/recorder.

TVHeadend läuft auf dem Server mit der IP 192.168.2.111 auf Port 9981. Die Konfiguration von Nginx kann z.B. so aussehen:

Weiterlesen ›


Nginx: Anderes Rootverzeichnis für Unterverzeichnis

In der Nginx Konfiguration kann neben dem default Rootverzeichnis „root“ auch für jedes Unterverzeichnis ein root-Pfad gewählt werden. Das ermöglicht es z.B. für http://server.tld/ die Dateien unter /var/www zu lagern, während sich die Dateien für http://server.tld/webuser/ unter /home/webuser/ befinden. Realisieren lässt sich das über die „alias“ Direktive:

server {
    server_name server.tld;
    
    listen 80;
    listen [::]:80;
   
    root /var/www;

    location /webuser {
        alias /home/webuser;
    }
}

Natürlich muss dabei sichergestellt werden, dass das Zielverzeichnis für den User, unter dem Nginx läuft, zugänglich ist.


Fehlerbehebung: Plötzliche PHP-FPM Abstürze mit Nginx

Auf meinen Server setze ich mittlerweile nur noch den Nginx-Webserver ein. PHP gibt es dafür nicht als Modul (so wie bei Apache), sondern es läuft als Extra-Prozess mit Socket, über den Nginx mit dem PHP-Prozess kommuniziert. In den letzten Monaten hatte ich immer wieder Probleme mit PHP. Der PHP-FPM Prozess verabschiedete sich immer wieder spontan und ohne Fehler in den Logs. Nach viel Recherche bin ich schließlich auf den rettenden Tipp gekommen: Man solle doch mal APC für PHP deaktivieren.

Dazu wird in der Datei /etc/php5/fpm/conf.d/20-apcu.ini die Zeile „extension=apcu.so“ mit einem vorangestellten Semikolon „;“ einfach auskommentiert und der PHP-FPM Service neu gestartet.

Seit der Deaktivierung von APC habe ich keine PHP-Abstürze mehr und der Webserver tut seinen Job wieder zuverlässig.