OpenVPN ہک واقعات: نام اور وقت کی مہر کیوں کلید نہیں
ڈس کنیکٹ ہک رابطے کا وقت بتاتا ہے، ڈس کنیکٹ کا وقت نہیں۔ صارف نام کے ساتھ جوڑنے پر یہ غلط سیشن بند کر سکتا ہے؛ اس کے بجائے شناخت رکھیں۔
ایک ہی نام کے تحت دوسرا رابطہ شروع ہو چکنے کے بعد ڈس کنیکٹ ریکارڈ آتا ہے، اور اس صارف کی تازہ ترین سطر اپ ڈیٹ کرنے والا ہینڈلر غلط سیشن بند کرتا ہے۔ غلطی وقت کی مہروں کے موازنے میں نہیں۔ غلطی اس مفروضے میں ہے کہ نام اور ایک پوری سیکنڈ مل کر ایک سیشن کی شناخت کرتے ہیں۔ ہک واقعات رابطوں کی وضاحت کرتے ہیں، اور رابطے کو ایسی کلید چاہیے جو صرف اسی کی ہو۔
ڈس کنیکٹ متغیرات کا اصل مطلب کیا ہے، اس سے شروع کریں۔ تبھی شناخت کنندہ کا انتخاب معنی رکھتا ہے۔
ڈس کنیکٹ ہک دراصل کیا اٹھاتا ہے
Community OpenVPN 2.6 میں، ہک حوالہ time_unix کو اس لمحے کے طور پر بیان کرتا ہے جب کلائنٹ جڑا؛ یہ کنیکٹ ہک چلنے سے پہلے مقرر ہوتا ہے اور بعد میں ڈس کنیکٹ ہک فعال ہونے پر دوبارہ بیان نہیں ہوتا۔ time_duration اس سیشن کی لمبائی سیکنڈوں میں دیتا ہے، اس لیے اختتام تقریباً رابطے کا وقت اور دورانیہ کا مجموعہ ہے۔ دونوں پوری سیکنڈ ہیں، اور کوئی بھی وہ لمحہ نہیں جب آپ کے ڈیٹا بیس نے واقعہ پر کارروائی کی۔ ان تین اوقات کو الگ رکھنا ہی تعلق کو صرف جانچ کے دوران درست دکھنے کے بجائے واقعی قائم رکھتا ہے۔
یہ حساب لکھنے کے قابل ہے، کیونکہ یہی وہ واحد اختتامی وقت ہے جو ہک خود پیش کرتا ہے۔ کارروائی میں تاخیر اور میزبانوں کے درمیان گھڑی کے فرق اب بھی اس سے باہر ہیں۔
واضح جوڑی منفرد کیوں نہیں
نام کو رابطے کے وقت کے ساتھ جوڑنا تلاش کو محدود کرتا ہے اور پھر بھی سیشن کی شناخت نہیں کرتا۔ کلائنٹ اسی سیکنڈ میں دوبارہ جڑ سکتا ہے، اس لیے دو سیشن دونوں قدریں بانٹ سکتے ہیں۔ دو ڈیمن مثالیں، یا وہی ترتیب برقرار رکھنے والا سرور تبدل، وہ جوڑی مختلف عملوں سے بنا سکتے ہیں۔ سرنگ کے پتے بھی اسی وجہ سے دوبارہ استعمال ہوتے ہیں، جو انہیں سیشن کی خصوصیات بناتا ہے، سیشن کے شناخت کنندہ نہیں۔
ناکامی کا انداز خاموش ہے۔ پہلے سیشن کے لیے دیر سے آیا ڈس کنیکٹ تازہ ترین سطر سے ملتا ہے اور دوسرے سیشن کا اب بھی استعمال ہونے والا مختص ختم کر دیتا ہے، اس لیے صارف کو اپنی کیے بغیر بے ترتیب رسائی کا نقصان ہوتا ہے۔ بعد میں درست دکھنے والی سطروں کی گنتی مسئلہ پکڑنا مزید مشکل بنا دیتی ہے۔
مستحکم شناخت کہاں سے آتی ہے
انتظامی انٹرفیس ہر کلائنٹ کو کلائنٹ مثال کا شناخت کنندہ دیتا ہے، اور وہ شناخت کنندہ اسی ڈیمن مثال تک محدود ہے جس نے اسے جاری کیا۔ قابلِ عمل بیرونی کلید ایک مستحکم سرور شناخت کنندہ، ڈیمن کے آغاز پر بدلنے والا دور، اور وہ کلائنٹ ID یکجا کرتی ہے۔ دور اہم ہے کیونکہ شناخت کنندہ عمل کے ساتھ دوبارہ شروع ہوتے ہیں، اور ننگا عمل ID بعد میں کسی غیر متعلق چیز کے ذریعے دوبارہ استعمال ہو سکتا ہے۔
چائلڈ کنیکٹ اسکرپٹ کے اندر مقرر کردہ ماحول متغیرات پیرنٹ ڈیمن کی بعد کی ڈس کنیکٹ اسکرپٹ تک نہیں جاتے، کیونکہ وہ اسکرپٹس اپنے ماحول کے ساتھ الگ عملوں کے طور پر چلتی ہیں۔ اس لیے رابطے کے وقت UUID بنانا آدھا حل ہے۔ ڈس کنیکٹ فریق کو وہی UUID نام دینا آنا چاہیے، یعنی شناخت کو ایسی جگہ رہنا چاہیے جہاں دونوں واقعات پہنچ سکیں۔
ریٹائرمنٹ کو مشروط اور ایڈمپوٹنٹ بنائیں
سیشن کے مالک کے مطابق ریٹائر کریں، صارف کے مطابق نہیں۔ جو ہینڈلر کسی نام سے ابھی منسلک کوئی بھی مختص حذف کرتا ہے وہ آخرکار غلط ہی حذف کرے گا، اور واحد دفاع یہ جانچنا ہے کہ ہٹایا جانے والا ریکارڈ وہی ریکارڈ ہے جسے یہ واقعہ بیان کرتا ہے۔
انتظامی انٹرفیس ایک وقت میں صرف ایک جڑا ہوا انتظامی کلائنٹ قبول کرتا ہے، اس لیے اسی ساکٹ کے لیے مقابلہ کرنے والا دوسرا ناظر جوڑنے کے بجائے اس کے ساتھ ضم ہوں جو پہلے سے اس کا مالک ہے۔
بار بار آنے والے واقعات کو نتیجہ دو بار بدلے بغیر سنبھالیں، اور جوڑے نہ بننے والے واقعات کو پھینکنے کے بجائے مصالحت کے لیے رکھیں۔ ڈس کنیکٹ کال بیک میں دستاویزی زندگی کے چکر کی شرائط ہیں اور کریش یا سخت رکاوٹ کے بعد وہ کبھی نہ بھی آ سکتا ہے، اس لیے ڈیزائن کو ایسا سیشن دکھانے کا طریقہ چاہیے جس کا اختتامی واقعہ غائب ہو۔
مشکل کیسز کو جان بوجھ کر جانچیں: ایک سیکنڈ میں دو دوبارہ رابطے، دو ڈیمن مثالیں، وہ رابطہ جس کی کارروائی ناکام ہوئی، اور سیشن کے بیچ ڈیمن کا دوبارہ آغاز۔ چاروں کو برداشت کرنے والی کلید ہی قابلِ اعتماد کلید ہے۔