Wie man eine Website unter Verwendung von Cloudflare und Nginx auf Ubuntu 22.04 hostet

Der Autor hat die Electronic Frontier Foundation ausgewählt, um im Rahmen des Write for Donations-Programms eine Spende zu erhalten.

Einführung

Cloudflare ist ein Dienst, der sich zwischen dem Besucher und dem Server des Website-Besitzers befindet und als Reverse-Proxy für Websites fungiert. Cloudflare bietet ein Content Delivery Network (CDN) sowie DDoS-Mitigation und verteilte Domain Name Server-Dienste.

Nginx ist ein beliebter Webserver, der für das Hosting einiger der größten und am meisten besuchten Websites im Internet verantwortlich ist. Es ist üblich, Websites mit Nginx zu bedienen und Cloudflare als CDN- und DNS-Anbieter zu nutzen.

In diesem Tutorial sichern Sie Ihre von Nginx bediente Website mit einem Origin CA-Zertifikat von Cloudflare und konfigurieren dann Nginx für authentifizierte Pull-Anfragen. Die Vorteile dieser Einrichtung sind, dass Sie von Cloudflares CDN und schneller DNS-Auflösung profitieren, während sichergestellt wird, dass alle Verbindungen über Cloudflare erfolgen. Dies verhindert, dass bösartige Anfragen Ihren Server erreichen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie folgendes:

Schritt 1 — Generieren eines Origin CA TLS-Zertifikats

Das Cloudflare Origin CA ermöglicht es Ihnen, ein kostenloses TLS-Zertifikat zu generieren, das von Cloudflare signiert ist und auf Ihrem Nginx-Server installiert werden kann. Durch die Verwendung des von Cloudflare generierten TLS-Zertifikats können Sie die Verbindung zwischen den Servern von Cloudflare und Ihrem Nginx-Server sichern.

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

Lassen Sie die Standardoption Privaten Schlüssel und CSR mit Cloudflare generieren ausgewählt.

Klicken Sie auf Erstellen und Sie sehen einen Dialog mit dem Origin-Zertifikat und dem Privaten Schlüssel. Sie müssen sowohl das Origin-Zertifikat als auch den privaten Schlüssel von Cloudflare auf Ihren Server übertragen. Aus Sicherheitsgründen wird die Private Key-Information nicht erneut angezeigt, kopieren Sie also den Schlüssel auf Ihren Server, bevor Sie auf Ok klicken.

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

Kopieren Sie zunächst den Inhalt des im Dialogfeld Ihres Browsers angezeigten Origin-Zertifikats.

Dann öffnen Sie auf Ihrem Server /etc/ssl/cert.pem in Ihrem bevorzugten Texteditor:

  1. sudo nano /etc/ssl/cert.pem

Fügen Sie den Zertifikatsinhalt in die Datei ein. Speichern und beenden Sie dann den Editor. Wenn Sie nano verwenden, drücken Sie Strg+X, dann wenn Sie aufgefordert werden, Y und dann Enter.

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 zum Bearbeiten:

  1. 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: Manchmal werden beim Kopieren des Zertifikats und des Schlüssels vom Cloudflare-Dashboard und dem Einfügen in die entsprechenden Dateien auf dem Server Leerzeilen eingefügt. Nginx wird solche Zertifikate und Schlüssel als ungültig behandeln, daher stellen Sie sicher, dass keine Leerzeilen in Ihren Dateien vorhanden sind.

Warnung: Das Origin-CA-Zertifikat von Cloudflare wird nur von Cloudflare vertraut und sollte daher nur von Ursprungsservern verwendet werden, die aktiv mit Cloudflare verbunden sind. Wenn Sie Cloudflare anhalten oder deaktivieren, wird Ihr Ursprungs-CA-Zertifikat einen Fehler mit nicht vertrauenswürdigem Zertifikat anzeigen.

Jetzt, da Sie die Schlüssel- und Zertifikatsdateien auf Ihren Server kopiert haben, müssen Sie die Nginx-Konfiguration aktualisieren, um sie zu verwenden.

Schritt 2 — Installation des Origin-CA-Zertifikats in Nginx

In dem vorherigen Abschnitt haben Sie ein Ursprungszertifikat und einen privaten Schlüssel mithilfe des Dashboards von Cloudflare generiert und die Dateien auf Ihren Server gespeichert. Jetzt werden Sie die Nginx-Konfiguration für Ihre Website aktualisieren, um das Ursprungszertifikat und den privaten Schlüssel zur Absicherung der Verbindung zwischen den Servern von Cloudflare und Ihrem Server zu verwenden.

Zuerst stellen Sie sicher, dass UFW den HTTPS-Verkehr zulässt. Aktivieren Sie Nginx Full, um sowohl Port 80 (HTTP) als auch Port 443 (HTTPS) zu öffnen:

  1. sudo ufw allow 'Nginx Full'

Aktualisieren Sie nun UFW:

  1. sudo ufw reload

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

  1. sudo ufw status

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 sind Sie bereit, Ihren Nginx-Serverblock anzupassen. 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 Domain konfiguriert haben:

  1. sudo rm /etc/nginx/sites-enabled/default

Öffnen Sie als nächstes die Nginx-Konfigurationsdatei für Ihre Domain:

  1. 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 werden die Nginx-Konfigurationsdatei wie folgt ändern:

  • 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 Ursprungszertifikat und den privaten Schlüssel, die im vorherigen Abschnitt hinzugefügt wurden.

Ä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-Konfiguration

    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.

Testen Sie als nächstes, um sicherzustellen, dass es keine Syntaxfehler in Ihren Nginx-Konfigurationsdateien gibt:

  1. sudo nginx -t

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

  1. sudo systemctl restart nginx

