OpenVPN üçün macOS pf qoruyucusu: bağlı qalan qaydalar
pf qaydalar dəsti tunel söndükdə birbaşa trafiki bloklayır. Müştərinin serverinə gedən yolunu saxlayın, sonra tunel söndürülmüş halda bloku sübut edin.
macOS-da qoruyucu yalnız arxasındakı paket filtri siyasəti qədər yaxşıdır və pf həmin siyasəti tətbiq edən hissədir. Siyasət eyni anda iki əks şey etməlidir: müştəriyə serverinə çatmağa imkan verməlidir ki tunel mövcud olsun, və qalan hər şeyin birbaşa çıxmasını dayandırmalıdır. Dərc olunmuş qaydalar dəstlərinin çoxu ikincini bacarır və birincini unudur, ona görə maşın qorunma qazanmaq əvəzinə bağlantını itirir. İşləyən versiya son nöqtəni, həlledicini və tuneli adlandırır, başqa heç nəyi.
Paket filtri nəyə qərar verə bilər və nəyə bilməz
pf interfeyslərə, ünvanlara, protokol nömrələrinə və portlara baxır və orada dayanır. Hansı prosesin soket açdığını heç vaxt öyrənmir, ona görə bir proqram üçün yazılmış icazə eyni porta çata bilən hər proqram üçün icazəyə çevrilir. Səxavətli UDP istisnası qoruyucunu beləcə adi şəbəkəyə qaytarır. Tətbiqdən xəbərdar bloklama müştəriyə və ya sistem genişlənməsinə aiddir, bu fayla yox.
Filtr marşrutlar da yaratmır. Müştəri düşəndə default marşrut hələ də ölü tunelə işarə edə bilər və pf bunu Wi-Fi-ə səssiz geri dönüş əvəzinə bloklanmış paketlərə çevirir. Blok nəzərdə tutulan nəticədir, ətrafından yan keçilməli nasazlıq deyil.
Sıra nəticəni qayda mətnindən daha tez-tez həll edir. quick olmadan pf uyğunluqdan sonra qiymətləndirməyə davam edir və son uyğun qayda qalib gəlir, ona görə aşağıdakı geniş keçid yuxarıdakı diqqətli istisnaları üstələyir. Keçidləri quick kimi işarələmək ilk uyğunluğu qəti edir, siyasət müəllifinin adətən nəzərdə tutduğu da budur.
Əvvəlcə interfeys və son nöqtə faktlarını oxuyun
Simsiz interfeyslər hər Mac-da eyni cür nömrələnmir və tunel qurğusu yükləmələr arasında dəyişə bilən nömrə alır. Mövcud olmayan qurğunu adlandıran qayda təhlil zamanı uğursuz olur, bu səs-küylü və tutmaq asandır, yanlış mövcud qurğunu adlandıran qayda isə təmiz təhlil olunur və dayandırmaq istədiyiniz trafikə icazə verir.
Faktları müştəri qoşulmuşkən toplayın, çünki tunel qurğusu yalnız o zaman mövcuddur. Default marşrutu saxlayan interfeys, müştərinin yaratdığı qurğu və onun yığdığı serverin ünvanı və portu lazımdır. O son dəyər qaydalar dəstlərinin çoxunun buraxdığı dəyərdir və onu buraxmaq kopyalanmış dəstin öz tunelini bloklamasının səbəbidir.
route -n get default
ifconfig -l
scutil --nc list
Birinci əmr hazırda qalib gələn interfeysi adlandırır, ikincisi nüvənin bildiyi hər qurğunu sadalayır, üçüncüsü sistemin başlada biləcəyi VPN konfiqurasiyalarını göstərir. Bu cavabları yazın, sonra server ünvanını və portunu müştərinin öz konfiqurasiyasından oxuyun.
Qaydalar dəstini tunel yolu ətrafında yazın
Aşağıdakı fayl susmaya görə rədd edir və beş şeyi yenidən qəbul edir: loopback, tunel qurğusu, müştərinin serverinə gedən yolu, tunel yaranmazdan əvvəl istifadə olunan həlledici və simsiz əlaqəni yararlı saxlayan iki mübadilə. İnterfeys adları və server ünvanı sizin maşınınızdan gəlir, ona görə təsdiqlədiyiniz dəyərləri əvəz edin. Tunel nömrəsi də sizinki ilə uyğun gəlməyəcək.
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 sətri ona görə var ki, Mac ünvanı olmamışdan əvvəl ünvan istəyir, ona görə sorğu 68 portundan 67 portuna istifadə oluna bilən mənbə ünvanı olmadan çıxır. Multicast sətri sistemə simsiz əlaqənin istifadəyə dəyər olub-olmadığını qiymətləndirməyə imkan verir və onu silmək işlək şəbəkədə heç bir bağlantı bildirməyən maşın yaradır. Son nöqtə sətri OpenVPN üçün serverinə çatmağı mümkün edir; onsuz block all xarici əl sıxışmanı atır və tunel heç vaxt qalxmır. Həlledici sətri ümumi DNS icazəsindən dardır, çünki maşının etdiyi hər sorğu əvəzinə bir ünvan və bir port adlandırır.
Bu son nöqtə və həlledici istisnaları mövcud olmalı iki istisnadır; qalan hər şey bloklanmış qalır. Müştəri hərfi ünvana yığırsa, həlledici sətrini silin və son nöqtə sətrini saxlayın. Server ünvanı dəyişirsə, həmin sətri növbəti bağlantıdan əvvəl yeniləyin, ya da müştərinin öz qarmağından pf cədvəlini doldurun və əvəzində cədvəllə uyğunlaşdırın.
Tuneli endirin, sonra yenidən başladın
Yükləməzdən əvvəl təhlil edin, çünki sintaksis xətası quru işə salmada ucuz, uzaq sessiyada bahadır. Sonra faylı yükləyin, filtr söndürülmüşdüsə yandırın və həqiqətən qüvvədə olanı geri oxuyun. Geri oxuma mərasim deyil: başqa anker yazmadığınız qaydalar əlavə edə bilər, ona görə çap olunmuş dəsti faylınızla müqayisə edin.
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
Qaydalar yüklənmiş halda tuneli endirin və səhifə yükləməyə çalışın. Adi trafik dayanmalıdır və maşın yatıb oyandıqdan sonra da dayanmış qalmalıdır, çünki köhnəlmiş vəziyyət məhz o keçiddə geri sızır. Yenidən qoşulun və qaydalar dəstinə toxunmadan trafikin bərpa olunduğunu təsdiqləyin. Tunel enmiş halda brauzer hələ işləyirsə, qayda düşündüyünüzdən genişdir və geri oxuma adətən onu adlandırır.
Yenidən başlatma insanların atladığı hissədir. macOS açılışda /etc/pf.conf faylını oxuyur, amma faylı oxumaq filtri yandırmaqla eyni deyil, ona görə indi işləyən qaydalar dəsti yenidən başlatmadan sonra qeyri-aktiv ola bilər. Sonra sudo pfctl -s info işə salın və status sətrinin filtri aktiv bildirdiyini təsdiqləyin.
Çıxış və yenidən başlatma yolunu dürüst saxlayın
Hər şeyi bloklayan qaydalar dəsti sizi uzaqdan idarə etdiyiniz maşından da kənarda sala bilər. Bacardıqda yerli sessiyadan redaktə edin, əvvəlki faylı yeninin yanında saxlayın və geri dönüşü ona ehtiyac duymazdan əvvəl bilin. Aşağıdakı əmrlər filtri söndürür və saxladığınız nüsxəni yenidən yükləyir, bu, təzəcə kəsdiyiniz tuneldən deyil, konsoldan işə salınmalı ardıcıllıqdır. Beş saniyəlik geri dönüş hər dəfə ağıllı qaydayı üstələyir.
sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules
Davamlılıq üçün pfctl -e işlədən və faylınızı açılışda yükləyən launch daemon lazımdır. Ona hər hansı digər imtiyazlı iş kimi baxın: mütləq yollar, sonradan oxuya biləcəyiniz jurnal və fiziki çata bildiyiniz maşında sınaq. Səssizcə uğursuz olan daemon maşını qorunmaz və normal görünən qoyur.
Boşluqları sənədləşdirin, öz tunel qurğusunu yaradan ikinci VPN müştərisi ilə başlayın. Qaydalarınız bir tunel interfeysini adlandırır, ona görə ikincisi bloklanmış qalır və ya sonradan əlavə olunan geniş qaydayla uyğunlaşır. Tethering və hotspot interfeysləri yalnız bəzən görünür və eyni qeydə layiqdir. Bu boşluqların heç biri siyasəti atlamaq üçün səbəb deyil; onlar siyasətin hələ də keçərli olduğu şərtlərdir.