So hosten Sie eine Website mit Cloudflare und Nginx unter Ubuntu 16.04

Der Autor hat die Electronic Frontier Foundation ausgewählt, um eine Spende in Höhe von 200 USD im Rahmen der Write zu erhalten für DOnations program.

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-Schutz- und verteilte Domain Name Server-Dienste.

Nginx ist ein beliebter Webserver, der für das Hosten einiger der Websites mit dem größten und höchsten Datenverkehr im Internet verantwortlich ist. Es ist üblich, dass Unternehmen Websites mit Nginx bereitstellen und Cloudflare als CDN- und DNS-Anbieter verwenden.

In diesem Lernprogramm sichern Sie Ihre von Nginx bereitgestellte Website mit einem Origin CA-Zertifikat von Cloudflare und konfigurieren Nginx so, dass authentifizierte Pull-Anforderungen verwendet werden. Die Verwendung dieses Setups bietet den Vorteil, dass Sie von Cloudflares CDN und der schnellen DNS-Auflösung profitieren und gleichzeitig sicherstellen, dass alle Verbindungen über Cloudflare geleitet werden. Dies verhindert, dass böswillige Anfragen Ihren Server erreichen.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:

Schritt 1 - Generieren eines Origin CA TLS-Zertifikats

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

Navigieren Sie zum Generieren eines Zertifikats mit Origin CA zum Abschnitt * Crypto * Ihres Cloudflare-Dashboards. Klicken Sie dort im Bereich * Ursprungszertifikate * auf die Schaltfläche * Zertifikat erstellen *:

image: https://assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/KcTiCQW.png [Zertifikatoption im Cloudflare-Dashboard erstellen]

Behalten Sie die Standardoption * CloudFlare kann einen privaten Schlüssel generieren und eine CSR * auswählen.

Klicken Sie auf * Weiter * und Sie sehen einen Dialog mit dem * Ursprungszertifikat * und dem * privaten Schlüssel *. Sie müssen sowohl das Ursprungszertifikat als auch den privaten Schlüssel von CloudFlare auf Ihren Server übertragen.

image: https://assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/bIBA8tf.png [Dialogfeld mit dem Ursprungszertifikat und dem privaten Schlüssel]

Wir verwenden das Verzeichnis "+ / etc / ssl / certs " auf dem Server, um das Ursprungszertifikat zu speichern. Das Verzeichnis " / etc / ssl / private +" enthält die private Schlüsseldatei. Beide Ordner sind bereits auf dem Server vorhanden.

Kopieren Sie zunächst den Inhalt des * Ursprungszertifikats *, das im Dialogfeld Ihres Browsers angezeigt wird.

Öffnen Sie dann auf Ihrem Server "+ / etc / ssl / certs / cert.pem +" zum Bearbeiten:

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

Fügen Sie den Zertifikatsinhalt in die Datei ein. Dann speichern und beenden Sie den Editor.

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

sudo nano /etc/ssl/private/key.pem

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

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

Schritt 2 - Installieren des Origin CA-Zertifikats in Nginx

Im vorherigen Abschnitt haben Sie mithilfe des Cloudlfare-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 Site so, dass das Ursprungszertifikat und der private Schlüssel zum Sichern der Verbindung zwischen den Cloudflare-Servern und Ihrem Server verwendet werden.

Nginx erstellt während der Installation einen Standardserverblock. Entfernen Sie es, falls vorhanden, da Sie bereits einen benutzerdefinierten Serverblock für Ihre Domain konfiguriert haben:

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

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

sudo nano /etc/nginx/sites-available/

Die Datei sollte folgendermaßen aussehen:

example.com ’> / etc / nginx / sites-available /

server {
       listen 80;
       listen [::]:80;

       root /var/www//html;
       index index.html index.htm index.nginx-debian.html;

       server_name  ;

       location / {
               try_files $uri $uri/ =404;
       }
}

Die Nginx-Konfigurationsdatei wird folgendermaßen geändert:

  • Lauschen Sie dem Port "+ 80 " und leiten Sie alle Anfragen zur Verwendung von " https +" um.

  • Lauschen Sie dem Port "+ 443 +" und verwenden Sie das Ursprungszertifikat und den privaten Schlüssel, die Sie im vorherigen Abschnitt hinzugefügt haben.

Ändern Sie die Datei so, dass sie wie folgt aussieht:

example.com ’> / etc / nginx / sites-available /

