JackCarver
Well-known 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:
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.
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:
sudo pfctl -f /Pfad-zu/vpn.rules
sudo pfctl -e
Das war's schon
Wollt ihr das derzeit aktive Regelwerk sehen, so genügt ein:
sudo pfctl -sr
Wollt ihr die Regeln wieder loswerden dann langt ein:
sudo pfctl -F rules
Und alle Verbindungen sind auch ohne VPN wieder frei.
Diese Regeln können problemlos erweitert werden, mit derselben Syntax langt zb ein:
pass out on en0 proto tcp to any port 22 keep state
Um zusätzlich ssh ohne VPN zu erlauben.