Ports & Services
একটা machine-এ একটাই IP থাকলেও SSH, web server, database — সব একসাথে চলতে পারে। Port এই সমস্যার সমাধান। কোন port-এ কী চলছে সেটা দেখতে পারা network security-র core skill।
Port কেন দরকার
সমস্যাটা বোঝো:
তোমার server-এর IP হলো 192.168.1.100। এই একটা IP দিয়েই SSH, web server, আর database — তিনটো service চলছে। কেউ যখন এই IP-তে connect করে, Linux কীভাবে বুঝবে সে SSH চায় নাকি web page চায় নাকি database চায়?
Port এই সমস্যার সমাধান।
Port হলো IP address-এর পাশে একটা number যেটা বলে দেয় কোন service-এর সাথে কথা বলতে চাইছো:
192.168.1.100:22 → SSH service
192.168.1.100:80 → Web server
192.168.1.100:3306 → MySQL databaseএকই ঠিকানায় (IP) আলাদা দরজা (port) — প্রতিটা দরজায় আলাদা service বসে আছে।
Common Ports
| Port | Service | কী করে |
|---|---|---|
| 22 | SSH | নিরাপদ remote terminal access |
| 80 | HTTP | Web traffic (plain) |
| 443 | HTTPS | Web traffic (encrypted) |
| 21 | FTP | File transfer |
| 25 | SMTP | Email পাঠানো |
| 53 | DNS | Domain name → IP resolution |
| 3306 | MySQL | Database |
| 5432 | PostgreSQL | Database |
| 8080 | HTTP Alt | Alternative web port |
Port range:
- 0–1023 — Well-known ports। System services। Root ছাড়া bind করা যায় না।
- 1024–49151 — Registered ports। Applications ব্যবহার করে।
- 49152–65535 — Dynamic ports। Temporary connections-এ ব্যবহার হয়।
ss
কোন port-এ কী listen করছে দেখো — modern tool।
# সব listening TCP ports দেখো
ss -tlnp
# সব listening UDP ports
ss -ulnp
# সব connections (established সহ)
ss -tanp
# নির্দিষ্ট port খোঁজো
ss -tlnp | grep :80Flags-এর মানে:
| Flag | মানে |
|---|---|
-t | TCP connections |
-u | UDP connections |
-l | শুধু listening ports |
-n | Number দেখাও (service name না) |
-p | কোন process সেটা দেখাও |
-a | সব connections |
Output বোঝো:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* sshd
LISTEN 0 511 127.0.0.1:3306 0.0.0.0:* mysqld
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* nginxLocal Address-এর মানে বোঝাটা critical:
| Address | মানে | Security impact |
|---|---|---|
0.0.0.0:22 | সব network interface-এ listen | যেকোনো IP থেকে connect করা যাবে |
127.0.0.1:3306 | শুধু localhost-এ listen | শুধু এই machine থেকে access হবে, বাইরে থেকে না |
192.168.1.100:8080 | নির্দিষ্ট interface-এ | শুধু সেই network থেকে |
0.0.0.0:22 → SSH বাইরে থেকে accessible — নিরাপদ হতে হবে
127.0.0.1:3306 → Database শুধু local — ভালো security practiceDatabase কখনো 0.0.0.0 তে bind করবে না। যদি MySQL 0.0.0.0:3306-এ bind হয়, তাহলে ইন্টারনেট থেকে database-এ direct connect করার চেষ্টা করা সম্ভব। সবসময় 127.0.0.1 বা specific internal IP ব্যবহার করো।
netstat
পুরনো tool কিন্তু CTF machines-এ এখনও পাবে।
# Install (net-tools package)
sudo apt install net-tools
# Listening ports
netstat -tlnp
# Active connections
netstat -tanp
# নির্দিষ্ট port
netstat -tlnp | grep :443lsof
কোন process কোন port ব্যবহার করছে দেখো।
# Port 80 কোন process ব্যবহার করছে
sudo lsof -i :80
# সব network connections
sudo lsof -i
# শুধু TCP
sudo lsof -i TCP
# নির্দিষ্ট user-এর connections
sudo lsof -i -u omarss -tlnp vs lsof -i পার্থক্য:
ss দ্রুত এবং port/state দেখায়। lsof process-এর বিস্তারিত (কোন user, কোন file) দেখায়। দুটো complement করে।
CyberSec Note
Port analysis — attack surface বোঝা:
Defensive — নিজের machine চেক করো:
# কোন ports বাইরে থেকে accessible
ss -tlnp
# Unexpected service চলছে কিনা — unusual ports
ss -tlnp | grep -v "22\|80\|443\|3306"
# কোন process unexpected port use করছে
sudo lsof -i -P -n | grep LISTENOffensive — target machine scan:
# Nmap দিয়ে open ports খোঁজো
nmap -sV target-ip # service version সহ
nmap -sC -sV -p- target-ip # সব ports scan (slow but thorough)CTF workflow:
1. nmap -sV target-ip → কোন ports open
2. Open port-এর service চেনো (22=SSH, 80=HTTP...)
3. Service-এর version দেখো
4. সেই version-এ known vulnerability আছে কিনা খোঁজো
5. Exploit করো0.0.0.0 vs 127.0.0.1 — কোনো service 0.0.0.0-তে bind থাকলে এটা externally accessible। CTF-এ অনেক সময় locally bind করা service-কে SSH tunneling দিয়ে access করতে হয়।
Quick Check
- Port কেন দরকার — একটা IP থাকলেই তো হতো?
-
0.0.0.0:22আর127.0.0.1:3306এর পার্থক্য কী? -
ss -tlnpএর প্রতিটা flag কী করে? - Database
0.0.0.0-তে bind হওয়া কেন বিপজ্জনক? - CTF-এ port scan করার পর কী করবে?
পরবর্তী → curl & wget