micha182
Goto Top

Pfsense Regel pass ACK lässt SYN durch

Hi zusammen,

vielen Dank zunächst, für soviel geteiltes Wissen, dass mir schon häufig geholfen hat!
Zu folgender Problemstellung habe ich keine Beiträge finden können, auch nicht in anderen Foren - evtl. ist die Antwort auch so offensichtlich und simpel, dass ich selbst hier das Problem bin.

Ich habe in pfsense unter anderem zwei VLANs eingerichtet mit. u.a. folgenden Geräten:
  • V10_LAN
  • * NAS mit IP 10.0.10.6
  • V20_WLAN
  • * iPad mit IP 10.0.20.5

Für die Interfaces habe ich folgende Regeln definiert:

rules_v10_lan

rules_v20_wlan

In der Regel "allow ACK nas users to devices" habe ich definiert, dass sie nur für Pakete mit ACK-Flag greifen soll:

rules_v20_wlan_flags

Ist diese Regel inaktiv, kann ich die Adresse 10.0.10.6 vom iPad per Browser nicht aufrufen.
Ist diese Regel aktiv, funktioniert der Aufruf, obwohl doch nach meinem Verständnis das erste Paket mit SYN-Flag gar nicht durchkommen dürfte. Hier mal ein Ausschnitt des TCP-Paketfluss auf dem IF_V20-WLAN-interface.

capture_v20_wlan

Wo mache ich denn hier den Denkfehler? Über einen Schubser in die richtige Richtung würde ich mich freuen.

Viele Grüße
Michael


p.s. Dass die ACK-Regel für den Verbindungsaufbau keinen Sinn macht, ist mir bewusst. Ich möchte nur gern verstehen, wieso meine Erwartungshaltung hier vom tatsächlichen Verhalten der firewall abweicht. Anscheinend habe ich hier etwas nicht richtig verstanden.

Content-Key: 893015661

Url: https://administrator.de/contentid/893015661

Printed on: April 23, 2024 at 13:04 o'clock

Member: aqui
aqui Jul 03, 2021 updated at 15:45:37 (UTC)
Goto Top
Ein genereller Fehler sticht gleich ins Auge bei deinem Regelwerk. In deinen VLANs setzt du als Source Adresse immer ANY. Das ist nicht besonders intelligent was die Sicherheit anbetrifft.
Du solltest im VLAN 10 dann als Source Adress auch logischerweise vlan10_net nehmen respektive bei VLAN 20 dann vlan20_net denn du willst ja aus den Segmenten sicher keine Geräte mit illegalen Absender IPs in die Firewall zulassen sondern rein nur Clients aus diesen VLANs, oder ?
Das solltest du also sinnvollerweise noch anpassen. Das Regel GUI gibt diese Adressen im Pulldown Menü auch schon zur Auswahl automatisch vor.
In der Regel "allow ACK nas users to devices" habe ich definiert, dass sie nur für Pakete mit ACK-Flag greifen soll:
Das ist sinnfrei, denn die Firewall arbeitet stateful im Default. Frames mit gesetztem ACK Bit dürfen so oder so passieren. Hast du ja auch selber erkannt. face-wink
Die große Frage ist jetzt was sich hinter deinen Aliases verbirgt. Leider machst du dazu keinerlei Angaben und damit ist es fast unmöglich das Regelwerk zu verstehen.
Wenn deine NAS User also Absender IPs aus dem VLAN 20 haben und auf das NAS zugreifen wollen was im VLAN 10 hängt dann geht das so OHNE diese Regel.
Generell dürfen also diese "NAS User" in Bezug auf die Reihenfolge auf das NAS zugreifen denn die VLAN 10 Blocking Regel kommt ja später.
Du machst aber hier schon den typischen Anfänger Denkfehler indem du vergessen hast das IMMER 2 Grundregeln gelten:
  • Regeln wirken immer nur INbound ! Also VOM Netzwerk Draht IN das FW Interface hinein !
  • Es gilt: First Match wins ! Beim ersten positiven Hit im Regelwewrk wird der Rest NICHT mehr abgearbeitet !
