کھلے پورٹوں کی فہرست دراصل آپ کے سرور تک پہنچنے کے راستوں کی فہرست ہے۔ باقی سب کچھ — فائروال، WAF، دراندازی کی نشاندہی — اسی کے اوپر بنتا ہے۔ اسی لیے ہر جائزے میں «یہاں کیا سن رہا ہے» سب سے پہلے آتا ہے، اور اسی لیے یہ وہ جانچ بھی ہے جو اکثر ناخوشگوار جواب دیتی ہے: جو کچھ سامنے آتا ہے اس کا آدھا آپ نے نہیں بلکہ کسی پیکج کے تنصیب کار نے کھولا ہوتا ہے۔
نتیجہ پڑھنا
sudo ss -tulpn
جھنڈے: TCP کے لیے t، UDP کے لیے u، صرف سننے والوں کے لیے l، عمل کے لیے p، اور n تاکہ اعداد اعداد ہی رہیں۔ sudo کے بغیر عمل کا کالم خالی رہتا ہے اور مشق بے معنی ہو جاتی ہے۔
اہم کالم Local Address:Port ہے، اور وہاں کا فرق بنیادی ہے:
127.0.0.1:3306— سروس صرف خود مشین سے قابلِ رسائی ہے۔ یہ اچھا ہے؛0.0.0.0:3306— ہر IPv4 پتے سے، یعنی انٹرنیٹ سے۔ اسی کو جانچنا ہے؛[::]:3306— وہی بات IPv6 کے لیے۔ الگ سطر، اور باقاعدگی سے نظرانداز ہوتی ہے؛203.0.113.25:443— کسی مخصوص پتے پر، عموماً جان بوجھ کر۔
پھر 0.0.0.0 یا [::] والی ہر سطر کے لیے ایک سوال کریں: کیا کسی اجنبی کو یہاں تک پہنچنا چاہیے۔ 80 اور 443 کے لیے جواب ہاں ہے۔ باقی تقریباً ہر چیز کے لیے نہیں۔
معمول کے نتائج
Redis، پورٹ 6379۔ وہاں کی سب سے خطرناک سطر۔ بطور طے شدہ Redis پاس ورڈ نہیں مانگتا، اور اس کی کمانڈیں ڈسک پر فائل لکھنے کی اجازت دیتی ہیں — یعنی authorized_keys میں کسی اور کی کلید۔ عوامی پتے پر Redis کے نمودار ہونے اور اس کے استعمال کے درمیان گھنٹے گزرتے ہیں، کبھی اس سے بھی کم۔ ترتیبات میں bind 127.0.0.1 اور protected-mode yes کی موجودگی جانچیں۔
Memcached، 11211/UDP۔ چاہے اندر کوئی قیمتی چیز نہ بھی ہو، آپ کا سرور دوسروں کے حملوں کا بڑھاوا بن جاتا ہے — اور شکایت آپ ہی کے فراہم کنندہ کی طرف سے آئے گی۔
MySQL اور PostgreSQL، 3306 اور 5432۔ پاس ورڈ تو ہے، مگر اس کے خلاف اندازہ لگانا مسلسل چلتا ہے، اور ڈیٹابیس کے نسخے مطلوبہ سے کم بار تازہ ہوتے ہیں۔ انہیں تقریباً کبھی باہر دیکھنے کی ضرورت نہیں: ایپلیکیشن اسی مشین پر ہے، اور آپ کے اپنے کام کے لیے SSH سرنگ کافی ہے۔
Elasticsearch 9200، MongoDB 27017۔ تاریخی طور پر بطور طے شدہ بغیر تصدیق کے۔ ان کی عوامی مثالیں ڈیٹا کے افشا کی خبروں کا مستقل ذریعہ ہیں۔
Docker کا API، 2375۔ کھلا Docker کنٹرول پورٹ میزبان پر بغیر کسی پاس ورڈ کے root ہے۔ یہ عموماً Docker تک دور دراز رسائی کے تجربات کے بعد نمودار ہوتا ہے۔
کنٹرول پینل اور phpMyAdmin اپنے اپنے پورٹوں پر: 8080، 8083، 10000۔ ہم یہ نہیں کہتے کہ انہیں کبھی نہ کھولیں، مگر کوششوں کا سب سے بڑا حصہ عین یہی جمع کرتے ہیں۔
سروس میں درست کریں، فائروال میں نہیں
ہر نتیجے کو UFW کے قاعدے سے بند کر دینے کی خواہش قابلِ فہم ہے، مگر یہ دوسری صف ہے، پہلی نہیں۔ قاعدہ غلطی سے مٹ سکتا ہے، فائروال خرابی دور کرتے وقت عارضی طور پر بند ہو سکتا ہے، اور Docker تو UFW کو مکمل طور پر نظرانداز کر کے پورٹ شائع کرتا ہے۔ خود سروس کی ترتیبات میں جوڑنے کی سیٹنگ یہ سب جھیل جاتی ہے:
- MySQL/MariaDB —
bind-address = 127.0.0.1؛ - PostgreSQL —
listen_addresses = 'localhost'؛ - Redis —
bind 127.0.0.1 ::1؛ - Docker Compose —
"127.0.0.1:5432:5432"کے طور پر شائع کریں۔
اور فائروال اس کے اوپر بیمے کے طور پر آتا ہے، اس کی جگہ نہیں۔
جب واضح نہ ہو تو عمل کیسے ڈھونڈیں
ss نام اور pid دیتا ہے۔ پھر:
sudo systemctl status <pid>
sudo lsof -i :8080
پہلی کمانڈ اُس systemd یونٹ کا نام بتاتی ہے جس سے عمل تعلق رکھتا ہے — اور یہ عموماً سمجھنے کے لیے کافی ہے کہ یہ کیا ہے اور آیا ضروری ہے۔ مگر کوئی نامانوس عمل جو بلند پورٹ پر سن رہا ہو اور نظامی ڈائریکٹریوں سے باہر سے چلا ہو — مثلاً /tmp یا /dev/shm سے — اب ترتیبات کا سوال نہیں بلکہ الگ تحقیق کی وجہ ہے۔
باہر سے جانچ لازمی ہے
ss بتاتا ہے کہ «کیا سن رہا ہے»، یہ نہیں کہ «کس تک پہنچا جا سکتا ہے»۔ ان کے درمیان فائروال، NAT اور خود فراہم کنندہ کے قواعد کھڑے ہیں۔ واحد ایماندار جواب کسی دوسری مشین سے اسکین کرنے سے ملتا ہے:
nmap -Pn -p- 203.0.113.25
nmap -Pn -p- -6 2001:db8::1
دوسری کمانڈ نہ چھوڑیں: تقریباً ہر VPS کا IPv6 پتہ ہوتا ہے، اس کے قواعد الگ لکھے جاتے ہیں، اور سروس پروٹوکول کے دونوں نسخوں پر بیک وقت سنتی ہے۔
یہ ایک بار کی جانچ نہیں
کھلے پورٹوں کی فہرست خود بخود بدلتی رہتی ہے۔ ایک پیکج نصب کیا اور وہ ایک سروس لے آیا اور پورٹ کھول دیا۔ ایک پینل تازہ کیا اور اس نے طے شدہ قدر بحال کر دی۔ ایک کنٹینر چلایا اور اس نے فائروال کو نظرانداز کر کے پورٹ شائع کر دیا۔ ایک بار کی جانچ صرف آج کا جواب دیتی ہے، اس سے زیادہ نہیں۔
قدر خود فہرست میں نہیں بلکہ اس کی تبدیلیوں میں ہے: ایک نیا پورٹ جو کل نہیں تھا، ایک مختصر اور نہایت بامعنی اشارہ ہے۔ اور اسی طرح اس پر نظر رکھنی چاہیے — تاریخ کے ساتھ ایک عکس کے طور پر، نہ کہ یادداشت سے یاد کیے گئے ss کے نتیجے کے طور پر۔ نیچے ڈیمو صفحہ عین یہی دکھاتا ہے۔