SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-24

پورٹ کیا ہے اور Linux میں سروسز کیسے چلتی ہیں

پورٹ کیا ہے اور Linux میں سروسز کیسے کام کرتی ہیں؟ اس گائیڈ میں ss command کے ذریعے listening ports چیک کرنا اور TCP بمقابلہ UDP کے فرق کو تفصیل سے سیکھیں۔

پورٹ اصل میں کیا ہوتا ہے

پورٹ ایک نمبر ہے جو ایک سرور کو ایک وقت میں کئی سروسز چلانے کی اجازت دیتا ہے تاکہ ان کا ٹریفک آپس میں مکس نہ ہو۔ آپ کے VPS کا ایک IP address ہوتا ہے، لیکن وہ ایک ہی وقت میں ویب سرور، SSH سرور، اور ڈیٹا بیس چلا سکتا ہے۔ جب کوئی پیکٹ پہنچتا ہے، تو آپریٹنگ سسٹم کو یہ جاننے کی ضرورت ہوتی ہے کہ وہ کس کے لیے ہے۔ پورٹ نمبر اس کا جواب ہے۔ ویب ٹریفک پورٹ 443 پر جاتا ہے، اور SSH پورٹ 22 پر۔ IP address پیکٹ کو آپ کے سرور تک لاتا ہے؛ پورٹ اسے سرور پر صحیح پروگرام تک پہنچاتا ہے۔

پورٹ ایک 16-bit نمبر ہے: 16 bits سے 0 سے 65535 تک نمبر ملتے ہیں، اور 0 reserved ہے، اس لیے عملی طور پر پورٹس 1 سے 65535 تک چلتے ہیں۔ 1024 سے نیچے کے پورٹس "well-known" پورٹس کہلاتے ہیں اور انہیں کھولنے کے لیے root کی ضرورت ہوتی ہے، اسی لیے معیاری سروسز وہاں ہوتی ہیں: SSH کے لیے 22، HTTP کے لیے 80، HTTPS کے لیے 443، اور DNS کے لیے 53۔ 1024 سے اوپر کا کوئی بھی نمبر عام پروگراموں کے لیے استعمال ہو سکتا ہے۔

اس کی دو اقسام ہیں، TCP اور UDP، اور ایک پورٹ نمبر ایک میں دوسرے سے الگ ہوتا ہے۔ TCP ایک connection-based protocol ہے جسے زیادہ تر سروسز استعمال کرتی ہیں، جیسے SSH، HTTP، اور ڈیٹا بیس۔ UDP connectionless ہے اور DNS اور کچھ VPNs جیسی چیزوں کے لیے استعمال ہوتا ہے۔ جب آپ firewall کھولتے ہیں تو آپ عام طور پر نام بتاتے ہیں، مثال کے طور پر 22/tcp۔

Listening کا مطلب ہے کہ ایک پروگرام پورٹ پر انتظار کر رہا ہے

ایک پروگرام جو کنکشنز وصول کرنا چاہتا ہے وہ کرنل سے کسی پورٹ پر "listen" کرنے کا کہتا ہے۔ اس لمحے سے مشین پر پورٹ کھل جاتا ہے اور پروگرام firewall کی اجازت کے مطابق وہاں پہنچنے والی ہر چیز کا جواب دیتا ہے۔ وہ پورٹ جس پر کوئی listen نہیں کر رہا ہوتا، وہ کنکشنز کو مسترد کر دیتا ہے۔ اس لیے کسی بھی سیکیورٹی چیک کا پہلا سوال یہ ہوتا ہے: کیا listen کر رہا ہے، اور کہاں۔

اس کا جواب دینے والا کمانڈ ss ہے:

sudo ss -tlnp

