macOS پر، حفاظتی سوئچ صرف اتنا ہی اچھا ہوتا ہے جتنی اس کے پیچھے پیکٹ فلٹر کی پالیسی، اور pf وہ حصہ ہے جو اس پالیسی کو نافذ کرتا ہے۔ پالیسی کو بیک وقت دو متضاد کام کرنے ہوتے ہیں: کلائنٹ کو اس کے سرور تک پہنچنے دینا تاکہ سرنگ قائم ہو سکے، اور باقی سب کو براہ راست باہر جانے سے روکنا۔ شائع شدہ قواعد کے زیادہ تر مجموعے دوسرا کر لیتے ہیں اور پہلا بھول جاتے ہیں، اسی لیے مشین تحفظ حاصل کرنے کے بجائے رابطہ کھو دیتی ہے۔ جو نسخہ کام کرتا ہے وہ آخری نقطہ، حل کنندہ اور سرنگ کا نام لیتا ہے، اور اس سے زیادہ کچھ نہیں۔

پیکٹ فلٹر کیا طے کر سکتا ہے، اور کیا نہیں

pf انٹرفیس، پتوں، پروٹوکول نمبروں اور پورٹوں کو دیکھتا ہے، اور وہیں رک جاتا ہے۔ یہ کبھی نہیں جان پاتا کہ کس عمل نے ساکٹ کھولا، اس لیے ایک پروگرام کے لیے لکھی گئی اجازت ہر اس پروگرام کی اجازت بن جاتی ہے جو اسی پورٹ تک پہنچ سکتا ہے۔ اسی طرح ایک فراخ UDP استثنا حفاظتی سوئچ کو واپس عام نیٹ ورک بنا دیتا ہے۔ ایپلیکیشن سے واقف روک کلائنٹ یا سسٹم ایکسٹینشن کا کام ہے، اس فائل کا نہیں۔

فلٹر راستے بھی نہیں بناتا۔ جب کلائنٹ گرتا ہے، ڈیفالٹ راستہ اب بھی کسی مردہ سرنگ کی طرف اشارہ کر سکتا ہے، اور pf اسے Wi-Fi پر خاموش واپسی کے بجائے روکے ہوئے پیکٹوں میں بدل دیتا ہے۔ روک ہی مطلوبہ نتیجہ ہے، ٹالنے والی خرابی نہیں۔

نتیجہ قاعدے کے متن سے زیادہ بار ترتیب طے کرتی ہے۔ quick کے بغیر pf مطابقت کے بعد بھی جانچ جاری رکھتا ہے اور آخری مطابقت رکھنے والا قاعدہ جیت جاتا ہے، اس لیے نیچے کی طرف ایک وسیع گزر اوپر کے محتاط استثنات کو کالعدم کر دیتی ہے۔ گزروں کو quick سے نشان زد کرنا پہلی مطابقت کو حتمی بنا دیتا ہے، اور پالیسی لکھنے والا عام طور پر یہی مراد لیتا ہے۔

پہلے انٹرفیس اور آخری نقطے کے حقائق پڑھیں

ہر Mac پر وائرلیس انٹرفیس ایک جیسے نمبر نہیں پاتے، اور سرنگ کا آلہ ایسا نمبر پاتا ہے جو بوٹ کے درمیان بدل سکتا ہے۔ جو قاعدہ نہ موجود آلے کا نام لیتا ہے وہ پارس کے وقت ناکام ہوتا ہے، جو شور والا اور پکڑنا آسان ہے، جبکہ غلط موجود آلے کا نام لینے والا قاعدہ صاف پارس ہوتا ہے اور وہ ٹریفک آنے دیتا ہے جسے آپ روکنا چاہتے تھے۔

