Wird das Akzeptieren von RELATED, ESTABLISHED für alle Quellen in iptables als "zu offen" angesehen?


9

Ich habe oft gesehen, wie die Regel -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTangewendet wurde. Obwohl ich kein Experte bin, geht mich diese bestimmte Linie an. Es ist ziemlich offensichtlich, dass die Regel den gesamten Datenverkehr zulässt , mit der einzigen Ausnahme, dass die Verbindung hergestellt worden sein muss oder sich auf eine hergestellte Verbindung bezieht.

Szenario

  • Ich erlaube Verbindungen zum Standard-SSH-Port 22vom Server-LAN im Subnetz 192.168.0.0/16oder was auch immer.
  • SuperInsecureApp®legt etwas am Port frei 1337, das ich meiner INPUTKette hinzufüge .
  • Ich habe die conntrackRegel hinzugefügt, um zu akzeptieren ESTABLISHEDund RELATEDaus allen Quellen
  • Kettenpolitik ist DROP

Grundsätzlich sollte diese Konfiguration nur SSH-Verbindungen vom LAN zulassen, während eingehender Datenverkehr auf Port 1337 von der Welt aus zulässig ist.

Hier blüht meine Verwirrung. Würde das conntrackin irgendeiner Weise eine Sicherheitslücke aufdecken, die es einem ermöglichen würde, eine hergestellte Verbindung auf 1337 herzustellen (da es weltweit geöffnet ist) und diese Verbindung dann zu nutzen, um Zugriff auf den SSH-Port (oder einen anderen Port für diese Angelegenheit) zu erhalten?

Antworten:


8

Ich würde ESTABLISHED and RELATED Traffic nicht als zu offen betrachten. Möglicherweise können Sie RELATED weglassen, sollten jedoch ESTABLISHED auf jeden Fall zulassen. Beide Verkehrskategorien verwenden Conntrack-Zustände.

EINGESTELLTE Verbindungen wurden bereits durch eine andere Regel validiert. Dies macht es viel einfacher, unidirektionale Regeln zu implementieren. Auf diese Weise können Sie nur Transaktionen an demselben Port fortsetzen.

RELATED-Verbindungen werden auch durch eine andere Regel überprüft. Sie gelten nicht für viele Protokolle. Wieder machen sie es viel einfacher, Regeln zu konfigurieren. Sie stellen auch die ordnungsgemäße Reihenfolge der Verbindungen sicher, in denen sie gelten. Dies macht Ihre Regeln tatsächlich sicherer. Während dies möglicherweise eine Verbindung über einen anderen Port ermöglicht, sollte dieser Port nur Teil eines verwandten Prozesses wie einer FTP-Datenverbindung sein. Welche Ports zulässig sind, wird von protokollspezifischen Conntrack-Modulen gesteuert.

Indem Sie ESTABLISHED- und RELATED-Verbindungen zulassen, können Sie sich darauf konzentrieren, welche neuen Verbindungen die Firewall akzeptieren soll. Außerdem werden fehlerhafte Regeln vermieden, die den Rückverkehr zulassen, aber neue Verbindungen zulassen.

Da Sie das Programm an Port 1337 als unsicher eingestuft haben, sollte es mit einer dedizierten Benutzer-ID ohne Rootberechtigung gestartet werden. Dies begrenzt den Schaden, den jemand anrichten kann, wenn er es schafft, die Anwendung zu knacken und einen verbesserten Zugriff zu erhalten.

Es ist sehr unwahrscheinlich, dass eine Verbindung an Port 1337 verwendet werden kann, um remote auf Port 22 zuzugreifen, aber es ist möglich, dass eine Verbindung an Port 1337 verwendet wird, um eine Verbindung an Port 22 zu vermitteln.

Möglicherweise möchten Sie sicherstellen, dass SSH in der Tiefe gesichert ist:

  • Verwenden Sie hosts.allow, um den Zugriff zusätzlich zu den Firewall-Einschränkungen zu beschränken.
  • Verhindern Sie den Root-Zugriff oder erfordern Sie zumindest die Verwendung von Schlüsseln, und beschränken Sie deren Zugriff auf die Datei authorized_keys.
  • Audit-Anmeldefehler. Ein Protokollscanner kann Ihnen regelmäßig Berichte über ungewöhnliche Aktivitäten senden.
  • Verwenden Sie ein Tool wie fail2ban, um den Zugriff bei wiederholten Zugriffsfehlern automatisch zu blockieren.

