VPS ஃபயர்வால்: VPN போர்ட்டை மட்டும் திறந்து, பின்னர் அதை நிரூபியுங்கள்
ஒரு போர்ட் பொதுவில் இருக்க வேண்டும், இல்லையெனில் எந்த கிளையண்டும் இணையாது. மீதமுள்ளவற்றை மறுதலிக்கவும், ஃபார்வர்டிங்கை உள்ளீட்டிலிருந்து தனியாக வைக்கவும், முன்பே சோதித்த மீட்புப் பாதையை விட்டுச் செல்லவும்.
VPN போர்ட்டை மட்டும் அனுமதிக்கும் ஃபயர்வால் ஒரு விதி அல்ல. இது ஒரே போர்ட் எண்ணை தற்செயலாக தொடர்புடைய மூன்று தனித்தனி முடிவுகள்: உள்ளீட்டு சங்கிலி எந்த உள்ளூர் செயல்முறையை அடையலாம் என்பதை தீர்மானிக்கிறது, ஃபார்வர்டு சங்கிலி டன்னல் கிளையண்ட்களின் சார்பாக ஹோஸ்ட் வழியாக எது செல்லலாம் என்பதை தீர்மானிக்கிறது, மற்றும் NAT அட்டவணை வெளியே செல்லும் போது மூல முகவரியை மீண்டும் எழுதுகிறது. இவற்றில் ஒன்றை தவறாகச் செய்தால் முடிவு அரிதாகவே தெளிவான தடையாக இருக்கும். கிளையண்ட்களை ஏற்கும் ஆனால் எதையும் ஏற்றாத ஹோஸ்ட் கிடைக்கும், அல்லது யாராவது சங்கிலிகளின் வரிசையைப் படிக்கும் வரை மூடியதாகத் தெரியும் ஹோஸ்ட் கிடைக்கும்.
மூட முடியாத ஒரே போர்ட்
VPN கேட்பான் நீங்கள் முன்கூட்டியே ஊகிக்க முடியாத முகவரிகளிலிருந்து இணைப்புகளை ஏற்க வேண்டும், எனவே இது வரையறையின்படி பொது சேவை. வடிவமைப்பு அமைந்துள்ள ஒரே விதிவிலக்கு இதுதான்: ஒரு UDP போர்ட் OpenVPNக்கு, WireGuardக்கு ஒரு UDP போர்ட், SSL VPNக்கு ஒரு TCP போர்ட். மற்ற அனைத்தும் டன்னலுக்குப் பின்னால் உள்ளன, அதாவது பயன்பாட்டுச் சேவைகள் அனைத்து இடைமுகங்களுக்கும் அல்லாமல் டன்னல் முகவரிக்கு அல்லது loopbackக்கு பிணைக்கப்பட வேண்டும்.
ஆனால் பிணைப்பு என்பது அமலாக்கம் அல்ல. 0.0.0.0 உடன் பிணைக்கப்பட்ட செயல்முறை ஒரு விதி அனுமதித்தால் மட்டுமே அடையக்கூடியது, மேலும் இயல்புநிலைக் கொள்கை எந்த விதியுடனும் பொருந்தாத டிராஃபிக்கிற்கான மாற்றுப்பாதை, போர்ட்டை நிர்வகிக்கும் விதி அல்ல. உங்கள் dropக்கு மேலே வைக்கப்பட்ட ஏற்பு ஏற்புதான், ஒரு சேவையை பொது முகவரியிலிருந்து நீக்குவது தனித்த மேம்பாடு, சங்கிலிக்கு மாற்று அல்ல.
உள்ளீடு, ஃபார்வர்டு மற்றும் NAT வெவ்வேறு கேள்விகளுக்குப் பதிலளிக்கின்றன
உள்ளீட்டு டிராஃபிக் ஹோஸ்ட்டிற்கே இலக்கு, எனவே VPN கேட்பானும் நிர்வாகப் பாதையும் அங்கேயே உள்ளன. ஃபார்வர்டு டிராஃபிக் ஹோஸ்ட் வழியாகச் செல்கிறது, டன்னல் கிளையண்ட்களுக்கு அது net.ipv4.ip_forward=1 உடன் தேவை. வழக்கமான பாதி உடைந்த கட்டமைப்பு வெளிச்செல்லும் ஓட்டத்தை அனுமதித்து திரும்பும் திசையை மறந்துவிடுகிறது, எனவே கிளையண்ட் கைக்குலுக்கலை முடித்துவிட்டு பிறகு எதுவும் ஏற்றப்படுவதில்லை; நிறுவப்பட்ட மற்றும் தொடர்புடைய டிராஃபிக்கிற்கான conntrack விதி அந்தத் திசையை மூடுகிறது.
NAT மூன்றாவது கேள்வி. postrouting இல் மீண்டும் எழுதல் இல்லாமல், ஃபார்வர்டு செய்யப்பட்ட பாக்கெட்டுகள் டன்னலின் தனிப்பட்ட மூலத்துடன் வெளியேறி மேலே தூக்கி எறியப்படுகின்றன, ஏனெனில் ஹோஸ்ட்டிற்கு அப்பால் எந்த நெட்வொர்க்கும் குளத்தை திரும்ப ரூட் செய்யத் தெரியாது. அந்த விதியின் மூல முன்னொட்டு VPN குளத்துடன் பொருந்த வேண்டும், ஹோஸ்ட்டின் சொந்த முகவரியுடன் அல்ல, மேலும் கிளையண்ட் துணைநெட்வொர்க்கைக் குறிப்பிடும் ஃபார்வர்டு விதிக்கும் இதுவே பொருந்தும்.
IPv6 இரண்டாவது கொள்கை, பிற்கால சிந்தனை அல்ல. கடுமையான IPv4 சங்கிலி மற்றும் ip6tables இல் திறந்த கொள்கை உள்ள ஹோஸ்ட் எதையும் மூடவில்லை; சேவைகள் மற்ற குடும்பத்தின் வழியாக இன்னும் அடையக்கூடியவை. ஒன்று ip6tables உடன் விதித் தொகுப்பை பிரதிபலிக்கவும், அல்லது பொது இடைமுகத்தில் IPv6 ஐ வேண்டுமென்றே முடக்கவும், நீங்கள் எதைத் தேர்ந்தெடுத்தீர்கள் என்று எழுதவும்.
ஒரே பார்வையில் படிக்கக்கூடிய அடிப்படை
மறுதலிப்பிலிருந்து தொடங்கி, ஹோஸ்ட்டிற்குத் தேவையானதை மட்டும் சேர்க்கவும். முதலில் loopback மற்றும் பதில்கள், பின்னர் நிர்வாகப் பாதை, பின்னர் டன்னல் கேட்பான், பின்னர் கிளையண்ட்களுக்கான ஃபார்வர்டிங் கொள்கை:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -m conntrack --ctstate NEW -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADEஇடைமுகப் பெயர்கள், போர்ட் மற்றும் குளம் ஆகியவை இடைநிலைகள்; அவற்றை நகலெடுப்பதற்குப் பதிலாக சேவையகத்திலிருந்து படிக்கவும். முடிவைச் சேமிப்பது அதை எழுதுவதற்கு சமமான முக்கியத்துவம் வாய்ந்தது, ஏனெனில் நினைவகத்தில் மட்டும் வாழும் விதித் தொகுப்பு அடுத்த மறுதொடக்கத்தில் மறைந்து ஹோஸ்ட்டை அமைதியாக மீண்டும் திறக்கிறது. விநியோகத்தின் முறையால் அதை நிரந்தரமாக்கி, இயந்திரம் துவங்காத நாளுக்காக இயந்திரத்திற்கு வெளியே ஒரு நகலை வைத்திருங்கள்.
ஹோஸ்ட்டை இழக்காமல் கடைசி போர்ட்டை மூடுவது
வடிவமைப்பில் ஒரு பொறி உள்ளது. SSH டன்னல் வழியாக மட்டுமே இருந்தால், தோல்வியடைந்த VPN சேவை SSH ஐயும் எடுத்துச் செல்லும், திரும்பிச் செல்லும் ஒரே வழி நீங்கள் ஒருபோதும் திறக்காத கன்சோலாக இருக்கலாம். கடைசி பொது போர்ட்டை மூடுவதற்கு முன் அந்தக் கன்சோல் உள்ளது என்பதையும் அதை உண்மையில் பயன்படுத்த முடியும் என்பதையும் உறுதிப்படுத்தவும், அல்லது டன்னலைச் சாராத ஒரு குறுகிய நிர்வாகப் பாதையை வைத்திருங்கள்: நிலையான முகவரியிலிருந்து SSH, விசைகள் மட்டும், கடவுச்சொல் அங்கீகாரம் அணைக்கப்பட்டது.
மாற்றத்தை ஏற்கனவே நிறுவப்பட்ட அமர்விலிருந்து பயன்படுத்தவும், நீங்கள் வடிகட்டப்போகும் இணைப்பின் வழியாக அல்ல. தவறு நிரந்தரமாகாமல் காலாவதியாகும் வகையில் ஒரு ரோல்பேக்கைத் திட்டமிடவும், எடுத்துக்காட்டாக முந்தைய விதித் தொகுப்பை மீட்டெடுக்கும் systemd-run --on-active=10min வேலை, முதல் அமர்வைச் சோதிக்கும்போது இரண்டாவது SSH அமர்வைத் திறந்து வைக்கவும். பின்னர் ரோல்பேக் வேலை உண்மையில் இயங்குகிறதா என்பதைச் சரிபார்க்கவும், ஏனெனில் சோதிக்கப்படாத மீட்பு மீட்பு இல்லாததற்குச் சமம்.
ஸ்கிரிப்ட் அல்ல, பாதையைச் சரிபார்க்கவும்
ஏற்றப்பட்ட விதிகளைப் படிக்கவும், அவற்றை ஏற்ற வேண்டிய கோப்பை அல்ல. அங்கீகரிக்கப்பட்ட வெளிப்புற ஹோஸ்ட்டிலிருந்து நோக்கம் கொண்ட போர்ட்கள் மட்டுமே பதிலளிக்கின்றன என்பதை உறுதிப்படுத்தவும்; டன்னலின் உள்ளேயிருந்து நீங்கள் வெளியிட விரும்பிய சேவைகள் அடையக்கூடியவை என்பதை உறுதிப்படுத்தவும். டன்னல் டிராஃபிக்கையும் தடுக்கும் இயல்புநிலை மறுதலிப்புக் கொள்கை, யாராவது அதைப் பயன்படுத்த முயலும் வரை வேலை செய்யும் பூட்டுதல் போலவே தெரிகிறது.
iptables -S
iptables -t nat -S
ss -lntup
ip -4 addr showஅனுமதிக்கப்பட்ட போர்ட், கிளையண்ட் குளம், டன்னல் இடைமுகம், நிர்வாக மூலம் மற்றும் கன்சோல் நடைமுறையை கட்டமைப்பிற்கு அருகில் பதிவு செய்யவும். குளம் அல்லது இடைமுகப் பெயரில் அடுத்த மாற்றம் வடிகட்டி மற்றும் NAT விதி இரண்டிலும் பொருந்த வேண்டும், இல்லையெனில் ஹோஸ்ட் யாருக்கும் தெரியாமல் அரை-திறந்த நிலைக்குத் திரும்பும்.
ஒரு பழக்கம் விதித் தொகுப்பை விட மதிப்புமிக்கது: ஒவ்வொரு மாற்றத்திற்குப் பிறகும் கிளையண்ட் கோரிக்கையால் ஃபார்வர்டு பாதையையும் இரண்டாவது அமர்வால் மீட்புப் பாதையையும் நிரூபியுங்கள். நீங்கள் பயன்படுத்தாத பூட்டுதல் ஒரு கருதுகோள் மட்டுமே.