পাঠ ১২ · ৬০-এর মধ্যে · মডিউল ৩
Home / Courses / Cybersecurity & Ethical Hacking / পোর্ট স্ক্যানিং

পোর্ট স্ক্যানিং — Nmap কনসেপ্ট ও কৌশল

Port scanning — Nmap concepts & techniques
৯ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • পোর্ট স্ক্যানিং কী, এবং 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-এর সবচেয়ে সাধারণ কৌশলগুলোর একটি — এটি প্রকাশ করে টার্গেট মেশিনে ঠিক কোন নেটওয়ার্ক সার্ভিসগুলো চলছে। প্রতিটি পোর্টের তিনটি সম্ভাব্য অবস্থা থাকতে পারে —

Open
একটি সার্ভিস সক্রিয়ভাবে এই পোর্টে শুনছে এবং কানেকশন গ্রহণ করছে।
Closed
হোস্টটি প্রতিক্রিয়া দিচ্ছে, কিন্তু এই পোর্টে কোনো সার্ভিস শুনছে না।
Filtered
একটি ফায়ারওয়াল (L06) প্রোবটি ব্লক করছে — স্ক্যানার নিশ্চিতভাবে বলতে পারে না open নাকি closed।

২ · তিনটি প্রধান স্ক্যান কৌশল

পোর্ট স্ক্যান করার একাধিক টেকনিক্যাল পদ্ধতি আছে, প্রতিটির নিজস্ব ট্রেড-অফ —

TCP SYN Scan (Half-open)
শুধু একটি SYN প্যাকেট পাঠায়, হ্যান্ডশেক সম্পূর্ণ করে না। দ্রুত ও stealthier — কারণ কখনো পূর্ণ কানেকশন তৈরি হয় না, তাই অনেক অ্যাপ্লিকেশন-লেভেল লগে রেকর্ড হয় না। raw-socket প্রিভিলেজ প্রয়োজন।
TCP Connect Scan
পূর্ণ ৩-way হ্যান্ডশেক সম্পূর্ণ করে (SYN → SYN-ACK → ACK)। কম stealthy — প্রতিটি কানেকশন সাধারণত অ্যাপ্লিকেশন লগে রেকর্ড হয় — কিন্তু raw-socket প্রিভিলেজ ছাড়াই চালানো যায়।
UDP Scan
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
# সিমুলেটেড "হোস্ট" — বাস্তবে এটি একটি 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 পাওয়া গেছে।")

    
লক্ষ্য করুন — পোর্ট ২১ (FTP), ৩৩৮৯ (RDP) খোলা পাওয়া গেছে, যা L05-এ শেখা "high risk if exposed" পোর্টের তালিকায় ছিল। একটি বাস্তব স্ক্যান রিপোর্ট শুধু open/closed বলেই থামে না — পরের পাঠ (L13) দেখাবে কীভাবে প্রতিটি open port থেকে ঠিক কোন সার্ভিস ও ভার্সন চলছে তা শনাক্ত করা যায়।

৫ · ডিফেন্স সাইড — Attack Surface কমানো

প্রতিটি open port একটি সম্ভাব্য entry point — এমনকি যদি তাতে চলা সার্ভিসে কোনো পরিচিত vulnerability নাও থাকে, প্রতিটি অতিরিক্ত সার্ভিস মানে আক্রমণকারীর জন্য পরীক্ষা করার আরেকটি সম্ভাবনা।

মূল কথা · Key takeaway

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" বার্তার অনুপস্থিতির উপর নির্ভর করতে হয়, যা নেটওয়ার্ক বিলম্ব বা ফায়ারওয়াল ড্রপের কারণে অবিশ্বস্ত এবং সময়সাপেক্ষ — ফলাফল নিশ্চিত করতে বারবার প্রোব ও রি-ট্রাই প্রয়োজন হয়।

অনুশীলন

  1. চিন্তা করুন: কেন একটি অপ্রয়োজনীয় open port নিজে থেকেই একটি ঝুঁকি — এমনকি যদি সেই সার্ভিসে কোনো পরিচিত vulnerability না থাকে?

    প্রতিটি চলমান সার্ভিস মানে অতিরিক্ত কোড, অতিরিক্ত সম্ভাব্য misconfiguration, এবং ভবিষ্যতে একটি নতুন CVE আবিষ্কৃত হওয়ার আরেকটি সম্ভাবনা (L14/L16 দেখুন)। আজ কোনো পরিচিত vulnerability না থাকলেও, প্রতিটি অতিরিক্ত অ্যাটাক সারফেস মানে আক্রমণকারীর জন্য পরীক্ষা করার আরেকটি জায়গা — তাই "প্রয়োজন না হলে বন্ধ রাখুন" একটি মৌলিক hardening নীতি।

  2. পরীক্ষা করুন: উপরের কোড সেলে fake_open_ports সেটে 22 (SSH) যোগ করুন এবং আবার Run করে দেখুন রিপোর্ট কীভাবে বদলায়।

    পোর্ট ২২-এর status এখন "open" দেখাবে, এবং মোট open port সংখ্যা এক বেড়ে যাবে। এটি দেখায় কীভাবে scan_port() ফাংশনটি সরাসরি fake_open_ports সেটের উপর নির্ভরশীল — একটি বাস্তব স্ক্যানার একইভাবে টার্গেটের প্রকৃত অবস্থার উপর নির্ভর করে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
অ্যাক্টিভ রিকনেসান্স ও DNS এনুমারেশন