Dein 2ter Denkfehler bei der Regel ist das du annimmst das ACK Bist ist schon beim Session Aufbau gesetzt was aber nicht der Fall ist denn es ist nur das SYN Bit gesetzt. Erst der Antwortframe vom NAS in VLAN 10 hat das ACK Bit gesetzt und deshalb darf dieser Frame auch trotz VLAN 20 Blocking Regel im VLAN 10 dort passieren.
https://de.wikipedia.org/wiki/Transmission_Control_Protocol#Verbindungsa ...
Damit erkennst du vermutlich auch gleich selber diese falsche NAS Regel an VLAN 20
Es reichst also wenn du die Clients stinknormal ind VLAN 10 passieren lässt OHNE extended Settings, dannach dann VLAN 10 blockst. Fertisch !
Korrigiere das und dann kommt das auch sofort zum Fliegen ! face-wink
Member: micha182
micha182 Jul 03, 2021 updated at 19:47:50 (UTC)
Goto Top
Danke, dass du dir die Zeit genommen hast, mir so ausführlich zu antworten!

Source any hatte ich nur bei den "Block"-Regeln. Dadurch entsteht doch kein Sicherheitsrisiko, oder?

Die Angabe zu den alias fehlt, stimmt, sorry:
  • nas_users = 10.0.20.5 (V20_WLAN)
  • nas_devices = 10.0.10.6 (V10_LAN)

aliases

INbound bedeutet doch, dass ich Regeln für Pakete, die in V20_WLAN entstehen für das interface IF_V20_WLAN definieren muss, richtig?
Wenn das stimmt, muss ich doch für das iPad 10.0.20.5, das nun auf 10.0.10.6 zugreifen möchte, eine entsprechende Regel erstellen.
Mein Problem besteht nun darin, dass ich mich frage, wieso diese Regel greift, obwohl ich das ACK-Flag gesetzt habe. Denn mir ist schon bewusst, dass das erste Päckchen ein SYN-Flag trägt.
Deshalb frage ich mich wo mir das SYN-Päckchen durch rutscht.

Ich habe testhalber nochmal nahezu alle Regeln auf den beiden interfaces deaktiviert:

rules_v10_lan_02

rules_v20_wlan_02

Ist besagte NAS-Regel deaktiviert, kann das iPad nicht zugreifen. Das hatte ich so erwartet.
Ist besagte NAS-Regel aktiviert, funktioniert der Zugriff. Das hatte ich so nicht erwartet. Stattdessen habe ich damit gerechnet, dass das SYN-Paket geblockt wird, da es - so wie ich das (vielleicht falsch) sehe, nirgends explizit erlaubt ist.

Kannst du mir bitte nochmal auf die Sprünge helfen?


p.s. Nicht dass das falsch rüber kommt: Bezüglich der Sinnlosigkeit dieser Regel hast du vollkommen Recht - gar keine Frage! Ich verstehe nur nicht, wieso bzw. wo das SYN-Päckchen durch kommt.
Member: aqui
aqui Jul 04, 2021 updated at 07:58:34 (UTC)
Goto Top
Source any hatte ich nur bei den "Block"-Regeln. Dadurch entsteht doch kein Sicherheitsrisiko, oder?
Da hast du natürlich Recht. Das hatte ich im Eifer des Gefechts verwechselt, sorry. Damit ist deine DENY Regel dann noch sicherer.

Den NAS User 10.0.10.5 in eine Regel zu packen die am VLAN 20 aktiv ist unsinnig und wenig hilfreich.
dieser User arbeitet ja im gleichen Netzwerk des NAS selber wird also niemals über die Firewall laufen sondern immer via Layer 2 direkt mit dem NAS kommunizieren. Diese IP im Alias ist also völlig überflüssig.
Die Firewall regelt ja einzig nur VLAN übergreifenden Traffic (also gerouteten) niemals aber lokalen Traffic.
INbound bedeutet doch, dass ich Regeln für Pakete, die in V20_WLAN entstehen für das interface IF_V20_WLAN definieren muss, richtig?
Das ist richtig !
Wenn das stimmt, muss ich doch für das iPad 10.0.20.5, das nun auf 10.0.10.6 zugreifen möchte, eine entsprechende Regel erstellen.
Das ist auch richtig !
Dafür reicht eine ganz einfache IP basierte ALLOW Regel. OHNE die SYN oder ACK Bits !
Die Flags greifen im Regelwerk auch nur wenn du "TCP" als Protokoll auswählst, denn nur TCP hat diese Flags. Du hast aber nur "IP" gewählt und da wird das dann ignoriert denn der sieht nur in den Layer 3 nicht in den TCP Layer 4.
wieso diese Regel greift, obwohl ich das ACK-Flag gesetzt habe.
Das ist ganz einfach und logisch... face-wink
Diese Regel greift schlicht und einfach nicht aus 2 Gründen:
  • Das ACK SYN usw. Bit wird ignoriert da IP
  • Es ist IP statt TCP im Protokoll ausgewählt. Erst das checkt die Flags
