Mac OSX Firewall-Tool pf

Discussion in 'macOS' started by JackCarver, Jun 4, 2014.

  1. JackCarver

    JackCarver Junior Member

    Hallo,

    da schonmal die Frage kam, wie man Mavericks absichern kann und es evtl den ein oder anderen Mac User gibt, der daran Interesse hat zeige ich hier mal im Groben, wie man das ganze mit Bordmitteln, respektive dem Firewall-Tool pf für OpenVPN erreichen kann. pf kam mit Lion erstmalig zum Einsatz und ersetzt das bis dahin genutzte ipfw.

    PF ist der OpenBSD/FreeBSD Paket Filter und man bekommt dort auch die meisten Infos dazu, ne sehr gute Seite dazu ist:


    http://www.openbsd.org/faq/pf/filter.html

    Warum überhaupt pf?
    Die Frage wird sich sicherlich mancher stellen wo es doch bequemere FW Lösungen für den Mac gibt wie Little Snitch, geht es allerdings nicht darum bestimmte Apps zu blocken sondern auf Portebene nen Cut für alle Verbindungen zu machen und gezielt nur manche Ports raus und reinzulassen werdet ihr sehen, dass der Aufwand mit pf ziemlich gering ist.

    So genug geschwafelt, ich zeig euch hier erstmal n kleines Skript, das das ganze für OpenVPN (TCP/UDP) bereits umsetzt:

    Code:
    block all
    pass in on lo0 all
    pass out on lo0 all
    pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on en0 proto tcp to any port {1152,152} keep state
    pass out on en0 to 192.168.2.0/24
    pass in on en0 from 192.168.2.0/24
    pass out on tun0 all keep state
    pass in on tun0 all keep state
    

    Die Wertigkeit der Regeln geht von oben nach unten, wobei weiter oben stehende weniger wert sind als weiter unten stehende, dh erlaube ich mit Regel 1 Pakete auf nem bestimmten Port und verbiete mit Regel 2 dasselbe, bleibt der Port dicht.

    Entsprechend werden mit der ersten Regel alle Verbindungen geblockt.

    Regel 2+3 erlaubt Verbindungen rein und rausgehend für localhost, was immer offen sein sollte.

    Regel 4 erlaubt für en0 (das ist mein WLAN Adapter, man kann das simpel über ifconfig ermitteln) rausgehende Verbindungen zu beliebigen IPs allerdings nur für das Protokoll UDP und die zugehörigen PP UDP OpenVPN Ports sowie den DNS und den Apple Bonjour Port. Das keep state stellt sicher, dass die zu diesen Verbindungen gehörenden eingehenden Verbindungen auch wieder reingelassen werden.

    Regel 5 erlaubt dasselbe für TCP und die PP TCP OpenVPN Ports.

    Regel 6+7 erlaubt dasselbe für alle Verbindungen in und aus meinem LAN

    Regel 8 erlaubt nun jegliche Verbindung für OpenVPN ausgehend.
    ​Wer zusätzlich eingehende Verbindungen über tun0 benötigt kann noch Regel 9 mit aufnehmen.

    Mehr ist nicht nötig um ne komplette Blockade mit Ausnahme von OpenVPN Verbindungen zu erreichen.


    Aktivieren der Regeln:

    MacOS hat dazu die Datei /etc/pf.conf um die Regeln dort einzutragen. Besser ist es allerdings diese Datei unberührt zu lassen und die Regeln in ne eigene Datei zu kopieren.

    Öffnet dazu unter Mavericks Textedit und erzeugt ein neues lokales Dokument. Um Formatierungen zu vermeiden wählt ihr "Format -> In reinen Text umwandeln" und kopiert obige Regeln dort hinein und speichert es als zb vpn.rules.

    Anschließend ladet ihr die Regeln und aktiviert die Firewall mit:

    Das war's schon ;)

    Wollt ihr das derzeit aktive Regelwerk sehen, so genügt ein:

    Wollt ihr die Regeln wieder loswerden dann langt ein:


    Und alle Verbindungen sind auch ohne VPN wieder frei.

    Diese Regeln können problemlos erweitert werden, mit derselben Syntax langt zb ein:

    Um zusätzlich ssh ohne VPN zu erlauben.
     
    Dr_Iwan_Kakalakow and Ghost like this.
  2. S

    Salat Junior Member

    Vielen Dank für deine Mühe. Ich werde das bei Gelegenheit mal ausprobieren.
    Kurze Frage: Fungiert das ganze dann als "IP-Leak"? Danach sieht Regel 4 ja aus. Sollte die VPN Verbindung zusammenbrechen müsste ja alles geblockt sein und nur mittels sudo pfctl -F rules wieder freigegeben werden können?!

    MfG
     
  3. JackCarver

    JackCarver Junior Member

    Du kannst nicht einfach alles blocken, sonst wäre dein System vom Internet komplett abgeschottet. Punkt 4 öffnet die FW dahingehend, dass du zumindest die VPN Verbindung starten kannst, was sonst auch nicht möglich wäre. Der DNS muss frei bleiben um die Hostnamen dazu aufzulösen. Bricht VPN zusammen, dann kannst du wiederum nur die VPN Verbindung starten, da nur diese Ports frei sind, sämtliche andere Ports wie TCP 80 für Web etc sind und bleiben dicht.
     
  4. S

    Salat Junior Member

    Prima! Danke.
     
  5. S

    Salat Junior Member

    Bekomme leider folgenden nichts sagenden Syntax Error:

    vpn.rules:13: syntax error
    pfctl: Syntax error in config file: pf rules not loaded

    Habe lediglich en0 zu en1 geändert. Fehlt in dem von dir geposteten Code irgendwo ein ; oder dergleichen?
     
  6. JackCarver

    JackCarver Junior Member

    Das macht nix wenn du zu en1 änderst, ich hab grade dasselbe mit copy and Paste probiert und bekam auch ne Fehlermeldung. Dann hab ichs abgeschrieben und der Fehler war weg. Evtl ging was hier beim Formatieren kaputt ich guck mir das später nochmal an, aber fürs erste langt das abtippen des Codes.
     
  7. JackCarver

    JackCarver Junior Member

    So mit den Code Tags sollte das nun auch mit dem kopieren klappen, macht am Schluss nochmal n Enter im Textdokument, dass der Cursor in ne neue Zeile springt, danach hatte es bei mir geklappt.
     
  8. S

    Salat Junior Member

    Funktioniert super. Vielen Dank.
     
  9. JackCarver

    JackCarver Junior Member

    Freut mich zu hören :)
     
  10. Ghost

    Ghost Junior Member

    Hey Jack,

    Danke erstmal für die Anleitung.
    Ich versuche gerade die Umsetzung.

    Folgende Meldung bekomme ich: (Ist das so in Ordnung?)

    xxxs-mac-mini:~ xxx$ sudo pfctl -f /Users/xxx/Documents/VPN-Rules.txt
    Password:
    pfctl: Use of -f option, could result in flushing of rules
    present in the main ruleset added by the system at startup.
    See /etc/pf.conf for further details.

    No ALTQ support in kernel
    ALTQ related functions disabled
    xxxs-mac-mini:~ xxx$ sudo pfctl -e
    No ALTQ support in kernel
    ALTQ related functions disabled
    pf enabled
    xxxs-mac-mini:~ xxx$


    Wo finde ich die Datei: /etc/pf.conf ?
    Nach einem Neustart funktioniert die Firewall nicht mehr, dann muss ich die Befehle erneut eingeben.
    Ich bin momentan etwas ratlos (oder überfordert)

    Was mir noch aufgefallen ist:
    Nachdem ich ich die Befehle ausgeführt habe, verschwindet im Finder mein NAS.


    Danke im voraus für die Unterstützung
     
  11. S

    Salat Junior Member

    Dass das NAS verschwindet liegt daran, dass nur noch VPN Verbindungen erlaubt sind. Du musst für das NAS sicherlich hier


    pass out on en0 to 192.168.2.0/24 pass in on en0 from 192.168.2.0/24

    ansetzen.

    Du musst eben den Datenverkehr im lokalen Netzwerk erlauben.

    MfG

    EDIT: /etc/pf.conf benötigst du nicht. Dafür hast du VPN-Rules.txt. Diese würde ich aber in vpn.rules umbenennen und nicht als .txt Datei lassen (so hat JackCarver es auch oben notiert).
     
  12. Ghost

    Ghost Junior Member

    Danke für den Hinweis, das habe ich übersehen.

    Regel 6+7 habe ich angepasst (weiterhin kein Zugriff auf das NAS)

    pass out on en0 to 192.168.178.0/24
    pass in on en0 from 192.168.178.0/24


    Nach der Änderung in vpn.rules bekome ich folgende Ausgabe:

    xxxs-mac-mini:~ xxx$ sudo pfctl -f /Users/xxx/Documents/vpn.rules
    Password:
    pfctl: Use of -f option, could result in flushing of rules
    present in the main ruleset added by the system at startup.
    See /etc/pf.conf for further details.

    No ALTQ support in kernel
    ALTQ related functions disabled
    xxxs-mac-mini:~ xxx$ sudo pfctl -e
    No ALTQ support in kernel
    ALTQ related functions disabled
    pf enabled
    xxxs-mac-mini:~ xxx$ sudo pfctl -sr
    No ALTQ support in kernel
    ALTQ related functions disabled
    block drop all
    pass out on en0 proto udp from any to any port = 1151 keep state
    pass out on en0 proto udp from any to any port = 150 keep state
    pass out on en0 proto udp from any to any port = 151 keep state
    pass out on en0 proto udp from any to any port = 149 keep state
    pass out on en0 proto udp from any to any port = 1149 keep state
    pass out on en0 proto udp from any to any port = 1150 keep state
    pass out on en0 proto udp from any to any port = 53 keep state
    pass out on lo0 all flags S/SA keep state
    pass in on lo0 all flags S/SA keep state
    pass out on en0 proto tcp from any to any port = 1152 flags S/SA keep state
    pass out on en0 proto tcp from any to any port = 152 flags S/SA keep state
    pass out on en0 inet from any to 192.168.178.0/24 flags S/SA keep state
    pass in on en0 inet from 192.168.178.0/24 to any flags S/SA keep state
    pass out on tun0 all flags S/SA keep state
    xxxs-mac-mini:~ xxx$
     
  13. JackCarver

    JackCarver Junior Member

    Ok zunächst mal zu deinem Problem Nr 1:

    Die Regeln sind nicht persistent, dh sie müssen jedesmal neu eigegeben werden, zudem ist die FW bei jedem Systemstart deaktiviert und muss erneut aktiviert werden. Mit ein bisschen AppleScript Magie lässt sich das Problem aber sehr einfach lösen.
    Du öffnest zunächst einmal "Programme -> Dienstprogramme -> AppleScript Editor" und erzeugst ein neues Dokument. Dort kopierst du folgende Zeile hinein:

    Code:
     [COLOR=#012FBE][FONT=Verdana][SIZE=12px][B]do shell script[/B][COLOR=#000000] "/sbin/pfctl -f /pfad_zu_deinen_regeln;/sbin/pfctl -e" [/COLOR][COLOR=#5730be]password[/COLOR][COLOR=#000000] "Dein Admin Passwort" [B]with[/B] [/COLOR]administrator privileges[/SIZE][/FONT][/COLOR]
     
    Anschließend klickst du auf "Übersetzen" um zu sehen, dass alles fehlerfrei übersetzt wird. Dann gehst du auf "Ablage -> Sichern" und sicherst das Script als Dateiformat Programm. Du kannst es zb EnableFW nennen.

    Nun klickst du auf "Systemeinstellungen -> Benutzer und Gruppen" und dort auf "Anmeldeobjekte". Dort auf das kleine "+" und nun fügst du das Programm EnableFW dort hinzu.

    Nun werden bei Systemstart genau diese Schritte zum laden der Regeln und aktivieren der FW automatisiert ausgeführt.


    Zu Problem Nr 2:

    Dort finde zunächst mal die interne LAN IP des NAS heraus, denn diese IP muss zu den Ausnahmen hinzu. Sollte die in ne IP deines LANs sein, dann sollte das wie Salat schon gesagt hat eigentlich klappen.
     
  14. Ghost

    Ghost Junior Member

    Hey Jack.

    Danke für die "AppleScript Editor" Anleitung.
    Das werde ich demnächst gleich mal ausprobieren.

    Zum größerem Problem (kein Zugriff auf das lokale Netzwerk)

    Mein Router vergibt IP's in der 192.168.178.XXX Range.
    Das NAS hat die IP: 192.168.178.30

    Regel 6 + 7 habe ich wie folgt angepasst:

    pass out on en0 to 192.168.178.0/24
    pass in on en0 from 192.168.178.0/24

    Leider habe ich immer noch keinen Zugriff auf das lokale Netzwerk (NAS,Dreambox...)
    Bin mal wieder ratlos.
     
  15. S

    Salat Junior Member

    Mal eine grundsätzliche Frage, wenn du die ganzen Regeln mal weglässt und normal via VPN verbindest, bleibt der Zugriff auf dein NAS dann bestehen? Denn wenn du den gesamten Traffic durch den VPN routest (also auch internen), so ist dein lokales Netzwerk (z.B. also auch ein Router) nicht mehr erreichbar.

    Außerdem: schreib doch mal statt 192.168.178.0/24 konkret die 192.168.178.30 mit rein. Auch wenn /24 zwar den Raum bis 255 in der Regel mit abfischt, kannst du es doch einfach mal probieren. Vielleicht klappt es ja. Du weißt ja, Computer und so: das versteht kein Mensch;-)
     
  16. JackCarver

    JackCarver Junior Member

    Das Routing von OpenVPN ist eigentlich so, dass das interne Netzwerk unberührt bleibt, also alles was als Ziel dein LAN hat geht nicht via VPN. Das sollte nicht das Prob sein. Teste mal mit ifconfig, dass auch wirkouch en0 dein Adapter ist, der mit dem LAN verbunden ist. Wenn ja, dann probiere mal einzelne LAN-IPs anzupingen ob du da ne Antwort bekommst.
     
  17. Ghost

    Ghost Junior Member

    Ergebnis ifconfig:

    XXXs-Mac-mini:~ xxx$ ifconfig
    lo0: flags=8049 mtu 16384
    options=3
    inet6 ::1 prefixlen 128
    inet 127.0.0.1 netmask 0xff000000
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=1
    gif0: flags=8010 mtu 1280
    stf0: flags=0 mtu 1280
    en0: flags=8863 mtu 1500
    options=10b
    ether c8:2a:14:20:9f:66
    inet6 fe80::ca2a:14ff:fe20:9f66%en0 prefixlen 64 scopeid 0x4
    inet 192.168.178.33 netmask 0xffffff00 broadcast 192.168.178.255
    nd6 options=1
    media: autoselect (1000baseT )
    status: active
    en1: flags=8823 mtu 1500
    ether 10:9a:dd:c3:63:89
    nd6 options=1
    media: autoselect ()
    status: inactive
    fw0: flags=8863 mtu 4078
    lladdr 70:cd:60:ff:fe:6d:d4:58
    nd6 options=1
    media: autoselect
    status: inactive
    p2p0: flags=8802 mtu 2304
    ether 02:9a:dd:c3:63:89
    media: autoselect
    status: inactive
    tun0: flags=8851 mtu 1500
    inet XXX.XXX.XXX.XXX --> XXX.XXX.XXX.XXX netmask 0xffffff80
    open (pid 1901)
     
  18. Ghost

    Ghost Junior Member

    Hey Jack

    Funktioniert super! DANKE!

    Das Problem mit dem lokalen Netzwerkzugriff konnte ich lösen.
    Wenn ich mich im Finder mit "Gehe zu" -> "Mit Server verbinden" mit dem NAS verbinde, funktioniert es ohne Probleme.

    @Salat
    Danke für die Unterstützung

    @Frank
    Bitte pinnen (Sticky) (Anleitung IP-Leak MAC)

    PS: Was bedeutet eigentlich diese Meldung?

    No ALTQ support in kernel
    ALTQ related functions disabled
     
  19. JackCarver

    JackCarver Junior Member

    Freut mich, dass es nun klappt. Also das ALTQ hat was mit Bandbreitenkontrolle zu tun und ist eher für Router, die unter BSD laufen interessant, weniger für Einzelplatzrechner. Du kannst da Paketen spezielle Prioritäten zuweisen und anhand dieser Prioritätenliste bestimmte Pakete hinten an stellen und wieder andere bevorzugt behandeln.

    Diese Funktionen stehen wohl im FreeBSD Kernel von OSX nicht zur Verfügung, kann sein, dass es daran liegt, dass ALTQ mittlerweile abgelöst wurde durch n neues System, oder dass Apple sagt es macht einfach kein Sinn, da wohl niemand nen Apple Rechner als Router einrichten wird:

    Hier was zu ALTQ:
    http://en.wikipedia.org/w/index.php?title=ALTQ

    Und die Meldung, dass es abgelöst wird:
    http://undeadly.org/cgi?action=artic...20140419151959
     
  20. Ghost

    Ghost Junior Member

    Hey Jack, ich habe die Ursache für das Problem (kein Zugriff auf das lokale Netzwerk) gefunden.

    Der UDP Port 5353 (Apple Bonjour) muß geöffnet werden.

    Firewall-Anforderungen

    Das Bonjour-Netzwerkprotokoll sendet und empfängt Netzwerkpakete über den UDP-Port 5353. Das Installationsprogramm von Bonjour konfiguriert die Firewall entsprechend bei der Installation auf unterstützten Systemen. Wenn hingegen eine separate "persönliche Firewall" aktiviert ist, müssen Sie dafür sorgen, dass der UDP-Port 5353 geöffnet ist, damit Bonjour ordnungsgemäß ausgeführt werden kann.

    PS: Das könntest du noch ergänzen.

    Hier eine Port-Übersicht:

    http://support.apple.com/kb/HT6175?viewlocale=en_US
    http://support.apple.com/kb/ts1629?viewlocale=de_DE
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice