OpenVPN අක්තපත්ර ගොනුව හෝ කළමනාකරණ සොකට්: කුමක් ස්ක්රිප්ට් කරමුද
auth-user-pass ගිණුමේ විධානය ආවරණය කරයි; කළමනාකරණ සොකට් හතරම ආවරණය කරයි. නිරාවරණය, ස්ක්රිප්ට් වියදම සහ සේවාවක එක් එක් අසාර්ථක වන ආකාරය සසඳන්න.
OpenVPN ආරම්භ කර කිසිදා සම්බන්ධ නොවන ස්ක්රිප්ට් එකක් සාමාන්යයෙන් ජාල ගැටලුවක් නොවේ: සේවාලාභියා ටර්මිනලයක් නොමැති විධානයක් ඉදිරියේ වාඩි වී සිටී. OpenVPN සතුව මිනිසෙකු නොමැතිව එම විධානයට පිළිතුරු දීමට අනුග්රහය ලද ක්රම දෙකක් ඇත, auth-user-pass පිටුපස ඇති අක්තපත්ර ගොනුව සහ කළමනාකරණ සොකට්, සහ ඒවා එකිනෙකට හුවමාරු කළ නොහැක. ගොනුව එක් උපදෙසක් වැය කර එක් විධානයකට පිළිතුරු දෙයි; සොකට් සෑම විධානයකටම පිළිතුරු දෙන අතර loopback තොටුපොළක් විවෘත කළ හැකි ඕනෑම දෙයකට සත්යාපනය නොකළ පාලන නාලිකාවක් ලබා දෙයි. ඔබේ නියෝගයට ගැළපෙන්නේ කුමක්ද යන්න රැඳී ඇත්තේ සැබවින්ම අවහිර කරන විධානය කුමක්ද සහ ඔබට නිහඬව තැබීමට හැකි රහස කුමක්ද යන්න මතය.
යාන්ත්රණයක් තෝරා ගැනීමට පෙර විධානයට නමක් දෙන්න
විධාන හතරක් ටර්මිනලයේ එකම ආකාරයෙන් පෙනේ. ගිණුම් යුගලය සේවාදායකයේ PAM හෝ auth-user-pass-verify සැකසුමෙන් එන අතර ඊට auth-user-pass පිළිතුරු දෙයි. පුද්ගලික යතුරේ මුරපදය යතුරු ගොනුවට අයත් වන අතර --askpass හරහා කියවයි හෝ අතින් ටයිප් කරයි. PKCS#12 කලාපයක් තමන්ගේම මුරපදයක් ඉල්ලයි. ප්රොක්සි සත්යාපනය ගිණුම් අක්තපත්ර නොව, --http-proxy ලබා ගන්නා auth ගොනුව භාවිතා කරයි.
OpenVPN systemd, PHP හෝ Node හි දරුවා ලෙස ක්රියා කරන විට ටර්මිනලයක් නොමැත, එබැවින් මේවායින් ඕනෑම එකක් නිහඬව අවහිර කරයි. ක්රියාවලිය එහි වාඩි වී සිටී, සයිෆර් පේළියෙන් පසු ලොගය නතර වේ, සහ ඒකකය අවසානයේ කාලය ඉක්මවයි; එම නිහඬතාවය තමයි මිනිසුන් කුමන විධානය රැඳී ඇත්දැයි බැලීම වෙනුවට නැවත උත්සාහ ලූපයක් හෝ sleep එකක් එකතු කරන්නේ. හතරටම පිළිතුරු දිය හැක්කේ කළමනාකරණ සොකට් එකට පමණි. අක්තපත්ර ගොනුව පළමු එකට පිළිතුරු දෙන අතර වෙන කිසිවකට නොදේ.
auth-user-pass: එක් ගොනුවක්, එක් විධානයක්
ගොනුව පළමු පේළියේ පරිශීලක නාමය සහ දෙවන පේළියේ මුරපදය තබා ගනී, වෙන කිසිවක් නැත: උද්ධෘත නොමැත, යතුරු නාම නොමැත, අදහස් නොමැත. මාදිලිය 600 ලෙස සකසා openvpn ධාවනය කරන ගිණුම හිමිකරු කරන්න, එය සේවාවකට බොහෝ විට ඔබේ පිවිසුම නොව වෙන් වූ පරිශීලකයෙකි. /root යටතේ root සතු ගොනුවක් ඔබේ ෂෙලයේ ක්රියා කරන විධානයක් සහ ආරම්භයේදී අසාර්ථක වන ඒකකයක් අතර වෙනසයි.
විස්තර දෙකක් නිවැරදි ගොනුවක් විධානයක් බවට පත් කරයි. CRLF සුරකින සංස්කාරකය මුරපදයට ඇලී ඇති රථ ආපසු යාමක් ඉතිරි කරයි, එබැවින් සේවාදායකය ගොනුවේ නිවැරදි ලෙස පෙනෙන මුරපදයක් ප්රතික්ෂේප කරයි; ඇසින් නොව cat -A හෝ od -c සමඟ පරීක්ෂා කරන්න. සහ පැතිකඩ තුළ තර්කයක් නොමැති auth-user-pass යන්න සැලසුම අනුව «පරිශීලකයාගෙන් අසන්න» යන අර්ථය දෙයි, එය විධාන පේළියේ දෙවන උපදෙසකින් අභිබවා යා නොහැකි විය හැක, මන්ද පැතිකඩ එය ඇති තැනම විග්රහ කරන බැවිනි.
විකල්ප අනුපිළිවෙල තුන්වන උගුලයි, එය අනුවාදය මත රඳා පවතී. සමහර OpenVPN 2.4 ගොඩනැගීම් --config ට පෙර පැමිණෙන විට --auth-user-pass නොසලකා හරියි, එබැවින් එම විකල්ප දෙකම අනෙක් අනුපිළිවෙලෙන් සම්බන්ධ වේ. උපදෙස පැතිකඩ තුළ හෝ විධාන පේළියේ --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 ගැටලුවකි, අක්තපත්ර ගැටලුවක් නොවේ.
පසුව පළමු ආරම්භය පමණක් නොව නැවත සම්බන්ධ වීමද පරීක්ෂා කරන්න. සේවාදායක පැත්තේ සැසිය ඉවත් කරන්න හෝ එහි කාල සීමාව අවසන් වන තෙක් රැඳී සිටින්න; සේවාලාභියා නැවත අසයි, සහ එහිදී ආරම්භයේදී නිවැරදි ලෙස පෙනුණු ගොනුවක් නැවත සම්බන්ධ වන ගිණුමට තවමත් කියවිය හැකිදැයි පෙන්වයි.