இரண்டு A பதிவுகள், ஒரு முகவரி, ஒரு டீமன்: பயனர் எந்தப் பெயரைத் தட்டச்சு செய்தாலும் வரும் பாக்கெட் ஒரே மாதிரியானது, மேலும் 1194 போர்ட்டில் பிணைக்கப்பட்ட செயல்முறைக்கு இரண்டையும் வேறுபடுத்த எதுவும் இல்லை. இது சரிசெய்யக் காத்திருக்கும் தவறான கட்டமைப்பு அல்ல; பெயர் தேடல் வெளிப்படுத்தக்கூடிய வரம்பு இது. இரண்டு OpenVPN நிகழ்வுகளுக்கிடையே தேர்ந்தெடுக்கும் எதுவும், கிளையண்ட் இணைப்பில் வைக்கும், முன்பகுதி மீண்டும் படிக்கக்கூடிய மதிப்பாக இருக்க வேண்டும், சாதாரண OpenVPN கிளையண்ட் அத்தகைய மதிப்பை வெளிப்படையாக வைப்பதில்லை. அடுத்து வருவது இது உங்களை எங்கு விடுகிறது, எந்த ஏற்பாடுகள் போக்குவரத்தை உண்மையில் பிரிக்கின்றன என்பதாகும்.

தீர்ப்பான் திருப்பித் தருவதில் தொடங்குங்கள்

கிளையண்ட் vpn-a.example கேட்டு ஒரு முகவரியைப் பெறுகிறது; அந்த முகவரியும் ஒரு போர்ட்டும் தான் அது அழைக்கும் அனைத்தும். பெயர் தேடலின் போது உள்ளூரில் செலவாகி, ஒருபோதும் கம்பியில் புலமாக மாறாது, எனவே மறுமுனையின் கேட்பவர் எந்த லேபிள் பயன்படுத்தப்பட்டது என்பதைப் பார்க்க முடியாது. vpn-a.example மற்றும் vpn-b.example ஐ ஒரே ஹோஸ்ட்டை நோக்கிக் காட்டுங்கள், இரண்டு தேடல்களும் ஒரே இலக்கைத் தரும், அதனால்தான் டீமன் எந்த வேறுபாட்டையும் பதிவு செய்யாமல் இரண்டு இணைப்புகளையும் ஒரே நிகழ்வில் உள்வாங்குகிறது. முகவரி அடிப்படையிலான விவரக்குறிப்புகளும் அதே காரணத்தால் பெயர் அடிப்படையிலானவற்றைப் போலவே செயல்படுகின்றன.

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

எண்ணிக்கையில் வரும் ஒரே தேர்ந்தெடுப்பான் பாக்கெட்டின் உள்ளே செல்கிறது

HTTP இதை Host தலைப்பு மூலம் கையாள்கிறது, TLS ClientHello இல் உள்ள சேவையகப் பெயர் நீட்டிப்பு மூலம், இப்படி ஒரு முகவரி ஒரு கேட்பவருக்குப் பின்னால் பல தளங்களுக்குச் சேவை செய்கிறது. இரண்டும் செயல்படுகின்றன, ஏனெனில் கம்பியின் நெறிமுறை ஒரு குறிப்பிட்ட சேவைக்கான கோரிக்கையைச் சுமக்கிறது. OpenVPN பற்றிய முக்கிய உண்மை என்னவென்றால், இடைநிலைப் பெட்டி பரிசோதிக்கும் அடுக்கில் இந்த இரண்டு புலங்களில் எதுவும் இல்லை.

சாதாரண ஏற்பாட்டில் கட்டுப்பாட்டு சேனலைப் பாதுகாக்கும் TLS கைக்குலுக்கல் வெளிப்புற அமர்வு நிறுவப்பட்ட பிறகு நடக்கிறது, அதற்குள்ளேயே எடுத்துச் செல்லப்படுகிறது, எனவே அந்த அமர்வை முடிக்காத கேட்பவர் ஒரு ஒளிபுகாத ஓட்டத்தைப் பார்க்கிறார். இது இன்னும் OpenVPN தான் என்று சொல்ல முடியும், ஏனெனில் தொடக்க பைட்டுகளில் உள்ள ஆப்கோடும் சட்டகமும் அடையாளம் காணக்கூடியவை, ஆனால் சேவையகப் பெயர் இருந்தால் அது மறையாக்கப்பட்ட பகுதியில் அமர்ந்துள்ளது. வெளிப்புறப் பாக்கெட்டிலிருந்து மெய்நிகர் ஹோஸ்ட்டைப் படிக்க எதிர்பார்க்கும் வடிவமைப்பு, நெறிமுறை ஒருபோதும் அங்கே எழுதாத புலத்தைப் படிக்கிறது. இது சுரங்கப்பாதை எவ்வாறு கட்டப்பட்டது என்பதிலிருந்து வருகிறது, இன்னும் புத்திசாலித்தனமான வடிவப் பொருத்தம் மூடக்கூடிய இடைவெளியிலிருந்து அல்ல.

நெறிமுறைப் பிரிப்பான் எங்கு நிற்கிறது

