SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-30

UFW-இல் IPv6 பாதுகாப்பு இடைவெளியை சரிசெய்வது எப்படி?

உங்கள் VPS-ன் IPv4 firewall பாதுகாப்பாக இருந்தாலும், IPv6 வழியாக சேவைகள் வெளிப்படையாக இருக்கலாம். இந்த ஆபத்தை கண்டறிந்து, UFW மூலம் அதை எவ்வாறு நிரந்தரமாக மூடுவது என்பதை அறிக.

IPv6 firewall சிக்கல் - ஒரே வரியில்

உங்கள் firewall IPv4-ஐ மட்டுமே பாதுகாக்கிறது. உங்கள் VPS-க்கு பெரும்பாலும் பொதுவான IPv6 முகவரி இருக்கும், மேலும் பல சேவைகள் இயல்பாகவே அதில் இயங்கும். உங்கள் firewall IPv4-ஐ மட்டும் கவனித்தாலோ அல்லது IPv4-ஐ மட்டும் வடிகட்டும் cloud firewall-ஐப் பயன்படுத்தினாலோ, உங்கள் IPv4 பக்கம் பாதுகாப்பாகத் தெரிந்தாலும், அந்தச் சேவைகள் அனைத்தும் IPv6 வழியாக இணையம் முழுவதிலிருந்தும் அணுகக்கூடியதாக இருக்கும். நீங்கள் curl மூலம் ஒரு port-ஐச் சோதித்து, இணைப்பு மறுக்கப்படுவதைப் பார்த்து பாதுகாப்பாக இருப்பதாக நினைக்கலாம். ஆனால், ஒரு தாக்குதல் நடத்துபவர் அதே port-ஐ IPv6 வழியாக எளிதாக அணுக முடியும்.

இந்த வழிகாட்டி, ஒரு சாதாரண Ubuntu 24.04 VPS-ல் இந்த இடைவெளி எங்கிருந்து வருகிறது என்பதையும், நீங்கள் எதை வெளிப்படுத்தியுள்ளீர்கள் என்பதைத் துல்லியமாகப் பார்ப்பது எப்படி என்பதையும், அதை எவ்வாறு மூடுவது என்பதையும் விளக்குகிறது. இதில் UFW குற்றவாளி அல்ல. நவீன Ubuntu நிறுவலில் UFW ஏற்கனவே IPv6-ஐக் கையாள்கிறது. இந்த வெளிப்பாடு அதைச் சுற்றியுள்ள அடுக்குகளாலும், நீங்கள் கவனிக்காத, பின்னணியில் இயங்கும் சேவைகளாலும் ஏற்படுகிறது.

உங்கள் VPS ஏன் ஆரம்பத்திலிருந்தே IPv6-ல் உள்ளது

இன்றைய பெரும்பாலான VPS-கள் பொது IPv4 முகவரியுடன் சேர்த்து, பெரும்பாலும் ஒரு முழுமையான /64 IPv6 முகவரியையும் கொண்டு வருகின்றன. உங்களுடையதைச் சரிபார்க்கவும்:

ip -6 addr show scope global
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
    inet6 2001:db8:2a::1/64 scope global

அந்த 2001:db8:2a::1 முகவரி, உங்கள் IPv4 முகவரியைப் போலவே இணையத்தில் எங்கிருந்து வேண்டுமானாலும் அணுகக்கூடியது. இப்போது எவை listening நிலையில் உள்ளன என்று பாருங்கள்:

sudo ss -tlnp
State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       [::]:22              sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:8080            docker-proxy

Local Address நெடுவரிசையை கவனமாகப் படிக்கவும். 0.0.0.0:22 என்பது "ஒவ்வொரு IPv4 முகவரியிலும் listen செய்யவும்" என்று பொருள். [::]:22 என்பது "ஒவ்வொரு IPv6 முகவரியிலும் listen செய்யவும்" என்று பொருள். 127.0.0.1:5432 என்பது loopback-உடன் பிணைக்கப்பட்டுள்ளது, இது பொதுவானது அல்ல, எனவே Postgres வரி பாதுகாப்பானது. அந்த இரண்டு [::] வரிகளும் IPv6 வழியாக முழு இணையத்திற்கும் பதிலளிக்கின்றன, மேலும் docker-proxy என்பது நீங்கள் எப்போது தொடங்கினீர்கள் என்றே மறந்துபோன ஒன்றாகும்.

