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

Linux-ல் ports என்றால் என்ன? சேவைகள் எப்படி இயங்குகின்றன?

Linux server-ல் traffic-ஐ நிர்வகிக்கும் ports பற்றிய அடிப்படை விளக்கம். ss கட்டளையைப் பயன்படுத்தி எந்தெந்த சேவைகள் இயங்குகின்றன என்பதை கண்டறியும் முறையை விரிவாகக் கற்றுக்கொள்ளுங்கள்.

Port என்றால் என்ன

ஒரு server-ல் ஒரே நேரத்தில் பல சேவைகளை (services) அவற்றின் traffic குழப்பமடையாமல் இயக்குவதற்கு port என்ற எண் பயன்படுகிறது. உங்கள் VPS ஒரு IP address-ஐக் கொண்டிருந்தாலும், அதில் ஒரே நேரத்தில் web server, SSH server மற்றும் database ஆகியவற்றை இயக்க முடியும். ஒரு packet வந்து சேரும்போது, அது எந்த சேவைக்கானது என்பதை operating system அறிந்துகொள்ள வேண்டும். அதற்கு port எண் உதவுகிறது. Web traffic port 443-க்கும், SSH traffic port 22-க்கும் செல்கிறது. IP address packet-ஐ உங்கள் server-க்குக் கொண்டு சேர்க்கிறது; port அந்த packet-ஐ server-ல் உள்ள சரியான நிரலுக்கு (program) கொண்டு சேர்க்கிறது.

Port என்பது 16-bit எண் ஆகும்: 16 bits மூலம் 0 முதல் 65535 வரையிலான எண்களை உருவாக்கலாம். இதில் 0 ஒதுக்கப்பட்டுள்ளது, எனவே நடைமுறையில் ports 1 முதல் 65535 வரை செயல்படுகின்றன. 1024-க்குக் கீழே உள்ள ports "well-known" ports என்று அழைக்கப்படுகின்றன; இவற்றைத் திறக்க root அனுமதி தேவை. இதனால்தான் SSH-க்கு 22, HTTP-க்கு 80, HTTPS-க்கு 443, DNS-க்கு 53 போன்ற பொதுவான சேவைகள் அங்கு இயங்குகின்றன. 1024-க்கு மேல் உள்ள எண்களை சாதாரண நிரல்கள் பயன்படுத்திக்கொள்ளலாம்.

TCP மற்றும் UDP என இரண்டு வகைகள் உள்ளன. ஒரு எண்ணில் உள்ள TCP port-க்கும், அதே எண்ணில் உள்ள UDP port-க்கும் தொடர்பு இல்லை. SSH, HTTP மற்றும் databases போன்ற பெரும்பாலான சேவைகள் TCP என்ற connection-based protocol-ஐப் பயன்படுத்துகின்றன. DNS மற்றும் சில VPN-கள் போன்றவற்றுக்கு connectionless ஆன UDP பயன்படுத்தப்படுகிறது. நீங்கள் firewall-ஐத் திறக்கும்போது, பொதுவாக எந்த வகை என்பதை குறிப்பிட வேண்டும், உதாரணமாக 22/tcp.

Listening என்பது ஒரு நிரல் port-ல் காத்திருப்பதைக் குறிக்கும்

இணைப்புகளைப் பெற விரும்பும் ஒரு நிரல், ஒரு port-ல் "listen" செய்யுமாறு kernel-இடம் கேட்கிறது. அந்த நொடியிலிருந்து அந்த machine-ல் அந்த port திறக்கப்படுகிறது; firewall அனுமதிக்கும் பட்சத்தில், அங்கு வரும் அனைத்திற்கும் அந்த நிரல் பதிலளிக்கும். எதையும் listen செய்யாத ஒரு port, வரும் இணைப்புகளை நிராகரித்துவிடும். எனவே, எந்தவொரு பாதுகாப்புச் சோதனையிலும் முதல் கேள்வி இதுதான்: எது listen செய்கிறது, அது எங்கே உள்ளது?

இதற்கான விடையைக் கண்டறியும் கட்டளை ss:

sudo ss -tlnp

இதில் உள்ள flags எதைக் குறிக்கின்றனவென்றால்: TCP (t), listening sockets மட்டும் (l), numeric ports (n, இதனால் நீங்கள் 22-ஐப் பார்ப்பீர்கள், ssh-ஐ அல்ல), மற்றும் அந்த port-ஐ நிர்வகிக்கும் process (p). ஒரு பொதுவான முடிவு இதோ:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

