Mac OSX Firewall-Tool pf

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

  1. b

    bratfass New Member

    Danke für die Info - stecke aber leider mit der Fehler meldung no altq fest und komme nicht weiter :(
     
  2. JackCarver

    JackCarver Junior Member

    Diese Meldung ist normal und kommt auch bei mir, um genau zu sein kommt bei mir folgendes:

    Was machst du denn um die Firewall zu starten? Generell musst du die Regeln aus einer Datei laden, das ganze mit folgender Syntax:

    Code:
    sudo pfctl -f /pfad_zu_den_fw_regeln
    Danach musst du die Firewall aktivieren mit:

    Code:
    sudo pfctl -e
    Dann sollte es, sofern die Regeln korrekt sind auch bereits deine Ports blocken. Deaktivieren kannst du die FW mit folgendem Befehl:

    Code:
    sudo pfctl -d
     
  3. Ghost

    Ghost Junior Member

    Anpassung für El Capitan:

    Nach dem Update auf El Capitan hatte ich keinen Zugriff auf mein Netzwerk.
    Ich habe die Regeln angepasst, jetzt habe ich wieder Zugriff auf mein Netzwerk.
    Könnte das mal jemand @JackCarver überprüfen, ob alles richtig ist.

    Neu hinzugefügt wurden:

    Code:
    pass out on en0 inet from any to 10.0.0.0/16 flags S/SA keep state
    pass out on en0 inet from any to 127.16.0.0/12 flags S/SA keep state
    pass in on en0 inet from 10.0.0.0/16 to any flags S/SA keep state
    pass in on en0 inet from 127.16.0.0/12 to any flags S/SA keep state
    Wäre super
    Danke :)

    PS: Was mir gerade noch aufgefallen ist, wenn ich fritz.box eingebe, kann ich mich nicht zum Router verbinden, wenn ich die IP 192.168.XX.XX eingebe, kann ich mich zum Router verbinden.

    Code:
    No ALTQ support in kernel
    ALTQ related functions disabled
    block drop all
    pass out on en0 proto udp from any to any port = 1194 keep state
    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 en0 proto udp from any to any port = 5353 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.0.0/16 flags S/SA keep state
    pass out on en0 inet from any to 10.0.0.0/16 flags S/SA keep state
    pass out on en0 inet from any to 127.16.0.0/12 flags S/SA keep state
    pass in on en0 inet from 192.168.0.0/16 to any flags S/SA keep state
    pass in on en0 inet from 10.0.0.0/16 to any flags S/SA keep state
    pass in on en0 inet from 127.16.0.0/12 to any flags S/SA keep state
    pass out on tun0 all flags S/SA keep state
    pass in on tun0 all flags S/SA keep state
     
    Last edited: Oct 5, 2015
  4. JackCarver

    JackCarver Junior Member

    Ich hab den Kapitän noch nicht drauf, werd ich die Woche aber machen, dann Teste ich das auch.
     
    Ghost likes this.
  5. Ghost

    Ghost Junior Member

    @JackCarver

    Zur Info:

     
  6. JackCarver

    JackCarver Junior Member

    Also nach einigen Tests kann ich sagen, dass die Firewall Regeln auch unter El Capitan funktionieren. Ich hab nochmal n kleines Regelwerk getestet, mit dem ich auch Zugriff auf das Netzwerk hatte (Dateifreigabe auf dem MacMini vom MacBook aus erreicht, auf dem die Firewall aktiv war).
    Hier nochmal die Regeln die ich verwendet habe:

    Code:
    block in all
    block out all
    pass in on lo0 all
    pass out on lo0 all
    pass out on $iface inet proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on $iface inet proto tcp to any port {1152,152} keep state
    pass out on $iface inet to 10.0.0.0/8
    pass in on $iface inet from 10.0.0.0/8
    pass out on $iface inet to 192.168.0.0/16
    pass in on $iface inet from 192.168.0.0/16
    pass out on $iface inet to 172.16.0.0/12
    pass in on $iface inet from 172.16.0.0/12
    pass out on utun0 all keep state
    pass out on tun0 all keep state
    Es wird hier zunächst jeglicher Traffic (IPv4, IPv6) geblockt. Anschließend öffnet man localhost, danach für das Interface $iface (durch sein eigenes ersetzen) die PP UDP, TCP Ports, sowie der Apple Port 5353 und den DNS Port. Anschließend öffnet man den Traffic für sämtliche LANs (das muss man so nicht übernehmen und kann das auf sein spezielles LAN anpassen).
    Zum Schluss wird der Traffic über das OpenVPN Interface uneingeschränkt erlaubt.
    Die Erlaubnis gilt jeweils nur für IPv4, IPv6 bleibt dicht.

    @Ghost :
    Die Flags S/SA benötigst du nicht extra, da diese default sind (siehe OpenBSD pf Referenz: http://www.openbsd.org/faq/pf/)

    Noch etwas zur keep state Option:
    Diese Option erspart dir etwas Schreibarbeit, da sie den Antwort-Traffic auf ausgehende Verbindungen automatisch passieren lässt. Das nutzt dir aber nix bei deinem LAN. Dort kann es passieren, dass man von Rechner A auf Rechner B zugreifen möchte. Wenn auf Rechner B nun OSX mit aktivierter Firewall läuft, so ist das für Rechner B kein Antwort-Traffic, sondern neuer eingehender Traffic. Das muss explizit mit der Richtung "pass in" freigeschalten werden. Ein "pass out" mit Option keep state langt hier nicht. Wenn du also "pass out" und "pass in" Rules für dasselbe LAN machst, kannst du keep state weglassen, da unnötig. Dasselbe bei localhost sowie dem OpenVPN Interface.

    Gruß Jack
     
    Ghost likes this.
  7. Ghost

    Ghost Junior Member

    @JackCarver

    pass out on utun0 all keep state
    pass out on tun0 all keep state

    Hey Jack, ich glaube dir ist ein Fehler unterlaufen. (siehe "fett" markiert)

    Muss ich "$iface" durch "en0" ersetzen?

    Wenn ich den Code übernehme, so wie gepostet, funktioniert es nicht.
    Es wird nichts geblockt.
    Ohne VPN-Verbindung ist surfen ......möglich.
     
  8. JackCarver

    JackCarver Junior Member

    Du musst natürlich $iface durch dein konkretes Interface ersetzen, zb en0. Dann sollte es funktionieren, mit $iface wird natürlich nix geblockt. Das soll heißen utun0 bzw tun0. OSX verwendet idR utun(x), Linux verwendet tun(x). Ich hab das zur Sicherheit mal mit aufgeführt.
     
  9. Ghost

    Ghost Junior Member

    Code:
    block in all
    block out all
    pass in on lo0 all
    pass out on lo0 all
    pass out on en0 inet proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on en0 inet proto tcp to any port {1152,152} keep state
    pass out on en0 inet to 10.0.0.0/8
    pass in on en0 inet from 10.0.0.0/8
    pass out on en0 inet to 192.168.0.0/16
    pass in on en0 inet from 192.168.0.0/16
    pass out on en0 inet to 172.16.0.0/12
    pass in on en0 inet from 172.16.0.0/12
    pass out on utun0 all keep state
    pass out on tun0 all keep state
    habe jetzt $iface durch en0 ersetzt.
    Passt so oder?
     
  10. Ghost

    Ghost Junior Member

    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
    /Users/admin/Documents/vpn.rules:14: syntax error
    pfctl: Syntax error in config file: pf rules not loaded
    No ALTQ support in kernel
    ALTQ related functions disabled
    pfctl: pf already enabled

    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
    /Users/admin/Documents/vpn.rules:14: syntax error
    pfctl: Syntax error in config file: pf rules not loaded
    No ALTQ support in kernel
    ALTQ related functions disabled
    pfctl: pf already enabled (1)

    Ich werde noch wahnsinnig.
    Meine Regeln werden nicht geladen.

    Beim Starten wird dieses Script ausgeführt.
    vpn.rules liegt im Ordner Dokumente.


    Code:
    do shell script "/sbin/pfctl -f /Users/admin/Documents/vpn.rules ;/sbin/pfctl -e" password "Mein Paßwort" with administrator privileges
     
    Last edited: Oct 24, 2015
  11. JackCarver

    JackCarver Junior Member

    Mach mal kein Copy/Paste, sondern schreib das in ein Textdokument. Als Format des Dokumentes wähle Reiner Text, also kein RTF etc.
     
    Ghost likes this.
  12. Ghost

    Ghost Junior Member

    .....jetzt funktioniert es.

    @JackCarver

    1000 Dank für dein Engagement
     
  13. Ghost

    Ghost Junior Member

    @JackCarver

    Wäre super, wenn du erklären könntest, warum die neuen Regeln anders sind.
    Damit ich es besser verstehen kann.

    1.
    block all
    wurde durch block in all und block out all ersetzt.

    2.
    pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    wurde durch
    pass out on en0 inet proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    ersetzt.

    3.
    Neue Regeln. Ich nehme an, diese erweitern das private Netzwerk.

    pass out on en0 inet to 10.0.0.0/8
    pass in on en0 inet from 10.0.0.0/8
    pass out on en0 inet to 172.16.0.0/12
    pass in on en0 inet from 172.16.0.0/12

    4.
    Neue Regel.
    Du hast dazu folgendes geschrieben: OSX verwendet idR utun(x), Linux verwendet tun(x).
    Bei mir verwende OSX tun0

    pass out on utun0 all keep state

    5. Diese Regel fehlt bei den neuen Regeln.

    pass in on tun0 all keep state

    Alt:
    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
    
    Neu:
    Code:
    block in all
    block out all
    pass in on lo0 all
    pass out on lo0 all
    pass out on en0 inet proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on en0 inet proto tcp to any port {1152,152} keep state
    pass out on en0 inet to 10.0.0.0/8
    pass in on en0 inet from 10.0.0.0/8
    pass out on en0 inet to 192.168.0.0/16
    pass in on en0 inet from 192.168.0.0/16
    pass out on en0 inet to 172.16.0.0/12
    pass in on en0 inet from 172.16.0.0/12
    pass out on utun0 all keep state
    pass out on tun0 all keep state
    
    Zum Schluß noch eine Frage:

    Kann man bei dieser Firewall auch mitloggen lassen?

    Danke im Voraus
     
  14. JackCarver

    JackCarver Junior Member

    Paar Erläuterungen:

    Zu 1,
    block all ist dasselbe und kannst du auch nehmen, macht keinen Unterschied.

    Zu 2,
    Diese Regel ist tatsächlich eine Anpassung zu der anderen. Der Unterschied bei beiden ist der, dass bei der neueren Regel der Traffic zu den UDP Ports nur für IPv4 erlaubt wird, nicht für IPv6. IPv6 bleibt also gesperrt. Bei der älteren Regel wurde das auch für IPv6 geöffnet.

    Zu 3,
    Korrekt, hier wurden einfach alle privaten Netzwerke mit reingenommen, so dass man diese Regeln immer verwenden kann unabhängig dessen, was jemand nun tatsächlich als privates LAN Zuhause hat.

    Zu 4,
    OSX verwendet beides, bei der Masse wird glaube ich eher utun0 verwendet, ist bei mir zb am MacBook so. Bei dir wird dann eben tun0 verwendet. Daher beide Regeln, einmal für tun0 und einmal für utun0.

    Zu 5,
    Die pass in Regel mit keep state benötigst du nicht, es langt die pass out Regel mit keep state. Mit der pass out Regel werden neue Verbindungen ausgehend zugelassen und der Antwort-Traffic dazu reingehend. Neue Verbindungen reingehend zum OpenVPN Interface sind nicht möglich, was man meistens auch nicht möchte.

    Zum Schluss:
    Logging ist auch möglich, benötigt aber das Zusammenspiel mit pflog. Dazu ein Beispiel:

    Man erzeugt zunächst eine Logging-Regel in einer Datei, ebenso wie die Firewall Regeln. Um zb alle Pakete zu loggen, die via IPv4 ausgehend an Zielport TCP 443 gerichtet sind (und deren Antwortpakete) sieht das zb so aus:

    Code:
    pass out log (all) on en0 inet proto tcp to any port 443 keep state
    Diese Regel lädt man wie gehabt mit pfctl. Anschließend erzeugt man das Logging Interface und kann sich die Logs in Realtime ansehen mittels tcpdump (Befehle im Terminal eingeben):

    Code:
    ifconfig pflog0 create
    sudo tcpdump -n -e -ttt -i pflog0
    
    Möchte man das in einer Datei haben, so kann man tcpdump anweisen das dorthin zu schreiben, das ganze am besten als Hintergrundprozess:

    Code:
    sudo tcpdump -i pflog0 -s 0 -B 524288 -w /Pfad_zur_Datei &
    Um das wieder zu stoppen, holt man sich mittels ps die Prozess-ID von tcpdump und killt diese:

    Code:
    ps -ef
    sudo kill PID
    Um das ganze lesen zu können nutzt man wieder tcpdump:

    Code:
    tcpdump -n -e -ttt -r /Pfad_zur_Datei 
    Interessante Links dazu:

     
    Dr_Iwan_Kakalakow and Ghost like this.
  15. r

    raivo New Member

    hallo! ich habe Viscosity auf die Version 1.6.1 updated und nun die pf regeln funktionieren nicht mehr. kommt nicht mehr duch. Internet bekomme ich duch Ethernet/ lan cable. Anbei die Config:
    block all
    pass in on lo0 all
    pass out on lo0 all
    pass out on en1 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on en1 proto tcp to any port {1152,152} keep state
    pass out on en1 to 192.168.2.0/24
    pass in on en1 from 192.168.2.0/24
    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

    Könntest du bitte mir helfen? Danke!
     
  16. JackCarver

    JackCarver Junior Member

    Wenn du eine Verbindung zu PP herstellen kannst, es aber dann hakt, dann setze mal statt tun0 ein utun0. Kannst auch die letzten beiden Regeln nochmal zum Schluss anhängen und statt tun0 dort ein utun0 verwenden.
     
  17. r

    raivo New Member

    SUPER! das war`s! nun funktioniert! konnte einfach nicht verstehen warum auf einmal nicht mehr ging. Danke!
     
  18. s

    staloralo New Member

    Weiß jemand ob man das auch hinbekommt wenn man sich über einen Router VPN server von außen verbindet? Der VPN Server hat das subnet 192.168.6.0, während das normale Netzwerk 192.168.7.0 hat. Aus dem normalen Netzwerk funktioniert der zugriff, aus dem VPN subnet nicht. So sehen meine Einträge dazu aus:

    Code:
    pass out on en0 to 192.168.7.0/24
    pass in on en0 from 192.168.7.0/24
    pass out on en0 to 192.168.6.0/24
    pass in on en0 from 192.168.6.0/24
    Auf andere Geräte die nicht mit pf geschützt sind kann ich aus dem VPN subnet problemlos zugreifen.

    Und dann bekomme ich wenn ich das startscript benutze trotz gespeichertem Passwort immer noch eine macOS Passwortabfrage, das sollte das vorherige festlegen doch eigentlich verhindern oder?

    Code:
    do shell script "/sbin/pfctl -f ~/Documents/vpn.rules;/sbin/pfctl -e" password "meinpasswort" with administrator privileges

    Edit: Jetzt funktioniert es irgendwie gar nicht mehr. Sobald ich die Regeln aktiviere habe ich zwar noch zugriff aus dem LAN aber über's Internet läuft gar nichts mehr

    Code:
    block in all
    block out all
    pass in on lo0 all
    pass out on lo0 all
    pass out on en0 inet proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
    pass out on en0 inet proto tcp to any port {1152,152,32400} keep state
    pass out on en0 inet to 10.0.0.0/8
    pass in on en0 inet from 10.0.0.0/8
    pass out on en0 inet to 192.168.7.0/16
    pass in on en0 inet from 192.168.7.0/16
    pass out on en0 inet to 192.168.6.0/16
    pass in on en0 inet from 192.168.6.0/16
    pass out on utun0 all keep state
    pass out on tun0 all keep state
    
     
    Last edited: Sep 29, 2016
  19. Ghost

    Ghost Junior Member

    Hey, ich hätte gerne ein Script, mit dem ich die Firewall deaktivieren kann.
    Leider habe ich es selber nicht drauf und bin so wieder mal auf euch angewiesen.

    Hier mein Script zum aktivieren der Firewall
    Code:
    do shell script "/sbin/pfctl -f /Users/admin/Documents/vpn.rules ;/sbin/pfctl -e" password "Mein Paßwort" with administrator privileges
    Diesen Befehl möchte ich gerne per Doppelklick automatisch ausführen lassen.
    Code:
    sudo pfctl -F rules
    Danke euch.
     
  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