Leserartikel pfSense & OPNsense (Firewall- und Routing-Appliance)



1200px-PfSense_logo.png

pfSense ist eine auf FreeBSD aufsetzende Firewall- und Routing-Appliance der Firma Netgate, von der zwei Editionen existieren.
  • Zum einen die Community Edition (CE), die open source ist und auf eigener Hardware oder auch virtualisiert kostenlos genutzt werden darf.
  • Zum anderen die Plus Edition (+), die closed source ist und auf Hardware von Netgate vorinstalliert daherkommt, aber auch separat erworben werden kann.


🟢 komplett im Browser konfigurierbar
🟡 nicht für jeden, sondern für fortgeschrittenere Netzwerkenthusiasten
🔴 wer schnelle Ergebnisse erwartet, ohne Zeit und Mühen zu investieren, sollte woanders schauen



Ich habe mit einer virtualisierten pfSense meinen Home-Router ersetzt und betrachte diese hier nur aus diesem Blickwinkel. Wobei "ersetzt" natürlich relativ zu verstehen ist, so bedarf es weiterhin eines Modems oder Kombi-Gerätes für den jeweiligen Internetanschluss, für WiFi zusätzlich eines APs. Dank VLANs aber alles gut managebar.

Der Funktionsumfang von pfSense ist deutlich größer als hier dargestellt, wird entsprechend kommerziell genutzt und von Profis bedient.
pfSense Features

Besonders gefällt mir an pfSense, dass ich meine ganz persönliche Routing-Strategie verfolgen kann. So leite ich port-basiert an meinem PC den Web-Traffic, abgesehen von ein paar Ausnahmen, über eine OpenVPN-Verbindung an einen VPN-Provider aus, alles andere, wie z.B. Games und Echtzeitkommunikation, läuft weiterhin über den normalen Internetanschluss.

Netze können einfach segmentiert werden und Server oder IoT ihre eigene DMZ bekommen.

Port forwarding und NAT können für IPv6 genauso umgesetzt werden, wie schon für IPv4.
port forwarding.PNG

Ob man das möchte, ist dabei eine andere Frage. 😉

pfSense kann mit Packages erweitert werden. Diese Packages haben wiederum eigene Entwickler.

Mittels des Packages pfBlockerNG(-Devel) kann ich Port-Freigaben zusätzlich schützen, in dem ich IPs aus bestimmten Ländern blockiere oder umgekehrt erlaube. So kann ich z.B. meinen eigenen VPN-Server nur für deutsche IPs öffnen oder gar nur für das Netz meines Mobilfunkbetreibers.
wan.PNG
Dafür muss ich aber nicht nur das besagte Package installieren und konfigurieren, auch brauche ich einen (kostenlosen) Account bei der Firma, die die Zuordnung der IPs zu Ländern macht. Und erst zu guter Letzt kann ich die entsprechenden Regeln wirklich absichern. Dies ist also ein Beispiel dafür, wie kleinteilig die Arbeitsschritte sind und warum es soviel Zeit und Know-How beansprucht.

pfBlockerNG kann als DNS-Sinkhole auch im gesamten Heimnetzwerk Werbung blockieren.
pfblocker.PNG

Wirklich effektiv ist ein rein DNS-basierter Ad-Blocker aber heutzutage nicht mehr.

So könnte die Startseite aussehen, das Dashboard ist mittels Widgets anpassbar :
Status Dashboard.png



Die Möglichkeiten sind fast grenzenlos, die nötige Einarbeitung vorausgesetzt. 🤓

Ich empfehle dringendst Backups anzulegen, bei virtualisierten Lösungen kann man dafür die Snapshot-Funktion nutzen. Tägliche Backups sind sehr sinnvoll, gerade wenn man viel probiert oder schon viel Konfigurationsarbeit geleistet hat.

pfSense auf eigener Hardware zu installieren wird vor allem dadurch erschwert, dass es passende FreeBSD-Treiber geben muss. Netzwerkhardware von intel ist wohl kein Problem, Realtek dagegen schwieriger. Generell gibt es eher Treiber für ältere und eher im Enterprise-Segment anzutreffende Hardware.