பெரும்பாலான daemons இயல்பாகவே ::-ல் பிணைக்கப்படுகின்றன, ஏனெனில் Linux-ல் ஒரு :: socket பொதுவாக IPv4-ஐயும் ஏற்கும். எனவே, ஒரு புதிய server-ன் இயல்புநிலை நிலை என்பது "இரண்டு stacks-லும், எல்லா இடங்களிலும் பதிலளிப்பது" என்பதாகும். உங்கள் firewall மட்டுமே அதற்கு முன்னால் நிற்கும் ஒரே பாதுகாப்பு, அதனால்தான் ஒரு stack-ஐ மட்டும் கவனிக்கும் firewall ஒரு உண்மையான சிக்கலாகும்.

IPv6 இடைவெளி உண்மையில் எங்கிருந்து வருகிறது

இதற்கு நான்கு பொதுவான காரணங்கள் உள்ளன. ஒரு குறிப்பிட்ட server-ல் இவற்றில் ஒன்று அல்லது பல ஒரே நேரத்தில் இருக்கலாம்.

1. IPv4-ஐ மட்டும் வடிகட்டும் cloud firewall. பல provider firewall மற்றும் security-group தயாரிப்புகள் IPv4-ஐ மையமாக வைத்தே உருவாக்கப்பட்டன. அவை IPv6-ஐப் புறக்கணிக்கின்றன அல்லது நீங்கள் கைமுறையாகச் சேர்க்க வேண்டிய தனி IPv6 விதிகளைக் கோருகின்றன. உங்கள் ஒரே firewall, provider dashboard-ல் உள்ளதாக இருந்து, அது IPv6-ஐக் கையாளவில்லை என்றால், IPv4-ல் port 22 பற்றி அது என்ன சொன்னாலும், உங்கள் [::] சேவைகள் பாதுகாப்பற்றதாகவே இருக்கும். உங்கள் provider-ன் firewall ஆவணத்தைப் படித்து, IPv6 என்ற வார்த்தையைத் தேடுங்கள்.

2. ip6tables இல்லாத கைமுறை iptables. iptables கட்டளை IPv4 அட்டவணைகளை மட்டுமே மாற்றும். IPv6-க்கு முற்றிலும் தனித்துவமான ip6tables கட்டளை உள்ளது, அதற்குத் தனி விதிகள் தேவை. நீங்கள் iptables -A INPUT ... வரிகளைக் கொண்ட firewall script-ஐ எழுதி, அதற்கு இணையான ip6tables விதிகளை எழுதவில்லை என்றால், உங்கள் IPv6 firewall காலியாக இருக்கும். default ACCEPT கொள்கையைக் கொண்ட காலியான INPUT chain அனைத்தையும் அனுமதிக்கும்:

sudo ip6tables -L INPUT -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

இந்த output-தான் ஒட்டுமொத்த சிக்கலையும் ஒரே திரையில் காட்டுகிறது. IPv4 வடிகட்டப்படுகிறது, ஆனால் IPv6 அனைத்தையும் அனுமதிக்கிறது.

3. உங்கள் firewall-ஐத் தாண்டி நேரடியாக ports-ஐ வெளியிடும் Docker. நீங்கள் docker run -p 8080:80-ஐ இயக்கும்போது, Docker தனது சொந்த விதிகளை UFW-க்கு முன்னால் செருகும். எனவே, ufw status ஒரு port மறுக்கப்பட்டதாகக் காட்டினாலும், அந்த port அணுகக்கூடியதாகவே இருக்கும். நவீன Docker-ல் இது IPv6-க்கும் பொருந்தும். Docker ஏன் UFW-ஐத் தவிர்க்கிறது மற்றும் container ports-ஐ எவ்வாறு சரியாக வடிகட்டுவது என்பது இதற்கான காரணத்தையும் தீர்வுகளையும் விளக்குகிறது. இந்த published ports எவ்வாறு அறிவிக்கப்படுகின்றன என்பதை அறிய VPS-ல் Docker Compose-ன் அடிப்படைகள் என்பதைப் பார்க்கவும்.