Process நிரல் (column), எந்த நிரல் ஒவ்வொரு port-ஐயும் நிர்வகிக்கிறது என்பதைத் தெரிவிக்கும். இதன் மூலமே நீங்கள் இயக்க விரும்பாத, ஆனால் இயங்கிக்கொண்டிருக்கும் ஒரு நிரலைக் கண்டறிய முடியும்.

Local Address நெடுவரிசையே மிக முக்கியமானது

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

0.0.0.0:22 என்பது "இந்த இயந்திரத்தில் உள்ள அனைத்து IPv4 முகவரிகளிலும் listen செய்யவும்" என்று பொருள், இதில் அதன் பொது முகவரியும் (public address) அடங்கும். firewall அனுமதிக்கும் பட்சத்தில், இணையம் வழியாக இந்தச் சேவையை IPv4 மூலம் அணுக முடியும்.

[::]:80 என்பது IPv6-க்கு அதே பொருளைக் குறிக்கிறது: பொது முகவரிகள் உட்பட அனைத்து IPv6 முகவரிகளிலும் listen செய்யவும். பல நிரல்கள் இயல்பாகவே இதில் bind ஆகின்றன, மேலும் Linux-ல் ஒரு :: socket பெரும்பாலும் IPv4 இணைப்புகளையும் ஏற்கும்.

127.0.0.1:5432 என்பது "loopback-ல் மட்டும் listen செய்யவும்" என்று பொருள். 127.0.0.1 என்பது ஒரு இயந்திரம் தன்னுடன் தொடர்பு கொள்ளப் பயன்படுத்தும் முகவரியாகும், இது வேறெந்த இடத்திலிருந்தும் அணுகக்கூடியது அல்ல. இதில் bind செய்யப்பட்ட ஒரு சேவையை அதே server-லிருந்து மட்டுமே அணுக முடியும், firewall என்ன சொன்னாலும் இணையத்திலிருந்து அணுக முடியாது. மேலே உள்ள அந்த Postgres வரி அதன் கட்டமைப்பாலேயே பாதுகாப்பானது.

இதிலிருந்து ஒரு நடைமுறை விதி தெளிவாகிறது: உங்கள் சொந்த applications மட்டுமே பயன்படுத்தும் database, cache அல்லது admin panel ஆகியவை 0.0.0.0-ல் அல்லாமல், 127.0.0.1-ல் மட்டுமே bind ஆக வேண்டும். அது ஒரு பொது முகவரியில் listen செய்யவில்லை என்றால், தாக்குதல் நடத்துபவர் அதை அணுக வழியே இல்லை.

Listening என்பதும் reachable என்பதும் ஒன்றல்ல

இன்னொரு முக்கியமான வேறுபாட்டைப் புரிந்துகொள்வது குழப்பத்தைத் தவிர்க்க உதவும். ஒரு machine-ல் port திறந்திருப்பது, அதாவது ஒரு program listening நிலையில் இருப்பது, வெளியில் இருந்து அந்த port-ஐ அணுக முடிவது (reachable) என்பதிலிருந்து மாறுபட்டது. வெளியில் இருந்து அணுகுவதற்கு firewall அனுமதி அளிக்க வேண்டும். ஒரு remote client இணைப்பை ஏற்படுத்த, இந்த இரண்டுமே உண்மையாக இருக்க வேண்டும். இந்த இரண்டு தோல்விகளும் client பக்கத்தில் வெவ்வேறு விதமாகத் தெரியும்: connection refused என்றால் அந்த port-ல் எதுவும் listening நிலையில் இல்லை என்று பொருள்; connection hang ஆகி timeout ஆகிறது என்றால், firewall அந்த packet-ஐத் தடுத்துவிட்டது என்று பொருள். அந்த இரண்டு SSH பிழைகளும் சரியாக இதையேதான் தெரிவிக்கின்றன.

எனவே, இங்கே இரண்டு அடுக்குக் கட்டுப்பாடுகள் உள்ளன. ஒவ்வொரு service-ன் bind address-ஐ அமைப்பதன் மூலம் எவை listening நிலையில் இருக்க வேண்டும் என்பதை நீங்கள் தீர்மானிக்கிறீர்கள். firewall மூலம் வெளியில் இருந்து எதை அணுகலாம் என்பதை நீங்கள் தீர்மானிக்கிறீர்கள். முறையாக நிர்வகிக்கப்படும் server-ல் இவை இரண்டுமே பயன்படுத்தப்படும்: services தேவைப்படும் இடங்களில் மட்டுமே bind செய்யப்படும், மேலும் நீங்கள் வெளிப்படையாக அனுமதிக்காத அனைத்தையும் firewall மறுத்துவிடும். ss மூலம் எவை listening நிலையில் உள்ளன என்று பார்ப்பது முதல் படி; firewall எதை அனுமதிக்கிறது என்பதைத் தீர்மானிப்பது இரண்டாம் படி, இது UFW உடனான firewall அடிப்படைகள் பகுதியில் விளக்கப்பட்டுள்ளது.

