هغه سکریپټ چې OpenVPN پیلوي او هیڅکله نه نښلوي، معمولاً د شبکې ستونزه نه ده: کلاینټ د یوې غوښتنې مخې ته ناست دی پرته له ټرمینل چې هغه پرې رسم کړي۔ OpenVPN په دقیق ډول دوه ملاتړ شوي لارې لري چې پرته له انسان دې غوښتنې ته ځواب ووایي، د auth-user-pass شاته د اعتبارنامې فایل او د مدیریت ساکټ، او دواړه د یو بل ځای نه شي نیولای۔ فایل یو لارښود لګښت کوي او یوې غوښتنې ته ځواب وایي؛ ساکټ هرې غوښتنې ته ځواب وایي او هر هغه څه ته چې loopback پورټ پرانیستلای شي یو نه تصدیق شوی کنټرول چینل ورکوي۔ کوم یو ستاسو د ځای پرځای کولو سره ځي، په دې پورې اړه لري چې په رښتیا کومه غوښتنه بنده شوې ده او کوم راز ته اجازه لرئ چې آرام پاتې شي۔

له میکانيزم غوره کولو دمخه غوښتنې ته نوم ورکړئ

څلور غوښتنې په ټرمینل کې یو ډول ښکاري۔ د حساب جوړه د سرور د PAM یا auth-user-pass-verify ترتیب څخه راځي او auth-user-pass ورته ځواب وایي۔ د خصوصي کیلي پاسفریز د کیلي فایل دی او د --askpass له لارې لوستل کیږي یا په لاس ټایپ کیږي۔ PKCS#12 بنډل خپل پاسورډ غواړي۔ د پروکسي تصدیق حسابي اعتبارنامې نه، بلکې هغه auth فایل کاروي چې --http-proxy اخلي۔

کله چې OpenVPN د systemd، PHP یا Node د ماشوم په توګه ځي، ټرمینل نشته، نو له دې څخه هر یو په خاموشۍ بندېږي۔ پروسه هلته ناسته وي، لاګ د کوډ کرښې وروسته ودريږي او واحد په پای کې وخت تیروي؛ هغه خاموشي هغه لامل دی چې خلک د دې لیدو پرځای چې کومه غوښتنه په تمه ده، بیا هڅې لوپ یا sleep ورزیاتوي۔ یوازې د مدیریت ساکټ څلورو ته ځواب ویلای شي۔ د اعتبارنامې فایل لومړي ته ځواب وایي او بل هیچا ته نه۔

auth-user-pass: یو فایل، یوه غوښتنه

فایل د کارن نوم په لومړي کرښه او پاسورډ په دوهمه کرښه کې ساتي، او بل هیڅ نه: نه اقتباسونه، نه د کیلي نومونه، نه تبصره۔ حالت 600 وټاکئ او مالک یې هغه حساب کړئ چې openvpn ځېلوي، کوم چې د خدمت لپاره ډیری وخت ستاسو د ننوتلو پرځای ځانګړی کارن وي۔ د /root لاندې د root ملکیت فایل د هغه امر ترمنځ توپیر دی چې ستاسو په شیل کې کار کوي او هغه واحد چې په بوټ کې ناکام شي۔

دوه جزئیات سم فایل په غوښتنه بدلوي۔ هغه ایډیټر چې CRLF خوندي کوي د پاسورډ سره نښتی د کارټ بیرته راګرځول پریږدي، نو سرور هغه پاسورډ ردوي چې په فایل کې سم ښکاري؛ په سترګو نه، بلکې د cat -A یا od -c سره وګورئ۔ او په پروفایل کې دننه بې استدلاله auth-user-pass د ډیزاین له مخې «له کارن وپوښته» معنی لري، کوم چې د کمانډ کرښې دوهم لارښود ممکن نشي ترې تیریدلای، ځکه چې پروفایل هماغلته تحلیل کیږي چې وي۔

د انتخابونو ترتیب دریمه تله ده، او د نسخې پورې اړه لري۔ ځینې OpenVPN 2.4 جوړښتونه --auth-user-pass له پامه غورځوي کله چې له --config دمخه راشي، نو هغه دوه انتخابونه په بل ترتیب سره نښلي۔ لارښود په پروفایل کې یا په کمانډ کرښه کې د --config وروسته کیږدئ، او له بل هر څه بدلولو دمخه په پروفایل کې هره پیښه grep کړئ۔

auth-nocache دې میکانيزم پورې اړه لري خو هیڅ نه برابروي۔ دا محدودوي چې کلاینټ څومره وخت اعتبارنامه په حافظه کې ساتي، کوم چې د خرابیدو وروسته مرسته کوي او کله چې فایل نه وي هیڅ مرسته نه کوي۔ د سرور اړخ کې د سیشن وخت تیریدو وروسته بیا نښلول فایل بیا لولي، نو هغه اعتبارنامه چې په بوټ کې کار کوله ممکن د ورځې په مینځ کې هم پای ته ورسیږي۔

د مدیریت ساکټ: هره غوښتنه، ډیر سطح

کلاینټ د یو اوریدونکي سره پیل کړئ او په روښانه ډول اعلان کړئ چې غوښتنې به پرې راپور شي، هغه لارښودونه کاروئ چې په OpenVPN 2.6 لارښود کې مستند شوي:

management 127.0.0.1 3030
management-query-passwords