Opnsense-logo.svg.png
Nicht unerwähnt bleiben kann OPNsense, welches ein Fork von pfSense ist und von der niederländischen Firma Deciso open source weiterentwickelt wird. Der Release-Zyklus ist schneller als von pfSense CE, sowohl die Bedienung als auch der Funktionsumfang unterscheiden sich eher geringfügig.



Für komplexere Fragestellungen bieten sich die jeweils offiziellen Foren an: Netgate Forum, OPNsense Forum





Regel-Grundsätze, die Anfängern oft unbekannt sind. [🐺🐺🐺🦊]
  • Alles, was nicht explizit erlaubt ist, wird geblockt. Bis auf das erste LAN enthält auch kein Interface ootb irgendwelche Regeln. Ausnahmen gibt es z.B. für DHCP, welches unsichtbar abläuft und keinerlei Regeln durch den Nutzer bedarf.
  • Traffic wird grundsätzlich nur einmal, nämlich eingehend (immer aus Sicht der Firewall) gefiltert, der Rest ist dann statefull und wird nicht mehr reguliert. Das bedeutet, dass originärer Traffic aus dem Internet am WAN-Interface erlaubt werden muss. Wenn Traffic von LAN1 auf LAN2 erlaubt sein soll, dann muss dies auf LAN1 geregelt werden usw.
  • WAN net ist nicht das Internet, sondern das Netz, welches sich unmittelbar am WAN-Port befindet. Das kann z.B. das Netz einer vorgeschalteten Fritzbox sein oder eines des ISPs.
    Deshalb gilt es, schleunigst einen "RFC1918"-Alias zu erstellen, der mindestens die privaten Netzwerke enthält:
    10.0.0.0/8
    172.16.0.0/12
    192.168.0.0/16
    Mit diesem Alias kann man nun Regeln erstellen, die z.B. nur für das Internet gelten, in dem das Ziel als invertierter "RFC1918"-Alias definiert wird.



Selektives Routing einzelner Programme unter Windows Pro. [🦊🦊🦊🦊]

Ich möchte auf einem Windows-Host nur Traffic eines bestimmten Webbrowsers über ein VPN ausleiten, der Rest soll über den ISP gehen. Da diese Unterscheidung nicht rein über die Angabe des Ports möglich ist, hier kurz erklärt, wie man Traffic in Windows mittels Differentiated Services (DiffServ) taggt, damit daraufhin eine ebenfalls getaggte Regel in pfSense greifen kann. Wenn das Programm eigenes DNS macht, wird auch dieses getunnelt.

In Windows Pro lege ich mittels regedit unter Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ einen neuen Key namens QoS an und erstelle in diesem einen neuen REG_SZ namens Do not use NLA mit dem Wert 1.
qos.PNG
Anschließend muss Windows neu gestartet werden.

Im lokalen Group Policy Editor lege ich eine neue QoS Policy an, in der ich das Programm anhand seines Namens definiere (chrome.exe) und einen DSCP Value vergebe (z.B. 30).
qosedit.PNG
Darüber hinaus könnten hier auch noch weitere Feineinstellungen wie Protokoll (TCP/UDP), Ports und IP Ranges getroffen werden.

In pfSense erstelle ich nun die gewünschte Regel, indem ich dort in den Advanced Options das Gateway definiere und den entsprechenden DiffServ Code Point auswähle (af33).
rule.PNG

Welcher DSCP Value zu welchem DiffServ Code Point passt, lässt sich u.a. hier ablesen.

Vielen Dank an @0 8 15 User für den Hinweis auf die Differentiated Services! 🏆





Guides & Links

Eine FRITZBox als "VDSL-Modem" und zur Telefonie an einer Firewall nutzen
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Rickmer, Sauvignon Blanc, Der Trost und 17 andere

Eine einzelne, aktuelle Fritzbox soll als VDSL-Modem für eine Firewall dienen (um Double-NAT zu vermeiden) und gleichzeitig die Telefonie bereitstellen.


⚠️ Es handelt sich um keine offizielle Betriebsart der Fritzbox, d.h. ihr handelt auf eigenes Risiko. Für die Funktionstüchtigkeit, Zuverlässigkeit und sonst was wird niemand garantieren. Das hier Gezeigte richtet sich ausschließlich an Netzwerk-Enthusiasten mit reichlich Vorkenntnissen im Themengebiet.



