Verursacht das Blockieren aller Verbindungen außerhalb der USA, abgesehen von Port 80, eine hohe Serverlast?

16

Wie bei den meisten Servern (nehme ich an) haben wir Leute, die versuchen, unsere Dienste rund um die Uhr zu erzwingen. Ich habe die IPs von cpHulk auf eine schwarze Liste gesetzt, aber es scheint besser zu sein, wenn sie überhaupt nicht so weit kommen. Ich selbst und mein Host sind die einzigen, die über andere Ports als 80 eine Verbindung zum Server herstellen. Daher möchte ich Verbindungen aus allen Ländern außerhalb der USA mit Ausnahme von Port 80 blockieren. Ich habe meinen Host kontaktiert, um dies einzurichten, aber sie zögerten, weil sie sagten, es würde eine außergewöhnlich hohe Serverlast schaffen. Es handelt sich um einen dedizierten Xeon 1230-Server mit 32 GB RAM, auf dem CentOS 6.6 und iptables ausgeführt werden.

Erstens, warum sollte ich das nicht tun? Zweitens, hat mir mein Gastgeber recht gegeben? Drittens, gibt es eine Möglichkeit, dies zu erreichen, ohne die Leistung zu beeinträchtigen?

Big Iron
quelle
12
Es ist bedauerlich, dass Ihr Hosting-Kontakt nicht erwähnt hat: "Aber es gibt einen branchenüblichen Weg, um dasselbe zu tun, mit viel weniger Wartung, besserer Sicherheit und geringer Serverlast, genannt Explicit Deny All. Holen Sie sich die Liste der IPs, die Sie auf die Whitelist setzen müssen und ich werde es in 20 Minuten für Sie einrichten. " - Das würde ich von jedem Sysadmin erwarten, der den Stuhl, auf dem sie sitzen, wert ist.
corsiKa
blockiere sie einfach, wenn sie missbrauchen ... auf diese Weise ist die Wartung minimal ... mit einer vollen Tabelle musst du sie auf dem
neuesten

Antworten:

33

Das Einrichten spezifischer Regeln zum Blockieren jedes IP-Bereichs (durch Auflisten jedes Bereichs) ist der falsche Ansatz.

Legen Sie die Standardregeln in iptables fest, um den gesamten Datenverkehr auf Ihre Verwaltungsports zu lenken. Fügen Sie dann Regeln hinzu, um den Zugriff nur von vertrauenswürdigen IP-Adressen (von Ihnen und Ihrem Host) zuzulassen.

Das standardmäßige Blockieren aller Daten und das Zulassen nur des genehmigten Datenverkehrs wird in der Regel als "explizite Ablehnung aller Daten" bezeichnet und als bewährte Methode angesehen. In diesem Fall wird auch verhindert, dass die Leistung Ihres Hosts beeinträchtigt wird.

jlehtinen
quelle
Warum ist es, wenn Sie wissen, eine explizite Ablehnung, wenn Sie implizit alle ablehnen, indem Sie explizit nur ein paar IPs durch die Firewall zulassen?
Ben
Es gibt nichts wirklich implizites ...
Mr-SK
Ein potenzielles Problem für das Whitelisting ist der Remotezugriff. Sie benötigen ein zuverlässiges VPN (getrennt von diesem Server) und lassen auch dessen IP-Bereich zu.
Foo Bar
9

Dazu müssten Sie Zehntausende von Firewall-Regeln hinzufügen , eine für jeden Netzwerkblock, mit denen in einem Land möglicherweise ein bis mehrere tausend Netzwerkblöcke verknüpft sind.

Wenn eine Anfrage eingeht, muss sie mit jeder einzelnen Regel abgeglichen werden , was für ein paar Dutzend oder vielleicht sogar ein paar hundert Regeln sehr wenig Zeit in Anspruch nimmt, aber mit so vielen Regeln, wie Sie verwenden müssten, (1) jeder Die Anforderung wird erheblich verlangsamt und (2) es wird viel CPU verbraucht.

Der Weg, dies ohne signifikante Leistungseinbußen zu tun, besteht darin, das zu tun, was Sie bereits tun: nur die spezifischen Adressen zu blockieren, die problematisch sind.

