OpenVPN için macOS pf güvenlik anahtarı: kapanan kurallar
Bir pf kural kümesi tünel kapalıyken doğrudan trafiği engeller. İstemcinin sunucusuna giden yolunu koruyun, ardından tünel kapalıyken engeli kanıtlayın.
macOS'ta bir güvenlik anahtarı, arkasındaki paket filtresi ilkesi kadar iyidir ve pf bu ilkeyi uygulayan parçadır. İlke aynı anda iki zıt şey yapmalıdır: tünel var olabilsin diye istemcinin sunucusuna ulaşmasına izin vermek ve diğer her şeyin doğrudan çıkmasını durdurmak. Yayımlanan kural kümelerinin çoğu ikincisini başarır ve birincisini unutur, bu yüzden makine koruma kazanmak yerine bağlantıyı kaybeder. Çalışan sürüm uç noktayı, çözümleyiciyi ve tüneli adlandırır, fazlasını değil.
Bir paket filtresi neye karar verebilir, neye veremez
pf arayüzlere, adreslere, protokol numaralarına ve bağlantı noktalarına bakar ve orada durur. Hangi sürecin bir soket açtığını asla öğrenmez, bu yüzden bir program için yazılan izin, aynı bağlantı noktasına ulaşabilen her program için izin hâline gelir. Cömert bir UDP istisnası bir güvenlik anahtarını işte böyle yeniden sıradan bir ağa çevirir. Uygulama bilinçli engelleme istemciye veya bir sistem uzantısına aittir, bu dosyaya değil.
Filtre yollar da oluşturmaz. İstemci düştüğünde varsayılan yol hâlâ ölü bir tüneli gösterebilir ve pf bunu Wi-Fi'ye sessizce geri dönmek yerine engellenen paketlere çevirir. Engelleme amaçlanan sonuçtur, etrafından dolaşılacak bir arıza değildir.
Sonucu kural metninden çok sıralama belirler. quick olmadan pf bir eşleşmeden sonra değerlendirmeye devam eder ve son eşleşen kural kazanır, bu yüzden alttaki geniş bir geçiş üstteki özenli istisnaları geçersiz kılar. Geçişleri quick ile işaretlemek ilk eşleşmeyi kesin yapar; bir ilke yazarının genellikle kastettiği budur.
Önce arayüz ve uç nokta gerçeklerini okuyun
Kablosuz arayüzler her Mac'te aynı şekilde numaralanmaz ve tünel aygıtı önyüklemeler arasında değişebilen bir numara alır. Var olmayan bir aygıtı adlandıran kural ayrıştırmada başarısız olur; bu gürültülüdür ve yakalaması kolaydır, yanlış var olan aygıtı adlandıran kural ise temiz ayrıştırılır ve durdurmak istediğiniz trafiğe izin verir.
Gerçekleri istemci bağlıyken toplayın, çünkü tünel aygıtı yalnızca o zaman vardır. Varsayılan yolu tutan arayüze, istemcinin oluşturduğu aygıta ve aradığı sunucunun adresi ile bağlantı noktasına ihtiyacınız var. Çoğu kural kümesinin atladığı değer işte bu son değerdir ve onu atlamak, kopyalanan bir kümenin kendi tünelini engellemesinin nedenidir.
route -n get default
ifconfig -l
scutil --nc list
İlk komut şu anda kazanan arayüzü adlandırır, ikincisi çekirdeğin bildiği her aygıtı listeler, üçüncüsü sistemin başlatabileceği VPN yapılandırmalarını gösterir. Bu yanıtları yazın, sonra sunucu adresini ve bağlantı noktasını istemcinin kendi yapılandırmasından okuyun.
Kural kümesini tünel yolunun etrafına yazın
Aşağıdaki dosya varsayılan olarak reddeder ve beş şeyi yeniden kabul eder: loopback, tünel aygıtı, istemcinin sunucusuna giden yolu, tünel oluşmadan önce kullanılan çözümleyici ve kablosuz bağlantıyı kullanılır tutan iki alışveriş. Arayüz adları ve sunucu adresi sizin makinenizden gelir, bu yüzden onayladığınız değerleri koyun. Tünel numarası da sizinkiyle eşleşmeyecek.
set skip on lo0
block all
pass out quick on utun0
# maintain this line when the server address changes
pass out quick on en1 inet proto udp to 203.0.113.10 port 1194
# only the resolver the client uses before the tunnel exists
pass out quick on en1 inet proto udp to 192.0.2.53 port 53
pass out quick on en1 inet proto udp from any port 68 to any port 67
pass out quick on en1 inet proto udp to 224.0.0.251 port 5353
DHCP satırı vardır çünkü bir Mac adresi olmadan önce adres ister, bu yüzden istek kullanılabilir kaynak adresi olmadan 68 numaralı bağlantı noktasından 67 numaralı bağlantı noktasına çıkar. Multicast satırı sistemin kablosuz bağlantının kullanmaya değer olup olmadığına karar vermesini sağlar ve onu kaldırmak, çalışan bir ağda bağlantı yok diyen bir makine üretir. Uç nokta satırı OpenVPN in sunucusuna hiç ulaşmasını sağlayandır; o olmadan block all dış el sıkışmayı düşürür ve tünel asla yükselmez. Çözümleyici satırı genel bir DNS izninden dardır, çünkü makinenin yaptığı her sorgu yerine bir adres ve bir bağlantı noktası adlandırır.
O uç nokta ve çözümleyici istisnaları var olması gereken iki tanedir; geri kalan her şey engelli kalır. İstemci gerçek bir adresi arıyorsa çözümleyici satırını çıkarın ve uç nokta satırını tutun. Sunucu adresi değişirse o satırı bir sonraki bağlantıdan önce güncelleyin ya da istemcinin kendi kancasından bir pf tablosu doldurun ve bunun yerine tabloyu eşleştirin.
Tüneli indirin, sonra yeniden başlatın
Yüklemeden önce ayrıştırın, çünkü sözdizimi hatası kuru bir denemede ucuz, uzak bir oturumda pahalıdır. Sonra dosyayı yükleyin, filtre kapalıysa açın ve gerçekte neyin yürürlükte olduğunu geri okuyun. Geri okuma tören değildir: başka bir çapa, yazmadığınız kurallar ekleyebilir, bu yüzden yazdırılan kümeyi kendi dosyanızla karşılaştırın.
sudo pfctl -n -v -f /etc/pf.conf
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
sudo pfctl -s rules
sudo pfctl -s Anchors
sudo pfctl -a <anchor> -s rules
sudo pfctl -s info
Kurallar yüklüyken tüneli indirin ve bir sayfa yüklemeyi deneyin. Sıradan trafik durmalı ve makine uyuyup uyandıktan sonra da durmuş kalmalıdır, çünkü eski durum tam o geçişte geri sızar. Yeniden bağlanın ve trafiğin kural kümesine dokunmadan geri geldiğini doğrulayın. Tünel kapalıyken tarayıcı hâlâ çalışıyorsa bir kural düşündüğünüzden geniştir ve geri okuma genellikle onu adlandırır.
Yeniden başlatma insanların atladığı kısımdır. macOS önyüklemede /etc/pf.conf dosyasını okur, ancak dosyayı okumak filtreyi etkinleştirmekle aynı şey değildir, bu yüzden şu anda çalışan bir kural kümesi yeniden başlatmadan sonra etkin olmayabilir. Ardından sudo pfctl -s info komutunu çalıştırın ve durum satırının filtreyi etkin olarak bildirdiğini doğrulayın.
Çıkışı ve yeniden başlatma yolunu dürüst tutun
Her şeyi engelleyen bir kural kümesi sizi uzaktan yönettiğiniz bir makinenin dışında da bırakabilir. Mümkün olduğunda yerel bir oturumdan düzenleyin, önceki dosyayı yenisinin yanında tutun ve geri dönüşü ihtiyaç duymadan önce bilin. Aşağıdaki komutlar filtreyi devre dışı bırakır ve sakladığınız kopyayı yeniden yükler; bu, az önce kestiğiniz tünelden değil, konsoldan çalıştırılacak sıradır. Beş saniyelik bir geri dönüş her seferinde akıllı bir kuralı yener.
sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules
Kalıcılık için pfctl -e çalıştıran ve önyüklemede dosyanızı yükleyen bir launch daemon gerekir. Ona diğer ayrıcalıklı işler gibi davranın: mutlak yollar, sonradan okuyabileceğiniz bir günlük ve fiziksel olarak ulaşabileceğiniz bir makinede test. Sessizce başarısız olan bir daemon makineyi korumasız ve normal görünümlü bırakır.
Boşlukları belgeleyin; kendi tünel aygıtını oluşturan ikinci bir VPN istemcisiyle başlayın. Kurallarınız tek bir tünel arayüzü adlandırır, bu yüzden ikincisi engelli kalır ya da sonradan eklenen geniş bir kurala yakalanır. Tethering ve hotspot arayüzleri yalnızca bazen görünür ve aynı notu hak eder. Bu boşlukların hiçbiri ilkeyi atlamak için neden değildir; onlar ilkenin hâlâ geçerli olduğu koşullardır.