Sollte ich Pakete mit iptables auf Raten beschränken?

8

Ich verwende iptables auf Ubuntu Server. Es ist ein Webserver auf einem VPS.
Ich würde gerne wissen, ob ich Pakete auf Raten beschränken soll. Wenn ja, was sollte ich bewerten? Und sollte ich das global oder per IP-Adresse tun?

Referenz
Ich habe Leute gesehen, die dies vorgeschlagen haben:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

Das oben Gesagte, ein globales Zinslimit, scheint zumindest für die Fälle, die ich mir vorstellen kann, nicht sehr nützlich zu sein. Gibt es einen Fall, in dem ich das Ratenlimit global festlegen sollte?
Ich glaube, dass ein Ratenlimit pro IP normalerweise besser ist:

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

Zusätzliche Frage: Remote-IPs können gefälscht werden. Wie kann man sie richtig einschränken?
Hierzu wurde eine weitere Frage hinzugefügt:
/server/340258/how-to-rate-limit-spoofed-ips-with-iptables

Das Ziel
Ich versuche, das Risiko einiger D / DoS-Angriffe und allgemeinen Missbrauchs zu verringern.

Verwandte
Wie kann ich SSH-Verbindungen mit iptables einschränken?

PS : Ich habe gerade eine verwandte Frage nur für ICMP geöffnet und sie enthält eine Ratenbegrenzung für dieses Protokoll: iptables | Arten von ICMP: Welche sind (potenziell) schädlich?

ML--
quelle

Antworten:

6

Ein Ratenlimit ist keine Prävention, sondern eine Einladung zu DoS - insbesondere in der oben dargestellten Variante, in der Pakete verworfen werden, wenn eine bestimmte Rate nicht authentifizierter Pakete ohne Statusinformationen überschritten wurde. Da jeder in diesem Verbindungsstatus ohne größeren Aufwand Pakete (einschließlich Quell-IP-Adressen) fälschen kann, entsteht ein neuer DoS-Angriffsvektor, der Ihre Ratenbegrenzungsfunktion nutzt.

Ein Ratenlimit ist im Allgemeinen nur dann sinnvoll, wenn Sie es haben

  1. entweder ein vorhersehbares hartes oder ein weiches Verbindungslimit in Ihrer Konfiguration
  2. Legen Sie das Ratenlimit für allgemeinen Verkehr unterhalb dieses Grenzwerts fest, um Verbindungen für Prioritäts- oder Verwaltungsverkehr unabhängig von der Last einrichten zu können

Während 1. oft schwer genug zu bestimmen ist, um sich überhaupt die Mühe zu machen, funktioniert 2. offensichtlich nur, wenn Sie in der Lage sind, "Prioritäts- oder Verwaltungsverkehr" beim Verbindungsaufbau zuverlässig vom Rest zu unterscheiden - z. B. wenn er über eine andere Netzwerkschnittstelle kommt.

In anderen Fällen wird die Ausfallsicherheit Ihres Systems eher verringert als erhöht.

the-wabbit
quelle
Hallo syneticon-dj. Ich verstehe und stimme zu, dass eine falsch konfigurierte Firewall ein weiteres Werkzeug für einen DoS-Angriff ist. Danke für die Warnung!
ML
Die Begrenzung der Rate pro IP oder pro IP-Port scheint auch sinnvoll zu sein, wenn Sie sich gegen legitimen Datenverkehr verteidigen, der für den eigenen Server zu massiv ist, dessen Urheber das von Ihnen erwähnte Problem jedoch wahrscheinlich nicht ausnutzt, z. B. missbräuchliches Verhalten des Bingbot oder Facebook Bots.
Ján Lalinský
3

Das Problem mit -m limit ist die Begrenzung aller TCP-Pakete unabhängig von den Quell-IP-Adressen. Also, wenn Sie eine geringe Einschränkung für Syn-Pakete wie haben

-A INPUT -p tcp  --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT
-A INPUT -p tcp --syn -j DROP

Nur ein Client mit der Befehlszeile hping kann Ihren Server herunterfahren, indem er so viele TCP-Pakete mit dem SYN-Flag sendet, da die Limit-Regel übereinstimmt und viele Pakete unabhängig von den IP-Adressen der Quelle verworfen werden. Das Limit macht keinen Unterschied zwischen gutem und schlechtem Verkehr. Es wird auch den guten eingehenden Verkehr beeinträchtigen.

hping könnte so etwas sein wie:

hping thetargetedhostip -p 80 -S -c 1000 -i u20000

Es ist besser, Hash-Limit zu verwenden, um eingehende TCP-Verbindungen pro IP-Adresse zu begrenzen . Die folgende Regel stimmt nur überein, wenn 30 Pakete pro Sekunde empfangen werden, wodurch die Anzahl der autorisierten Pakete pro IP auf 15 Pakete pro Sekunde reduziert wird .

-A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT 
-A INPUT -p tcp --syn -j DROP

Tatsächlich bin ich davon überzeugt, dass viele Server, die heute heruntergefahren werden, nicht durch Ressourcen während eines Angriffs ausgelastet sind, sondern weil das Limit-Modul den gesamten eingehenden Datenverkehr löscht.

Nicolas Guérinet
quelle
1

Normalerweise beschränke ich die Regeln zur Ratenbegrenzung auf Server, von denen ich erwarte, dass sie:

  • geringe Mengen an erwartetem Verkehr
  • Authentifizierungsdienste

Zum Beispiel die Anmeldeseite eines Hosting-Control-Panels, POP3, IMAP, SSH usw. Ich lasse HTTP-Dienste normalerweise weit offen und blockiere sie nur, wenn ein Problem vorliegt.

Sie möchten keinen guten Webverkehr verlieren. Ein Link auf slashdot kann Ihnen eine Menge Verkehr senden, und mit globalen Regeln können Sie möglicherweise kein Problem erkennen.

In Bezug auf gefälschte IPs können sie mit dieser Methode nicht blockiert werden und sind normalerweise kein Problem, da sich diese Regeln hauptsächlich auf die Begrenzung etablierter TCP-Verbindungen konzentrieren. Mit einer gefälschten IP kann die TCP-Verbindung niemals hergestellt werden.

jeffatrackaid
quelle
Hallo jeffatrackaid, danke für deine Antwort! Ich bin auch geneigt, diese Art von Diensten (SSH usw.) (global) zu bewerten. In Bezug auf den HTTP-Verkehr beabsichtige ich daher nicht, ein globales Limit anzuwenden. In dieser Frage erwarte ich, ob es Fälle gibt, in denen ein Limit pro IP interessant sein kann. In Bezug auf gefälschte IPs (ich habe eine separate Frage dazu geöffnet) gibt es zwar die Möglichkeit, Verbindungen herzustellen, es besteht jedoch die Möglichkeit eines DoS mithilfe einer SYN-Flut. Ich bin weiterhin daran interessiert zu hören, wie dies gemildert werden könnte.
ML