Flags کا مطلب ہے TCP (t)، صرف listening sockets (l)، numeric ports (n، تاکہ آپ کو 22 کے بجائے ssh نظر آئے)، اور مالک پروسیس (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 کالم آپ کو بتاتا ہے کہ کون سا پروگرام ہر پورٹ کا مالک ہے، جس کے ذریعے آپ اس چیز کا پتہ لگا سکتے ہیں جسے آپ نے غلطی سے چلنے کے لیے چھوڑ دیا تھا۔

Local Address کالم وہ حصہ ہے جو اہم ہے

ہر پورٹ کے سامنے دیے گئے ایڈریس کو غور سے پڑھیں، کیونکہ یہ فیصلہ کرتا ہے کہ کون سروس تک پہنچ سکتا ہے۔ آپ کو مسلسل تین صورتیں نظر آئیں گی۔

0.0.0.0:22 کا مطلب ہے "اس مشین کے پاس موجود ہر IPv4 address پر listen کریں،" بشمول اس کے public address کے۔ سروس انٹرنیٹ سے IPv4 پر پہنچائی جا سکتی ہے، اگر firewall اجازت دے۔

[::]:80 کا مطلب IPv6 کے لیے وہی چیز ہے: ہر IPv6 address پر listen کریں، بشمول public کے۔ بہت سے پروگرام ڈیفالٹ کے طور پر یہاں bind ہوتے ہیں، اور Linux پر ایک :: socket اکثر IPv4 کو بھی قبول کرتا ہے۔

127.0.0.1:5432 کا مطلب ہے "صرف loopback پر listen کریں۔" 127.0.0.1 وہ ایڈریس ہے جو مشین خود سے بات کرنے کے لیے استعمال کرتی ہے، اور یہ کہیں اور سے routable نہیں ہے۔ یہاں bind ہونے والی سروس صرف اسی سرور سے پہنچائی جا سکتی ہے، انٹرنیٹ سے کبھی نہیں، چاہے آپ کا firewall کچھ بھی کہے۔ اوپر دی گئی Postgres لائن ساخت کے لحاظ سے محفوظ ہے۔

اس سے ایک عملی اصول نکلتا ہے: ڈیٹا بیس، کیش (cache)، یا ایڈمن پینل جسے صرف آپ کی اپنی ایپلی کیشنز استعمال کرتی ہیں، اسے 127.0.0.1 پر bind ہونا چاہیے، نہ کہ 0.0.0.0 پر۔ اگر یہ کبھی public address پر listen نہیں کرتا، تو حملہ آور کے پاس پہنچنے کے لیے کچھ نہیں ہوتا۔

Listening اور Reachable ایک ہی چیز نہیں ہیں

ایک اور فرق بہت سی الجھنوں سے بچاتا ہے۔ مشین پر پورٹ کا کھلا ہونا، یعنی ایک پروگرام listen کر رہا ہے، اس سے مختلف ہے کہ وہ پورٹ باہر سے reachable ہے، یعنی firewall اس کی اجازت دیتا ہے۔ ریموٹ کلائنٹ کے کنیکٹ ہونے کے لیے دونوں کا درست ہونا ضروری ہے۔

اس لیے کنٹرول کے دو لیئرز ہیں۔ آپ ہر سروس کے bind address کو سیٹ کر کے فیصلہ کرتے ہیں کہ کیا listen کرے گا۔ اور آپ firewall کے ذریعے فیصلہ کرتے ہیں کہ باہر کی دنیا کس تک پہنچ سکتی ہے۔ ایک بہتر طریقے سے چلنے والا سرور دونوں استعمال کرتا ہے: سروسز صرف وہاں bind ہوتی ہیں جہاں ان کی ضرورت ہوتی ہے، اور firewall ہر اس چیز کو روک دیتا ہے جسے آپ نے واضح طور پر اجازت نہیں دی۔ ss کے ساتھ یہ دیکھنا کہ کیا listen کر رہا ہے، پہلا قدم ہے؛ یہ فیصلہ کرنا کہ firewall کیا اجازت دیتا ہے، دوسرا قدم ہے، جو firewalls 101 with UFW میں بتایا گیا ہے۔

یہاں ایک باریکی ہے جو لوگوں کو مشکل میں ڈالتی ہے۔ IPv4 اور IPv6 الگ ہیں، اور ایک firewall جو صرف IPv4 کو کور کرتا ہے، وہ IPv6 پر [::] سروسز کو کھلا چھوڑ دیتا ہے۔ اس مخصوص جال کا اپنا پوسٹ ہے: the IPv6 firewall trap۔

FAQ

میں اپنے Linux سرور پر یہ کیسے دیکھ سکتا ہوں کہ کون سے پورٹس کھلے ہیں؟

TCP کے لیے sudo ss -tlnp یا UDP کے لیے sudo ss -ulnp چلائیں۔ یہ ہر listening socket، پورٹ، اس کے bind شدہ local address، اور اس کے مالک پروسیس کی فہرست دیتا ہے۔ Local Address کالم پڑھیں: 0.0.0.0 یا [::] کا مطلب ہے کہ سروس نیٹ ورک کے لیے دستیاب ہے، جبکہ 127.0.0.1 کا مطلب ہے کہ یہ صرف مشین پر ہی listen کر رہی ہے۔

0.0.0.0 اور 127.0.0.1 میں کیا فرق ہے؟

0.0.0.0 کا مطلب ہے "تمام IPv4 addresses پر listen کریں،" بشمول public address کے، تاکہ سروس نیٹ ورک سے پہنچائی جا سکے۔ 127.0.0.1 loopback ہے، وہ ایڈریس جو مشین خود سے بات کرنے کے لیے استعمال کرتی ہے، اور یہ کہیں اور سے routable نہیں ہے، اس لیے اس پر bind ہونے والی سروس صرف مقامی طور پر ہی پہنچائی جا سکتی ہے۔ انٹرنل سروسز کو 127.0.0.1 پر bind کریں تاکہ وہ کبھی ایکسپوز نہ ہوں۔

کیا مجھے کسی سروس کو کام کرنے کے لیے firewall میں پورٹ کھولنے کی ضرورت ہے؟

صرف ان سروسز کے لیے جن تک دوسری مشینوں سے پہنچنا ضروری ہے۔ 127.0.0.1 پر bind ہونے والی سروس کو کسی firewall rule کی ضرورت نہیں ہوتی کیونکہ کوئی بیرونی چیز اسے پہنچ نہیں سکتی۔ 0.0.0.0 یا [::] پر موجود سروس کو ٹریفک کی اجازت دینے کے لیے firewall rule کی ضرورت ہوتی ہے، اور ڈیفالٹ طور پر اسے روک دینا چاہیے جب تک کہ آپ کوئی رول نہ شامل کریں۔

TCP پورٹ اور UDP پورٹ میں کیا فرق ہے؟

TCP connection-based ہے اور زیادہ تر سروسز، جیسے SSH، ویب سرورز، اور ڈیٹا بیس، اسے استعمال کرتی ہیں۔ UDP connectionless ہے اور DNS اور کچھ VPNs کے لیے استعمال ہوتا ہے۔ TCP اور UDP میں ایک ہی نمبر الگ الگ پورٹس ہوتے ہیں، اس لیے 53/tcp اور 53/udp مختلف ہیں۔ جب آپ firewall rules لکھتے ہیں تو آپ پروٹوکول کا نام لیتے ہیں، مثال کے طور پر 22/tcp۔