Als Firewall nutze ich pfSense, es können aber auch andere Firewalls/Router genutzt werden.
Getestet wurde das Ganze an einem Anschluss des rosa Riesen, your mileage may vary.

Optional: Ich habe die Fritzbox zuvor auf Werkseinstellungen zurückgesetzt und anschließend den Einrichtungsassistenten für meinen Anschluss durchlaufen lassen. Dabei wurden die Telefonnummern etc. automatisch erkannt und müssen anschließend nicht mehr angefasst werden. Unabhängig von diesem Guide kann ich dieses Vorgehen aus eigener Erfahrung empfehlen, da sowohl die ISPs gelegentlich Anpassungen vornehmen, als auch AVM die Firmware der Fritzbox weiterentwickelt.

Da beim rosa Riesen das s.g. Easy Login bei jedem VDSL-Anschluss standardmäßig aktiv ist, brauche ich zu keinem Zeitpunkt echte Anmeldeinformationen hinterlegen, weder fürs Internet noch für die Telefonie.





Eine FRITZBox 7530 als "VDSL-Modem" für die Firewall nutzen

Hierfür reicht es schon, wenn ich folgende Einstellungen setze.
vdsl modem.png
Die Fritzbox geht dabei davon aus, dass sie selbst noch eine Verbindung aufbauen würde. Da aber keinerlei Zugangsdaten hinterlegt sind (auch keine Dummys) baut sie faktisch gar keine Verbindung auf und so ist es allein an der Firewall, die PPPoE-Verbindung aufzubauen.

In pfSense kann ich für PPPoE nun Dummy-Zugangsdaten hinterlegen.
pfSense PPPoE.png





Darüber hinaus die selbe FRITZBox zur Telefonie hinter der Firewall nutzen

Dieser Schritt ist wesentlich komplexer, da hier häufiger Probleme auftraten. Ich kann, mit einem direkt an der Fritzbox angeschlossenen Rechner, bei Problemen über die „Notfall IP" 169.254.1.1 der Fritzbox auf selbige zugreifen.

Ich empfehle im Vorfeld zu überlegen, welche IP-Adressen verwendet werden sollen (wobei bei Problemen auch etwas Flexibilität gefragt war).
Mein Beispiel
IP der Fritzbox:
192.168.177.1,
DHCP deaktiviert

IP des verbunden pfSense-Interfaces:
192.168.177.2,
vorerst mit erlauben any Regel, noch DHCP deaktiviert
fritz interface.png

In der Fritzbox ermittle ich meinen Benutzernamen und gebe diesen im Benutzerkonto auch für das Internet frei.

Ich hinterlege folgende Routen in der Fritzbox.
Routen.png

Hier traten bei mir die meisten Probleme auf, wenn ich vorher etwas an den Verbindungseinstellungen geändert hatte, deswegen empfehle ich erst die Routen zu setzen!

Beim Internetzugang entferne ich nun die Checkbox bei DHCP und setze hier folgende Adressen ein.
inet2.png

Wichtig zum Verständnis, die „IP-Adresse“ ist nur ein Dummy und wird nicht genutzt, Gateway und DNS dagegen zeigen auf die pfSense.

Das gleiche trage ich nun auch unter Anschlusseinstellungen ein und aktiviere dort zusätzlich noch die Aktivhaltung der Portweiterleitung mit 30 Sekunden.
telefonie.png

Unter Firewall / NAT / Outbound habe ich eine Outbound NAT Regel mit Static Port für die Fritzbox erstellt.
outbound.PNG

Welche Ports hier nun genau zu berücksichtigen sind, ist immer Abhängig vom jeweiligen VoIP-Provider. Einen Hinweis liefert die Fritzbox unter Diagnose / Sicherheit / n. Verbindung, VoIP.

Sollte das Ganze funktioniert haben, empfehle ich, die Regeln auf der pfSense zur Fritzbox noch etwas festzuzurren und ggf. DHCP zu aktivieren.

ende.png

