One place for hosting & domains

      Hosten

      Hosten einer Website mit Cloudflare und Nginx unter Ubuntu 20.04


      Der Autor wählte die Electronic Frontier Foundation, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Cloudflare ist ein Dienst, der sich zwischen dem Besucher und dem Server des Website-Eigentümers befindet und als Reverse-Proxy für Websites fungiert. Cloudflare bietet ein Content Delivery Network (CDN) sowie DDoS-Minderungs- und verteilte Domänennamen-Serverdienste.

      Nginx ist ein beliebter Webserver, der für das Hosting einiger der größten und am stärksten frequentierten Websites im Internet verantwortlich ist. Es ist üblich, dass Unternehmen Websites mit Nginx bereitstellen und Cloudflare als CDN- und DNS-Anbieter verwenden.

      In diesem Tutorial sichern Sie Ihre von Nginx bereitgestellte Website mit einem Origin CA-Zertifikat von Cloudflare und konfigurieren Nginx anschließend für die Verwendung authentifizierter Pull-Anforderungen. Die Verwendung dieses Setups bietet den Vorteil, dass Sie vom CDN und der schnellen DNS-Auflösung von Cloudflare profitieren und gleichzeitig sicherstellen, dass alle Verbindungen über Cloudflare erfolgen. Dadurch wird verhindert, dass böswillige Anforderungen Ihren Server erreichen.

      Voraussetzungen

      Bevor Sie mit diesem Tutorial beginnen, benötigen Sie Folgendes:

      Schritt 1 – Generieren eines Origin CA TLS-Zertifikats

      Mit der Cloudflare Origin-Zertifizierungsstelle können Sie ein kostenloses TLS-Zertifikat generieren, das von Cloudflare signiert wurde, um es auf Ihrem Nginx-Server zu installieren. Mit dem von Cloudflare generierten TLS-Zertifikat können Sie die Verbindung zwischen den Cloudflare-Servern und Ihrem Nginx-Server sichern.

      Um ein Zertifikat mit Origin CA zu generieren, melden Sie sich in einem Webbrowser bei Ihrem Cloudflare-Konto an. Wählen Sie die Domäne aus, die Sie sichern möchten, und navigieren Sie zum Abschnitt SSL/TLS Ihres Cloudflare-Dashboards. Navigieren Sie von dort zur Registerkarte Origin Server und klicken Sie auf die Schaltfläche Zertifikat erstellen:

      Erstellen einer Zertifikatoption im Cloudflare-Dashboard

      Lassen Sie die Standardoption Cloudflare einen privaten Schlüssel und einen CSR generieren lassen ausgewählt.

      Origin CA GUI-Optionen

      Klicken Sie auf Weiter und Sie sehen einen Dialog mit dem Origin Certificate und dem privaten Schlüssel. Sie müssen sowohl das Ursprungszertifikat als auch den privaten Schlüssel von Cloudflare auf Ihren Server übertragen. Aus Sicherheitsgründen werden die Informationen zum privaten Schlüssel nicht mehr angezeigt. Kopieren Sie den Schlüssel daher auf Ihren Server, bevor Sie auf OK klicken.

      Dialog, der das Ursprungszertifikat und den privaten Schlüssel anzeigt

      Sie verwenden das Verzeichnis /etc/ssl auf dem Server, um das Ursprungszertifikat und die privaten Schlüsseldateien zu speichern. Der Ordner existiert bereits auf dem Server.

      Kopieren Sie zunächst den Inhalt des Origin Certificate, das im Dialogfeld in Ihrem Browser angezeigt wird.

      Öffnen Sie dann auf Ihrem Server /etc/ssl/cert.pem in Ihrem bevorzugten Texteditor:

      • sudo nano /etc/ssl/cert.pem

      Fügen Sie den Zertifikatinhalt zur Datei hinzu. Speichern und schließen Sie den Editor danach.

      Kehren Sie dann zu Ihrem Browser zurück und kopieren Sie den Inhalt des privaten Schlüssels. Öffnen Sie die Datei /etc/ssl/key.pem zur Bearbeitung:

      • sudo nano /etc/ssl/key.pem

      Fügen Sie den privaten Schlüssel in die Datei ein, speichern Sie die Datei und beenden Sie den Editor.

      Hinweis: Wenn Sie das Zertifikat und den Schlüssel aus dem Cloudflare-Dashboard kopieren und in die entsprechenden Dateien auf dem Server einfügen, werden manchmal Leerzeilen eingefügt. Nginx behandelt solche Zertifikate und Schlüssel als ungültig. Stellen Sie also sicher, dass es keine leeren Zeilen in Ihren Dateien gibt.

      Warnung: Das Origin CA-Zertifikat von Cloudflare wird nur von Cloudflare als vertrauenswürdig eingestuft und sollte daher nur von Ursprungsservern verwendet werden, die aktiv mit Cloudflare verbunden sind. Wenn Sie Cloudflare zu irgendeinem Zeitpunkt anhalten oder deaktivieren, wird in Ihrem Origin CA-Zertifikat ein nicht vertrauenswürdiger Zertifikatfehler ausgegeben.

      Nachdem Sie die Schlüssel- und Zertifikatdateien auf Ihren Server kopiert haben, müssen Sie die Nginx-Konfiguration aktualisieren, um sie verwenden zu können.

      Schritt 2 – Installieren des Origin CA-Zertifikats in Nginx

      Im vorherigen Abschnitt haben Sie mithilfe des Cloudflare-Dashboards ein Ursprungszertifikat und einen privaten Schlüssel generiert und die Dateien auf Ihrem Server gespeichert. Jetzt aktualisieren Sie die Nginx-Konfiguration für Ihre Website, um mithilfe des Ursprungszertifikats und des privaten Schlüssels die Verbindung zwischen den Cloudflare-Servern und Ihrem Server zu sichern.

      Stellen Sie zunächst sicher, dass UFW HTTPS-Datenverkehr zulässt. Aktivieren Sie Nginx Full, wodurch sowohl Port 80 (HTTP) als auch Port 443 (HTTPS) geöffnet werden:

      • sudo ufw allow 'Nginx Full'

      Laden Sie nun UFW neu:

      Überprüfen Sie abschließend, ob Ihre neuen Regeln erlaubt sind und ob UFW aktiv ist:

      Sie werden eine Ausgabe wie diese sehen:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Jetzt können Sie Ihren Nginx-Serverblock anpassen. Nginx erstellt während der Installation einen Standard-Serverblock. Entfernen Sie ihn, wenn er noch vorhanden ist, da Sie bereits einen benutzerdefinierten Serverblock für Ihre Domäne konfiguriert haben:

      • sudo rm /etc/nginx/sites-enabled/default

      Öffnen Sie als Nächstes die Nginx-Konfigurationsdatei für Ihre Domäne:

      • sudo nano /etc/nginx/sites-available/your_domain

      Die Datei sollte so aussehen:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Wir ändern die Nginx-Konfigurationsdatei, um Folgendes zu tun:

      • Hören Sie auf Port 80 und leiten Sie alle Anfragen um, um https zu verwenden.
      • Hören Sie auf Port 443 und verwenden Sie das im vorherigen Abschnitt hinzugefügte Ursprungszertifikat und den privaten Schlüssel.

      Ändern Sie die Datei, damit sie wie folgt aussieht:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Speichern Sie die Datei und beenden Sie den Editor.

      Als Nächstes testen Sie, um sicherzustellen, dass es in keiner Ihrer Nginx-Konfigurationsdateien Syntaxfehler gibt:

      Wenn keine Probleme gefunden wurden, starten Sie Nginx neu, um Ihre Änderungen zu aktivieren:

      • sudo systemctl restart nginx

      Wechseln Sie nun zum Abschnitt SSL/TLS des Cloudflare-Dashboards, navigieren Sie zur Registerkarte Übersicht und ändern Sie den SSL/TLS-Verschlüsselungsmodus in Voll (streng). Dadurch wird Cloudflare informiert, die Verbindung zwischen Cloudflare und Ihrem ursprünglichen Nginx-Server immer zu verschlüsseln.

      Aktivieren des vollen (strengen) SSL-Modus im Cloudflare-Dashboard

      Besuchen Sie nun Ihre Website unter https://your_domain, um zu überprüfen, ob sie richtig eingerichtet ist. Sie sehen Ihre Startseite angezeigt und der Browser wird melden, dass die Website sicher ist.

      Im nächsten Abschnitt richten Sie Authenticated Origin Pulls ein, um zu überprüfen, ob Ihr Ursprungsserver tatsächlich mit Cloudflare und nicht einem anderen Server spricht. Auf diese Weise wird Nginx so konfiguriert, dass nur Anforderungen akzeptiert werden, die ein gültiges Client-Zertifikat von Cloudflare verwenden. Alle Anforderungen, die Cloudflare nicht durchlaufen haben, werden gelöscht.

      Schritt 3 — Einrichten von Authenticated Origin Pulls

      Mithilfe des Origin CA-Zertifikats kann Cloudflare überprüfen, ob es mit dem richtigen Origin-Server kommuniziert. In diesem Schritt wird mithilfe der TLS-Client-Authentifizierung überprüft, ob Ihr ursprünglicher Nginx-Server mit Cloudflare kommuniziert.

      Bei einem vom Client authentifizierten TLS-Handshake stellen beide Seiten ein zu überprüfendes Zertifikat bereit. Der Ursprungsserver ist so konfiguriert, dass nur Anfragen akzeptiert werden, die ein gültiges Client-Zertifikat von Cloudflare verwenden. Anforderungen, die Cloudflare nicht durchlaufen haben, werden abgegeben, da sie nicht über ein Cloudflare-Zertifikat verfügen. Dies bedeutet, dass Angreifer die Sicherheitsmaßnahmen von Cloudflare nicht umgehen und keine direkte Verbindung zu Ihrem Nginx-Server herstellen können.

      Cloudflare präsentiert Zertifikate, die von einer CA mit dem folgenden Zertifikat signiert werden:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      Außerdem können Sie das Zertifikat direkt hier von Cloudflare herunterladen.

      Kopieren Sie dieses Zertifikat.

      Erstellen Sie dann die Datei /etc/ssl/cloudflare.crt, um das Zertifikat von Cloudflare zu speichern:

      • sudo nano /etc/ssl/cloudflare.crt

      Fügen Sie das Zertifikat der Datei hinzu. Speichern Sie anschließend die Datei und beenden Sie den Editor.

      Aktualisieren Sie jetzt Ihre Nginx-Konfiguration, um TLS Authenticated Origin Pulls zu verwenden. Öffnen Sie die Konfigurationsdatei für Ihre Domäne:

      • sudo nano /etc/nginx/sites-available/your_domain

      Fügen Sie die Direktiven ssl_client_certificate und ssl_verify_client ein, wie im folgenden Beispiel dargestellt:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Speichern Sie die Datei und beenden Sie den Editor.

      Testen Sie als Nächstes, um sicherzustellen, dass in Ihrer Nginx-Konfiguration keine Syntaxfehler vorhanden sind:

      Wenn keine Probleme gefunden wurden, starten Sie Nginx neu, um Ihre Änderungen zu aktivieren:

      • sudo systemctl restart nginx

      Öffnen Sie schließlich den Abschnitt SSL/TLS im Cloudflare-Dashboard, navigieren Sie zur Registerkarte Origin Server und aktivieren Sie die Option Authenticated Origin Pulls .

      Authenticated Origin Pulls aktivieren

      Besuchen Sie nun Ihre Website unter https://your_domain, um zu überprüfen, dass sie richtig eingerichtet wurde. Wie zuvor sehen Sie Ihre Startseite angezeigt.

      Um zu überprüfen, ob Ihr Server nur von der CA von Cloudflare signierte Anforderungen akzeptiert, aktivieren Sie die Option Authenticated Origin Pulls, um sie zu deaktivieren, und laden Sie dann Ihre Website neu. Sie sollten folgende Fehlermeldung erhalten:

      Fehlermeldung

      Ihr Ursprungsserver gibt einen Fehler aus, wenn eine Anforderung nicht von der CA von Cloudflare signiert ist.

      Hinweis: Die meisten Browser werden Anfragen zwischenspeichern. Um die obige Änderung zu sehen, können Sie Incognito/Private Browsing-Modus in Ihrem Browser verwenden. Um zu verhindern, dass Cloudflare Anforderungen zwischenspeichert, während Sie Ihre Website einrichten, navigieren Sie im Cloudflare-Dashboard zu Übersicht und schalten Sie den Entwicklungsmodus um.

      Nachdem Sie jetzt wissen, dass es ordnungsgemäß funktioniert, kehren Sie zum Abschnitt SSL/TLS im Cloudflare-Dashboard zurück, navigieren Sie zur Registerkarte Origin Server und schalten Sie die Option Authenticated Origin Pulls erneut um, um sie zu aktivieren.

      Zusammenfassung

      In diesem Tutorial haben Sie Ihre Nginx-basierte Website durch Verschlüsselung des Datenverkehrs zwischen Cloudflare und dem Nginx-Server mithilfe eines Origin CA-Zertifikats von Cloudflare gesichert. Anschließend haben Sie Authenticated Origin Pulls auf dem Nginx-Server eingerichtet, um sicherzustellen, dass nur die Anforderungen der Cloudflare-Server akzeptiert werden, sodass andere Personen keine direkte Verbindung zum Nginx-Server herstellen können.



      Source link

      Hosten einer Website mit Cloudflare und Nginx unter Ubuntu 20.04


      Der Autor wählte die Electronic Frontier Foundation, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Cloudflare ist ein Dienst, der sich zwischen dem Besucher und dem Server des Website-Eigentümers befindet und als Reverse-Proxy für Websites fungiert. Cloudflare bietet ein Content Delivery Network (CDN) sowie DDoS-Minderungs- und verteilte Domänennamen-Serverdienste.

      Nginx ist ein beliebter Webserver, der für das Hosting einiger der größten und am stärksten frequentierten Websites im Internet verantwortlich ist. Es ist üblich, dass Unternehmen Websites mit Nginx bereitstellen und Cloudflare als CDN- und DNS-Anbieter verwenden.

      In diesem Tutorial sichern Sie Ihre von Nginx bereitgestellte Website mit einem Origin CA-Zertifikat von Cloudflare und konfigurieren Nginx anschließend für die Verwendung authentifizierter Pull-Anforderungen. Die Verwendung dieses Setups bietet den Vorteil, dass Sie vom CDN und der schnellen DNS-Auflösung von Cloudflare profitieren und gleichzeitig sicherstellen, dass alle Verbindungen über Cloudflare erfolgen. Dadurch wird verhindert, dass böswillige Anforderungen Ihren Server erreichen.

      Voraussetzungen

      Bevor Sie mit diesem Tutorial beginnen, benötigen Sie Folgendes:

      Schritt 1 — Generieren eines Origin CA TLS-Zertifikats

      Mit der Cloudflare Origin-Zertifizierungsstelle können Sie ein kostenloses TLS-Zertifikat generieren, das von Cloudflare signiert wurde, um es auf Ihrem Nginx-Server zu installieren. Mit dem von Cloudflare generierten TLS-Zertifikat können Sie die Verbindung zwischen den Cloudflare-Servern und Ihrem Nginx-Server sichern.

      Um ein Zertifikat mit Origin CA zu generieren, melden Sie sich in einem Webbrowser bei Ihrem Cloudflare-Konto an. Wählen Sie die Domäne aus, die Sie sichern möchten, und navigieren Sie zum Abschnitt SSL/TLS Ihres Cloudflare-Dashboards. Navigieren Sie von dort zur Registerkarte Origin Server und klicken Sie auf die Schaltfläche Zertifikat erstellen:

      Erstellen einer Zertifikatoption im Cloudflare-Dashboard

      Lassen Sie die Standardoption Cloudflare einen privaten Schlüssel und einen CSR generieren lassen ausgewählt.

      Origin CA GUI-Optionen

      Klicken Sie auf Weiter und Sie sehen einen Dialog mit dem Origin Certificate und dem privaten Schlüssel. Sie müssen sowohl das Ursprungszertifikat als auch den privaten Schlüssel von Cloudflare auf Ihren Server übertragen. Aus Sicherheitsgründen werden die Informationen zum privaten Schlüssel nicht mehr angezeigt. Kopieren Sie den Schlüssel daher auf Ihren Server, bevor Sie auf OK klicken.

      Dialog, der das Ursprungszertifikat und den privaten Schlüssel anzeigt

      Sie verwenden das Verzeichnis /etc/ssl auf dem Server, um das Ursprungszertifikat und die privaten Schlüsseldateien zu speichern. Der Ordner existiert bereits auf dem Server.

      Kopieren Sie zunächst den Inhalt des Origin Certificate, das im Dialogfeld in Ihrem Browser angezeigt wird.

      Öffnen Sie dann auf Ihrem Server /etc/ssl/cert.pem in Ihrem bevorzugten Texteditor:

      • sudo nano /etc/ssl/cert.pem

      Fügen Sie den Zertifikatinhalt zur Datei hinzu. Speichern und schließen Sie den Editor danach.

      Kehren Sie dann zu Ihrem Browser zurück und kopieren Sie den Inhalt des privaten Schlüssels. Öffnen Sie die Datei /etc/ssl/key.pem zur Bearbeitung:

      • sudo nano /etc/ssl/key.pem

      Fügen Sie den privaten Schlüssel in die Datei ein, speichern Sie die Datei und beenden Sie den Editor.

      Hinweis: Wenn Sie das Zertifikat und den Schlüssel aus dem Cloudflare-Dashboard kopieren und in die entsprechenden Dateien auf dem Server einfügen, werden manchmal Leerzeilen eingefügt. Nginx behandelt solche Zertifikate und Schlüssel als ungültig. Stellen Sie also sicher, dass es keine leeren Zeilen in Ihren Dateien gibt.

      Warnung: Das Origin CA-Zertifikat von Cloudflare wird nur von Cloudflare als vertrauenswürdig eingestuft und sollte daher nur von Ursprungsservern verwendet werden, die aktiv mit Cloudflare verbunden sind. Wenn Sie Cloudflare zu irgendeinem Zeitpunkt anhalten oder deaktivieren, wird in Ihrem Origin CA-Zertifikat ein nicht vertrauenswürdiger Zertifikatfehler ausgegeben.

      Nachdem Sie die Schlüssel- und Zertifikatdateien auf Ihren Server kopiert haben, müssen Sie die Nginx-Konfiguration aktualisieren, um sie verwenden zu können.

      Schritt 2 — Installieren des Origin CA-Zertifikats in Nginx

      Im vorherigen Abschnitt haben Sie mithilfe des Cloudflare-Dashboards ein Ursprungszertifikat und einen privaten Schlüssel generiert und die Dateien auf Ihrem Server gespeichert. Jetzt aktualisieren Sie die Nginx-Konfiguration für Ihre Website, um mithilfe des Ursprungszertifikats und des privaten Schlüssels die Verbindung zwischen den Cloudflare-Servern und Ihrem Server zu sichern.

      Stellen Sie zunächst sicher, dass UFW HTTPS-Datenverkehr zulässt. Aktivieren Sie Nginx Full, wodurch sowohl Port 80 (HTTP) als auch Port 443 (HTTPS) geöffnet werden:

      • sudo ufw allow 'Nginx Full'

      Laden Sie nun UFW neu:

      Überprüfen Sie abschließend, ob Ihre neuen Regeln erlaubt sind und ob UFW aktiv ist:

      Sie werden eine Ausgabe wie diese sehen:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Jetzt können Sie Ihren Nginx-Serverblock anpassen. Nginx erstellt während der Installation einen Standard-Serverblock. Entfernen Sie ihn, wenn er noch vorhanden ist, da Sie bereits einen benutzerdefinierten Serverblock für Ihre Domäne konfiguriert haben:

      • sudo rm /etc/nginx/sites-enabled/default

      Öffnen Sie als Nächstes die Nginx-Konfigurationsdatei für Ihre Domäne:

      • sudo nano /etc/nginx/sites-available/your_domain

      Die Datei sollte so aussehen:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Sie ändern die Nginx-Konfigurationsdatei, um Folgendes zu tun:

      • Hören Sie auf Port 80 und leiten Sie alle Anfragen um, um https zu verwenden.
      • Hören Sie auf Port 443 und verwenden Sie das im vorherigen Abschnitt hinzugefügte Ursprungszertifikat und den privaten Schlüssel.

      Ändern Sie die Datei, damit sie wie folgt aussieht:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Speichern Sie die Datei und beenden Sie den Editor.

      Als Nächstes testen Sie, um sicherzustellen, dass es in keiner Ihrer Nginx-Konfigurationsdateien Syntaxfehler gibt:

      Wenn Sie keine Probleme gefunden haben, starten Sie Nginx neu, um Ihre Änderungen zu aktivieren:

      • sudo systemctl restart nginx

      Wechseln Sie nun zum Abschnitt SSL/TLS des Cloudflare-Dashboards, navigieren Sie zur Registerkarte Übersicht und ändern Sie den SSL/TLS-Verschlüsselungsmodus in Voll (streng). Dadurch wird Cloudflare informiert, die Verbindung zwischen Cloudflare und Ihrem ursprünglichen Nginx-Server immer zu verschlüsseln.

      Aktivieren des vollen (strengen) SSL-Modus im Cloudflare-Dashboard

      Besuchen Sie nun Ihre Website unter https://your_domain, um zu überprüfen, ob sie richtig eingerichtet ist. Sie sehen Ihre Startseite angezeigt und der Browser wird melden, dass die Website sicher ist.

      Im nächsten Abschnitt richten Sie Authenticated Origin Pulls ein, um zu überprüfen, ob Ihr Ursprungsserver tatsächlich mit Cloudflare und nicht einem anderen Server spricht. Auf diese Weise wird Nginx so konfiguriert, dass nur Anforderungen akzeptiert werden, die ein gültiges Client-Zertifikat von Cloudflare verwenden. Alle Anforderungen, die Cloudflare nicht durchlaufen haben, werden gelöscht.

      Schritt 3 — Einrichten von Authenticated Origin Pulls

      Mithilfe des Origin CA-Zertifikats kann Cloudflare überprüfen, ob es mit dem richtigen Origin-Server kommuniziert. In diesem Schritt wird mithilfe der TLS-Client-Authentifizierung überprüft, ob Ihr ursprünglicher Nginx-Server mit Cloudflare kommuniziert.

      Bei einem vom Client authentifizierten TLS-Handshake stellen beide Seiten ein zu überprüfendes Zertifikat bereit. Der Ursprungsserver ist so konfiguriert, dass nur Anfragen akzeptiert werden, die ein gültiges Client-Zertifikat von Cloudflare verwenden. Anforderungen, die Cloudflare nicht durchlaufen haben, werden abgegeben, da sie nicht über ein Cloudflare-Zertifikat verfügen. Dies bedeutet, dass Angreifer die Sicherheitsmaßnahmen von Cloudflare nicht umgehen und keine direkte Verbindung zu Ihrem Nginx-Server herstellen können.

      Cloudflare präsentiert Zertifikate, die von einer CA mit dem folgenden Zertifikat signiert werden:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      Außerdem können Sie das Zertifikat direkt hier von Cloudflare herunterladen.

      Kopieren Sie dieses Zertifikat.

      Erstellen Sie dann die Datei /etc/ssl/cloudflare.crt, um das Zertifikat von Cloudflare zu speichern:

      • sudo nano /etc/ssl/cloudflare.crt

      Fügen Sie das Zertifikat der Datei hinzu. Speichern Sie anschließend die Datei und beenden Sie den Editor.

      Aktualisieren Sie jetzt Ihre Nginx-Konfiguration, um TLS Authenticated Origin Pulls zu verwenden. Öffnen Sie die Konfigurationsdatei für Ihre Domäne:

      • sudo nano /etc/nginx/sites-available/your_domain

      Fügen Sie die Direktiven ssl_client_certificate und ssl_verify_client ein, wie im folgenden Beispiel dargestellt:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Speichern Sie die Datei und beenden Sie den Editor.

      Testen Sie als Nächstes Nginx, um sicherzustellen, dass in Ihrer Nginx-Konfiguration keine Syntaxfehler vorhanden sind:

      Wenn keine Probleme gefunden wurden, starten Sie Nginx neu, um Ihre Änderungen zu aktivieren:

      • sudo systemctl restart nginx

      Öffnen Sie schließlich den Abschnitt SSL/TLS im Cloudflare-Dashboard, navigieren Sie zur Registerkarte Origin Server und aktivieren Sie die Option Authenticated Origin Pulls .

      Authenticated Origin Pulls aktivieren

      Besuchen Sie nun Ihre Website unter https://your_domain, um zu überprüfen, dass sie richtig eingerichtet wurde. Wie zuvor sehen Sie Ihre Startseite angezeigt.

      Um zu überprüfen, ob Ihr Server nur von der CA von Cloudflare signierte Anforderungen akzeptiert, aktivieren Sie die Option Authenticated Origin Pulls, um sie zu deaktivieren, und laden Sie dann Ihre Website neu. Sie sollten folgende Fehlermeldung erhalten:

      Fehlermeldung

      Ihr Ursprungsserver löst einen Fehler, wenn die CA von Cloudflare keine Anfrage signiert.

      Hinweis: Die meisten Browser werden Anfragen zwischenspeichern. Um die obige Änderung zu sehen, können Sie Incognito/Private Browsing-Modus in Ihrem Browser verwenden. Um zu verhindern, dass Cloudflare Anforderungen zwischenspeichert, während Sie Ihre Website einrichten, navigieren Sie im Cloudflare-Dashboard zu Übersicht und schalten Sie den Entwicklungsmodus um.

      Nachdem Sie jetzt wissen, dass es ordnungsgemäß funktioniert, kehren Sie zum Abschnitt SSL/TLS im Cloudflare-Dashboard zurück, navigieren Sie zur Registerkarte Origin Server und schalten Sie die Option Authenticated Origin Pulls erneut um, um sie zu aktivieren.

      Zusammenfassung

      In diesem Tutorial haben Sie Ihre Nginx-basierte Website durch Verschlüsselung des Datenverkehrs zwischen Cloudflare und dem Nginx-Server mithilfe eines Origin CA-Zertifikats von Cloudflare gesichert. Anschließend haben Sie Authenticated Origin Pulls auf dem Nginx-Server eingerichtet, um sicherzustellen, dass nur die Anforderungen der Cloudflare-Server akzeptiert werden, sodass andere Personen keine direkte Verbindung zum Nginx-Server herstellen können.



      Source link

      Hosten einer Website mit Caddy unter Ubuntu 18.04


      Der Autor wählte den Free and Open Source Fund, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Caddy ist ein auf Einfachheit und Sicherheit ausgelegter Webserver, der mit einer Reihe von Funktionen ausgestattet ist, die für das Hosting von Websites nützlich sind. Beispielsweise kann er automatisch TLS-Zertifikate von Let’s Encrypt beziehen und verwalten, um HTTPS zu aktivieren, und er bietet Unterstützung für HTTP/2. HTTPS ist ein System zur Sicherung des Datenverkehrs zwischen Ihren Benutzern und Ihrem Server und entwickelte sich schnell zu einer grundlegenden Erwartung für jede Website, die in Produktion ausgeführt wird – ohne HTTPS warnen Chrome und Firefox, dass Ihre Website „Nicht sicher“ ist, wenn Benutzer versuchen, Anmeldeinformationen einzugeben.

      Früher wurde als Methode zur Installation von Caddy empfohlen, vorgefertigte Binärdateien von der Caddy-Projekt-Website herunterzuladen. Änderungen in der Lizenzierungsweise von Caddy bedeuten jedoch, dass Sie diese vorgefertigten Binärdateien nicht mehr für kommerzielle Zwecke verwenden dürfen, es sei denn, Sie zahlen eine Lizenzgebühr, auch wenn Sie Caddy nur intern innerhalb eines Unternehmens verwenden. Glücklicherweise ist der Quellcode von Caddy immer noch vollständig Open-Source und Sie können Caddy selbst erstellen, um Lizenzprobleme zu vermeiden.

      In diesem Tutorial erstellen Sie Caddy aus dem Quellcode und verwenden ihn zum Hosten einer mit HTTPS gesicherten Website. Dazu müssen Sie ihn kompilieren, mit einer Caddyfile konfigurieren und Plugins installieren. Am Ende lernen Sie, wie Sie Ihre Installation aktualisieren, wenn eine neue Version verfügbar ist.

      Voraussetzungen

      Schritt 1 – Erstellen von Caddy

      In diesem Schritt erstellen Sie den Caddy aus dem Quellcode mit der Möglichkeit, später Plugins hinzuzufügen, ohne den Quellcode von Caddy zu ändern.

      Für die Zwecke dieses Tutorials werden Sie den Quellcode unter ~/caddy speichern. Erstellen Sie das Verzeichnis durch Ausführen des folgenden Befehls:

      Navigieren Sie dorthin:

      Speichern Sie den Quellcode zur Ausführung und Anpassung von Caddy in einer Datei namens caddy.go. Erstellen Sie diese mit dem folgenden Befehl:

      Fügen Sie die folgenden Zeilen hinzu:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Dieser Code importiert Caddy direkt von Github (mit Git) und startet ihn von der Eingangsfunktion main. Wenn Sie die Telemetrie aktivieren möchten, entkommentieren Sie die Zeile caddymain.EnableTelemetry und setzen den Wert auf true. Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Damit caddy.go die importierten Abhängigkeiten verwenden kann, müssen Sie es als Modul initialisieren:

      Output

      go: creating new go.mod: module caddy

      An diesem Punkt sind Sie bereit, die Stock-Version von Caddy aus dem obigen Quellcode zu erstellen, indem Sie Folgendes ausführen:

      Es werden zahlreiche Ausgaben erscheinen, die detailliert aufführen, welche Bibliotheken von Go als Abhängigkeiten heruntergeladen werden, die zum Kompilieren notwendig sind. Die resultierende ausführbare Datei wird unter $GOPATH/bin gespeichert, wie in den Voraussetzungen erklärt.

      Führen Sie Caddy nach Abschluss aus:

      Sie werden eine Ausgabe ähnlich der folgenden sehen:

      Output

      Activating privacy features... done. Serving HTTP on port 2015 http://:2015 WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with `ulimit -n 8192`.

      Dies bedeutet, dass Caddy erfolgreich gestartet wurde und auf dem Port 2015 verfügbar ist. Sie können die Warnmeldung ignorieren, da diese Grenze in späteren Schritten ohne Ihr Zutun angepasst wird. Drücken Sie zum Beenden STRG + C.

      Sie haben Caddy nun erstellt und ausgeführt. Im nächsten Schritt installieren Sie Caddy als Dienst, damit er automatisch beim Booten startet, und passen dann seine Eigentums- und Berechtigungseinstellungen an, um die Sicherheit des Servers zu gewährleisten.

      Schritt 2 – Installieren von Caddy

      Nachdem Sie nun bestätigt haben, dass Sie Caddy erstellen und ausführen können, ist es an der Zeit, einen systemd-Dienst zu konfigurieren, damit Caddy automatisch beim Systemstart gestartet werden kann. Um mehr über systemd zu erfahren, besuchen Sie unser Tutorial Systemd-Grundlagen.

      Verschieben Sie zunächst die Caddy-Binärdatei nach /usr/local/bin, den Standardspeicherort für Binärdateien, die nicht vom Ubuntu-Paketmanager verwaltet werden und für den Systembetrieb nicht entscheidend sind:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/

      Übertragen Sie anschließend die Eigentümerschaft der Caddy-Binärdatei an den root user:

      • sudo chown root:root /usr/local/bin/caddy

      Dadurch wird verhindert, dass andere Konten die ausführbare Datei modifizieren. Aber selbst wenn der root user Eigentümer von Caddy ist, ist es ratsam, ihn nur mit anderen, Nicht-Root-Konten auszuführen, die auf dem System vorhanden sind. Dadurch wird sichergestellt, dass im Falle einer Kompromittierung von Caddy (oder eines anderen Programms) der Angreifer nicht in der Lage sein wird, die Binärdatei zu verändern oder Befehle als root auszuführen.

      Legen Sie anschließend die Berechtigungen der Binärdatei auf 755 fest – dies gibt root volle Lese-/Schreib-/Ausführungsberechtigungen für die Datei, während andere Benutzer nur in der Lage sind, sie zu lesen und auszuführen:

      • sudo chmod 755 /usr/local/bin/caddy

      Da der Caddy-Prozess nicht als root ausgeführt wird, verhindert Linux, dass er an die Ports 80 und 443 (die Standardports für HTTP bzw. HTTPS) gebunden wird, da es sich hierbei um mit Berechtigungen versehene Operationen handelt. Um in Ihrer Domäne leicht zugänglich zu sein, muss Caddy abhängig vom Protokoll an einen dieser Ports gebunden werden. Andernfalls müssten Sie der Domain-URL in Ihrem Browser eine bestimmte Port-Nummer hinzufügen, um die Inhalte anzuzeigen, die er bereitstellen wird.

      Damit Caddy an niedrige Ports gebunden werden kann, ohne als root ausgeführt zu werden, führen Sie den folgenden Befehl aus:

      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Das Dienstprogramm setcap legt die Dateifähigkeiten fest. In diesem Befehl weist es der Caddy-Binärdatei die Fähigkeit CAP_NET_BIND_SERVICE zu, die es einer ausführbaren Datei ermöglicht, sich an einen niedrigeren Port als 1024 zu binden.

      Sie haben nun die Einrichtung der Caddy-Binärdatei abgeschlossen und können mit dem Schreiben der Caddy-Konfiguration beginnen. Erstellen Sie ein Verzeichnis, in dem Sie die Konfigurationsdateien von Caddy speichern, indem Sie den folgenden Befehl ausführen:

      Legen Sie dann die richtigen Benutzer- und Gruppenberechtigungen dafür fest:

      • sudo chown -R root:www-data /etc/caddy

      Die Einstellung des Benutzers als root und der Gruppe als www-data stellt sicher, dass Caddy Lese- und Schreibzugriff auf den Ordner hat (über die Gruppe www-data) und dass nur das Superuser-Konto die gleichen Rechte zum Lesen und Ändern hat. www-data ist der Standardbenutzer und die Standardgruppe für Webserver unter Ubuntu.

      In einem späteren Schritt werden Sie die automatische TLS-Zertifikatsbereitstellung von Let’s Encrypt aktivieren. Erstellen Sie in Vorbereitung darauf ein Verzeichnis, in dem alle TLS-Zertifikate gespeichert werden, die Caddy erhalten wird, und geben ihm die gleichen Eigentumsregeln wie das Verzeichnis /etc/caddy:

      • sudo mkdir /etc/ssl/caddy
      • sudo chown -R root:www-data /etc/ssl/caddy

      Caddy muss Zertifikate in dieses Verzeichnis schreiben und aus diesem Verzeichnis lesen können, um Anfragen zu verschlüsseln.  Aus diesem Grund sollten Sie die Berechtigungen für das Verzeichnis /etc/ssl/caddy so ändern, dass es nur für root und www-data zugänglich ist:

      • sudo chmod 0770 /etc/ssl/caddy

      Erstellen Sie anschließend ein Verzeichnis, um die Dateien zu speichern, die Caddy hosten wird:

      Setzten Sie dann den Eigentümer und die Gruppe des Verzeichnisses auf www-data:

      • sudo chown www-data:www-data /var/www

      Caddy liest seine Konfiguration aus einer Datei namens Caddyfile, die unter /etc/caddy gespeichert ist. Erstellen Sie die Datei auf der Festplatte, indem Sie Folgendes ausführen:

      • sudo touch /etc/caddy/Caddyfile

      Um den Caddy-Dienst zu installieren, laden Sie die Unit-Datei systemd aus dem Caddy Github-Repository in /etc/systemd/system herunter, indem Sie Folgendes ausführen:

      • sudo sh -c 'curl https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service > /etc/systemd/system/caddy.service'

      Ändern Sie die Berechtigungen der Dienstdatei, damit sie nur durch ihren Eigentümer root geändert werden kann:

      • sudo chmod 644 /etc/systemd/system/caddy.service

      Dann laden Sie systemd neu, um den Caddy-Dienst zu erkennen:

      • sudo systemctl daemon-reload

      Prüfen Sie, ob systemd den Caddy-Dienst erkannt hat, durch Ausführen von systemctl status:

      • sudo systemctl status caddy

      Sie sehen einen Output, der so ähnlich wie der nachfolgende aussieht:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: e Active: inactive (dead) Docs: https://caddyserver.com/docs

      Wenn Sie die gleiche Ausgabe sehen, wurde der neue Dienst korrekt von systemd erkannt.

      Als Teil der anfänglichen Server-Einrichtungsvoraussetzung haben Sie ufw, die unkomplizierte Firewall, aktiviert und SSH-Verbindungen zugelassen. Damit Caddy HTTP- und HTTPS-Verkehr von Ihrem Server aus bereitstellen kann, müssen Sie diese in ufw zulassen, indem Sie den folgenden Befehl ausführen:

      • sudo ufw allow proto tcp from any to any port 80,443

      Der Output sieht wie folgt aus:

      Output

      Rule added Rule added (v6)

      Überprüfen Sie mit ufw status, ob Ihre Änderungen funktioniert haben:

      Sie sehen die folgende Ausgabe:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80,443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80,443/tcp (v6) ALLOW Anywhere (v6)

      Ihre Installation von Caddy ist nun abgeschlossen, aber noch nicht konfiguriert, um etwas bereitzustellen. Im nächsten Schritt konfigurieren Sie Caddy, um Dateien aus dem Verzeichnis /var/www bereitzustellen.

      Schritt 3 – Konfigurieren von Caddy

      In diesem Abschnitt schreiben Sie die grundlegende Caddy-Konfiguration für die Bereitstellung von statischen Dateien von Ihrem Server aus.

      Beginnen Sie mit der Erstellung einer grundlegenden HTML-Datei in /var/www namens index.html:

      • sudo nano /var/www/index.html

      Fügen Sie die folgenden Zeilen hinzu:

      /var/www/index.html

      <!DOCTYPE html>
      <html>
      <head>
        <title>Hello from Caddy!</title>
      </head>
      <body>
        <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
      </body>
      </html>
      

      Wenn sie in einem Webbrowser angezeigt wird, zeigt sie eine Kopfzeile mit dem Text This page is being served via Caddy. Speichern und schließen Sie die Datei.

      Öffnen Sie die zuvor erstellte Konfigurationsdatei Caddyfile für die Bearbeitung:

      • sudo nano /etc/caddy/Caddyfile

      Fügen Sie die folgenden Zeilen hinzu:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
      }
      

      Hierbei handelt es sich um eine grundlegende Caddy-Konfiguration, die besagt, dass der Port 80 Ihres Servers mit Dateien aus /var/www bedient und mit gzip komprimiert werden soll, um die Seitenladezeiten auf der Client-Seite zu reduzieren.

      In den meisten Fällen können Sie die Konfigurationsanweisungen mit Caddy weiter anpassen. Beispielsweise können Sie die gzip-Komprimierung auf HTML- und PHP-Dateien beschränken und die Komprimierungsstufe auf 6 setzen (1 ist die niedrigste und 9 die höchste Komprimierungsstufe), indem Sie die Anweisung mit geschweiften Klammern erweitern und Unteranweisungen darunter auflisten:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip {
            ext .html .htm .php
            level 6
        }
      }
      

      Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Caddy verfügt über eine große Anzahl verschiedener Richtlinien für viele Anwendungsfälle. Beispielsweise könnte die Anweisung fastcgi für das Aktivieren von PHP nützlich sein. Die Anweisung markdown könnte verwendet werden, um Markdown-Dateien vor der Bereitstellung automatisch in HTML zu konvertieren, was für die Erstellung eines einfachen Blogs nützlich sein könnte.

      Um zu testen, ob alles korrekt funktioniert, starten Sie den Caddy-Dienst:

      • sudo systemctl start caddy

      Führen Sie als Nächstes systemctl status aus, um Informationen über den Status des Caddy-Dienstes zu erhalten:

      • sudo systemctl status caddy

      Sie sehen dann Folgendes:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-03-12 11:17:49 UTC; 11s ago Docs: https://caddyserver.com/docs Main PID: 3893 (caddy) Tasks: 7 (limit: 1152) CGroup: /system.slice/caddy.service └─3893 /usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp Mar 12 11:17:49 caddy-article-update systemd[1]: Started Caddy HTTP/2 web server. Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Caddy version: v1.0.5 Mar 12 11:17:49 caddy-article-update caddy[3893]: Activating privacy features... done. Mar 12 11:17:49 caddy-article-update caddy[3893]: Serving HTTP on port 80 Mar 12 11:17:49 caddy-article-update caddy[3893]: http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Serving http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO][cache:0xc00007a7d0] Started certificate maintenance routine Mar 12 11:17:49 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 1): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 Mar 12 11:17:57 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 2): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 ...

      Sie können nun in einem Webbrowser zu der IP Ihres Servers browsen. Ihre Beispiel-Webseite zeigt an:

      Nachricht von Caddy

      Sie haben Caddy nun konfiguriert, um statische Dateien von Ihrem Server aus bereitzustellen. Im nächsten Schritt erweitern Sie die Funktionalität von Caddy durch die Verwendung von Plugins.

      Schritt 4 — Verwenden von Plugins

      Plugins bieten eine Möglichkeit, das Verhalten von Caddy zu ändern und zu erweitern. Sie bieten allgemein mehr Konfigurationsanweisungen, die Sie je nach Anwendungsfall verwenden können. In diesem Abschnitt fügen Sie Plugins hinzu und verwenden sie durch die Installation des Plugin minify, das überschüssige Leerzeichen entfernt und den Code, der an den Client gesendet wird, aufräumt, wodurch der Platzbedarf und die Ladezeiten weiter reduziert werden.

      Das GitHub-Repository des Plugins minify ist hacdias/caddy-minify.

      Navigieren Sie zum Verzeichnis mit dem Quellcode, den Sie in Schritt Eins erstellt haben:

      Um Caddy ein Plugin hinzuzufügen, müssen Sie es in die Datei caddy.go importieren, die Sie zum Erstellen von Caddy verwendet haben. Öffnen Sie caddy.go zum Bearbeiten:

      Importieren Sie das Plugin minify, indem Sie die hervorgehobene Zeile hinzufügen, wie hier beschrieben:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Speichern und schließen Sie die Datei.

      Einige Plugins erfordern möglicherweise einige geringfügige Konfigurationsanpassungen, lesen Sie also unbedingt die Dokumentation des Plugins, das Sie installieren. Eine Liste beliebter Plugins finden Sie im linken Fenster der Caddy-Dokumentation unter Plugins.

      Sie müssen Caddy bei jedem Hinzufügen eines neuen Plugins neu erstellen. Das liegt daran, dass Go eine kompilierte Programmiersprache ist, d. h. der Quellcode wird vor der Ausführung in Computercode umgewandelt.  Ihre Änderung an der Importdeklaration hat den Quellcode verändert, wirkt sich aber erst nach der Kompilierung auf die Binärdatei aus.

      Verwenden Sie den Befehl go install, um Caddy zu kompilieren:

      Verschieben Sie nach dem Abschluss die erzeugte Binärdatei nach /usr/local/bin und richten Sie Berechtigungen für die Binärdatei ein, wie Sie es zuvor getan haben. Sie müssen diese Schritte bei jeder Neuerstellung von Caddy durchführen, um dessen Funktionalität und Sicherheit zu gewährleisten:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Um das Plugin minify zu verwenden, müssen Sie die Anweisung minify zu Ihrer Caddyfile hinzufügen. Öffnen Sie sie zum Bearbeiten:

      • sudo nano /etc/caddy/Caddyfile

      Aktivieren Sie das Plugin, indem Sie die folgende Zeile zum Konfigurationsblock hinzufügen:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
        minify
      }
      

      Starten Sie nun Ihren Server mit systemctl neu:

      • sudo systemctl restart caddy

      Caddy wird nun ausgeführt und wird alle bereitgestellten Daten, einschließlich der zuvor erstellten Datei index.html, „minifizieren“. Sie können die „Minifizierung“ bei der Arbeit beobachten, indem Sie den Inhalt Ihrer Domäne mit curl abrufen:

      Sie werden die folgende Ausgabe sehen: Beachten Sie, dass alle unnötigen Leerzeichen entfernt wurden, was zeigt, dass das Plugin minify funktioniert.

      Output

      <!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

      In diesem Schritt haben Sie gelernt, wie Sie Caddy mit Plugins erweitern können. Als Nächstes aktivieren Sie HTTPS, indem Sie das Plugin tls.dns.digitalocean installieren.

      Schritt 5 — Aktivieren von automatischem TLS mit Let’s Encrypt

      In diesem Abschnitt aktivieren Sie die automatische Bereitstellung und Erneuerung von Zertifikaten durch Let’s Encrypt, wobei TXT-DNS-Datensätze zur Verifizierung verwendet werden.

      Um die Verwendung von TXT-DNS-Datensätzen zu verifizieren, installieren Sie mit der DigitalOcean-API namens tls.dns.digitalocean ein Plugin für die Schnittstelle. Das Verfahren zur Installation dieses Plugins ist fast identisch mit der Installation des Plugins minify im vorherigen Schritt. Öffnen Sie zunächst caddy.go:

      Fügen Sie das Repository des Plugins zu imports hinzu:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      
          _ "github.com/caddyserver/dnsproviders/digitalocean"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Kompilieren Sie es durch Ausführen von:

      Stellen Sie sicher, dass Caddy über systemctl angehalten wird, und beenden Sie dann die Installation des Plugins, indem Sie die neu erstellte Caddy-Binärdatei kopieren und noch einmal die Eigentümerschaft und die Berechtigungen festlegen:

      • sudo systemctl stop caddy
      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Konfigurieren Sie anschließend Caddy, um mit der API von DigitalOcean zum Festlegen von DNS-Einträgen zu arbeiten. Caddy muss auf dieses Token als Umgebungsvariable zugreifen, um den DNS von DigitalOcean zu konfigurieren, damit Sie die Unit-Datei systemd bearbeiten können:

      • sudo nano /etc/systemd/system/caddy.service

      Suchen Sie die Zeile, die mit Environment= beginnt, im Abschnitt [Service]. Diese Zeile definiert die Umgebungsvariablen, die an den Caddy-Prozess übergeben werden sollen. Fügen Sie am Ende dieser Zeile ein Leerzeichen ein, fügen Sie dann eine Variable DO_AUTH_TOKEN hinzu, gefolgt von dem Token, das Sie gerade generiert haben:

      /etc/systemd/system/caddy.service

      [Service]
      Restart=on-abnormal
      
      ; User and group the process will run as.
      User=www-data
      Group=www-data
      
      ; Letsencrypt-issued certificates will be written to this directory.
      Environment=CADDYPATH=/etc/ssl/caddy DO_AUTH_TOKEN=your_token_here
      

      Speichern und schließen Sie diese Datei und laden Sie dann den Daemon systemd wie zuvor neu, um sicherzustellen, dass die Konfiguration aktualisiert wird:

      • sudo systemctl daemon-reload

      Führen Sie systemctl status aus, um zu überprüfen, ob Ihre Konfigurationsänderungen in Ordnung sind:

      • sudo systemctl status caddy

      Die Ausgabe sollte wie folgt aussehen:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: https://caddyserver.com/docs ...

      Sie müssen einige geringfügige Änderungen an Ihrer Caddyfile vornehmen, also öffnen Sie diese zur Bearbeitung:

      • sudo nano /etc/caddy/Caddyfile

      Fügen Sie die hervorgehobenen Zeilen in die Caddyfile ein. Achten Sie darauf, dass Sie dabei your_domain durch Ihre Domäne ersetzen (statt nur Port :80) und gzip kommentieren:

      /etc/caddy/Caddyfile

      your_domain {
        root /var/www
        #gzip
        minify
        tls {
            dns digitalocean
        }
      }
      

      Die Verwendung einer Domäne statt nur eines Ports für den Hostnamen führt dazu, dass Caddy Anfragen über HTTP bedient. Die Anweisung tls konfiguriert das Verhalten von Caddy bei Verwendung von TLS, und die Unteranweisung dns gibt an, dass Caddy das DNS-01-System anstelle des HTTP-01 verwenden soll.

      Damit ist Ihre Website für die Bereitstellung bereit. Starten Sie Caddy mit systemctl und aktivieren Sie es dann mit enable, damit es beim Starten ausgeführt wird.

      • sudo systemctl start caddy
      • sudo systemctl enable caddy

      Wenn Sie zu Ihrer Domäne browsen, werden Sie automatisch zu HTTPS umgeleitet, wobei dieselbe Meldung angezeigt wird.

      Ihre Installation von Caddy ist nun abgeschlossen und gesichert und Sie können je nach Anwendungsfall weitere Anpassungen vornehmen.

      Wenn Sie Caddy aktualisieren möchten, wenn eine neue Version verfügbar ist, müssen Sie die Datei go.mod (im gleichen Verzeichnis gespeichert) aktualisieren, die wie folgt aussieht:

      ~/caddy/go.mod

      module caddy
      
      go 1.14
      
      require (
              github.com/caddyserver/caddy v1.0.5
              github.com/caddyserver/dnsproviders v0.4.0
              github.com/hacdias/caddy-minify v1.0.2
      )
      

      Der hervorgehobene Bereich ist die von Ihnen verwendete Version von Caddy. Wenn eine neue Version auf Github veröffentlicht wird (siehe die Seite mit den Versions-Tags), können Sie die bestehende Version in go.mod durch diese ersetzen und Caddy entsprechend der ersten beiden Schritte kompilieren. Sie können dasselbe für alle importierten Plugins tun.

      Zusammenfassung

      Sie haben Caddy nun auf Ihrem Server installiert und konfiguriert, sodass statische Seiten auf Ihrer gewünschten Domäne bereitgestellt werden, die mit kostenlosen Let’s Encrypt TLS-Zertifikaten gesichert sind.

      Ein guter nächster Schritt wäre, einen Weg für die Benachrichtigung zu finden, wenn neue Versionen von Caddy veröffentlicht werden. Sie können beispielsweise den Atom-Feed für Caddy-Veröffentlichungen oder den dedizierten Dienst dependencies.io verwenden.

      Weitere Informationen zur Konfiguration von Caddy finden Sie in der Dokumentation von Caddy.



      Source link