server {
   listen 80;
   listen [::]:80;
   server_name  ;

}











   server_name  ;

   root /var/www/example.com/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.

Stellen Sie als Nächstes sicher, dass in keiner Ihrer Nginx-Konfigurationsdateien Syntaxfehler enthalten sind:

sudo nginx -t

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

sudo systemctl restart nginx

Wechseln Sie nun zum Abschnitt * Crypto * des Cloudflare-Dashboards und ändern Sie den * SSL * -Modus in * Full *. Dadurch wird Cloudflare angewiesen, die Verbindung zwischen Cloudflare und Ihrem ursprünglichen Nginx-Server immer zu verschlüsseln.

image: https://assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/xO3frBH.png [Vollständigen SSL-Modus im Cloudflare-Dashboard aktivieren]

Besuchen Sie jetzt Ihre Website unter "+ https: // +", um zu überprüfen, ob sie richtig eingerichtet ist. Ihre Startseite wird angezeigt, und der Browser meldet, dass die Website sicher ist.

Im nächsten Abschnitt richten Sie Authenticated Origin Pulls ein, um sicherzustellen, dass Ihr Ursprungsserver tatsächlich mit Cloudflare und nicht mit einem anderen Server kommuniziert. Auf diese Weise wird Nginx so konfiguriert, dass nur Anforderungen akzeptiert werden, die ein gültiges Clientzertifikat von Cloudflare verwenden, und Anforderungen, die CloudFlare nicht durchlaufen haben, werden verworfen.

Schritt 3 - Authentifizierte Origin-Pulls einrichten

Mithilfe des Origin-CA-Zertifikats kann Cloudflare überprüfen, ob eine Verbindung zum richtigen Ursprungsserver besteht. Aber wie kann Ihr ursprünglicher Nginx-Server überprüfen, ob er tatsächlich mit Cloudflare kommuniziert? Geben Sie die TLS-Clientauthentifizierung ein.

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

Cloudflare präsentiert von einer Zertifizierungsstelle signierte Zertifikate mit dem folgenden Zertifikat:

-----BEGIN CERTIFICATE-----
MIIGBjCCA/CgAwIBAgIIV5G6lVbCLmEwCwYJKoZIhvcNAQENMIGQMQswCQYDVQQG
EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjEUMBIGA1UECxMLT3JpZ2lu
IFB1bGwxFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3Ju
aWExIzAhBgNVBAMTGm9yaWdpbi1wdWxsLmNsb3VkZmxhcmUubmV0MB4XDTE1MDEx
MzAyNDc1M1oXDTIwMDExMjAyNTI1M1owgZAxCzAJBgNVBAYTAlVTMRkwFwYDVQQK
ExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmlnaW4gUHVsbDEWMBQGA1UE
BxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEAxMa
b3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDdsts6I2H5dGyn4adACQRXlfo0KmwsN7B5rxD8C5qgy6spyONr
WV0ecvdeGQfWa8Gy/yuTuOnsXfy7oyZ1dm93c3Mea7YkM7KNMc5Y6m520E9tHooc
f1qxeDpGSsnWc7HWibFgD7qZQx+T+yfNqt63vPI0HYBOYao6hWd3JQhu5caAcIS2
ms5tzSSZVH83ZPe6Lkb5xRgLl3eXEFcfI2DjnlOtLFqpjHuEB3Tr6agfdWyaGEEi
lRY1IB3k6TfLTaSiX2/SyJ96bp92wvTSjR7USjDV9ypf7AD6u6vwJZ3bwNisNw5L
ptph0FBnc1R6nDoHmvQRoyytoe0rl/d801i9Nru/fXa+l5K2nf1koR3IX440Z2i9
+Z4iVA69NmCbT4MVjm7K3zlOtwfI7i1KYVv+ATo4ycgBuZfY9f/2lBhIv7BHuZal
b9D+/EK8aMUfjDF4icEGm+RQfExv2nOpkR4BfQppF/dLmkYfjgtO1403X0ihkT6T
PYQdmYS6Jf53/KpqC3aA+R7zg2birtvprinlR14MNvwOsDOzsK4p8WYsgZOR4Qr2
gAx+z2aVOs/87+TVOR0r14irQsxbg7uP2X4t+EXx13glHxwG+CnzUVycDLMVGvuG
aUgF9hukZxlOZnrl6VOf1fg0Caf3uvV8smOkVw6DMsGhBZSJVwao0UQNqQIDAQAB
o2YwZDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4E
FgQUQ1lLK2mLgOERM2pXzVc42p59xeswHwYDVR0jBBgwFoAUQ1lLK2mLgOERM2pX
zVc42p59xeswCwYJKoZIhvcNAQENA4ICAQDKDQM1qPRVP/4Gltz0D6OU6xezFBKr
LWtDoA1qW2F7pkiYawCP9MrDPDJsHy7dx+xw3bBZxOsK5PA/T7p1dqpEl6i8F692
g//EuYOifLYw3ySPe3LRNhvPl/1f6Sn862VhPvLa8aQAAwR9e/CZvlY3fj+6G5ik
3it7fikmKUsVnugNOkjmwI3hZqXfJNc7AtHDFw0mEOV0dSeAPTo95N9cxBbm9PKv
qAEmTEXp2trQ/RjJ/AomJyfA1BQjsD0j++DI3a9/BbDwWmr1lJciKxiNKaa0BRLB
dKMrYQD+PkPNCgEuojT+paLKRrMyFUzHSG1doYm46NE9/WARTh3sFUp1B7HZSBqA
kHleoB/vQ/mDuW9C3/8Jk2uRUdZxR+LoNZItuOjU8oTy6zpN1+GgSj7bHjiy9rfA
F+ehdrz+IOh80WIiqs763PGoaYUyzxLvVowLWNoxVVoc9G+PqFKqD988XlipHVB6
Bz+1CD4D/bWrs3cC9+kk/jFmrrAymZlkFX8tDb5aXASSLJjUjcptci9SKqtI2h0J
wUGkD7+bQAr+7vr8/R+CBmNMe7csE8NeEX6lVMF7Dh0a1YKQa6hUN18bBuYgTMuT
QzMmZpRpIBB321ZBlcnlxiTJvWxvbCPHKHj20VwwAz7LONF59s84ZsOqfoBv8gKM
s0s5dsq5zpLeaw==
-----END CERTIFICATE-----

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

