One place for hosting & domains

      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