له bash څخه اړیکه په یو زائد فایل ډیسکریپټر کې وساتئ او د موقعیت پرځای د غوښتنې نوم له مخې ځواب ورکړئ، ځکه چې بیا نښلول ممکن په بل ترتیب پوښتنه وکړي:

exec 3<>/dev/tcp/127.0.0.1/3030
while read -r -u 3 line; do
  case "$line" in
    *"Need 'Auth' username/password"*)
      echo 'username "Auth" alice' >&3
      echo 'password "Auth" secret' >&3 ;;
    *"Need 'Private Key' password"*)
      echo 'password "Private Key" secret' >&3 ;;
  esac
done

حد ټرانسپورټ دی۔ د مدیریت پروتوکول په loopback کې د TCP پر سر ساده متن دی، نو اوریدونکی باید په LAN یا تونل پته کې خپور نشي ترڅو لرې کنټرولر ورته ورسیږي؛ لرې کنټرولر د SSH لېږد مانا لري، نه پراخه تړل۔ د ټولنې ډیمون هم په یو وخت کې یوازې یو مدیریت کلاینټ مني، نو GUI یا مانیټر نشي کولای ساکټ ستاسو سکریپټ سره شریک کړي۔ دوهمه اړیکه رد کیږي، په قطار کې نه کیښودل کیږي، او ناکامي د کاڼه شوي سکریپټ په څېر ښکاري۔

هغه ساکټ د کنټرول چینل هم دی۔ پرته له مدیریت پاسورډ، هر هغه څه چې 127.0.0.1:3030 سره نښلولای شي کولای شي حالت ولولي، تونل ووژني یا پخپله یوې غوښتنې ته ځواب ووایي۔ د مدیریت پاسورډ او د اعتبارنامې فایل د یوې طبقې رازونه دي، او دواړه ورته پاملرنې وړ دي۔

کوم یو د ځای پرځای کولو سره ځي

د اعتبارنامې فایل غوره کړئ کله چې یوازینې غوښتنه د حساب جوړه وي، کلاینټ د باثباته مالک سره د خدمت په توګه ځي، او تاسو کولای شئ 600 فایل له هغو بیک اپونو بهر وساتئ چې تاسو یې نه کنټرولوئ۔ د مدیریت ساکټ غوره کړئ کله چې د کیلي پاسفریز یا PKCS#12 پاسورډ په لوبه کې وي، کله چې رپپر دمخه پروسې ته څارنه کوي، یا کله چې د بیا نښلولو د سمولو پر مهال حالت او غوښتنې وګورئ۔

دوه شرایط پریکړه خوځوي۔ که رپپر /bin/sh وي، د systemd واحد چې باینري مستقیم بولي، یا لږترلږه کنټینر وي، یوازې-bash د ساکټ ګوندې نشته او فایل ارزانه ځواب دی۔ که راز ډیریږي بدلیږي، هیڅ فایل ورته ښه کور نه دی: له یو کوچني رپپر څخه کیلي حلقه وپوښتئ او واحد ته اجازه ورکړئ چې رپپر وبولي، کوم چې څرخیدل په یو ځای ساتي او پاسورډ د شیل تاریخ څخه بهر۔

د پروسې بدلون د دواړو ترمنځ دی او د هیچا نه دی۔ لاندې یو کرښه کار کوي ځکه چې bash هغه له openvpn پیلیدو دمخه پراخوي، نه ځکه چې کلاینټ نحو پوهیږي:

openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")

دا د /bin/sh لاندې، په هغه واحد کې چې شیل ته څنګه پورې وهي، او په هغو عکسونو کې ماتېږي چې bash یا /dev/fd نلري۔ دا د متقابل ازموینې لپاره وساتئ، هیڅکله د هغه قرارداد په توګه نه چې خدمت پرې تکیه کوي۔

راز وساتئ، بیا له لاګ څخه تصدیق کړئ

دواړه میکانيزمونه یو راز پریږدي چې د OpenVPN پروسه یې لوستلای شي۔ پاسورډ هیڅکله په کمانډ کرښه یا په واحد فایل کې مه ږدئ، چېرې چې ps او systemctl هغه هر ځایي کارن ته ښیي؛ فایل ته لار ورکړئ، نه دننه ارزښت۔ چېرې چې سندونه کولای شي د حساب جوړه بدله کړي، هغه د غوښتنې کټګوري پټولو پرځای لرې کوي۔

سم چلول ښیي چې د غوښتنو ترتیب بشپړیږي او سیشن «Initialization Sequence Completed» ته رسیږي۔ که کلاینټ په هماغه غوښتنه ودریږي، سمون ناکام شو: هغه دقیقې کرښې چاپ کړئ چې ساکټ لیږلي، اقتباسونه او د غوښتنې نوم وګورئ، او د sleep زیاتولو پرځای بڼه سمه کړئ۔ هغه تونل چې بریا ته راپور ورکوي او هیڅ نه وړي، د مسیر یا push ستونزه ده، نه د اعتبارنامې۔

بیا یوازې لومړی پیل نه، بیا نښلول هم ازموئ۔ د سرور اړخ سیشن غورځوئ یا د هغه د وخت تیریدو ته انتظار وکړئ؛ کلاینټ بیا پوښتنه کوي، او هماغلته هغه فایل چې په بوټ کې سم ښکاریده ښیي چې ایا دا لا هم د بیا نښلونکي حساب لپاره لوستل کیدای شي۔

اړوندې مقالې