Kopieren Sie dieses Zertifikat.

Erstellen Sie dann die Datei "+ / etc / ssl / certs / cloudflare.crt +", um das Cloudflare-Zertifikat zu speichern:

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

Fügen Sie das Zertifikat in die Datei ein. Speichern Sie dann 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 Domain:

sudo nano /etc/nginx/sites-available/

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

example.com ’> / etc / nginx / sites-available /

. . .

server {

   # SSL configuration

   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   ssl        on;
   ssl_certificate         /etc/ssl/certs/cert.pem;
   ssl_certificate_key     /etc/ssl/private/key.pem;



   . . .

Speichern Sie die Datei und beenden Sie den Editor.

Überprüfen Sie als Nächstes, ob in Ihrer Nginx-Konfiguration Syntaxfehler vorliegen.

sudo nginx -t

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

sudo systemctl restart nginx

Öffnen Sie zum Aktivieren von Authenticated Pulls den Abschnitt * Crypto * im Cloudflare-Dashboard und aktivieren Sie die Option * Authenticated Origin Pulls *.

Besuchen Sie jetzt Ihre Website unter "+ https: // +", um zu überprüfen, ob sie ordnungsgemäß eingerichtet wurde. Nach wie vor wird Ihre Homepage angezeigt.

Um zu überprüfen, ob Ihr Server nur von der Cloudflare-Zertifizierungsstelle signierte Anforderungen akzeptiert, deaktivieren Sie die Option * Authenticated Origin Pulls * und laden Sie Ihre Website erneut. Folgende Fehlermeldung sollte angezeigt werden:

Ihr Ursprungsserver gibt einen Fehler aus, wenn eine Anfrage nicht von der Cloudflare-Zertifizierungsstelle signiert wurde.

Kehren Sie zum Abschnitt * Crypto * im Cloudflare-Dashboard zurück und aktivieren Sie die Option * Authenticated Origin Pulls * erneut, sobald Sie wissen, dass sie ordnungsgemäß funktioniert.

Fazit

In diesem Tutorial haben Sie Ihre Nginx-basierte Website durch Verschlüsselung des Datenverkehrs zwischen Cloudflare und dem Nginx-Server mit einem Origin CA-Zertifikat von Cloudflare gesichert. Anschließend richten Sie Authenticated Origin Pulls auf dem Nginx-Server ein, um sicherzustellen, dass nur Anforderungen von Cloudflare-Servern akzeptiert werden, sodass andere Benutzer keine direkte Verbindung zum Nginx-Server herstellen können.