sslh திட்டம் ஆவணப்படுத்தும் வகையிலான மல்டிபிளெக்சர் ஒரு போர்ட்டில் கேட்கிறது, தொடக்க பைட்டுகளைப் பரிசோதிக்கிறது, அடையாளம் காணப்பட்ட நெறிமுறையைப் பேசும் எந்தப் பின்தளத்திற்கும் இணைப்பை ஒப்படைக்கிறது. ஒரு போர்ட் SSH, HTTPS மற்றும் OpenVPN ஆகியவற்றுக்கு ஒன்றாகச் சேவை செய்ய வேண்டியிருக்கும்போது இது உண்மையான மதிப்பு.

sslh ஒவ்வொரு நெறிமுறைக்கும் தனி ஆய்வை வைத்திருக்கிறது, அதன் TLS ஆய்வு உண்மையான ClientHello இலிருந்து சேவையகப் பெயரையோ ALPN மதிப்பையோ பிரித்தெடுக்க முடியும். மூல OpenVPN ஐ அடையாளம் காண்பது TLS நீட்டிப்பைப் படிப்பதிலிருந்து வேறுபட்ட வகைப்பாடு, இரண்டும் ஒன்றுசேராது, ஏனெனில் கேட்கும் சாக்கெட்டுக்கு ஒருபோதும் ClientHello அனுப்பாத கிளையண்ட் ஆய்வைப் படிக்க எதுவும் இல்லாமல் விட்டுவிடுகிறது. எனவே OpenVPN உடன் பொருந்தும் விதி “இது OpenVPN கிளையண்ட்” என்று பதிலளித்து மேலே செல்லாது. அந்த விதிக்குப் பின்னால் உள்ள இரண்டு OpenVPN பின்தளங்களை வேறுபடுத்த முடியாது, முன்பகுதிக்குத் தேர்வுக்கு அடிப்படை இல்லை, ஒவ்வொரு அமர்வும் ஒரே இடத்தில் இறங்குகிறது. மல்டிபிளெக்சிங் ஒரு போர்ட்டை வெவ்வேறு சேவைகளுக்கிடையே பகிர்கிறது; ஒரு சேவைக்குள் மெய்நிகர் புரவலம் செய்யாது.

இரண்டு சேவையகங்களை உண்மையில் பிரிக்கும் ஏற்பாடுகள்

மிக மலிவான நேர்மையான பிரிவு இரண்டாவது பொது முகவரி, ஒவ்வொரு நிகழ்வுக்கும் ஒன்று, ஏற்கனவே உள்ள விவரக்குறிப்புகள் வேண்டியதை ஏற்கனவே சுமக்கின்றன, ஏனெனில் அவை வெவ்வேறு முகவரிகளை நோக்கிச் செல்கின்றன. அடுத்தது அதே முகவரியில் வேறு போர்ட், அது ஒவ்வொரு விவரக்குறிப்பிலும் ஒரு எண்ணைத் தவிர எதையும் செலவழிக்காது. TCP மற்றும் UDP தனித்தனி போர்ட் அட்டவணைகளை வைத்திருக்கின்றன, எனவே 1194/tcp மற்றும் 1194/udp தொடர்பில்லாத சாக்கெட்டுகள், ஒவ்வொன்றிலிருந்தும் ஒன்று ஒரே ஹோஸ்ட்டில் சேர்ந்து இருக்கலாம்; இது பெயர்-வழித்தடம் அல்ல, போக்குவரத்துப் பிரிவு, அடிக்கடி அதனுடன் குழப்பப்படுகிறது. இரண்டு விருப்பங்களும் ஃபயர்வால் மறுஆய்வைக் கடக்கின்றன, ஏனெனில் விதி பாக்கெட்டில் உண்மையில் உள்ள ஒன்றுடன் பொருந்துகிறது.

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

OpenVPN க்கு முன் வைக்கப்பட்ட TLS முடிப்பான் திறமையான முன்பகுதிக்கு உண்மையான சேவையகப் பெயரை வெளிப்படுத்த முடியும், ஆனால் கிளையண்ட் பக்கமும் அந்தக் கூடுதல் அடுக்குக்கு கட்டமைக்கப்பட்டால் மட்டுமே. ஏற்கனவே உள்ள விவரக்குறிப்புகள் அதே முகவரிக்குக் காட்டுவதால் அந்த நடத்தையைப் பெறுவதில்லை.

கட்டுவதற்கு முன் தேர்ந்தெடுப்பானை நிரூபியுங்கள்

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

ss -lntup | grep -E ':443|:1194'
openssl s_client -connect vpn-a.example:443 -servername vpn-a.example </dev/null | head -n 20
journalctl -u openvpn-server@server-a -n 20 --no-pager

openssl வரி அந்த முகவரியில் ஏதாவது TLS ஐ முடிக்கும் இடத்தில் மட்டுமே சான்றிதழைத் தருகிறது; மூல OpenVPN கேட்பவருக்கு எதிராக அது தடைப்படுகிறது அல்லது தோல்வியடைகிறது, அதுவே வெளிப்புற அடுக்கு என்ன வெளிப்படுத்துகிறது என்பதற்கான பதில். journal வரி, ஒவ்வொரு பின்தளத்திலும் படித்தால், எந்த நிகழ்வு அமர்வை ஏற்றுக்கொண்டது என்பதைக் காட்டுகிறது. முன்பக்க பதிவுகள் வகைப்படுத்தப்பட்டதை எழுதுகின்றன, நோக்கியதை ஒருபோதும் எழுதுவதில்லை, எனவே பயனர் எங்கு இறங்கினார் என்பதற்கு பின்தளமே ஒரே அதிகாரம்.

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

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