Die Telefonnummern werden als letztes registriert. Wenn dies nicht spätestens nach fünf Minuten geschehen ist, seit dem die Fritzbox Internet hat, ist etwas schief gelaufen und/oder ein Neustart erforderlich.


Besonderen Dank 🏅 @0 8 15 User, @foo_1337, @timmy0815, @7390user1 😅
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sauvignon Blanc
Tailscale gibt es nun als Package für pfSense, mehr dazu hier.

Es gibt wohl einige Limitationen: So verwendet es die Go-Implementierung von WireGuard und nicht die performantere Kernel-Implementierung von Netgate. Auch scheint sich wohl der Traffic in pfSense nicht wie gewohnt filtern zu lassen. Und letztlich sollte ein Nutzer einer Sense wohl eh in der Lage sein, eine WG-Verbindung einzurichten.
Mir scheint es vor allem für diejenigen interessant zu sein, die eh schon Tailscale einsetzen.
 
Zuletzt bearbeitet:
Moin
Zu den beiden Routen in der Fritzbox:
Frage/Problem 1: Die erste Route wird bei mir nicht akzeptiert (0.0.0.0)

Frage 2: Was bewirken die beiden Routen? Die zweite Route routet auf sich selbst?
 
@Mario_74 Kann sein, dass Du dann die IP-Einstellung der Fritzbox selbst wieder ändern musst. Deshalb immer zuerst die Routen setzen, später ging es bei mir auch nicht mehr. Hier ist etwas Flexibilität gefragt. Vielleicht muss auch immer erst die Route gesetzt werden und erst anschließend die IP-Adresse der Fritzbox.
 
Zuletzt bearbeitet:
Bob.Dig schrieb:
Sollte das Ganze funktioniert haben, empfehle ich, die Regeln auf der pfSense zur Fritzbox noch etwas festzuzurren und ggf. DHCP zu aktivieren.
Kannst du hier vielleicht genauer erwähnen was du meinst? Vielleicht ein Screenshot von deiner Config? Danke!
 
@Easy4Breezy So sieht es bei mir aus, wobei DNS und NTP noch durch eine Gruppenregel erlaubt sind.

Capture.PNG


Ich könnte auch das WiFi der Fritzbox aktivieren und es ebenfalls auf diesem Interface laufen haben, hab ich aber nicht gemacht, da am Standort der Fritzbox dafür kein Bedarf besteht.
 
  • Gefällt mir
Reaktionen: Easy4Breezy
Passt ja perfekt da ich gerade kurz davor bin auf pfSense umzusteigen.

Gibt es bei pfSense eine Funktion wie in der Fritzbox, wo die FB ein WakeOnLan Paket ans Gerät sendet wenn von außerhalb auf einen Freigegebenen Port drauf zugegriffen wird?

fb_wol.png
 
@KenshiHH Denke nein.
Teilweise kann man aber in der NIC vom jeweiligen Gerät selbst Optionen setzen, die es bei jedem "Sch**ß" aufwachen lässt. Wäre ggf. also für dich eine Option.
Hat dann aber nix mit der Sense zu tun.
 
Hmm, schade.
Ist aktuell der einzige Teil der mich aktuell an der Umstellung hindert.

Die Option dass sich das Gerät bei jeden kleinsten Netzwerkpaket aufweckt kenne ich, da kann man schon fast das Gerät 24/7 laufen lassen :D


Mal suchen ob es irgendwie eine art Event gibt im Log oder so sobald versucht wird auf dem Port von außen zuzugreifen, so könnte man wenigstens selbst ein WoL script basteln
 
WhiteHelix schrieb:
Naja im Prinzip machst du das ja damit auch
Wobei, wenn das Gerät in einem eigenen VLAN läuft und sonst nix darin ist, könnte das vielleicht dennoch effektiv sein.
 
Ja gut, das ist natürlich ne Ausnahme. Aber wenn das jetzt z.B. bei der FB immer angeht, dann schmeißt dir das ja jeder Portscan den irgendwer laufen lässt das Ding wieder online.
 
@WhiteHelix Hier geht es aber nicht um die Fritzbox. @KenshiHH also einfach mal ausprobieren, wenn Du einen VLAN fähigen Switch hast.
 