4. IPv6 முடக்கப்பட்ட UFW. UFW IPv6-ஐக் கையாளும், ஆனால் அதற்கு நாம் கட்டளையிட வேண்டும். அந்த அமைப்பைச் சரிபார்க்கவும்:

grep IPV6 /etc/default/ufw

நவீன Ubuntu IPV6=yes-ஐக் கொண்டுள்ளது, எனவே UFW ஒவ்வொரு விதியையும் இரு stacks-க்கும் பொருந்தும் வகையில் செயல்படுத்துகிறது. பழைய image அல்லது பழைய வழிகாட்டியின் காரணமாக நீங்கள் IPV6=no என்று பார்த்தால், நீங்கள் எழுதிய ஒவ்வொரு UFW விதியும் IPv4-க்கு மட்டுமே பொருந்தும், IPv6 நிர்வகிக்கப்படாமல் இருக்கும்.

நீங்கள் எதை வெளிப்படுத்துகிறீர்கள் என்பதைத் துல்லியமாகப் பாருங்கள்

ஊகிக்க வேண்டாம். வெளியிலிருந்து அதை அளவிடுங்கள். முதலில் உங்கள் listeners-ஐப் பட்டியலிட்டு, ::-உடன் இணைக்கப்பட்டுள்ள ஒவ்வொன்றையும் குறித்துக்கொள்ளுங்கள்:

sudo ss -tlnp | grep '::'

பிறகு, வேறொரு கணினியிலிருந்து, server-ன் பொது IPv6 முகவரியுடன் இணைப்பை ஏற்படுத்தி, மூடப்பட்டிருக்கும் என்று நீங்கள் கருதும் ஒரு port-ஐச் சோதிக்கவும்:

curl -6 -v http://[2001:db8:2a::1]:8080/

அது ஒரு பக்கத்தையோ அல்லது banner-ஐயோ காட்டினால், அந்த port IPv6-ல் திறந்திருக்கிறது என்று அர்த்தம். மூடப்பட்ட port உங்களுக்கு Connection refused அல்லது காலாவதியாகும் (timeout) நிலையைத் தரும். இந்த இரண்டு தோல்விகளும் ஒரே சமிக்ஞை அல்ல, மேலும் refused மற்றும் timed out ஆகியவற்றுக்கு இடையேயான வேறுபாடு host பதிலளித்து உங்களைத் திருப்பி அனுப்பியதா அல்லது firewall உங்கள் packet-ஐ அமைதியாகத் தடுத்துவிட்டதா என்பதை உங்களுக்குத் தெரிவிக்கும். முழுமையான நிலையை அறிய, server-க்கு வெளியிலிருந்து nmap மூலம் IPv6 முகவரியை scan செய்யவும்:

nmap -6 2001:db8:2a::1

nmap IPv6 வழியாகத் திறந்திருப்பதாகக் காட்டும் ஒவ்வொரு port-ம், உங்கள் IPv4 scan எதைக் காட்டினாலும், முழு இணையமும் அணுகக்கூடிய ஒரு port ஆகும். IPv4 மற்றும் IPv6 scan-களை அருகருகே ஒப்பிட்டுப் பார்ப்பது இடைவெளியைக் கண்டறிய வேகமான வழியாகும்: -6-ல் திறந்திருந்து, IPv4-ல் மூடப்பட்டிருக்கும் எதுவாக இருந்தாலும், அது உங்கள் firewall-ல் விடுபட்ட ஒரு service ஆகும்.

இடைவெளியை நிரப்புதல்

UFW இரண்டு அடுக்குகளையும் (stacks) உள்ளடக்குவதை உறுதிசெய்து, இயல்பாகவே அனைத்தையும் மறுக்கும்படி (deny) அமைக்கவும். மாற்றத்தை உறுதிப்படுத்திய பிறகு, இயல்புநிலை inbound policy-ஐ deny என மாற்றவும். உங்களுக்குத் தேவையானவற்றை மட்டும் அனுமதிக்கவும்:

