পোর্ট স্ক্যানিং — Nmap কনসেপ্ট ও কৌশল
এই পাঠে যা শিখবেন
- পোর্ট স্ক্যানিং কী, এবং reconnaissance-এ এটি কেন পরবর্তী স্বাভাবিক ধাপ
- TCP SYN scan, TCP connect scan ও UDP scan-এর মধ্যে টেকনিক্যাল পার্থক্য
- Nmap-এর টাইমিং টেমপ্লেট কীভাবে scan speed বনাম stealth/IDS-detection ট্রেড-অফ নিয়ন্ত্রণ করে
- কেন প্রতিটি অপ্রয়োজনীয় open port একটি সম্ভাব্য attack surface, এবং defenders কীভাবে এটি কমান
১ · পোর্ট স্ক্যানিং কী এবং কেন
L11-এ আমরা দেখেছি active reconnaissance মানে সরাসরি টার্গেট ইনফ্রাস্ট্রাকচারের সাথে ইন্টারঅ্যাক্ট করা। পোর্ট স্ক্যানিংPort Scanningএকটি টার্গেট হোস্টের নির্দিষ্ট পোর্ট রেঞ্জে প্রোব পাঠিয়ে যাচাই করা কোন পোর্ট open, closed, নাকি filtered — reconnaissance-এর একটি মূল active কৌশল। হলো active recon-এর সবচেয়ে সাধারণ কৌশলগুলোর একটি — এটি প্রকাশ করে টার্গেট মেশিনে ঠিক কোন নেটওয়ার্ক সার্ভিসগুলো চলছে। প্রতিটি পোর্টের তিনটি সম্ভাব্য অবস্থা থাকতে পারে —
একটি সার্ভিস সক্রিয়ভাবে এই পোর্টে শুনছে এবং কানেকশন গ্রহণ করছে।
হোস্টটি প্রতিক্রিয়া দিচ্ছে, কিন্তু এই পোর্টে কোনো সার্ভিস শুনছে না।
একটি ফায়ারওয়াল (L06) প্রোবটি ব্লক করছে — স্ক্যানার নিশ্চিতভাবে বলতে পারে না open নাকি closed।
২ · তিনটি প্রধান স্ক্যান কৌশল
পোর্ট স্ক্যান করার একাধিক টেকনিক্যাল পদ্ধতি আছে, প্রতিটির নিজস্ব ট্রেড-অফ —
শুধু একটি SYN প্যাকেট পাঠায়, হ্যান্ডশেক সম্পূর্ণ করে না। দ্রুত ও stealthier — কারণ কখনো পূর্ণ কানেকশন তৈরি হয় না, তাই অনেক অ্যাপ্লিকেশন-লেভেল লগে রেকর্ড হয় না। raw-socket প্রিভিলেজ প্রয়োজন।
পূর্ণ ৩-way হ্যান্ডশেক সম্পূর্ণ করে (SYN → SYN-ACK → ACK)। কম stealthy — প্রতিটি কানেকশন সাধারণত অ্যাপ্লিকেশন লগে রেকর্ড হয় — কিন্তু raw-socket প্রিভিলেজ ছাড়াই চালানো যায়।
UDP-তে কোনো হ্যান্ডশেক নেই, তাই স্ক্যানার একটি ICMP "port unreachable" বার্তার অনুপস্থিতিকে সংকেত হিসেবে ব্যবহার করে — ধীর ও কম নির্ভরযোগ্য।
৩ · Nmap ও টাইমিং টেমপ্লেট — Speed বনাম Stealth
NmapNmapNetwork Mapper — পোর্ট স্ক্যানিং ও নেটওয়ার্ক ডিসকভারির জন্য ইন্ডাস্ট্রি-স্ট্যান্ডার্ড ওপেন-সোর্স টুল।
হলো পোর্ট স্ক্যানিং-এর জন্য ইন্ডাস্ট্রি-স্ট্যান্ডার্ড টুল (শুধু উল্লেখযোগ্য, এই কোর্সে ইনস্টল করার প্রয়োজন নেই)।
এর একটি গুরুত্বপূর্ণ ফিচার হলো টাইমিং টেমপ্লেট — -T0 (paranoid, অত্যন্ত ধীর) থেকে -T5
(insane, অত্যন্ত দ্রুত) পর্যন্ত।
একটি দ্রুত (-T5) স্ক্যান কয়েক সেকেন্ডে হাজার হাজার পোর্ট চেক করতে পারে — কিন্তু এটি একটি
সংক্ষিপ্ত সময়ে অস্বাভাবিক পরিমাণ ট্র্যাফিক তৈরি করে, যা L06-এ শেখা anomaly-based IDS-এর
জন্য শনাক্ত করা সহজ। একটি ধীর (-T0/-T1) স্ক্যান প্রোবগুলোকে সময়ের সাথে ছড়িয়ে
দিয়ে "স্বাভাবিক ট্র্যাফিক"-এর মধ্যে মিশে থাকার চেষ্টা করে — কিন্তু সম্পূর্ণ হতে ঘণ্টার পর ঘণ্টা বা দিন
লাগতে পারে। এটি প্রতিটি পেনিট্রেশন টেস্টের Rules of Engagement (L01)-এ আলোচিত একটি বাস্তব সিদ্ধান্ত।
৪ · হ্যান্ডস-অন: একটি সিমুলেটেড পোর্ট স্ক্যান
নিচের কোড সেলটি সম্পূর্ণ নিরাপদ ও সিমুলেটেড — এখানে একটি ভুয়া "হোস্ট" শুধু একটি Python set
হিসেবে সংজ্ঞায়িত, এবং scan_port() ফাংশনটি সেই সেটের বিরুদ্ধে চেক করে। কোনো বাস্তব সকেট
কানেকশন বা নেটওয়ার্ক প্যাকেট এখানে নেই।
# সিমুলেটেড "হোস্ট" — বাস্তবে এটি একটি Python set, কোনো নেটওয়ার্ক কল নয়
fake_open_ports = {21, 80, 443, 3389}
def scan_port(port):
"""একটি সিমুলেটেড TCP connect-scan ফলাফল — সম্পূর্ণ ইন-মেমরি,
বাস্তব হোস্টে কোনো প্যাকেট পাঠানো হয় না।"""
return "open" if port in fake_open_ports else "closed"
targets = [20, 21, 22, 23, 80, 443, 3389, 8080]
print("পোর্ট স্ক্যান রিপোর্ট (সিমুলেটেড টার্গেট হোস্ট)")
print("-" * 42)
for port in targets:
status = scan_port(port)
print(f"পোর্ট {port:>5} ... {status}")
open_count = sum(1 for p in targets if scan_port(p) == "open")
print("-" * 42)
print(f"মোট {len(targets)} টি পোর্ট চেক করা হলো, {open_count} টি open পাওয়া গেছে।")
৫ · ডিফেন্স সাইড — Attack Surface কমানো
প্রতিটি open port একটি সম্ভাব্য entry point — এমনকি যদি তাতে চলা সার্ভিসে কোনো পরিচিত vulnerability নাও থাকে, প্রতিটি অতিরিক্ত সার্ভিস মানে আক্রমণকারীর জন্য পরীক্ষা করার আরেকটি সম্ভাবনা।
Attack surface minimization নীতি অনুযায়ী — যে সার্ভিস প্রয়োজন নেই তা বন্ধ রাখুন, যেটি প্রয়োজন তা শুধু প্রয়োজনীয় নেটওয়ার্কের জন্য ফায়ারওয়ালে (L06) সীমাবদ্ধ রাখুন, এবং নিয়মিত নিজের ইনফ্রাস্ট্রাকচারে (অনুমোদিত পরিসরে) নিজে পোর্ট স্ক্যান চালিয়ে যাচাই করুন কোনো অপ্রত্যাশিত সার্ভিস এক্সপোজড আছে কি না।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ TCP SYN scan-কে "half-open" বলা হয় কেন, এবং এটি কেন connect scan-এর চেয়ে stealthier?
SYN scan শুধু প্রাথমিক SYN প্যাকেট পাঠায় এবং সার্ভার SYN-ACK দিয়ে সাড়া দিলেই স্ক্যানার বুঝে যায় পোর্টটি open — কিন্তু চূড়ান্ত ACK পাঠিয়ে হ্যান্ডশেক সম্পূর্ণ করে না ("half-open")। যেহেতু পূর্ণ কানেকশন কখনো প্রতিষ্ঠিত হয় না, তাই অনেক অ্যাপ্লিকেশন-লেভেল লগ (যা শুধু সম্পূর্ণ কানেকশন রেকর্ড করে) এটি ধরতে পারে না — এই কারণেই এটি connect scan-এর চেয়ে কম শনাক্তযোগ্য।
প্র ০২ একটি খুব দ্রুত (aggressive timing) স্ক্যান কেন IDS-এর কাছে সহজে ধরা পড়ে?
L06-এ শেখা anomaly-based IDS একটি "স্বাভাবিক" ট্র্যাফিক বেসলাইনের সাথে তুলনা করে অস্বাভাবিক প্যাটার্ন শনাক্ত করে। একটি খুব দ্রুত স্ক্যান অল্প সময়ে অসংখ্য পোর্টে কানেকশন প্রচেষ্টা তৈরি করে — এই ঘনত্ব ও প্যাটার্ন স্বাভাবিক ব্যবহারকারীর ট্র্যাফিক থেকে সম্পূর্ণ আলাদা, তাই IDS সহজেই এটিকে "সম্ভাব্য স্ক্যান" হিসেবে ফ্ল্যাগ করতে পারে।
প্র ০৩ UDP স্ক্যান কেন TCP স্ক্যানের চেয়ে কঠিন এবং ধীর?
TCP-তে একটি নির্দিষ্ট হ্যান্ডশেক আছে (SYN/SYN-ACK) যা সরাসরি open/closed নিশ্চিত করে। UDP-তে কোনো হ্যান্ডশেক নেই — একটি open UDP পোর্ট প্রায়ই কোনো প্রতিক্রিয়াই দেয় না, তাই স্ক্যানারকে একটি ICMP "port unreachable" বার্তার অনুপস্থিতির উপর নির্ভর করতে হয়, যা নেটওয়ার্ক বিলম্ব বা ফায়ারওয়াল ড্রপের কারণে অবিশ্বস্ত এবং সময়সাপেক্ষ — ফলাফল নিশ্চিত করতে বারবার প্রোব ও রি-ট্রাই প্রয়োজন হয়।
অনুশীলন
-
চিন্তা করুন: কেন একটি অপ্রয়োজনীয় open port নিজে থেকেই একটি ঝুঁকি — এমনকি যদি সেই সার্ভিসে কোনো পরিচিত vulnerability না থাকে?
প্রতিটি চলমান সার্ভিস মানে অতিরিক্ত কোড, অতিরিক্ত সম্ভাব্য misconfiguration, এবং ভবিষ্যতে একটি নতুন CVE আবিষ্কৃত হওয়ার আরেকটি সম্ভাবনা (L14/L16 দেখুন)। আজ কোনো পরিচিত vulnerability না থাকলেও, প্রতিটি অতিরিক্ত অ্যাটাক সারফেস মানে আক্রমণকারীর জন্য পরীক্ষা করার আরেকটি জায়গা — তাই "প্রয়োজন না হলে বন্ধ রাখুন" একটি মৌলিক hardening নীতি।
-
পরীক্ষা করুন: উপরের কোড সেলে
fake_open_portsসেটে22(SSH) যোগ করুন এবং আবার Run করে দেখুন রিপোর্ট কীভাবে বদলায়।পোর্ট ২২-এর status এখন "open" দেখাবে, এবং মোট open port সংখ্যা এক বেড়ে যাবে। এটি দেখায় কীভাবে
scan_port()ফাংশনটি সরাসরিfake_open_portsসেটের উপর নির্ভরশীল — একটি বাস্তব স্ক্যানার একইভাবে টার্গেটের প্রকৃত অবস্থার উপর নির্ভর করে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পরের পাঠ: সার্ভিস এনুমারেশন ও ব্যানার গ্র্যাবিং L13 একটি open port থেকে ঠিক কোন সার্ভিস ও ভার্সন চলছে তা কীভাবে শনাক্ত করবেন।
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৬০টি পাঠ Reconnaissance থেকে শুরু করে ভালনারেবিলিটি অ্যাসেসমেন্ট, OWASP Top 10 ও আরও অনেক কিছু।
- System Design & Software Architecture কোর্স সঙ্গী কোর্স নেটওয়ার্ক স্তর, লোড ব্যালান্সিং ও সার্ভিস আর্কিটেকচার কীভাবে কাজ করে তা শিখতে দেখুন।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design ও Cybersecurity — সব এক জায়গায়।