SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-26

Linux-এ port কী এবং service কীভাবে listen করে

Linux-এ port কীভাবে traffic সঠিক service-এ পাঠায়, ss দিয়ে কোন port listen করছে তা পড়ুন, এবং local port ও public port-এর পার্থক্য বুঝুন।

একটি port আসলে কী

একটি port হলো এমন একটি সংখ্যা, যা একই server-এ একসঙ্গে অনেক service চালাতে দেয় এবং তাদের network traffic একে অপরের সঙ্গে মিশে যাওয়া ঠেকায়। আপনার VPS-এর একটি IP address আছে, কিন্তু সেখানে একই সময়ে web server, SSH server এবং database চলতে পারে। কোনো packet এলে operating system-কে জানতে হয়, সেটি কোন service-এর জন্য এসেছে। port number সেই পরিচয় দেয়। Web traffic port 443-এ এবং SSH port 22-এ যায়। IP address packet-টিকে আপনার server-এ পৌঁছে দেয়; port সেটিকে ওই server-এর সঠিক program-এ পৌঁছে দেয়।

একটি port হলো 16-bit number। 16 bit-এর পরিসর 0 থেকে 65535 পর্যন্ত, তবে 0 সংরক্ষিত থাকায় বাস্তবে port 1 থেকে 65535 পর্যন্ত ব্যবহৃত হয়। 1024-এর নিচের port-গুলোকে "well-known" port বলা হয় এবং এগুলো open করতে root প্রয়োজন। তাই standard service-গুলো সাধারণত এই port-গুলো ব্যবহার করে: SSH-এর জন্য 22, HTTP-এর জন্য 80, HTTPS-এর জন্য 443 এবং DNS-এর জন্য 53। 1024-এর বেশি port সাধারণ program-গুলো ব্যবহার করতে পারে।

port দুই ধরনের: TCP এবং UDP। এক ধরনের port-এর number অন্য ধরনের একই number থেকে আলাদা। TCP হলো connection-based protocol, যা SSH, HTTP এবং database-এর মতো অধিকাংশ service ব্যবহার করে। UDP হলো connectionless protocol, যা DNS এবং কিছু VPN-এর মতো service-এ ব্যবহৃত হয়। Firewall-এ কোনো port open করার সময় সাধারণত কোন protocol ব্যবহার হবে তা উল্লেখ করতে হয়, যেমন 22/tcp

Listening বলতে বোঝায় কোনো program একটি port-এর জন্য অপেক্ষা করছে

যে program connection গ্রহণ করতে চায়, সেটি kernel-কে একটি port-এ “listen” করতে বলে। এরপর ওই port মেশিনে open থাকে এবং firewall-এর নিয়ম প্রযোজ্য থাকা সাপেক্ষে program সেখানে আসা connection-এর উত্তর দেয়। কোনো port-এ কিছু listening না থাকলে সেটি connection প্রত্যাখ্যান করে। তাই যেকোনো security check-এর প্রথম প্রশ্ন হলো: কী listening করছে এবং কোথায়।

এর উত্তর পাওয়ার command হলো ss:

sudo ss -tlnp

Flag-গুলো TCP (t), শুধু listening socket (l), numeric port (n; তাই ssh-এর বদলে 22 দেখা যায়) এবং সংশ্লিষ্ট 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-এর মালিক program-এর নাম দেখা যায়। এভাবেই অনিচ্ছাকৃতভাবে চালু থাকা কোনো program শনাক্ত করা যায়।

Local Address কলামটিই গুরুত্বপূর্ণ

প্রতিটি port-এর সামনে থাকা address মনোযোগ দিয়ে পড়ুন, কারণ এর ওপর নির্ভর করে কারা service-টিতে সংযোগ করতে পারবে। এখানে আপনি নিয়মিত তিনটি অবস্থা দেখতে পাবেন।

0.0.0.0:22 অর্থ হলো, এই মেশিনের থাকা প্রতিটি IPv4 address-এ listen করা, public address-সহ। Firewall অনুমতি দিলে service-টিতে IPv4-এর মাধ্যমে Internet থেকে সংযোগ করা যাবে।

[::]:80 IPv6-এর ক্ষেত্রে একই অর্থ বহন করে: public address-সহ প্রতিটি IPv6 address-এ listen করা। অনেক program ডিফল্টভাবে এখানে bind করে, এবং Linux-এ একটি :: socket প্রায়ই IPv4 connection-ও গ্রহণ করে।

127.0.0.1:5432 অর্থ হলো, শুধু loopback-এ listen করা। 127.0.0.1 হলো একটি machine নিজের সঙ্গে যোগাযোগের জন্য যে address ব্যবহার করে, এবং এটি অন্য কোনো স্থান থেকে routable নয়। এখানে bind করা service-এ শুধু একই server থেকে সংযোগ করা যায়; firewall configuration যা-ই হোক, Internet থেকে কখনো নয়। উপরের Postgres line-টি এই configuration-এর কারণে নিরাপদ।

