Einführung
Hallo und herzlich willkommen zu diesem Tutorial, das Ihnen zeigt, wie Sie Ihre Website mit Cloudflare schützen. Wir erklären Ihnen, wie Sie eine Website auf einem Server hosten, wie Sie sie mit dem hervorragenden und kostenlosen L7-Schutz von Cloudflare absichern und gleichzeitig die Sicherheit gewährleisten und wie Sie Serverports sperren, damit Angreifer Cloudflare nicht umgehen und den Server direkt angreifen können.
Über Cloudflare
Bevor wir beginnen, noch ein kurzer Hinweis zu Cloudflare und seinen Funktionen:
- Cloudflare ist eines der größten Netzwerke weltweit. Unternehmen, gemeinnützige Organisationen, Blogger und alle, die im Internet präsent sind, profitieren heute von schnelleren und sichereren Websites und Apps. Sie sind vor DDoS-Angriffen geschützt, und ihre Backend-Server sind vor Angreifern gesichert. Cloudflare bietet zudem eine Reihe von Sicherheitsdiensten, die Websites vor Angriffen wie SQL-Injection, XSS und DDoS-Attacken schützen.
- Cloudflare ermöglicht Internetanfragen für Millionen von Websites und verarbeitet durchschnittlich 55 Millionen HTTP-Anfragen pro Sekunde.
- Cloudflare hat die Internetsicherheit und -leistung deutlich verbessert. Es ist ein hervorragendes Tool für Website-Betreiber, um ihre Websites vor Angriffen zu schützen und deren Performance zu optimieren. Und das Beste: Die Nutzung ist kostenlos.
- Wenn Ihr Datenverkehr zunimmt, können Sie jederzeit auf einen kostenpflichtigen Tarif upgraden, um mehr Funktionen und eine bessere Leistung zu erhalten.
Voraussetzungen
- Ein Domainname
- Ein Cloudflare-Konto mit einer hinzugefügten Domain
- Ein Server, auf dem Debian 12 läuft
- Eine Website zum Schutz
Schritt 1 – Server aktualisieren und NGINX installieren
Als Erstes müssen wir den Server aktualisieren, dann müssen wir das NGINX-Repository hinzufügen und NGINX installieren.
apt update && apt upgrade -y
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
# Add the signing key for the nginx packages
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
# Add the NGINX repository
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# Pin down the NGINX repository to avoid conflicts with the default Debian repository
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
apt update
# Install NGINX
apt install nginx -ySchritt 2 – Website-Einrichtung und -Konfiguration
Die Konfiguration von NGINX zum Betrieb einer Website geht über den Rahmen dieses Tutorials hinaus. Wir werden jedoch für dieses Tutorial die Standardeinstellungen verwenden und den Server mit Cloudflare absichern.
Sie benötigen ein Ursprungszeugnis von Cloudflare Erstellen und auflisten /etc/nginx/ssl, das heißt cf.crt Und cf.key Leg es hin.
Sie können ein Ursprungszertifikat im Cloudflare-Dashboard erstellen, indem Sie Ihre Domain auswählen und zu SSL/TLS » Ursprungsserver » Zertifikat erstellen gehen.
Sie können die unten stehende Konfiguration (z. B. /etc/nginx/sites-available/default) an die Bedürfnisse Ihrer Website anpassen.
server {
listen 443 ssl;
server_name <example.com>;
access_log /var/log/nginx/host.access.log main;
ssl_certificate /etc/nginx/ssl/cf.crt;
ssl_certificate_key /etc/nginx/ssl/cf.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}Schritt 2.1 – NGINX neu laden
An diesem Punkt laden wir NGINX neu, um die Änderungen anzuwenden und die Domain auf den Server zu verweisen.
systemctl reload nginx
Sobald NGINX neu geladen ist, können Sie die Domain über einen A-Record im Cloudflare-Dashboard auf den Server verweisen. Stellen Sie sicher, dass der Proxy-Status auf “Proxied” gesetzt ist, um den L7-Schutz von Cloudflare zu aktivieren. Andernfalls ist der Server im Internet erreichbar.
Schritt 3 – 60 % des Weges geschafft
Wir haben nun 60 % des Weges zurückgelegt. Die Website ist jetzt durch den L7-Schutz von Cloudflare geschützt, aber der Server ist weiterhin über das Internet erreichbar und ein Angreifer kann Cloudflare umgehen und den Server direkt angreifen.
In den nächsten Schritten werden wir die Server-Ports sperren und nur Cloudflare-IP-Bereichen den Zugriff auf den Server erlauben.
Wir können dies mit iptables erreichen, aber wir gehen noch einen Schritt weiter und verwenden die Hetzner Cloud Firewall, um die Serverports zu sperren.
Schritt 4 – Einrichtung der Hetzner Cloud-Firewall
In diesem Schritt richten wir die Hetzner Cloud Firewall ein, um die Server-Ports zu sperren und nur Cloudflare-IP-Bereichen den Zugriff auf den Server zu erlauben.
Dies können Sie über die Hetzner Cloud Console tun, indem Sie Ihr Projekt auswählen und auf den Tab “Firewalls” klicken. Da die IP-Bereiche von Cloudflare jedoch dynamisch sind und sich im Laufe der Zeit ändern können, verwenden wir die Hetzner Cloud API, um diesen Prozess zu automatisieren.
Zunächst müssen Sie einige Dinge in der Hetzner-Cloud-Konsole erledigen:
- Generieren Sie ein API-Token, indem Sie zu «Sicherheit» » «API-Token» gehen und auf «API-Token generieren» klicken. Stellen Sie sicher, dass Sie ihm Lese- und Schreibberechtigungen erteilen.
- Notieren Sie sich die Firewall-ID. Sie finden sie in der URL auf der Firewall-Seite:
- Stellen Sie sicher, dass auf dem Server eine Firewall eingerichtet ist, sonst ist er nutzlos.
Zurück auf Ihrem Server speichern Sie das folgende Skript in einer Datei, z. B. firewall.py. Dieses Skript fügt den Cloudflare-IP-Bereich in der Hetzner Cloud Firewall zur Whitelist hinzu.
Hinweis: Das untenstehende Skript überschreibt alle vorhandenen Firewall-Regeln. Stellen Sie daher sicher, dass Ihre Firewall keine weiteren wichtigen Regeln enthält. Falls doch, sollten Sie diese dem Skript hinzufügen, z. B. die Öffnung eines SSH-Ports.
import requests
import json
HETZNER_API_TOKEN = "YOUR_HETZNER_API_TOKEN"
HETZNER_FIREWALL_ID = "YOUR_HETZNER_FIREWALL_ID"
def get_cloudflare_ips():
response = requests.get('https://www.cloudflare.com/ips-v4')
if response.status_code == 200:
return response.text.strip().split('\n')
else:
print("Failed to retrieve Cloudflare IP ranges")
return []
def whitelist_ips_in_hetzner(ip_ranges):
headers = {
'Authorization': f'Bearer {HETZNER_API_TOKEN}',
'Content-Type': 'application/json',
}
payload = {
"rules": [
{
"direction": "in",
"source_ips": ip_ranges,
"port": "443",
"protocol": "tcp",
"description": "Accept port 443"
},
#{
# "direction": "in",
# "source_ips": ["0.0.0.0/0","::/0"],
# "port": "22",
# "protocol": "tcp",
# "description": "Accept SSH connections"
#}
]
}
response = requests.post(f'https://api.hetzner.cloud/v1/firewalls/{HETZNER_FIREWALL_ID}/actions/set_rules', headers=headers, data=json.dumps(payload))
if 200 <= response.status_code < 203:
print("IPs whitelisted successfully in Hetzner Firewall")
else:
print("Failed to whitelist IPs in Hetzner Firewall", response.json())
if __name__ == "__main__":
cloudflare_ips = get_cloudflare_ips()
whitelist_ips_in_hetzner(cloudflare_ips)Schritt 5 – Skript ausführen und automatisieren
- Python installieren
Um das Skript auszuführen, müssen Sie Python auf dem Server installieren. Falls Python noch nicht installiert ist, können Sie es mit folgendem Befehl installieren:
apt install python3 -y
- Führe das Skript aus.
Sobald Python installiert ist, können Sie das Skript mit folgendem Befehl ausführen:
python3 firewall.py
Sie sollten auf eine Ausgabe wie “IPs erfolgreich in der Hetzner Firewall auf die Whitelist gesetzt” warten. Andernfalls können Sie die Fehlermeldung überprüfen und eine Fehlerbehebung durchführen.
- Automatisieren
Sobald das Skript erfolgreich ausgeführt wurde, können Sie es automatisieren, indem Sie es einem Cronjob hinzufügen, sodass das Skript alle 24 Stunden ausgeführt wird und die Hetzner Cloud Firewall mit dem Cloudflare IP-Bereich aktualisiert.
Sie können einen Cron-Job hinzufügen, indem Sie crontab -e ausführen und die folgende Zeile in die Datei einfügen.
* 0 * * * /usr/bin/python3 /path/to/firewall.py
Schritt 6 – Verstärkung des Schutzes seitens Cloudflare
Melden Sie sich in Ihrem Cloudflare-Dashboard an.
- Wechseln Sie zum Tab “SSL/TLS”.
Um sicherzustellen, dass die Website stets über HTTPS bereitgestellt wird und die Kommunikation zwischen Cloudflare und dem Server verschlüsselt und sicher ist:
- Aktivieren Sie «Immer HTTPS verwenden» – Aktivieren Sie «HTTPS automatische Umschreibung» – Stellen Sie den SSL/TLS-Verschlüsselungsmodus auf «Vollständig (Stark)» ein.
Wechseln Sie zum Tab “Sicherheit”.
Um sicherzustellen, dass die Website vor Bots, Hotlinks und anderen Angriffen geschützt ist:
- “Browser-Integritätsprüfung” aktivieren – “Hotlink-Schutz” aktivieren – “Bot-Kampfmodus” aktivieren”
Beachten Sie, dass es sich hierbei nicht um eine Universallösung handelt und Sie Ihr Cloudflare-Dashboard stets im Auge behalten und die Einstellungen entsprechend den Bedürfnissen Ihrer Website anpassen sollten.
- Sie können auch die «Ratenbegrenzung» aktivieren, um Ihre Website noch besser vor Angriffen zu schützen. Glücklicherweise bietet Cloudflare für diese Funktion ein kostenloses Kontingent an (einschließlich einer Regel).
- Sie können auch die Caching-Funktion von Cloudflare nutzen, um statische Website-Inhalte zwischenzuspeichern und die Serverlast zu reduzieren.
Und noch einmal: Sie sollten den Datenverkehr überwachen und die Einstellungen entsprechend den Bedürfnissen Ihrer Website anpassen.
Es gibt auch dieses Skript: https://github.com/guided-hacking/cfautouam
Mit diesem Skript können Sie Cloudflare automatisch in den “Angriffsmodus” versetzen, wenn der Server zu viel CPU oder RAM verbraucht. Dies kann nützlich sein, um den Server vor Angriffen zu schützen, geht aber über den Rahmen dieses Tutorials hinaus.
Ergebnis
In diesem Tutorial haben Sie gelernt, wie Sie eine Website mit dem L7-Schutz von Cloudflare sichern und Server und Website vor Angriffen schützen, ohne Ports im Internet freizugeben. Außerdem haben Sie die Aktualisierung der Hetzner-Cloud-Firewall mit dem IP-Adressbereich von Cloudflare automatisiert und so den Schutz auf Cloudflare-Seite verstärkt.