Hab nen kleinen Server der via SFTP von außerhalb erreichbar ist, aber kein Standard Port.

Mit nen Default Port wie 21, wurde das teil natürlich andauernd geweckt inkl. Login versuche von der ganzen Welt.

Mit der FB Einstellung wacht der vielleicht 1 mal am "ungewollt" auf und geht nach 20 Minuten Idle wieder in den Sleep,
Funktioniert echt gut.
 
@Bob.Dig Hätte nicht gedacht das es noch einen gibt der sich damit beschäftigt hat :) Funktioniert VoIP denn auch mit Hostnamen beim Registrar? Ich bekomme eine Registrierung nur mit IP hin, mit Hostnamen bekomme ich ein Timeout. DNS Auflösung funktioniert jedoch, ein TCP-Dump zeigt die Anfrage und auch die Antwort, nur passiert weiter nichts. Der Rest NTP, Mail und Updates funkionieren ohne Probleme. Selbst IPv6 habe ich konfigurieren können, auch das funktioniert problemlos, nervig ist hier nur das die FRITZ!Box ::/0 nicht als Route akzeptiert, das kleinstmöglichste Präfix ist /16. Sind somit ein paar Routen mehr geworden als bei IPv4 :).
 
  • Gefällt mir
Reaktionen: Bob.Dig
syhm schrieb:
@Bob.DigFunktioniert VoIP denn auch mit Hostnamen beim Registrar?
Kann ich nicht sagen, da noch alles quasi automatisch eingerichtet wurde. Im Dezember wechsle ich zu 1u1, dann wird es wieder spannend, wenn bis dahin nicht eh das neue FritzOS einen Strich durch die Rechnung macht.

Die Idee betreffend IPv6 ist nicht schlecht, aber solange es auch mit IPv4 läuft, wollte ich mir den zusätzlichen Aufwand ersparen.
 
Danke für die tolle und ausführliche Anleitung. Dieser Thread behandelt genau das gleiche Thema. Ich denke mal, du wirst ihn kennen.

Leider funktioniert die Lösung aus irgendeinem Grund bei mir nicht. Ich habe es jetzt mehrfach neu-konfiguriert nach deiner Anleitung und sogar OPNsense neu, neben pfSense, aufgesetzt. Beide zeigen das gleiche Fehlerbild. Sobald ich die FB so wie in der Anleitung konfiguriere, funktioniert DNS im LAN nicht mehr. Gebe ich zum Beispiel 8.8.8.8 via DHCP vor, funktioniert es zwar, aber der Router selber kann keine DNS Anfragen aus dem LAN mehr auflösen.

Ganz seltsames Problem...
 
Ich bin inzwischen dazu übergegangenen, meine Privacy-VPN-Clients auszulagern. Jeder Client läuft auf seiner eigenen VM mit OpenWRT. Das hat den Vorteil, dass es zu keinen Überlappungen der Tunnel IP-Adressen mehr kommt. Das hat umso schwerer gewogen, da einige Provider für alle WireGuard-Tunnel immer nur die selbe IP-Konfiguration verwenden.

Screenshot 2022-09-12 114542.png
 
Zuletzt bearbeitet:
Wer seit gestern von folgendem Problem in pfSense betroffen ist:
1663407149621-screenshot-2022-09-17-113220.png

Lösung:
If you're still seeing it, because the firewall pulled in the bad pkg, then switching the update branch to development and then back to latest stable will pull in the fixed pkg.
Diagnostics --> Edit File --> and in the "Path to file to be Edited", please enter the following and click "Load":
/usr/local/share/pfSense/pkg/repos/pfSense-repo.conf

You can then replace the file with the following contents and hit "Save". This will resolve your issue:
Code:
FreeBSD: { enabled: no }

pfSense-core: {
url: "pkg+https://firmware.netgate.com/pkg/pfSense_plus-v22_05_amd64-core",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/local/share/pfSense/keys/pkg",
enabled: yes
}

pfSense: {
url: "pkg+https://firmware.netgate.com/pkg/pfSense_plus-v22_05_amd64-pfSense_plus_v22_05",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/local/share/pfSense/keys/pkg",
enabled: yes
}
 
Zuletzt bearbeitet:
Zurück
Oben