ব্যবহারিক নিয়মটি এখান থেকেই সরাসরি আসে: যে database, cache বা admin panel শুধু আপনার নিজের application-গুলো ব্যবহার করে, সেটি 0.0.0.0-এ নয়, 127.0.0.1-এ bind করা উচিত। এটি যদি কখনো public address-এ listen না করে, attacker-এর কাছে পৌঁছানোর মতো কোনো endpoint থাকে না।

Listening port মানেই reachable নয়

আরেকটি পার্থক্য অনেক বিভ্রান্তি দূর করে। মেশিনে কোনো port open থাকা, অর্থাৎ কোনো program সেই port-এ listening অবস্থায় থাকা, বাইরে থেকে port-টি reachable হওয়ার সমান নয়। বাইরে থেকে reachable হওয়ার অর্থ হলো firewall সেই সংযোগের অনুমতি দিচ্ছে। Remote client-এর সংযোগ স্থাপনের জন্য দুটিই সত্য হতে হবে। Client-এর দিক থেকেও এই দুই ধরনের ব্যর্থতা আলাদা দেখায়: connection refused হলে কোনো program listening অবস্থায় ছিল না। আর connection কিছুক্ষণ অপেক্ষা করে timeout হলে সাধারণত firewall packet-টি drop করেছে। ওই দুই SSH error যে বিষয়টি জানায় সেটিই এখানে প্রযোজ্য।

তাই control-এর দুটি স্তর আছে। প্রতিটি service-এর bind address নির্ধারণ করে আপনি ঠিক করেন কোন service কোথায় listening করবে। Firewall ব্যবহার করে আপনি ঠিক করেন বাইরের network কোন service-এ পৌঁছাতে পারবে। সঠিকভাবে পরিচালিত server উভয় পদ্ধতিই ব্যবহার করে: service-গুলো শুধু প্রয়োজনীয় address-এ bind করে, এবং firewall-এ স্পষ্টভাবে অনুমতি না দেওয়া সবকিছু deny করা হয়। ss দিয়ে কোন port listening অবস্থায় আছে তা দেখা প্রথম ধাপ। Firewall কী অনুমতি দিচ্ছে তা নির্ধারণ করা দ্বিতীয় ধাপ; এটি UFW দিয়ে firewalls 101-এ ব্যাখ্যা করা হয়েছে।

এখানে একটি সূক্ষ্ম বিষয় সমস্যা তৈরি করতে পারে। IPv4 এবং IPv6 আলাদা। তাই firewall শুধু IPv4-এর ক্ষেত্রে প্রযোজ্য হলে IPv6-এ [::] service open থেকে যায়। এই নির্দিষ্ট সমস্যাটি IPv6 firewall trap-এ আলাদাভাবে ব্যাখ্যা করা হয়েছে।

FAQ

Linux সার্ভারে কোন port খোলা আছে তা কীভাবে দেখব?

TCP-এর জন্য sudo ss -tlnp এবং UDP-এর জন্য sudo ss -ulnp চালান। এটি প্রতিটি listening socket, port, socket-টি যে local address-এ bind করা আছে এবং সেটির মালিক process দেখায়। Local Address column দেখুন: 0.0.0.0 বা [::] হলে service-টি network-এ exposed, আর 127.0.0.1 হলে এটি শুধু নিজস্ব machine-এ listen করছে।

0.0.0.0 এবং 127.0.0.1-এর মধ্যে পার্থক্য কী?

0.0.0.0-এর অর্থ হলো “সব IPv4 address-এ listen করা”, যার মধ্যে public address-ও আছে। তাই service-টি network থেকে accessible হতে পারে। 127.0.0.1 হলো loopback, অর্থাৎ machine নিজে নিজের সঙ্গে যোগাযোগের জন্য যে address ব্যবহার করে। এটি অন্য কোনো স্থান থেকে routable নয়। তাই এতে bind করা service শুধু localভাবেই accessible। Internal service-গুলোকে 127.0.0.1-এ bind করুন, যাতে সেগুলো কখনও exposed না হয়।

কোনো service কাজ করার জন্য কি firewall-এ port খুলতে হবে?

শুধু যেসব service-এ অন্য machine থেকে access করতে হবে, সেগুলোর জন্য। 127.0.0.1-এ bind করা service-এর জন্য firewall rule প্রয়োজন নেই, কারণ কোনো external source সেটিতে access করতে পারবে না। 0.0.0.0 বা [::]-এ চলা service-এর traffic অনুমোদনের জন্য firewall rule প্রয়োজন। Rule যোগ না করা পর্যন্ত traffic defaultভাবে deny করা উচিত।

TCP port এবং UDP port-এর মধ্যে পার্থক্য কী?

TCP connection-based এবং এটি SSH, web server ও database-এর মতো অধিকাংশ service ব্যবহার করে। UDP connectionless এবং DNS ও কিছু VPN ব্যবহার করে। TCP ও UDP-তে একই number আলাদা port নির্দেশ করে। তাই 53/tcp এবং 53/udp ভিন্ন। Firewall rule লেখার সময় protocol-এর নাম উল্লেখ করতে হয়, যেমন 22/tcp