sudo sed -i 's/^IPV6=no/IPV6=yes/' /etc/default/ufw
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose

IPV6=yes-ஐ மாற்றும்போது UFW ஏற்கனவே இயங்கிக்கொண்டிருந்தால், நீங்கள் sudo ufw reload-ஐ இயக்கும் வரை அந்த மாற்றம் நடைமுறைக்கு வராது.

ufw status ஒவ்வொரு விதியையும் இரண்டு முறை பட்டியலிடும்; ஒன்று சாதாரணமானதாகவும், மற்றொன்று (v6) பின்னொட்டுடனும் இருக்கும். (v6) வரிகளை நீங்கள் காணும்போது, UFW ஆனது IPv6-ஐ வடிகட்டுகிறது என்று அர்த்தம்:

22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

நீங்கள் iptables-ஐ கைமுறையாக நிர்வகிப்பவர் என்றால், ஒவ்வொரு விதியையும் ip6tables-லும் பிரதிபலிக்கவும். அல்லது nftables-க்கு மாறவும். அதன் inet அட்டவணைகள் IPv4 மற்றும் IPv6 ஆகிய இரண்டையும் ஒரே இடத்தில் கையாள்வதால், இத்தகைய தவறுகள் முழுமையாகத் தவிர்க்கப்படும். நீங்கள் சொந்தமாக விதிகளை எழுதும்போது, ஒரு ஒற்றை nftables inet filter அட்டவணையைப் பயன்படுத்துவதே மிகச் சிறந்த தீர்வாகும். உங்கள் VPS ஆனது Ubuntu-க்கு பதிலாக Rocky அல்லது AlmaLinux-ல் இயங்கினால், அங்கு கட்டமைக்க UFW இருக்காது. அதற்குப் பதிலாக firewalld-ஐ நீங்கள் நிர்வகிக்க வேண்டும், இது அதன் zone விதிகளை ஒரே நேரத்தில் இரண்டு அடுக்குகளுக்கும் பொருந்தச் செய்யும்.

பொதுப் பயன்பாட்டிற்குத் தேவையில்லாத சேவைகளை loopback-ல் மட்டும் பிணைக்கவும் (bind). ஒரு database, admin panel அல்லது metrics endpoint-க்கு பொது முகவரி (public address) அரிதாகவே தேவைப்படும். அவற்றை 127.0.0.1 மற்றும் ::1-ல் பிணைக்கவும்; அப்போதுதான் அவை பொதுவில் அணுகக்கூடிய முகவரியில் இயங்காது. Postgres-க்கு, listen_addresses = 'localhost'-ஐ அமைக்கவும். ஒரு app server-க்கு, அதை 127.0.0.1-ல் பிணைத்து, அதன் முன்னால் ஒரு reverse proxy-ஐ வைக்கவும். ஒரு listener-ஐ மூடுவது, அதை firewall மூலம் தடுப்பதை விடச் சிறந்தது; ஏனெனில் அப்போது அங்கு அணுகுவதற்கு எதுவுமே இருக்காது.

Docker-ன் published ports-ஐப் பாதுகாக்க UFW-வை மட்டும் நம்ப வேண்டாம். Container ports-ஐ ஒவ்வொரு interface-லும் வெளியிடுவதற்குப் பதிலாக, ஒரு குறிப்பிட்ட முகவரியில் மட்டும் வெளியிடவும். உதாரணமாக -p 127.0.0.1:8080:80-ஐப் பயன்படுத்தவும். அப்போதுதான் அந்த port, host-லிருந்தும் நீங்கள் வேண்டுமென்றே proxy செய்யும் இடத்திலிருந்தும் மட்டுமே அணுகக்கூடியதாக இருக்கும். ஒரு container கண்டிப்பாக பொதுவில் இருக்க வேண்டும் என்றால், அதை Traefik reverse proxy-க்கு பின்னால் வைக்கவும்; ஒவ்வொரு app-ஐயும் தனித்தனியாக வெளியிடாமல், proxy-ஐ மட்டும் வெளியிடவும்.