இதில் பலரைச் சிக்க வைக்கும் ஒரு நுணுக்கமான விஷயம் உள்ளது. IPv4 மற்றும் IPv6 ஆகியவை தனித்தனியானவை. IPv4-ஐ மட்டும் உள்ளடக்கிய firewall, [::] services-ஐ IPv6-ல் திறந்து வைத்துவிடும். அந்த குறிப்பிட்ட சிக்கலைப் பற்றித் தனிப் பதிவு உள்ளது: IPv6 firewall சிக்கல்.

FAQ

எனது Linux server-ல் எந்தெந்த ports திறந்திருக்கின்றன என்பதை எப்படிப் பார்ப்பது?

TCP-க்கு sudo ss -tlnp கட்டளையையும், UDP-க்கு sudo ss -ulnp கட்டளையையும் இயக்கவும். இது listening நிலையில் உள்ள அனைத்து sockets, port, அது பிணைக்கப்பட்டுள்ள local address மற்றும் அதை இயக்கும் process ஆகியவற்றை பட்டியலிடும். Local Address நிரலைப் பார்க்கவும்: 0.0.0.0 அல்லது [::] என்பது அந்த service நெட்வொர்க்கிற்கு வெளிப்படையாக உள்ளது என்பதைக் குறிக்கும், அதேசமயம் 127.0.0.1 என்பது அந்த machine-க்குள் மட்டுமே இயங்குகிறது என்பதைக் குறிக்கும்.

0.0.0.0 மற்றும் 127.0.0.1 ஆகியவற்றுக்கு இடையே உள்ள வேறுபாடு என்ன?

0.0.0.0 என்பது "அனைத்து IPv4 முகவரிகளிலும் listen செய்" என்று பொருள், இதில் public முகவரியும் அடங்கும், எனவே நெட்வொர்க் வழியாக அந்த service-ஐ அணுக முடியும். 127.0.0.1 என்பது loopback முகவரி, இது machine தனக்குத்தானே பேசிக்கொள்ளப் பயன்படுத்தும் முகவரி. இது வெளியில் இருந்து அணுக முடியாதது, எனவே இதனுடன் பிணைக்கப்பட்ட service-ஐ local-ஆக மட்டுமே அணுக முடியும். internal services-ஐ 127.0.0.1-ல் பிணைக்கவும், அப்போதுதான் அவை வெளியில் தெரியாது.

ஒரு service இயங்க firewall-ல் port-ஐத் திறக்க வேண்டுமா?

பிற கணினிகளிலிருந்து அணுகப்பட வேண்டிய service-களுக்கு மட்டுமே இது தேவை. 127.0.0.1-ல் பிணைக்கப்பட்ட service-க்கு firewall விதி தேவையில்லை, ஏனெனில் வெளியில் இருந்து எவராலும் அதை அணுக முடியாது. 0.0.0.0 அல்லது [::]-ல் உள்ள service-க்கு traffic-ஐ அனுமதிக்க firewall விதி தேவை, மேலும் நீங்கள் விதி சேர்க்கும் வரை அது இயல்பாகவே தடுக்கப்பட வேண்டும்.

TCP port மற்றும் UDP port-க்கு இடையே உள்ள வேறுபாடு என்ன?

TCP என்பது connection-ஐ அடிப்படையாகக் கொண்டது, இது SSH, web servers மற்றும் databases போன்ற பெரும்பாலான service-களால் பயன்படுத்தப்படுகிறது. UDP என்பது connection-less, இது DNS மற்றும் சில VPN-களால் பயன்படுத்தப்படுகிறது. TCP மற்றும் UDP-ல் ஒரே எண் இருந்தாலும் அவை தனித்தனி ports ஆகும், எனவே 53/tcp மற்றும் 53/udp என்பவை வெவ்வேறானவை. firewall விதிகளை எழுதும்போது நீங்கள் protocol-ஐக் குறிப்பிட வேண்டும், உதாரணமாக 22/tcp.