فایل .ovpn شما میتواند کد اجرا کند، نه فقط ترافیک را مسیریابی کند
پروفایلی که یک کمککنندهٔ up یا down را نام میبرد، کد را با امتیازهای شما اجرا میکند. مسیر، مالکیت، پاکسازی و تنظیم script-security را بررسی کنید.
بیشتر مردم فایل .ovpn را همانطور میخوانند که صفحهٔ تنظیمات یک روتر را میخوانند: نشانیها، مسیرها، فهرستی از رمزها. بخشی که کد اجرا میکند نزدیک پایین قرار دارد، در کنار دستورهایی که شبیه لولهکشی به نظر میرسند، و با هر امتیازی که کارخواه از قبل دارد اجرا میشود. این همان شکافی است که یک پروفایل بیدقت یا بدخواه از آن سوءاستفاده میکند، و همچنین همان شکافی است که یک کمککنندهٔ مفید DNS را سه هفته بعد به مشکلی برای پشتیبانی تبدیل میکند. دستور رویداد، سطح امنیت و مالکیت فایل تعیین میکنند چه میتواند رخ دهد؛ محتوای اسکریپت تعیین میکند واقعاً چه رخ میدهد. پیش از اتصال هر چهار مورد را بخوانید.
پروفایلی که یک کمککننده اجرا میکند یک برنامه است، نه فایل تنظیمات
دستورهایی مانند route و dhcp-option وضعیتی را توصیف میکنند که کارخواه باید برقرار کند، و کارخواه با آنها مانند داده رفتار میکند. اسکریپت up متفاوت است: کارخواه آن را به عنوان فرایند اجرا میکند و محیطی پر از جزئیات اتصال به آن میدهد، پس هر چه نویسندهاش نوشته باشد با حقوق حساب شما اجرا میشود. روی لپتاپی که کاربرش مدیر است، این دری است فراخ برای فایلی که به صورت پیوست یا چسباندهای از یک رشتهٔ انجمن رسیده است. تفاوت سبکی نیست، تفاوت میان پیکربندی و کد است.
افسانهای که باید کنارش گذاشت این است که پروفایل فقط میتواند ترافیک را تغییر مسیر دهد. کمککنندهای که ip route add را اجرا میکند و یکی که curl را علیه میزبان دوردست اجرا میکند همان سازوکارند، و پروفایل از بیرون یکسان به نظر میرسد. هیچ چیز در ظاهر فایل نمیگوید کدام را دارید، از این رو بازبینی باید به خود اسکریپت برسد.
چه چیزی واقعاً اجرا را تعیین میکند و خطوط فعالکننده چه شکلیاند
سه چیز یک کمککننده را کنترل میکند: دستور رویدادی که آن را نام میبرد، سطح script-security که به آن اجازه میدهد، و پیادهسازی خود بستر کارخواه. پروفایل میتواند قلابی بخواهد و با این حال هیچ اتفاقی نبیند، زیرا یک کارخواه موبایل یا نسخهٔ دسکتاپ کاستهشده ممکن است اصلاً آن رویداد را پیادهسازی نکند. به همین ترتیب، پروفایلی که مجوز بیشتری از نیاز کارکردش میخواهد چیزی دربارهٔ خاستگاه خود به شما میگوید. سطح مجوز یک توانایی است، نه یک تأیید. خطوط فعالکننده اینگونهاند، با مسیری که جای مسیر شما را میگیرد.
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.shسطح 0 برنامههای بیرونی را رد میکند و سطح 1، که پیشفرض است، فقط فایلهای اجرایی درونی کارخواه را اجازه میدهد، پس قلاب به 2 یا بالاتر نیاز دارد؛ سطح 3 عمدتاً برای گذراندن گذرواژههای قدیمی وجود دارد و بهتر است از آن پرهیز شود. پروفایلی که همراه قلاب عرضه میشود هم به دستور و هم به آن سطح نیاز دارد، از این رو یک خط نزدیک پایین فایل همان دقتی را میطلبد که بلوک گواهی. و راهنمای OpenVPN سطوح مجوز را فهرست میکند، و جملهبندی آن ارزش خواندن در کنار آنچه پروفایل واقعاً میخواهد را دارد.
مالکیت، مسیر و آنچه به کمککننده داده میشود
پروفایلی که به آن اعتماد دارید اما به اسکریپتی اشاره میکند که حساب دیگری میتواند بازنویسیاش کند، ترتیبی قابل اعتماد نیست، زیرا بازبینی دیروز دیگر توصیف نمیکند امروز چه اجرا میشود. مالک و حالت کمککننده را بررسی کنید و مطمئن شوید مسیر پیکربندیشده به همان فایلی میرسد که بررسی کردهاید، نه به نامی که چیز دیگری میتواند تحتالشعاع قرار دهد. آرگومانها و محیط هم همان نگاه را میطلبند: کارخواه جزئیات اتصال را به قلاب میدهد، و کمککنندهای که تمام محیطش را ثبت میکند ممکن است اعتبارنامهها را در یک تیکت پشتیبانی بنویسد. ادغام مستندشده از سوی اپراتور یا بستر را به اسکریپت DNS کپیشده از نوشتهای نامرتبط ترجیح دهید، زیرا دو مدیر مفسر که بر سر یک فایل میجنگند خرابیای میسازند که شبیه VPN خراب به نظر میرسد.
وقتی قلاب ناموفقی را گزارش میدهید، پیش از چسباندن آن در هر جا محیط را پاکسازی کنید. ریزشی که به اشکالزدایی کمک میکند میتواند توکنی را هم حمل کند که شما را احراز هویت میکند.
خرابیهای پاکسازی پس از رفتن تونل ظاهر میشوند
کمککنندهٔ up مسیرها و تنظیمات مفسر را اضافه میکند، و کمککنندهٔ down باید دوباره آنها را بردارد. وقتی قلاب down نیست، بیصدا شکست میخورد، یا هرگز اجرا نمیشود چون کارخواه کشته شده، باقیماندهها از نشست بیشتر عمر میکنند. آنگاه ترافیک مسیری را میرود که کسی برنامهریزی نکرده و نامها از مفسری حل میشوند که باید حذف میشد، در حالی که خود تونل سالم به نظر میرسد. این نشانهها پس از قطع اتصال میآیند، از این رو شبکه سرزنش میشود نه پروفایل.
برچیدن را به عنوان گامی مستقل بیازمایید: تونل را بالا بیاورید، مسیرها و مفسر را یادداشت کنید، پایین بیاورید، سپس تأیید کنید هر دو رفتهاند. پروفایلی که پاک وصل میشود باز هم میتواند حالتی بر جا بگذارد، و کد خروج صفر کمککننده اثبات نمیکند که مفسر همانجا تمام شده که فکر میکنید.
بازبینی کمککننده و نگه داشتن یک راه خروج
اسکریپت را از ابتدا تا انتها بخوانید و سه چیز را بجویید: فرمانهایی که امتیاز لازم دارند، مسیرهای سختکدشدهای که ممکن است در سامانهٔ شما نباشند، و هر فراخوانی شبکهای که انجام میدهد. سپس ببینید چگونه شکست میخورد، زیرا کمککنندهای که خطاها را میبلعد اشتباه پیکربندی را به معما تبدیل میکند. اگر نمیتوانید در یک جمله بگویید اسکریپت چه میکند و چه کسی میتواند تغییرش دهد، آمادهٔ فعال کردنش نیستید. پروفایلی که امتیاز بیشتری از آنچه آن جمله میطلبد میخواهد نشانهٔ توقف است.
آخرین پروفایل کارکننده و کمککنندهای را که به آن اشاره میکرد در انبار محافظتشده نگه دارید، با هر دو نسخه یادداشتشده، تا بازگشت یک رونوشت باشد نه بازسازی در بدترین لحظهٔ ممکن. اگر کمککننده فقط برای توزیع یا نسخهٔ کارخواهی وجود دارد که دیگر به آن نیاز ندارد، آن را در پیکربندیای که تنظیم را در اختیار دارد بازنشسته کنید، نه اینکه امتیازها را بالا ببرید تا خطاها متوقف شوند. این همان راه خروج است: اجزای متحرک کمتر، نه مجوز بیشتر.