ٹنل روکے بغیر ایک OpenVPN کلائنٹ کو LAN سے بلاک کریں
کلائنٹ کا ٹنل پتہ اس کے سرٹیفکیٹ سے پن کریں، FORWARD کے سر پر اس کا LAN ٹریفک گرا دیں، پھر IPv6، ٹریک شدہ سیشنز اور ری بوٹ کے بعد برقراری کی تصدیق کریں۔
آپ کے OpenVPN سرور پر ایک کلائنٹ کو LAN رسائی کھونی ہے جبکہ باقی تمام ٹنل چلتے رہیں۔ اگر آپ اسے تلاش کریں تو بہترین جواب عموماً کہتا ہے کہ ڈیمن یہ نہیں کر سکتا، جو آدھی ہی سچ ہے: OpenVPN میں فی کلائنٹ فائر وال نہیں، لیکن جو ہوسٹ ٹنل ختم کرتا ہے وہ پہلے ہی پیکٹ فلٹر کرتا ہے۔ اصل دو فیصلے وہ شناخت جو آپ بلاک کرتے ہیں اور قاعدے کی جگہ ہیں۔ یہ دونوں درست کریں تو تبدیلی ایک ایسی لائن بن جاتی ہے جسے آپ جانچ اور ہٹا سکتے ہیں۔
قاعدہ لکھنے سے پہلے کلائنٹ کو پن کریں
OpenVPN ٹنل پتے ایک پول سے کرائے پر دیتا ہے، اس لیے 10.8.0.6 شخص نہیں، نشست ہے۔ سیشن ختم ہونے پر کرایہ واپس آتا ہے اور اگلی کنکشن کو دیا جا سکتا ہے، یعنی اس پتے کے خلاف لکھا قاعدہ نشست کی پیروی کرتا ہے، صارف کی نہیں۔ اس لیے پہلے طے کریں کہ آپ واقعی کیا بلاک کر رہے ہیں: مختصر تجربے کے لیے پتہ، یا کسی کو باہر رکھنے کے لیے سرٹیفکیٹ۔
پتے کو سرٹیفکیٹ سے باندھنے کے لیے، client-config-dir کے بتائے گئے ڈائریکٹری میں فائل بنائیں اور فائل کو سرٹیفکیٹ کا common name بالکل ویسا ہی دیں۔ اس میں ایک ہدایت رکھیں، ifconfig-push 10.8.0.6 255.255.255.0، اور وہ کلائنٹ دوبارہ جڑنے پر بھی وہی ٹنل پتہ رکھتا ہے۔ یہ مؤثر ہونے کے لیے دو سیٹنگز ہونی چاہئیں: سرور کنفیگریشن میں client-config-dir کا اعلان ہو، اور بھیجا گیا پتہ ایسے سب نیٹ میں ہو جسے سرور روٹ کر سکے۔ ایک بھی رہ جائے تو فائل بغیر غلطی کے نظر انداز ہو جاتی ہے، جو اگلی فائر وال جانچ کو گمراہ کن بنا دیتی ہے۔
عارضی بلاک پول کا پتہ استعمال کر سکتا ہے، بشرطیکہ ٹکٹ میں درج ہو کہ اس وقت کون سا سیشن اسے رکھے ہوئے تھا۔
ترتیب طے کرتی ہے کہ ڈراپ چلے گا یا نہیں
جو Linux گیٹ وے ٹنل اور LAN کے درمیان فارورڈ کرتا ہے، وہاں پیکٹ FORWARD زنجیر سے گزرتے ہیں۔ نیچے دیے گئے حکم کو جملے کی طرح پڑھیں: FORWARD کے سر پر داخل کریں، tun0 سے آنے والا، صرف اسی ایک ہوسٹ کا، LAN سب نیٹ کی طرف بھیجا گیا ٹریفک ملائیں اور گرا دیں۔
iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP-I ہی قاعدے کو چلاتا ہے۔ -A کے ساتھ شامل کریں تو یہ ٹنل سب نیٹ کے کسی بھی وسیع اجازت کے نیچے آ جاتا ہے اور کبھی پیکٹ نہیں دیکھتا۔ جگہ iptables -vnL FORWARD --line-numbers سے جانچیں اور کاؤنٹر بھی پڑھیں: اوپر کا ڈراپ اگر کچھ نہ گنے تو ٹریفک کسی اور راستے سے آ رہا ہے۔
گیٹ وے کا اپنا LAN پتہ الگ راستہ ہے۔ خود باکس کو بھیجے گئے پیکٹ INPUT میں جاتے ہیں، FORWARD میں نہیں، اس لیے کلائنٹ LAN ہوسٹ کھو کر بھی راؤٹر کا ایڈمن صفحہ کھول سکتا ہے۔ جب یہ اہم ہو تو ملتا ہوا INPUT قاعدہ شامل کریں۔
فلٹر کیا نہیں دیکھ سکتا
فلٹرنگ پیکٹ کی تشخیص کے وقت ہوتی ہے، اس لیے قائم شدہ TCP سیشن بند یا ری سیٹ ہونے تک چل سکتا ہے۔ اگر بلاک کو فوراً اثر کرنا ہے تو قاعدہ ڈالنے کے بعد اس ماخذ کے ٹریک شدہ فلو conntrack -D -s 10.8.0.6 سے صاف کریں۔ اگر چند سیکنڈ کا اوورلیپ قابل قبول ہو تو اس انتخاب کو درج کریں، اسے مضمر چھوڑنے کے بجائے۔ بہرحال، اگلے شخص کو معلوم ہونا چاہیے کہ قاعدہ زندہ ٹریفک روکتا ہے یا صرف نئی کنکشنز۔
ہم منصبوں کے درمیان ٹریفک کبھی ہوسٹ فائر وال کو نہیں چھوتا۔ client-to-client فعال ہو تو OpenVPN وہ پیکٹ ڈیمن کے اندر بھیجتا ہے، اس لیے FORWARD یا INPUT انہیں نہیں دیکھتے۔ واحد حل client-to-client بند کرنا یا یہ ماننا ہے کہ ہم منصب ایک دوسرے تک پہنچ سکتے ہیں؛ iptables قاعدہ وہ ٹریفک نہیں دیکھے گا۔
IPv6، فرم ویئر اور ری بوٹ کے بعد برقراری
IPv4 قاعدہ IPv6 کے بارے میں کچھ نہیں کہتا۔ اگر ٹنل اور LAN دونوں خاندان اٹھاتے ہیں تو مساوی قاعدہ ip6tables میں یا اس nftables قواعد کے مجموعے میں ہونا چاہیے جو اس ہوسٹ پر پالیسی رکھتا ہے۔ راؤٹر فرم ویئر اکثر netfilter کو اپنی تجرید کے پیچھے چھپاتا ہے، اس لیے فورم سے نقل شدہ نحو اور جدول کے نام لاگو نہ ہوں۔
OpenWrt پر دستاویزی راستہ فائر وال کنفیگریشن اندراج ہے، ہاتھ سے لکھی iptables لائن نہیں، اور ہاتھ سے لکھی لائن فائر وال دوبارہ لوڈ ہونے پر غائب ہو سکتی ہے۔ دیگر تقسیمیں قواعد netfilter-persistent، بوٹ یونٹ یا فروش کے ذخیرے کے ذریعے بحال کرتی ہیں، اور یہ طریقے آپس میں بدلے نہیں جا سکتے۔ جو آپ نے چنا اسے ری بوٹ سے ثابت کریں، کیونکہ دوبارہ لوڈ ہونا دوسرا راستہ سیکھتا ہے۔
راستے کے مطابق جانچیں، پھر صاف طریقے سے واپس کریں
ہر راستہ الگ جانچیں، کیونکہ ایک کامیاب جانچ باقیوں کو چھپا دیتی ہے۔ بلاک شدہ کلائنٹ کو ٹنل کے ذریعے انٹرنیٹ تک پہنچنا چاہیے مگر LAN ہوسٹ پر ناکام ہونا چاہیے، دوسرے کلائنٹ کو اسی ہوسٹ تک پہنچنا چاہیے، اور گیٹ وے پتہ اور ہم منصب راستہ ہر ایک کو اپنا مشاہدہ درکار ہے۔ نتائج قاعدے کے پاس لکھیں تاکہ اگلی تبدیلی کی بنیاد ہو۔ نیچے دیا جدول وہ مجموعہ ہے جو ٹکٹ میں رکھنے کے قابل ہے۔
| راستہ | قاعدے کے ساتھ متوقع | جب ناکام ہو |
|---|---|---|
| بلاک شدہ کلائنٹ LAN ہوسٹ کی طرف | کوئی جواب نہیں | قاعدہ اجازت کے نیچے ہے، یا ماخذ میل نہیں کھاتا |
| بلاک شدہ کلائنٹ انٹرنیٹ کی طرف | tun0 کے ذریعے کام کرتا ہے | قاعدہ بہت وسیع ہے، منزل کی مطابقت کے بغیر |
| دوسرا کلائنٹ اسی LAN ہوسٹ کی طرف | کام کرتا ہے | قاعدے نے مطلوبہ ہوسٹ سے زیادہ میل کیا |
| بلاک شدہ کلائنٹ گیٹ وے کے LAN پتے کی طرف | صرف ملتے ہوئے INPUT قاعدے کے ساتھ بلاک | INPUT قاعدہ غائب ہے |
| بلاک شدہ کلائنٹ ہم منصب کے ٹنل پتے کی طرف | پھر بھی کام کرتا ہے | client-to-client فعال ہے اور فائر وال کے دائرے سے باہر |
واپس کرنا خصوصیت کے مطابق حذف کرنا ہے، فلش نہیں: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP بالکل وہی اندراج ہٹاتا ہے اور زنجیر کا باقی حصہ برقرار رکھتا ہے۔ وہی لائن اس فائل سے بھی ہٹائیں جو بوٹ پر قواعد بحال کرتی ہے، اسے دوبارہ لوڈ کریں، اور تصدیق کریں کہ کلائنٹ پھر LAN ہوسٹ تک پہنچتا ہے۔ FORWARD فلش کرنا آپ کے نہ لکھے قواعد بھی منسوخ کر دے گا، جو واپسی کو دوسرا واقعہ بنا دیتا ہے۔
ٹکٹ بند کرنے سے پہلے تین چیزیں تصدیق کریں: پن شدہ پتہ سرٹیفکیٹ سے میل کھاتا ہے، قاعدہ اجازتوں کے اوپر ہے اور کاؤنٹر صفر نہیں، اور استحکام فائل میں وہی قاعدہ ہے جو آپ نے جانچا۔ ان میں سے کوئی نہ ہو تو بلاک شیل سیشن کا ایک سراب ہے۔