Obwohl dies ein willkürliches Beispiel war, ist das erste, was ich auf neuen Servern mache, immer das Deaktivieren des Root-Zugriffs und der Klartextauthentifizierung in sshd - das ist ein sehr guter Tipp. Außerdem ist fail2ban bereits auf dem realen Setup installiert, von dem das Beispiel inspiriert wurde. "EINGESTELLTE Verbindungen wurden bereits durch eine andere Regel validiert" war genau das, worüber ich mir nicht sicher war und meine Frage perfekt beantwortete. Vielen Dank für Ihre sehr klare Antwort!
Dencker

Nebenfrage: Ändert sich aus Sicht der Leistung überhaupt etwas, wenn sich die conntrackRegel am Anfang oder am Ende der Kette befindet? Soweit ich iptablesweiß, müsste es alle Regeln für hergestellte Verbindungen verarbeiten, wenn es am Ende wäre, und nur diese einzige Regel, wenn es am Anfang platziert würde?
Dencker

@Dencker Sie möchten zuerst die ESTABLISHED, RELATED-Regel. Es wird bei weitem den meisten Verkehr akzeptieren. Darüber hinaus möchten Sie möglicherweise die Regeln haben, die den meisten Verkehr akzeptieren, obwohl es am besten ist, die Lesbarkeit stark zu belasten. Meine Regeln sind gruppiert, latenzempfindlich, hoher Datenverkehr (nach Typ gruppiert), andere. Iptables verfügt über Zähler, mit denen Sie sehen können, wie viel Verkehr jede Regel verarbeitet. Ich verwende Shorewall, die einige nützliche Standardeinstellungen hinzufügt und eine einfach zu lesende Regeldatei zum Erstellen meiner Firewalls enthält.
BillThor

2

ESTABLISHED und RELATED sind Merkmale der "statusbehafteten" Paketfilterung, bei der die Filterung nicht nur von einem statischen Regelsatz abhängt, sondern auch vom Kontext, in dem Pakete berücksichtigt werden. Sie benötigen ESTABLISHED, damit Verbindungen funktionieren, und RELATED für relevante ICMP-Nachrichten. Stateful Filtering ermöglicht eine genauere Filterung im Vergleich zu statischen "zustandslosen" Regeln.

Schauen wir uns zuerst ESTABLISHED an. Betrachten Sie beispielsweise TCP an Port 22. Der Initiator (Client) sendet ein SYNan serverIPaddr:22. Der Server kehrt SYN+ACKzum Client zurück. Jetzt ist der Kunde an der Reihe, eine zu senden ACK. Wie soll die Filterregel auf dem Server aussehen, so dass nur das "Matching" ACKakzeptiert wird? Eine allgemeine staatenlose Regel würde so aussehen

-A INPUT --proto tcp --port 22 -j ACCEPT

Das ist liberaler als die entsprechende staatliche Regel. Die zustandslose Regel erlaubt beliebige TCP-Segmente, z. B. ACKoder FINohne vorher eine Verbindung hergestellt zu haben. Port-Scanner können dieses Verhalten für den Fingerabdruck von Betriebssystemen ausnutzen.

Schauen wir uns jetzt RELATED an. Dies wird für ICMP-Nachrichten verwendet, hauptsächlich für Fehlermeldungen. Wenn beispielsweise ein Paket vom Server zum Client verworfen wird, wird eine Fehlermeldung an den Server gesendet. Diese Fehlermeldung bezieht sich auf die zuvor hergestellte Verbindung. Ohne die RELATED-Regel müsste man entweder eingehende Fehlermeldungen im Allgemeinen (ohne Kontext) zulassen oder, wie es für viele Sites üblich ist, ICMP vollständig löschen und auf Zeitüberschreitungen auf der Transportschicht warten. (Beachten Sie, dass dies eine schlechte Idee für IPv6 ist. ICMPv6 spielt für IPv6 eine wichtigere Rolle als ICMP für IP Legacy.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.