Michael Hampton
quelle
Danke für die Antwort, Michael. Gibt es nicht eine Möglichkeit, nur in den USA ansässige IPs zuzulassen und dabei nur eine Regel zu überprüfen?
Big Iron
2
@ BigIron Natürlich nicht. Es gibt auch Zehntausende von Netblocks in den USA. Sie verlieren so oder so.
Michael Hampton
1
@SamuelEdwinWard Nein, das tut es nicht. Obwohl sie über den ganzen Ort verteilt sind, zählen solche Blocklisten im Allgemeinen nicht mehr als ein paar hundert Einträge.
Michael Hampton
1
Haben Sie eine Referenz dafür, wie bedeutend die Verlangsamung ist? Eine lineare Suche, obwohl alle Regelsätze schrecklich ineffizient klingen, würde zumindest eine binäre Suche bedeuten, dass die Suche in einer 60.000-Regeltabelle nur 16 Prüfpunkte in die Tabelle aufnehmen würde, und das könnte schneller sein, als den Datenverkehr an den Webserver weiterleiten zu lassen müssen Platten-E / A ausführen, um die Anforderung zu bedienen. Ich konnte keine Metriken für große Regelsätze in iptables finden.
Johnny
1
@ Johnny Netfilter (Iptables) verarbeitet seine Regeln leider linear: serverfault.com/questions/334885/…
Ross Ridge
5

Was Sie brauchen, ist ein Tool namens ipsets

IP-Sets sind ein Framework im Linux-Kernel, das vom Dienstprogramm ipset verwaltet werden kann. Je nach Typ speichert ein IP-Set derzeit möglicherweise IP-Adressen, (TCP / UDP) -Portnummern oder IP-Adressen mit MAC-Adressen auf eine Weise, die Blitzgeschwindigkeit beim Abgleichen eines Eintrags mit einem Set gewährleistet.

Das Wichtigste dabei ist, dass es blitzschnell ist! Dies liegt daran, dass eine große Anzahl von IP-Netzwerken durch einen einzelnen Hash anstelle von Hunderten oder Tausenden von Zeilen mit Iptables-Regeln dargestellt werden kann.

Informationen zum Sperren von Ländern finden Sie in diesem Beispiel :

Ricardo
quelle
1

Das Ignorieren der Frage, ob dies auf diese Weise geschehen soll oder nicht, ist eine gute Idee. Sie können mit dem GeoIP-Modul für iptables das tun, wonach Sie gefragt haben .

Nachdem Sie das Modul erstellt und installiert haben (und Ihre IP-Listen monatlich aktualisiert haben), können Sie folgendermaßen vorgehen, um einzelne Länder zu blockieren:

iptables -I INPUT -m geoip --src-cc CN -j DROP

Oder verwenden Sie --src-cc US -j ACCEPTund so weiter, wenn Sie die Länder angeben möchten, die Sie behalten möchten.

Scott Dudley
quelle
Wäre das nicht eine Leistungskatastrophe, selbst wenn "explizit alles verweigern" und nur ein einziges Land zugelassen würde?
@ AndréDaniel, ich gebe zu, dass ich mir den GeoIP-Code selbst nicht angesehen habe, aber unter der Annahme, dass sie eine nicht-naive Implementierung verwenden, die intelligenter ist, als eine Reihe von Netblocks (z. B. einen Trie) nacheinander zu vergleichen, muss dies nicht der Fall sein.
Scott Dudley
Wenn Sie über IPv4 sprechen und 512 MB pro Regel übrig haben, kann eine theoretische Implementierung mithilfe einer Nachschlagetabelle die Aufgabe in O (1) erledigen.
Scott Dudley
1

Wenn Sie die Möglichkeit behalten möchten, von jedem Ort aus eine Verbindung herzustellen, ohne eine geografische Blacklist / Whitelist zu führen, können Sie Port-Knocking implementieren . Die meisten automatisierten Versuche werden gestoppt, und Sie können weiterhin von jeder Adresse aus eine Verbindung herstellen.

Hinweis: Setzen Sie den zu öffnenden Port nicht neben den zu öffnenden Port. Andernfalls wird Ihre Regel durch einen sequenziellen Port-Scan aktiviert.

heiter
quelle
0

Es ist unwahrscheinlich, dass Sie einen oder zwei BGP-fähige Router in Ihrem Stapel haben UND eine Vorstellung davon haben, was zum Teufel Sie tun / mit jemandem zusammenarbeiten, der weiß, was zum Teufel sie tun oder tun Vielleicht steckt hinter einem DDoS-Präventionsanbieter eine relativ neue Methode zur Beschränkung des Datenverkehrs auf geografische Regionen, die als selektives Blackholing bezeichnet wird, die meiner Meinung nach einen Blick wert ist.

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

Da diese Methode die Routen manipuliert, werden alle Probleme mit der Serverauslastung umgangen.

Dmitri DB
quelle