حقائق اس وقت جمع کریں جب کلائنٹ جڑا ہو، کیونکہ سرنگ کا آلہ صرف اسی وقت موجود ہوتا ہے۔ آپ کو وہ انٹرفیس چاہیے جو ڈیفالٹ راستہ رکھتا ہے، کلائنٹ کا بنایا ہوا آلہ، اور اس سرور کا پتہ اور پورٹ جسے یہ ڈائل کرتا ہے۔ یہی آخری قدر ہے جسے زیادہ تر قواعد کے مجموعے چھوڑ دیتے ہیں، اور اسے چھوڑنا ہی وجہ ہے کہ نقل کیا گیا مجموعہ اپنی ہی سرنگ روک دیتا ہے۔

route -n get default
ifconfig -l
scutil --nc list

پہلا حکم اس انٹرفیس کا نام لیتا ہے جو ابھی جیت رہا ہے، دوسرا ہر اس آلے کی فہرست دیتا ہے جو کرنل جانتا ہے، اور تیسرا وہ VPN ترتیبات دکھاتا ہے جو سسٹم شروع کر سکتا ہے۔ وہ جوابات لکھ لیں، پھر کلائنٹ کی اپنی ترتیب سے سرور کا پتہ اور پورٹ پڑھیں۔

سرنگ کے راستے کے گرد قواعد کا مجموعہ لکھیں

نیچے دی گئی فائل بطور ڈیفالٹ انکار کرتی ہے اور پانچ چیزیں دوبارہ قبول کرتی ہے: لوپ بیک، سرنگ کا آلہ، کلائنٹ کا اپنے سرور تک راستہ، سرنگ بننے سے پہلے استعمال ہونے والا حل کنندہ، اور وہ دو تبادلے جو وائرلیس لنک کو قابل استعمال رکھتے ہیں۔ انٹرفیس کے نام اور سرور کا پتہ آپ کی مشین سے آتے ہیں، اس لیے جو قدریں آپ نے تصدیق کی ہیں وہ رکھیں۔ سرنگ کا نمبر بھی آپ کے نمبر سے نہیں ملے گا۔

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 سطر اس لیے ہے کیونکہ Mac پتہ ہونے سے پہلے پتہ مانگتا ہے، اس لیے درخواست قابل استعمال ماخذ پتے کے بغیر پورٹ 68 سے پورٹ 67 کی طرف نکلتی ہے۔ ملٹی کاسٹ سطر سسٹم کو فیصلہ کرنے دیتی ہے کہ وائرلیس لنک استعمال کے قابل ہے یا نہیں، اور اسے ہٹانے سے ایسی مشین بنتی ہے جو چلتی نیٹ ورک پر بھی کوئی رابطہ نہ ہونے کی اطلاع دیتی ہے۔ آخری نقطے کی سطر وہ ہے جو OpenVPN کو اس کے سرور تک پہنچنے دیتی ہے؛ اس کے بغیر block all بیرونی ہینڈ شیک گرا دیتا ہے اور سرنگ کبھی اوپر نہیں آتی۔ حل کنندہ کی سطر عام DNS اجازت سے تنگ ہے، کیونکہ یہ مشین کے ہر سوال کے بجائے ایک پتہ اور ایک پورٹ کا نام لیتی ہے۔

وہ آخری نقطہ اور حل کنندہ استثنات ہی دو ہیں جو موجود ہونے چاہئیں؛ باقی سب روکا ہوا رہتا ہے۔ اگر کلائنٹ لفظی پتہ ڈائل کرتا ہے تو حل کنندہ کی سطر ہٹا دیں اور آخری نقطے کی سطر رکھیں۔ اگر سرور کا پتہ بدلتا ہے تو اگلے رابطے سے پہلے وہ سطر تازہ کریں، یا کلائنٹ کے اپنے ہک سے pf جدول بھریں اور اس کے بجائے جدول سے مطابقت کریں۔

سرنگ نیچے اتاریں، پھر ری بوٹ کریں

لوڈ کرنے سے پہلے پارس کریں، کیونکہ نحو کی غلطی خشک آزمائش میں سستی اور دور کے اجلاس میں مہنگی پڑتی ہے۔ پھر فائل لوڈ کریں، فلٹر بند ہو تو چالو کریں، اور پڑھیں کہ واقعی کیا نافذ ہے۔ دوبارہ پڑھنا رسم نہیں ہے: کوئی دوسرا اینکر ایسے قواعد شامل کر سکتا ہے جو آپ نے نہیں لکھے، اس لیے چھپے ہوئے مجموعے کا اپنی فائل سے موازنہ کریں۔

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

