Zugriff auf den Webserver nur über CloudFlare (iptables) zulassen


Cloudflare ist eine großartige Sache, um Websites vor verschiedenen Computer-Gaunern - Hackern - zu schützen. Wenn sie jedoch die ursprüngliche IP des Webservers, auf dem sich die Site befindet, irgendwie erkannt haben, werden sie zumindest versuchen, sie per IP unter Umgehung des Proxys anzugreifen. Sie können Weiterleitungen blockieren, 444 NGINX-Resets senden, wenn Sie versuchen, auf nicht vorhandene Domänen zuzugreifen. Am schlimmsten ist jedoch Folgendes: Öffnen Sie den http / https-Verkehr zum Server nur für die IP-Adressen unseres Sicherheitsproxys.

Übrigens kann diese Methode auch alle Arten von Websites wie Crimeflare.org teilweise unbrauchbar machen . Nun, der „Detektiv“ hat herausgefunden, dass die Domain einmal über eine solche IP zugänglich war. Eine Überprüfung, ob sie noch vorhanden ist, indem er versucht, sich bei IP: 443 oder IP: 80 anzumelden, ist nutzlos.
Und wenn Sie alle Ports auf dem Server schließen, ICMP deaktivieren und nur den Zugriff über IPMI / VNC zulassen, weiß niemand, dass sich überhaupt etwas auf unserer IP befindet.

Lass es uns in iptables machen.

CloudFlare verfügt über eine große Anzahl von Adressen, die jedoch alle zu einer kleinen Anzahl von Subnetzen komprimiert sind. Im Vorgriff auf eine solche Anfrage veröffentlichten die Jungs einen Artikel , in dem erklärt wurde, wo Sie ihre aktuellen Subnetze finden und was Sie in iptables schreiben können. Ein Problem besteht darin, dass dies manuell erfolgen soll, was ziemlich unpraktisch und unzuverlässig ist: Die Adressierung in CloudFlare kann sich im Laufe der Zeit ändern, und eines Tages kann es vorkommen, dass der Proxy an den neuen Adressen auf Ihrem Server nicht zulässig ist. Dementsprechend können Kunden, deren Sitzungen diese neuen Adressen durchlaufen, nicht auf Ihre Website zugreifen.

Glücklicherweise ist das Problem automatisiert. Also:

1. Wir verbieten den gesamten HTTP / HTTPS-Verkehr in iptables:

iptables -I INPUT 1 -p tcp -m multiport --dports http,https -j DROP 

2. Platzieren Sie beispielsweise über /root/cloudflare-update.sh das Skript cloudflare-update.sh mit den folgenden Inhalten:

 #!/bin/bash while read ip ; do iptables -D INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)" while read ip ; do iptables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)" iptables-save > /etc/iptables/rules.v4 

Das heißt, wir löschen alle zuvor hinzugefügten vorhandenen Einträge und fügen alles, was in der CloudFlare-Adressliste enthalten ist, erneut hinzu. Auf diese Weise vermeiden wir doppelte Regeln. Am Ende - speichern.

3. Wir machen das Skript ausführbar:

 chmod +x /root/cloudflare-update.sh 

4. In Kronen (z. B. am Ende der Datei / etc / crontab) fügen wir die Aufgabe hinzu, die Adressen alle 12 Stunden zu aktualisieren:

 0 */12 * * * root /root/cloudflare-update.sh &> /dev/null 

Das ist alles! Jetzt können Sie die Ports 80 und 443 auf Ihrem Server nur über einen Proxy erreichen, weil Auf dem Server sind jederzeit nur Adressen zulässig, die zum Proxy gehören.

Source: https://habr.com/ru/post/de414837/


All Articles