Gehen Sie nun zum SSL/TLS-Abschnitt des Cloudflare-Dashboards, navigieren Sie zur Registerkarte Übersicht und ändern Sie den SSL/TLS-Verschlüsselungsmodus auf Vollständig (streng). Dies informiert Cloudflare darüber, dass die Verbindung zwischen Cloudflare und Ihrem Ursprungs-Nginx-Server immer verschlüsselt werden soll.

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

Um die Details Ihres Zertifikats anzuzeigen, öffnen Sie die Entwicklertools Ihres Browsers, wählen Sie den Sicherheit-Tab aus und klicken Sie dann auf Zertifikat anzeigen.

Hinweis: Möglicherweise fällt Ihnen auf, dass Ihr Zertifikat Cloudflare nicht als Aussteller auflistet. Dies liegt daran, dass Cloudflare möglicherweise andere Zertifizierungsstellen wie Let’s Encrypt verwendet. Eine vollständige Liste finden Sie in der Produktdokumentation von Cloudflare zu Zertifizierungsstellen.

Im nächsten Abschnitt richten Sie Authenticated Origin Pulls ein, um zu überprüfen, ob Ihr Ursprungsserver tatsächlich mit Cloudflare kommuniziert und nicht mit einem anderen Server. Dadurch wird Nginx so konfiguriert, dass nur Anfragen akzeptiert werden, die ein gültiges Clientzertifikat von Cloudflare verwenden; alle Anfragen, die nicht über Cloudflare geleitet wurden, werden abgewiesen.

Schritt 3 – Einrichten von Authenticated Origin Pulls

Das Origin-CA-Zertifikat hilft Cloudflare, zu überprüfen, dass es mit dem richtigen Ursprungsserver spricht. In diesem Schritt wird die TLS-Clientauthentifizierung verwendet, um zu überprüfen, ob Ihr Ursprungs-Nginx-Server mit Cloudflare spricht.

Bei einem client-authentifizierten TLS-Handshake stellen beide Seiten ein Zertifikat zur Überprüfung bereit. Der Ursprungsserver ist so konfiguriert, dass nur Anfragen akzeptiert werden, die ein gültiges Client-Zertifikat von Cloudflare verwenden. Anfragen, die nicht über Cloudflare geleitet wurden, werden abgelehnt, da sie nicht über das Zertifikat von Cloudflare verfügen. Dies bedeutet, dass Angreifer Cloudflares Sicherheitsmaßnahmen nicht umgehen können und nicht direkt auf Ihren Nginx-Server zugreifen können.

Cloudflare stellt Zertifikate vor, die von einer CA mit folgendem Zertifikat signiert wurden:

-----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-----

Sie können das Zertifikat auch direkt von der Dokumentation von Cloudflare herunterladen.

Kopieren Sie dieses Zertifikat.

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

  1. sudo nano /etc/ssl/cloudflare.crt

Fügen Sie das Zertifikat der Datei hinzu. Speichern Sie dann die Datei und verlassen Sie den Editor.

Aktualisieren Sie nun Ihre Nginx-Konfiguration, um TLS-authentifizierte Ursprungsziele zu verwenden. Öffnen Sie die Konfigurationsdatei für Ihre Domain:

  1. sudo nano /etc/nginx/sites-available/your_domain

Fügen Sie die Direktiven ssl_client_certificate und ssl_verify_client wie im folgenden Beispiel gezeigt hinzu:

/etc/nginx/sites-available/your_domain
. . .

server {

    # SSL-Konfiguration

    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 verlassen Sie den Editor.

Als nächstes testen Sie Nginx, um sicherzustellen, dass keine Syntaxfehler in Ihrer Nginx-Konfiguration vorhanden sind:

  1. sudo nginx -t

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

  1. sudo systemctl restart nginx

Schließlich, um Authentifizierte Pulls zu aktivieren, öffnen Sie den SSL/TLS-Abschnitt im Cloudflare-Dashboard, navigieren Sie zum Origin Server-Tab und schalten Sie die Option Authentifizierte Origin-Pulls um.

Besuchen Sie nun Ihre Website unter https://Ihre_Domain, um zu überprüfen, ob sie ordnungsgemäß eingerichtet wurde. Wie zuvor wird Ihre Startseite angezeigt.

Um zu überprüfen, dass Ihr Server nur Anfragen akzeptiert, die von Cloudflares CA signiert sind, deaktivieren Sie die Option Authentifizierte Origin-Pulls und laden Sie dann Ihre Website neu. Sie sollten die folgende Fehlermeldung erhalten:

Ihr Ursprungsserver gibt einen Fehler aus, wenn Cloudflares CA eine Anfrage nicht signiert.

Hinweis: Die meisten Browser werden Anfragen zwischenspeichern. Um die oben genannte Änderung zu sehen, können Sie den Inkognito-/Privatmodus Ihres Browsers verwenden. Um zu verhindern, dass Cloudflare Anfragen zwischenspeichert, während Sie Ihre Website einrichten, navigieren Sie im Cloudflare-Dashboard zu Übersicht und schalten Sie Entwicklungsmodus um.

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

Schlussfolgerung

In diesem Tutorial haben Sie Ihre mit Nginx betriebene Website gesichert, indem Sie den Datenverkehr zwischen Cloudflare und dem Nginx-Server mit einem Origin-CA-Zertifikat von Cloudflare verschlüsselt haben. Anschließend haben Sie Authenticated Origin Pulls auf dem Nginx-Server eingerichtet, um sicherzustellen, dass er nur Anfragen von Cloudflare-Servern akzeptiert und so verhindert, dass sonst jemand direkt eine Verbindung zum Nginx-Server herstellt.

Source:
https://www.digitalocean.com/community/tutorials/how-to-host-a-website-using-cloudflare-and-nginx-on-ubuntu-22-04