قواعد لوڈ ہونے پر سرنگ نیچے اتاریں اور صفحہ لوڈ کرنے کی کوشش کریں۔ عام ٹریفک رکنا چاہیے، اور مشین کے سونے اور جاگنے کے بعد بھی رکا رہنا چاہیے، کیونکہ اسی تبدیلی میں پرانی حالت واپس آتی ہے۔ دوبارہ جڑیں اور تصدیق کریں کہ قواعد کے مجموعے کو چھوئے بغیر ٹریفک دوبارہ شروع ہوتی ہے۔ اگر سرنگ بند ہونے پر بھی براؤزر چلتا ہے تو کوئی قاعدہ آپ کی سوچ سے وسیع ہے، اور دوبارہ پڑھنا عام طور پر اس کا نام بتا دیتا ہے۔

ری بوٹ وہ حصہ ہے جسے لوگ چھوڑ دیتے ہیں۔ macOS بوٹ پر /etc/pf.conf پڑھتا ہے، لیکن فائل پڑھنا فلٹر چالو کرنے کے برابر نہیں، اس لیے ابھی کام کرنے والا قواعد کا مجموعہ ری اسٹارٹ کے بعد غیر فعال ہو سکتا ہے۔ پھر sudo pfctl -s info چلائیں اور تصدیق کریں کہ حالت کی سطر فلٹر کو فعال بتاتی ہے۔

باہر نکلنے اور ری اسٹارٹ کے راستے کو ایماندار رکھیں

سب کچھ روکنے والا قواعد کا مجموعہ آپ کو اس مشین سے باہر بھی کر سکتا ہے جسے آپ دور سے سنبھالتے ہیں۔ جب ہو سکے مقامی اجلاس سے ترمیم کریں، پچھلی فائل نئی کے پاس رکھیں، اور ضرورت پڑنے سے پہلے واپسی کا راستہ جانیں۔ نیچے دیے گئے احکام فلٹر بند کرتے ہیں اور آپ کی رکھی ہوئی نقل دوبارہ لوڈ کرتے ہیں، اور یہ کنسول سے چلانے کی ترتیب ہے، اسی سرنگ سے نہیں جو آپ نے ابھی کاٹی۔ پانچ سیکنڈ کی واپسی ہر بار ایک ہوشیار قاعدے کو ہرا دیتی ہے۔

sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules

دوام کے لیے ایک لانچ ڈیمان چاہیے جو pfctl -e چلائے اور بوٹ پر آپ کی فائل لوڈ کرے۔ اسے کسی بھی دوسرے مراعات یافتہ کام کی طرح سمجھیں: مطلق راستے، بعد میں پڑھنے کے قابل لاگ، اور ایسی مشین پر آزمائش جہاں آپ جسمانی طور پر پہنچ سکیں۔ خاموشی سے ناکام ہونے والا ڈیمان مشین کو غیر محفوظ اور عام دکھائی دینے والا چھوڑ دیتا ہے۔

خلاوں کی دستاویز بنائیں، شروع اس دوسرے VPN کلائنٹ سے کریں جو اپنا سرنگ آلہ بناتا ہے۔ آپ کے قواعد ایک سرنگ انٹرفیس کا نام لیتے ہیں، اس لیے دوسرا روکا ہوا رہتا ہے یا بعد میں شامل کیے گئے وسیع قاعدے سے مل جاتا ہے۔ ٹیدرنگ اور ہاٹ اسپاٹ انٹرفیس صرف کبھی کبھار ظاہر ہوتے ہیں اور اسی نوٹ کے لائق ہیں۔ ان خلاوں میں سے کوئی بھی پالیسی چھوڑنے کی وجہ نہیں؛ یہ وہ شرائط ہیں جن کے تحت یہ اب بھی لاگو ہے۔

متعلقہ مضامین