உங்கள் provider firewall-ல் IPv6 விதிகளைச் சேர்க்கவும். அல்லது அது IPv6-க்கான firewall அல்ல என்பதை ஏற்றுக்கொண்டு, host-ல் உள்ள UFW அல்லது nftables மூலம் அந்தப் பணியைச் செய்ய அனுமதிக்கவும்.

போர்ட்கள் மூடப்பட்டுள்ளதை உறுதிப்படுத்துதல்

நீங்கள் மாற்றங்களைச் செய்த பிறகு, வெளிப்புறத்திலிருந்து அதே சோதனையை மீண்டும் இயக்கவும்:

curl -6 -v http://[2001:db8:2a::1]:8080/
nmap -6 2001:db8:2a::1

முன்பு பதிலளித்த போர்ட் இப்போது இணைப்பை மறுக்க வேண்டும் அல்லது காலாவதியாக வேண்டும் (time out). nmap கருவி அந்த போர்ட் filtered அல்லது closed நிலையில் உள்ளதாகக் காட்ட வேண்டும். ஒரு போர்ட் இன்னும் திறந்திருந்தால், மேலே உள்ள நான்கு காரணங்களை மீண்டும் சரிபார்க்கவும்: ஏதேனும் ஒரு service இன்னும் ::-ல் பிணைக்கப்பட்டு (bound) அதற்கு முன்னால் எந்த விதியும் இல்லாமல் இருக்கலாம், UFW-க்கு முன்னால் Docker விதி ஒன்று இருக்கலாம், அல்லது உங்கள் service provider-ன் firewall-க்கு IPv6 பற்றிய புரிதல் இல்லாமல் இருக்கலாம்.

முக்கியமான சேவைகளை பொது இணையத்திலிருந்து முற்றிலும் விலக்கி வைப்பது கூடுதல் பாதுகாப்பைத் தரும். SSH மற்றும் நிர்வாகப் பக்கங்களை WireGuard VPN-க்கு பின்னால் கொண்டு செல்லுங்கள். அவற்றின் போர்ட்களை firewall மூலம் கட்டுப்படுத்தி, tunnel வழியாக மட்டுமே பதிலளிக்கும்படி செய்யுங்கள்; அப்போது IPv6 வெளிப்பாடு குறித்த கவலை உங்களுக்கு இருக்காது. பொதுவில் இருக்கும் சேவைகளைத் தாக்கும் brute-force ஸ்கேன்களைத் தடுக்க, இயல்புநிலை-மறுப்பு (default-deny) firewall-க்கு மேல் SSH-க்கு முன்னால் Fail2ban-ஐப் பயன்படுத்துங்கள்.

போர்ட்கள் என்றால் என்ன என்பது உங்களுக்குப் புதியதாக இருந்தால், போர்ட்கள் என்றால் என்ன மற்றும் சேவைகள் எவ்வாறு கேட்கின்றன (listen) என்ற கட்டுரையை முதலில் வாசிக்கவும்.

FAQ

UFW இயல்பாகவே IPv6-ஐத் தடுக்கிறதா?

நவீன Ubuntu 24.04 நிறுவலில், ஆம். UFW ஆனது IPV6=yes-ஐ /etc/default/ufw-லிருந்து வாசித்து, ஒவ்வொரு விதியையும் IPv4 மற்றும் IPv6 ஆகிய இரண்டிற்கும் பொருந்தும் வகையில் செயல்படுத்துகிறது. மேலும், ufw status கட்டளையானது IPv6 விதிகளை (v6) பின்னொட்டுடன் காட்டுகிறது. பழைய image அல்லது பழைய tutorial-களைப் பயன்படுத்தும்போது IPV6=no அமைப்பில் சிக்கல் ஏற்படலாம்; அல்லது IPv4-ஐ மட்டும் வடிகட்டும் provider firewall-ஐ நம்பியிருக்கும்போதும், Docker ஆனது UFW-ஐத் தாண்டி ஒரு port-ஐ வெளியிடும்போதும் சிக்கல் ஏற்படும். grep IPV6 /etc/default/ufw மூலம் இந்த அமைப்பைச் சரிபார்க்கவும்.

