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-க்கு மட்டுமான சாக்கெட் பசை கிடைக்காது, கோப்பே மலிவான பதில். ரகசியம் அடிக்கடி சுழன்றால், எந்தக் கோப்பும் அதற்கு நல்ல வீடு அல்ல: சிறிய உறையிலிருந்து விசை வளையத்தைக் கேளுங்கள், அலகு உறையை அழைக்கட்டும், இது சுழற்சியை ஒரே இடத்தில் வைத்து கடவுச்சொல்லை ஷெல் வரலாற்றுக்கு வெளியே வைக்கிறது.

செயல்முறை மாற்றீடு இரண்டிற்கும் இடையில் உள்ளது, எதற்கும் சொந்தமில்லை. கீழேயுள்ள ஒரு வரிக் கட்டளை வேலை செய்கிறது, ஏனெனில் openvpn தொடங்கும் முன் bash அதை விரிவாக்குகிறது, வாடிக்கையாளர் தொடரியலைப் புரிந்துகொள்வதால் அல்ல:

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 பிரச்சினை, சான்றளவு பிரச்சினை அல்ல.

பின்னர் முதல் தொடக்கம் மட்டுமல்ல, மீண்டும் இணைவதையும் சோதியுங்கள். சேவையகப் பக்க அமர்வை விடுங்கள் அல்லது அதன் நேரம் முடியும் வரை காத்திருங்கள்; வாடிக்கையாளர் மீண்டும் கேட்கிறது, அங்கேயே துவக்கத்தில் சரியாகத் தோன்றிய கோப்பு மீண்டும் இணையும் கணக்கிற்கு இன்னும் படிக்கக்கூடியதா என்பதைக் காட்டுகிறது.

தொடர்புடைய கட்டுரைகள்