NAT செய்யும் VPN நுழைவாயிலுக்குப் பின்னால் FTP பட்டியல்கள் ஏன் தொங்குகின்றன
உள்நுழைவும் PWD-யும் வெற்றியடையும் போது, NAT தலைப்புகளை மட்டும் மீண்டும் எழுதும்போது LIST-உம் RETR-உம் நிற்கின்றன. FTP உதவியாளர் எங்கே இருக்க வேண்டும், செயலற்ற பயன்முறையை எப்படிச் சரிசெய்வது என்பதைப் பார்க்கவும்.
உள்நுழைவு வேலை செய்கிறது, PWD வேலை செய்கிறது, பிறகு வாடிக்கையாளர் விட்டுவிடும் வரை அல்லது வேறு தரவு பயன்முறைக்குச் செல்லும் வரை LIST தொங்குகிறது. இந்தப் பிரிவே அடையாளம்: போர்ட் 21-க்கான கட்டுப்பாட்டு இணைப்பு ஆரோக்கியமாக உள்ளது, ஆனால் தரவு இணைப்பு எதிர்ப் பக்கம் அடைய முடியாத முகவரி அல்லது போர்ட்டிலிருந்து கட்டப்படுகிறது. தானே NAT செய்யும் VPN நுழைவாயிலுக்குப் பின்னால், வழக்கமான குற்றவாளி, அதன் பேலோடில் 10.8.0.6 போன்ற சுரங்க முகவரியைக் குறிக்கும் FTP கட்டளை. தலைப்பு மொழிபெயர்ப்பு அந்த மதிப்பை ஒருபோதும் தொடுவதில்லை.
அடுத்தது அந்த மதிப்பு எங்கிருந்து வருகிறது, எந்தப் பெட்டி அதை மாற்ற அனுமதிக்கப்படுகிறது என்பது.
உடைவது பேலோடு, சுரங்கம் அல்ல
FTP தரவின் முடிவுப் புள்ளியைக் கட்டுப்பாட்டு ஓட்டத்தின் உள்ளே வைக்கிறது. செயலில் உள்ள பயன்முறையில் வாடிக்கையாளர் தன் சொந்த முகவரி மற்றும் போர்ட்டுடன் PORT அனுப்புகிறது, சேவையகம் அந்த இணைக்குத் திரும்ப அழைக்கிறது. செயலற்ற பயன்முறையில் சேவையகம் ஒரு இணையுடன் 227 பதிலளிக்கிறது, வாடிக்கையாளர் அதற்குப் பதிலாக அதை அழைக்கிறது.
இரு வடிவங்களும் ஒரே வகையான கூற்றைக் கொண்டுள்ளன: இந்த முகவரிக்கு, இந்தப் போர்ட்டில் இணை. IP மற்றும் TCP தலைப்புகளை மட்டும் மீண்டும் எழுதும் சாதனம் கூற்றை அப்படியே விட்டுவிடுகிறது, எனவே ஒரு பக்கம் சுரங்கத்தின் மறுபக்கம் மட்டுமே உள்ள முகவரியை அடைய முயன்று கொண்டே இருக்கிறது. கட்டுப்பாட்டு இணைப்பு ஏற்கனவே ஆரோக்கியமானது என அறிவிக்கப்பட்ட பிறகு தரவு இணைப்பு நிற்கிறது.
மூன்று பயன்முறைகள், மூன்று பேலோடுகள்
கீழே உள்ள அட்டவணை எந்தப் பக்கத்தை அழைக்கச் சொல்லப்படுகிறது, தலைப்புகளை மட்டும் மீண்டும் எழுதும் NAT அதில் என்ன செய்ய முடியும் என்பதைக் காட்டுகிறது.
கடைசி நெடுவரிசையை முதலில் தோல்வியடையும் விஷயமாகப் படிக்கவும். செயலில் உள்ள பயன்முறையில் தனிப்பட்ட முகவரிக்கு அழைப்பது சேவையகம், செயலற்ற பயன்முறையில் வாடிக்கையாளர், FTPS-ல் பேலோடு மறையாக்கப்பட்ட உரை என்பதால் இடைநிலைப் பெட்டிக்கு வேலை செய்ய இன்னும் குறைவே.
| Mode | Value in the control stream | Who dials whom | Header-only NAT leaves |
|---|---|---|---|
| Active (PORT) | client address and port | server dials the client | a server dialing an unreachable tunnel address |
| Passive (227) | server address and port | client dials the server | a client dialing an address it cannot route to |
| FTPS | the same values, inside TLS | as above | ciphertext, so no rewrite happens at all |
மொழிபெயர்ப்பு நடக்கும் இடத்திலேயே உதவியாளரை வைக்கவும்
லினக்ஸில் பேலோடை மீண்டும் எழுதுவதை nf_conntrack_ftp உதவியாளர் செய்கிறது. அது கட்டுப்பாட்டு இணைப்பைக் கவனிக்கிறது, பேச்சுவார்த்தை செய்யப்பட்ட போர்ட்டைக் கற்றுக்கொள்கிறது, தரவு ஓட்டத்திற்கு எதிர்பார்ப்பை உருவாக்குகிறது, NAT பெட்டியில் பேலோட்டின் உள்ளே உள்ள முகவரியையும் போர்ட்டையும் மீண்டும் எழுதுகிறது. அது வாடிக்கையாளரின் முகவரியை மொழிபெயர்க்கும் சாதனத்தில் மட்டுமே உதவுகிறது. அதை வாடிக்கையாளரிலோ ஓட்டத்தை மட்டும் அனுப்பும் திசைவியிலோ ஏற்றுவது அமர்வில் எதையும் மாற்றாது.
இந்த மூன்று கட்டளைகள் தொகுதி இருக்கிறதா, இணைக்கப்பட்டுள்ளதா, அமர்வு திறந்திருக்கும்போது எதிர்பார்ப்பு இருக்கிறதா என்பதைக் காட்டுகின்றன:
modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp
தொகுதியை ஏற்றுவது அதை இணைப்பதற்குச் சமமானது அல்ல. 4.7 முதல் கர்னல்கள் net.netfilter.nf_conntrack_helper=0 உடன் வருகின்றன, எனவே உதவியாளர் வெளிப்படையான விதிக்காகக் காத்திருக்கிறது, எடுத்துக்காட்டாக iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. பரிமாற்றம் முயலும்போது எதிர்பார்ப்புப் பட்டியல் காலியாக இருந்தால், சரிபார்க்க வேண்டியது இணைப்பு, தொகுதி அல்ல.
செயலற்ற பயன்முறை: சேவையகத்திடம் என்ன அறிவிக்க வேண்டும் என்று சொல்லுங்கள்
செயலற்ற பயன்முறையை நிர்ணயிக்க எளிதானது, ஏனெனில் 227 பதிலில் என்ன வைக்க வேண்டும் என்று சேவையகத்திடம் சொல்ல முடியும். vsftpd-ல் அது pasv_address, pasv_min_port மற்றும் pasv_max_port உடன்; ProFTPD MasqueradeAddress மற்றும் PassivePorts பயன்படுத்துகிறது. இவற்றை முதலில் அமைக்கவும், ஏனெனில் சரியாக அறிவிக்கப்பட்ட முகவரி அந்தப் பக்கத்தில் எதையும் மீண்டும் எழுத வேண்டிய தேவையை நீக்குகிறது.
பிறகு அதே போர்ட் வரம்பை நுழைவாயில் வழியாக அனுமதிக்கவும், எடுத்துக்காட்டாக -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, விதி சேவையகம் அறிவிப்பதுடன் பொருந்தும் வகையில்.
இரண்டு அமைப்புகளும் ஒத்துப்போக வேண்டும். 30000-30100 அறிவிக்கச் சொல்லப்பட்ட சேவையகம், நுழைவாயில் 40000-40100-ஐ அனுமதிக்கும்போது, மிகக் குறைந்த உதவிகரமான வழியில் தோல்வியடைகிறது: கட்டுப்பாட்டு உரையாடல் ஆரோக்கியமாகத் தெரிகிறது, ஒவ்வொரு தரவு இணைப்பும் இறக்கிறது. வேறு எதையும் பிழைதிருத்துவதற்கு முன் எண்களை ஒப்பிடுங்கள்.
இரண்டு தோல்வி அடையாளங்கள், FTPS எதை நீக்குகிறது
LIST-ல் தொங்குவது அமர்வின் முதல் தரவு இணைப்பைக் குறிக்கிறது, அங்கு முகவரி மீண்டும் எழுதுவதும் எதிர்பார்ப்பும் இரண்டும் வேலை செய்ய வேண்டும். வேலை செய்யும் LIST-க்குப் பிறகு RETR-ல் தொங்குவது பரிமாற்றத்தையே குறிக்கிறது, அதாவது செயலற்ற வரம்பு அல்லது சுரங்கத்தின் MTU. அந்த இரண்டாவது அடையாளம் பேலோடு பிரச்சினை அல்ல, உதவியாளரின் அமைப்புகள் அதைச் சரிசெய்யாது.
TLS மேல் FTP, உதவியாளர் படிக்கும் பேலோடை நீக்குகிறது. இடைநிலைப் பெட்டி மறைகுறியாக்க முடியாத PORT அல்லது PASV மதிப்பை மீண்டும் எழுத முடியாது, எனவே எஞ்சியவை TLS-ஐ முடிக்கும் பதிலி, வரம்புக்குட்பட்ட வரம்பில் அடையக்கூடிய முகவரியை அறிவிக்கும் சேவையகம், அல்லது வேறு பரிமாற்ற நெறிமுறை.
சரிபார்ப்புகளின் சுருக்கமான வரிசை
அறிகுறியிலிருந்து வெளிப்புறமாக வேலை செய்யுங்கள். PWD வெற்றியடையும்போது LIST தோல்வியடைகிறது என்பதை உறுதிசெய்து, PORT அல்லது 227 பேலோட்டின் உள்ளே உள்ள முகவரியைப் பிடித்து, எந்தச் சாதனம் அந்த முகவரியை மொழிபெயர்க்கிறது என்று கேளுங்கள். அங்கு உதவியாளரை இணைக்கவும், ஒரு பரிமாற்றத்தின் போது எதிர்பார்ப்புப் பட்டியலைக் கவனிக்கவும், பிறகு சேவையகத்தில் செயலற்ற பயன்முறையைச் சரிசெய்து நுழைவாயில் விதியில் வரம்பைப் பிரதிபலிக்கவும்.
தரவுப் பாதைத் தோல்வியை மொத்தப் பரிமாற்றத் தோல்வியிலிருந்து தனியாக வைத்திருங்கள், ஏனெனில் அவை வெவ்வேறு அமைப்புகளுக்கு இட்டுச் செல்கின்றன.