எனது VPS, IPv6-ல் எவற்றை வெளிப்படுத்துகிறது என்பதை எப்படிச் சரிபார்ப்பது?

sudo ss -tlnp கட்டளையை இயக்கவும். உள்ளூர் முகவரி (local address) [::]-ல் தொடங்கும் அனைத்து listener-களையும் கவனிக்கவும்; இது அனைத்து IPv6 interface-களிலும் அந்தச் சேவை பதிலளிப்பதைக் குறிக்கிறது. பின்னர், வேறொரு கணினியிலிருந்து, server-ன் பொது IPv6 முகவரியை curl -6 -v http://[YOUR:IPV6::ADDR]:PORT/ மூலம் நேரடியாகச் சோதிக்கவும் அல்லது nmap -6 YOUR:IPV6::ADDR மூலம் scan செய்யவும். IPv6 scan-ல் திறந்துள்ள, ஆனால் IPv4-ல் மூடப்பட்டுள்ள எந்தவொரு port-ம் உங்கள் பாதுகாப்புக் குறைபாடாகும்.

UFW தடுக்கப்பட்டதாகக் கூறினாலும், எனது Docker container-ன் port-ஐ என்னால் ஏன் அணுக முடிகிறது?

நீங்கள் -p மூலம் ஒரு port-ஐ வெளியிடும்போது, Docker தனது சொந்த firewall விதிகளை UFW-ன் விதிகளுக்கு முன்னால் செருகுகிறது. எனவே, ufw status பட்டியலில் அது மறுக்கப்பட்டதாகக் காட்டப்பட்டாலும், அந்த port அணுகக்கூடியதாகவே இருக்கும். இது IPv4-ல் நடக்கும், Docker-ன் IPv6 ஆதரவு செயல்பாட்டில் இருக்கும்போது IPv6-லும் நடக்கும். -p 127.0.0.1:8080:80 போன்ற குறிப்பிட்ட முகவரிக்கு மட்டும் port-ஐ வெளியிடவும் அல்லது container-ஐ ஒரு reverse proxy-க்கு பின்னால் வைத்து, proxy-ஐ மட்டும் வெளியிடவும்.

எனது IPv4 firewall வலுவாக இருந்தால், எனக்கு இன்னும் IPv6 firewall தேவையா?

ஆம். IPv4 மற்றும் IPv6 ஆகியவை தனித்தனி network stack-கள் மற்றும் தனித்தனி firewall விதிகளைக் கொண்டவை. மிகச்சிறந்த IPv4 விதிகள் கூட IPv6 traffic-க்கு எந்தப் பாதுகாப்பையும் தராது. உங்கள் VPS-க்கு பொது IPv6 முகவரி இருந்தால் (இப்போது பெரும்பாலானவற்றில் உள்ளது), ::-ல் கேட்கும் எந்தவொரு சேவையும், ஒரு IPv6 firewall விதி அல்லது loopback binding அதைத் தடுக்கும் வரை, IPv6 வழியாக அணுகக்கூடியதாகவே இருக்கும்.

ஒரு சேவையை IPv4-ல் மட்டும் அல்லது localhost-ல் மட்டும் கேட்கும்படி செய்வது எப்படி?

அந்தச் சேவையின் சொந்த configuration கோப்பில் அதன் bind முகவரியை அமைக்கவும். IPv4 loopback-க்கு மட்டும் 127.0.0.1-ஐயும், IPv6 listener இல்லாமல் அனைத்து IPv4 முகவரிகளுக்கும் 0.0.0.0-ஐயும் பயன்படுத்தவும். Postgres listen_addresses-ஐயும், SSH ListenAddress-ஐயும் பயன்படுத்துகின்றன; பெரும்பாலான app server-கள் host அல்லது bind flag-ஐ வழங்குகின்றன. sudo ss -tlnp மூலம் முடிவை உறுதிப்படுத்தவும், Local Address-ல் [::] காட்டப்படவில்லை என்பதைச் சரிபார்க்கவும்.