Das Regelwerk läuft also weiter durch und dann greift deine vorletzte Regel was alles blockt was ins VLAN 10 will. Works as designed... face-wink
Ist besagte NAS-Regel aktiviert, funktioniert der Zugriff.
Liegt wie bereits daran das nur L3 greigt nicht aber die Flags weil du als Protokoll voren nur IP statt TCP definiert hast.
Member: micha182
micha182 Jul 04, 2021 updated at 09:27:51 (UTC)
Goto Top
Danke nochmal, für deine Geduld!
Zweimal "richtig" beruhigt mich etwas und macht mir zumindest ein bisschen Hoffnung :D

Den NAS User 10.0.10.5 in eine Regel zu packen die am VLAN 20 aktiv ist unsinnig und wenig hilfreich.
dieser User arbeitet ja im gleichen Netzwerk des NAS selber wird also niemals über die Firewall laufen sondern immer via Layer 2 direkt > mit dem NAS kommunizieren.
Alles klar, danke, stimmt, das kann ich soweit nachvollziehen! In diesem Fall arbeitet das NAS allerdings in VLAN 10, sodass der traffic ja VLAN-übergreifend ist. Vermutlich hätte ich den ganzen Aufbau doch etwas ausführlicher und übersichtlicher darstellen müssen. Ich selbst ärgere mich immer etwas darüber, wenn Kollegen mir Mini-Screenshots von ihren Problemen oder abgeschnittene Fehlermeldungen schicken, aber mangels Erfahrung wusste ich hier einfach nich, was gebraucht wird und wollte es mit der Infoflut nicht übertreiben - vermutlich der falsche Ansatz, sorry 0face-smile

Das ist ganz einfach und logisch... face-wink face-wink
Diese Regel greift schlicht und einfach nicht aus 2 Gründen:

  • Das ACK SYN usw. Bit wird ignoriert da IP
  • Es ist IP statt TCP im Protokoll ausgewählt. Erst das checkt die Flags

Das Regelwerk läuft also weiter durch und dann greift deine vorletzte Regel was alles blockt was ins VLAN 10 will. Works as designed...
face-wink face-wink

Aaaah, ja, die Erklärung macht Sinn. SO wird ein Schuh draus! :D
Nur zwei Dinge irritieren mich doch noch ein bisschen:
  • Laut log scheinen(!) alle Pakete über die gleiche Regel durchzukommen
log_010000020005_010000010006

  • Ich dachte, das Protocol alleine über die Dropdown-Liste auszuwählen. Muss ich da noch etwas anderes machen oder provoziere ich durch unsinnige Einstellungen, dass pf auf IP "zurück fällt"?
rule_details_tcp

p.s. Bin offensichtlich zu dumm für die Zitatfunktion ^^
Okay, verstanden .. alles zitieren und dann zwischen die relevanten Blöcke schreiben. Ich bekleckere mich wohl nicht gerade mit Ruhm :D
Member: aqui
aqui Jul 04, 2021 updated at 09:33:10 (UTC)
Goto Top
In diesem Fall arbeitet das NAS allerdings in VLAN 10, sodass der traffic ja VLAN-übergreifend ist.
Nein, nicht für den Client 10.0.10.5 den du ja auch in der Alias Liste hast.
Zumindestens der kommuniziert immer direkt mit dem NAS ohne FW da ja im gleichen IP Segment.
Den kannst du also aus der Cliant Alias Liste entfernen da überflüssig, denn mit der Host IP kann der logischerweise ja niemals aus dem VLAN 20 kommen. face-wink
Bin offensichtlich zu dumm für die Zitatfunktion
Einfach mal die FAQs lesen ! face-wink
Ist kinderleicht... Du plazierst einfach nur ein ">" + Leerzeichen vorne vor die zu zitierende Zeile !
Member: micha182
micha182 Jul 04, 2021 updated at 09:39:02 (UTC)
Goto Top
Zumindestens der kommuniziert immer direkt mit dem NAS ohne FW da ja im gleichen IP Segment.
Die beiden Segmente lauten:
  • 10.0.10.1/26
  • 10.0.20.1/26

Und die beiden VLANs sind auf unterschiedlichen physischen interfaces definiert:
  • V10 auf igb1
  • V20 auf igb2

Aber wenn ich das nirgends schreibe, kann das natürlich niemand wissen :-S

Ist kinderleicht... Du plazierst einfach nur ein ">" vorne vor die zu zitierende Zeile !
OMG, war mein erster Ansatz, aber funktionert nicht ohne Leerzeichen nach dem ">" :D
Hab's angepasst!