VPS ഫയർവാൾ: VPN പോർട്ട് മാത്രം തുറക്കുക, എന്നിട്ട് അത് തെളിയിക്കുക
ഒരു പോർട്ട് പൊതുവായി തുടരണം, അല്ലാത്തപക്ഷം ഒരു ക്ലയന്റും ബന്ധിപ്പിക്കില്ല. ബാക്കിയുള്ളവ നിരസിക്കുക, ഫോർവേഡിംഗ് ഇൻപുട്ടിൽ നിന്ന് വേർതിരിക്കുക, മുൻകൂട്ടി പരിശോധിച്ച വീണ്ടെടുപ്പ് പാത അവശേഷിപ്പിക്കുക.
VPN പോർട്ട് മാത്രം അനുവദിക്കുന്ന ഫയർവാൾ ഒരു നിയമമല്ല. ഒരേ പോർട്ട് നമ്പറിനെ സംബന്ധിക്കുന്ന മൂന്ന് വെവ്വേറെ തീരുമാനങ്ങളാണ്: ഇൻപുട്ട് ചെയിൻ പ്രാദേശിക പ്രോസസ്സിലേക്ക് എന്ത് എത്താം എന്ന് തീരുമാനിക്കുന്നു, ഫോർവേഡ് ചെയിൻ ടണൽ ക്ലയന്റുകളുടെ പേരിൽ ഹോസ്റ്റിലൂടെ എന്ത് കടക്കാം എന്ന് തീരുമാനിക്കുന്നു, NAT പട്ടിക പുറത്തേക്ക് പോകുമ്പോൾ സ്രോതസ്സ് വിലാസം വീണ്ടും എഴുതുന്നു. അവയിലൊന്ന് തെറ്റിയാൽ ഫലം അപൂർവ്വമായി മാത്രമേ വ്യക്തമായ തടസ്സമാകൂ. ക്ലയന്റുകളെ സ്വീകരിക്കുന്നതും എന്നാൽ ഒന്നും ലോഡ് ചെയ്യാത്തതുമായ ഹോസ്റ്റ് ലഭിക്കും, അല്ലെങ്കിൽ ആരെങ്കിലും ചെയിനുകളുടെ ക്രമം വായിക്കുന്നതുവരെ അടച്ചതായി തോന്നുന്ന ഹോസ്റ്റ് ലഭിക്കും.
അടയ്ക്കാനാകാത്ത ഏക പോർട്ട്
VPN ശ്രോതാവിന് നിങ്ങൾക്ക് മുൻകൂട്ടി അറിയാൻ കഴിയാത്ത വിലാസങ്ങളിൽ നിന്ന് കണക്ഷനുകൾ സ്വീകരിക്കേണ്ടതുണ്ട്, അതിനാൽ ഇത് നിർവചനപ്രകാരം ഒരു പൊതു സേവനമാണ്. ഡിസൈൻ ആശ്രയിക്കുന്ന ഏക അപവാദം ഇതാണ്: OpenVPN-നായി ഒരു UDP പോർട്ട്, WireGuard-നായി ഒരു UDP പോർട്ട്, SSL VPN-നായി ഒരു TCP പോർട്ട്. ബാക്കിയെല്ലാം ടണലിന് പിന്നിലാണ്, അതായത് അപ്ലിക്കേഷൻ സേവനങ്ങൾ എല്ലാ ഇന്റർഫേസുകളിലുമല്ല, ടണൽ വിലാസത്തിലോ loopback-ലോ ബന്ധിപ്പിക്കണം.
എന്നാൽ ബന്ധിപ്പിക്കൽ നടപ്പാക്കലല്ല. 0.0.0.0-ലേക്ക് ബന്ധിച്ച ഒരു പ്രോസസ്സ് ഒരു നിയമം അനുവദിക്കുമ്പോൾ മാത്രമേ എത്താനാകൂ, കൂടാതെ സ്ഥിരസ്ഥിതി നയം ഒരു നിയമവുമായും പൊരുത്തപ്പെടാത്ത ട്രാഫിക്കിനുള്ള കരുതൽ മാർഗമാണ്, പോർട്ട് നിയന്ത്രിക്കുന്ന നിയമമല്ല. നിങ്ങളുടെ ഡ്രോപ്പിന് മുകളിൽ വയ്ക്കുന്ന അംഗീകാരവും അംഗീകാരം തന്നെയാണ്, സേവനം പൊതു വിലാസത്തിൽ നിന്ന് മാറ്റുന്നത് സ്വതന്ത്ര മെച്ചപ്പെടുത്തലാണ്, ചെയിനിന്റെ പകരമല്ല.
ഇൻപുട്ട്, ഫോർവേഡിംഗ്, 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 നിയമത്തിലും ഒരുപോലെ യോജിക്കണം, അല്ലാത്തപക്ഷം ഹോസ്റ്റ് ആരും അറിയാതെ പകുതി തുറന്ന അവസ്ഥയിലേക്ക് മടങ്ങും.
ഒരു ശീലം നിയമക്കൂട്ടത്തെക്കാൾ മൂല്യമുള്ളതാണ്: ഓരോ മാറ്റത്തിനും ശേഷം ക്ലയന്റ് അഭ്യർത്ഥനയിലൂടെ ഫോർവേഡ് പാതയും രണ്ടാമത്തെ സെഷനിലൂടെ വീണ്ടെടുപ്പ് പാതയും തെളിയിക്കുക. നിങ്ങൾ ഉപയോഗിക്കാത്ത ലോക്ക്ഡൗൺ ഒരു അനുമാനം മാത്രമാണ്.