সরাসরি পর্বে যান
পর্ব ২৮ · ৮০-এর মধ্যে · মডিউল ৪

DDoS প্রতিরক্ষা — হামলার ধরন, capacity আর সাড়া দেওয়ার পরিকল্পনা

DDoS Defense — Attack Classes, Capacity & Response Planning

Taught in Bangla, this lesson teaches DDoS defense: DoS versus DDoS, volumetric, protocol and application-layer classes, why reflection and amplification work and how BCP 38 helps, botnets, capacity maths in Gbps, pps and rps, what anycast, CDN, scrubbing, SYN cookies, rate limits, WAF, cache and autoscaling do and do not stop, ISP coordination, a runbook, and separating flash crowds from attacks.

এই পর্বে যা শিখবেন

  • DoS আর DDoS-এর পার্থক্য, আর volumetric, protocol ও application-layer হামলা চেনা
  • Reflection আর amplification কেন সম্ভব, আর BCP 38 ও খোলা service বন্ধ করা কীভাবে সমাধান
  • Gbps, pps আর rps হিসাব করে প্রথম bottleneck খুঁজে বের করা
  • Anycast, CDN, scrubbing, SYN cookie, rate limit, WAF, cache আর autoscaling: কোনটি কী থামায়, কী থামায় না
  • ISP-র সাথে সমন্বয়, blackholing, FlowSpec আর একটি কাজের DDoS runbook
  • Flash crowd আর হামলা আলাদা করা, ঘটনার পরের পর্যালোচনা আর পরীক্ষার আইনি সীমা

১ · DoS আর DDoS — দোকানের দরজায় ভিড় বানানো

ঈদের আগের সন্ধ্যায় নিউমার্কেটের একটি দোকান ভাবুন। হঠাৎ ৫০০ জন লোক ঢুকে পড়ল, কেউ কিছু কিনবে না। তারা শুধু দরজা আটকে দাঁড়িয়ে আছে আর দোকানিকে দাম জিজ্ঞেস করছে। আসল ক্রেতা ভেতরে ঢুকতে পারছেন না। চোর কিছু চুরি করেনি, তালাও ভাঙেনি। তবু দোকানের বিক্রি শূন্য।

এটিই denial of service, সংক্ষেপে DoS. লক্ষ্য তথ্য চুরি নয়, লক্ষ্য availability নষ্ট করা (পর্ব ২). বৈধ ব্যবহারকারী যেন সেবা না পান। DoS একটি উৎস থেকেও হতে পারে, যেমন একটি মাত্র বিশেষ অনুরোধে একটি দুর্বল service আটকে যাওয়া। DDoS মানে Distributed DoS: চাপ আসে হাজার হাজার উৎস থেকে একসাথে।

দিকDoSDDoS
উৎসএক বা অল্প কয়েকটিবহু, প্রায়ই ছড়ানো
সাধারণ কারণSoftware-এর ত্রুটি বা একটি দুর্বল pathসংখ্যার চাপ, কখনো ত্রুটির সাথে মিশে
প্রথম সমাধানPatch, উৎস আটকানো, ইনপুটের সীমাস্তরে স্তরে শোষণ, উজানের সাহায্য
IP block কতটা কাজেরঅনেক সময় যথেষ্টসাধারণত যথেষ্ট নয়

মনে রাখার মতো একটি অসাম্য আছে। হামলাকারীর জন্য একটি অনুরোধ পাঠানো সস্তা, কিন্তু আপনার জন্য সেটি সামলানো দামি হতে পারে। সব প্রতিরক্ষার মূল কাজ এই খরচের হিসাব উল্টে দেওয়া: যেন প্রতিটি অবাঞ্ছিত অনুরোধ যত আগে সম্ভব, যত কম খরচে থামে।

মূল ধারণা

DDoS প্রতিরক্ষা কোনো একটি যন্ত্র নয়। এটি তিনটি কাজের মিলিত ফল: আগে থেকে ক্ষমতা জানা, স্তরে স্তরে চাপ শোষণ করা, আর হামলার সময় কে কী করবেন তা ঠিক করে রাখা।

রক্ষকের চোখে আরও একটি কথা: DDoS কখনো কখনো একা আসে না। কিছু প্রকাশিত ঘটনায় দেখা গেছে, রক্ষকের মনোযোগ অন্যদিকে সরাতেও এটি ব্যবহার হতে পারে। তাই হামলার সময়ও login, admin কাজ আর অস্বাভাবিক data বের হওয়ার log দেখা বন্ধ করবেন না।

এই পর্বের প্রতিটি হিসাব আর simulator একটি কাল্পনিক অনলাইন বাজারের ছোট, মনগড়া তথ্যের ওপর চলে। কোনো network traffic পাঠানো হয় না। আইনের সীমা নিয়ে কথা অংশ ৯-এ, আর ভিত্তি আছে পর্ব ৬-এ।

২ · তিন পরিবার — কোন জিনিসটি ভরে যাচ্ছে

ঈদের আগের বাস টার্মিনাল ভাবুন। প্রথম সমস্যা: টার্মিনালে ঢোকার রাস্তাই গাড়িতে বন্ধ। দ্বিতীয় সমস্যা: কাউন্টারে সবাই অর্ধেক ফর্ম ফেলে রেখেছে, কর্মীরা অপেক্ষায় আটকে আছেন। তৃতীয় সমস্যা: লাইন চলছে, কিন্তু প্রত্যেকে এমন প্রশ্ন করছেন যার উত্তর খুঁজতে কর্মীকে গুদামে যেতে হয়। তিনটির ফল একই, কারণ আলাদা। DDoS-এর তিন পরিবারও ঠিক তাই।

পরিবারযা ভরে যায়মূল মাপপ্রধান প্রতিরক্ষা
VolumetricNetwork-এর পথ, মানে link-এর bandwidthGbpsAnycast, scrubbing, ISP-র filter
ProtocolConnection-এর টেবিল, firewall আর load balancer-এর statepps, conn/sSYN cookie, connection limit, stateless edge
Application-layerApp-এর CPU, memory, databaserpsWAF, rate limit, cache, দামি path-এর সুরক্ষা

Protocol পরিবারের পরিচিত উদাহরণ SYN flood, যার handshake-এর ভিত্তি আছে TCP সংযোগের পর্বে। সাধারণ মানচিত্রটি Computer Networks কোর্সে দেখানো হয়েছে, আর cloud-এ কে কোন স্তর সামলায় তা আছে CDN, WAF আর DDoS সুরক্ষার পর্বে। এখানে আমরা রক্ষকের সিদ্ধান্তে মন দেব।

নিচের ডায়াগ্রামে একটি কাল্পনিক হামলার মিশ্রণ বাইরে থেকে ভেতরে আসছে। প্রতিটি ধাপে দেখুন, কোন traffic কোথায় থেমে যায়। সব সংখ্যা অনুমান।

  1. Anycast edgeচাপ ভাগ
  2. Scrubbingপরিষ্কার
  3. Edge / LBSYN cookie
  4. WAF + limitনিয়ম
  5. Cacheউত্তর জমা
  6. Originসীমা 3,000 rps
এই স্তর পার হওয়ার পরে কী বাকি
Reflection (Gbps)
SYN flood (Mpps)
HTTP flood (rps)
বৈধ ক্রেতা (rps)
Origin-এর ওপর চাপ
  1. Anycast edge. ৪০ Gbps reflection এলো। Anycast-এ একই IP অনেক জায়গায় থাকে, তাই ৫টি কেন্দ্রে ভাগ হয়ে প্রতিটিতে ৪০ ÷ ৫ = ৮ Gbps পড়ল। সেখানকার সহজ filter-এ বেশিরভাগ বাদ গিয়ে বাকি রইল ২ Gbps.
  2. Scrubbing. Scrubbing center বাকি traffic বিশ্লেষণ করে পরিষ্কার অংশ ফেরত পাঠায়। Reflection নেমে এলো ০.১ Gbps-এ। SYN আর HTTP এখানে এই উদাহরণে একই আছে, কারণ এগুলো পরের স্তরের কাজ ধরে নেওয়া হয়েছে।
  3. Edge বা load balancer. এখানে TCP handshake শেষ করা হয়, SYN cookie সহ। ২ Mpps জাল SYN কোনো ACK ফেরত দেয় না, তাই ভেতরে যায় না। সারি ০ হলো। বৈধ ক্রেতা অক্ষত।
  4. WAF আর rate limit. ৩০,০০০ rps HTTP flood নেমে এলো ১,৫০০-এ। কিন্তু খেয়াল করুন, বৈধ সারিও ৬,০০০ থেকে ৫,৯০০ হলো। ১০০ জন আসল ক্রেতার অনুরোধ আটকে গেছে। প্রতিটি নিয়মের একটি দাম আছে।
  5. Cache. Cache-এ জমা উত্তর origin-কে ছোঁয় না। বৈধ অনুরোধে ৬০% hit ধরলে ৫,৯০০ × ০.৪ = ২,৩৬০। Flood একই পাতা বারবার চাওয়ায় ৮০% hit ধরলে ১,৫০০ × ০.২ = ৩০০।
  6. Origin. ২,৩৬০ + ৩০০ = ২,৬৬০ rps, সীমা ৩,০০০-এর নিচে। সাইট চালু আছে। বাইরের ৪০ Gbps-এর কথা origin জানেই না। প্রতিটি স্তর শুধু নিজের পরিবারের কাজ করল।

এই ছবিতে স্তরের ক্রম ধারণা বোঝানোর জন্য। বাস্তবে একটি provider-এর edge-এ এগুলোর কয়েকটি একসাথে চলতে পারে, আর scrubbing সবসময় চালু না থেকে দরকারের সময় চালু হতে পারে।

৩ · Reflection আর amplification — জাল ঠিকানাই মূল ফাঁক

একটি চিঠির কথা ভাবুন। কেউ একজন বহু দোকানে ছোট চিঠি পাঠাল: “আপনাদের পুরো মূল্যতালিকা পাঠান।” প্রেরকের ঘরে সে লিখে দিল আপনার ঠিকানা। পোস্ট অফিস প্রেরকের ঠিকানা যাচাই করে না। দোকানগুলো সৎ, তারা শুধু উত্তর দিচ্ছে। কিন্তু আপনার দরজায় মোটা মোটা খামের স্তূপ জমল, আর আসল চিঠি ঢুকতেই পারছে না।

এটিই reflection: উত্তরটি যায় ভুক্তভোগীর কাছে, কারণ অনুরোধে উৎস ঠিকানা জাল ছিল (spoofing). আর উত্তর অনুরোধের চেয়ে বড় হলে তাকে বলে amplification. হামলাকারীর নিজের সামান্য bandwidth অনেক গুণ বড় হয়ে যায়, আর traffic আসে সাধারণ, বৈধ সার্ভার থেকে।

Reflection-এর পথ, আর কোথায় তা ভাঙে

Spoofed request, open service, oversized reply, and the two fixes

Reflection আর amplification-এর ধারণা এবং দুটি সমাধান অনুরোধ পাঠানোর উৎস উৎস ঠিকানা জাল: 203.0.113.50 ছোট অনুরোধ সমাধান ১ · BCP 38 ISP: এই উৎস ঠিকানা এই গ্রাহকের নয়, বাদ filter না থাকলে পার হয় খোলা service যেমন open resolver, সবাইকে উত্তর দেয় সমাধান ২ · service বন্ধ বা সীমিত শুধু নিজের ব্যবহারকারীকে উত্তর বড় উত্তর, জাল ঠিকানায় ভুক্তভোগী 203.0.113.50, যিনি কিছুই চাননি
ছবি ২৮.১ — দুটি সমাধানের যেকোনো একটি থাকলেই এই পথ ভাঙে। ঠিকানাগুলো documentation-এর জন্য সংরক্ষিত।

দুটি শর্ত একসাথে লাগে: উৎস ঠিকানা জাল করা যায়, আর ইন্টারনেটে এমন service আছে যা অচেনা যে কাউকে উত্তর দেয়। সবচেয়ে পরিচিত উদাহরণ open resolver: এমন DNS সার্ভার, যা নিজের ব্যবহারকারী ছাড়াও পৃথিবীর সবার প্রশ্নের উত্তর দেয়। Connection ছাড়া চলা UDP service-এই ঝুঁকিটি বেশি, কারণ TCP-র মতো handshake না থাকলে উত্তর পাঠানোর আগে ঠিকানা যাচাই হয় না। DNS-এর নিজস্ব সুরক্ষা দেখুন পর্ব ২৬-এ।

রক্ষকের দুই দায়িত্ব

  • জাল ঠিকানা বেরোতে না দেওয়া: BCP 38 (RFC 2827, ২০০০) বলে, ISP তার গ্রাহকের কাছ থেকে আসা সেই প্যাকেট বাদ দেবে, যার উৎস ঠিকানা ওই গ্রাহকের নিজের ঠিকানার মধ্যে পড়ে না। আপনার প্রতিষ্ঠানের network থেকেও একই নিয়ম প্রযোজ্য।
  • নিজের service খোলা না রাখা: Resolver, সময়ের service বা management service যদি শুধু ভেতরের জন্য হয়, তবে ইন্টারনেট থেকে তা বন্ধ রাখুন। আপনি না চাইলেও আপনার সার্ভার অন্যের ওপর হামলার অংশ হতে পারে।

নিচের দুটি উদাহরণ আপনার নিজের সার্ভার আর network-এর জন্য। Address-গুলো documentation-এর, নিজের মান বসিয়ে আগে test পরিবেশে দেখে নেবেন।

# Resolver answers only your own network (Unbound).
server:
    interface: 198.51.100.53
    access-control: 0.0.0.0/0 refuse
    access-control: 198.51.100.0/24 allow
    access-control: 127.0.0.0/8 allow
# Border router: drop packets from LAN whose source is not ours (nftables).
table inet border {
    chain forward {
        type filter hook forward priority 0; policy accept;
        iifname "lan0" ip saddr != 198.51.100.0/24 counter drop
    }
}

কোন service কত গুণ বাড়ায়, সেই তালিকা এই কোর্সে নেই, কারণ রক্ষকের তা জানার দরকার নেই। রক্ষকের প্রশ্ন একটিই: “আমার কোন service অচেনা মানুষকে উত্তর দেয়, আর কেন?” নিজের সিস্টেমে চলা service-এর তালিকা, firewall-এর নিয়ম আর ISP-র বাইরের মত দিয়ে এর উত্তর পাবেন। অন্যের network-এ খোলা service খোঁজা এই পর্বের বিষয় নয়, আর অনুমতি ছাড়া তা করবেন না।

৪ · Botnet — যন্ত্রের মালিক জানেন না

DDoS-এর সংখ্যার চাপ কোথা থেকে আসে? প্রায়ই botnet থেকে: মালিকের অজান্তে অপরাধীর নিয়ন্ত্রণে চলে যাওয়া বহু যন্ত্রের জাল। পর্ব ৫-এর command and control ধারণা এখানেও আছে। মালিকের কাছে যন্ত্রটি স্বাভাবিকই চলে। শুধু বিল বা গতিতে সামান্য প্রভাব পড়তে পারে।

Botnet-এ traffic আসে আসল ঠিকানা থেকে, আসল যন্ত্র থেকে। তাই BCP 38 এখানে সাহায্য করে না, আর ঠিকানা ব্লক করলে অনেক সময় সাধারণ গ্রাহকও আটকে যান। এজন্যই application-layer হামলা আলাদা করা কঠিন।

Mirai, ২০১৬। প্রকাশিত গবেষণা (Antonakakis ও সহলেখকেরা, “Understanding the Mirai Botnet”, USENIX Security ২০১৭) অনুযায়ী Mirai প্রধানত IP camera, router আর DVR-এর মতো IoT যন্ত্র দখল করেছিল। সবচেয়ে বড় অবস্থায় সংক্রমিত যন্ত্রের সংখ্যা প্রায় ৬ লাখে পৌঁছায়। মূল কারণ কোনো অজানা ত্রুটি ছিল না। গবেষকেরা দেখান, মূল সংস্করণ অল্প কিছু default credential দিয়েই এতদূর গিয়েছিল। ২০১৬ সালের সেপ্টেম্বরে এক নিরাপত্তা সাংবাদিকের সাইট আর একটি hosting provider বড় হামলার শিকার হন, প্রকাশিত হিসাবে যথাক্রমে প্রায় ৬২০ Gbps আর প্রায় ১ Tbps. অক্টোবরে DNS provider Dyn-এর ওপর হামলায় বহু পরিচিত সাইট অনেকের নাগালের বাইরে চলে যায়। পরে Mirai-র source code প্রকাশ পায়, আর তার ভিত্তিতে নানা নতুন সংস্করণ আসে। ২০১৭ সালের ডিসেম্বরে মার্কিন বিচার বিভাগ জানায়, Mirai তৈরি ও চালানোর দায়ে তিনজন দোষ স্বীকার করেছেন। Dyn হামলার জন্য তাঁদের বিরুদ্ধে অভিযোগ আনা হয়নি।

রক্ষকের চোখে Mirai-র শিক্ষা তিনটি:

  • Default password ব্যবস্থা-স্তরের ঝুঁকি: একজনের সস্তা camera অন্য কারও ব্যবসা বন্ধ করতে পারে। নিজের যন্ত্রের password বদলান, firmware হালনাগাদ করুন, আর ইন্টারনেট থেকে management বন্ধ রাখুন। IoT নিরাপত্তার বিস্তার পর্ব ৩৫-এ।
  • Dependency-ও আপনার ঝুঁকি: Dyn-এর ঘটনায় বহু সাইটের নিজের কোনো দোষ ছিল না। তাদের DNS provider পড়ে গিয়েছিল। তাই DNS-এর মতো ভিত্তি সেবায় একটি মাত্র provider থাকলে সেটি আপনার single point of failure.
  • আপনার network-ও উৎস হতে পারে: Outbound traffic-এর হঠাৎ বৃদ্ধি দেখুন। IoT যন্ত্র আলাদা segment-এ রাখুন (পর্ব ২২).

৫ · Capacity মাপা — Gbps, pps, rps আর প্রথম bottleneck

“আমাদের ১ Gbps link আছে, তাই আমরা নিরাপদ।” এই কথায় একটি ভুল আছে। একটি সিস্টেম শিকলের মতো: সবচেয়ে দুর্বল আংটাতেই ছিঁড়বে। সেই আংটাকে বলে bottleneck. তিনটি মাপ আলাদা করে দেখুন।

  • Gbps (bit per second): পথ কত চওড়া। এটি রাস্তার প্রস্থের মতো।
  • pps (packet per second): কতগুলো প্যাকেট আলাদা করে দেখতে হচ্ছে। এটি টোল প্লাজায় কতটি গাড়ি থামছে, তার মতো। ট্রাক হোক বা রিকশা, প্রতিটিতে একবার থামতে হয়।
  • rps (request per second): App কতগুলো অনুরোধের কাজ করছে।

কাজ করা হিসাব

সূত্র: bit/s = pps × bytes × 8. ধরুন ৪,০০,০০০ pps, প্রতিটি প্যাকেট ৬৪ byte: ৪,০০,০০০ × ৬৪ × ৮ = ২০,৪৮,০০,০০০ bit/s, মানে প্রায় ২০৫ Mbps. ১ Gbps link-এর মাত্র ২০%. কিন্তু যে firewall ২,০০,০০০ pps সামলাতে পারে, তার জন্য এটি দ্বিগুণ চাপ।

সবচেয়ে ছোট প্যাকেটে link-এর সীমা: Ethernet-এ সবচেয়ে ছোট frame ৬৪ byte, আর তার সাথে তারের ওপর আরও ২০ byte যায় (preamble আর দুই frame-এর ফাঁক). মোট ৮৪ byte, মানে ৬৭২ bit. ১ Gbps-এ ১,০০,০০,০০,০০০ ÷ ৬৭২ ≈ ১৪,৮৮,০৯৫ pps. তাই “১ Gbps ক্ষমতা” মানে সব যন্ত্র প্রায় ১৪.৯ লাখ pps সামলাতে পারবে, এমন নয়। Datasheet-এ দুটি সংখ্যাই খুঁজুন, আর কোন আকারের প্যাকেটে মাপা হয়েছে তাও দেখুন।

App-এর সীমা: ৬টি সার্ভারে ৫০টি করে worker মানে ৩০০ worker. একটি অনুরোধে গড়ে ১০০ ms লাগলে সীমা ৩০০ ÷ ০.১ = ৩,০০০ rps. কিন্তু একটি search-এ ৫০০ ms লাগলে শুধু search চালিয়ে সীমা ৩০০ ÷ ০.৫ = ৬০০ rps. অর্থাৎ rps-এর সংখ্যা তখনই অর্থবহ, যখন জানেন কোন path-এর rps.

নিচের calculator-এ একই কাল্পনিক অনলাইন বাজারের চারটি স্তর আছে: uplink, firewall, load balancer আর app. পাঁচটি পরিস্থিতিতে দেখুন, কোন স্তর আগে ভরে। সব সীমা অনুমান।

// Toy capacity check: which layer of a made-up shop runs out first?
// All limits and traffic numbers are assumptions, not measurements.
const layers = [
  { name: 'uplink', unit: 'Mbps', limit: 1000, load: t => t.pps * t.bytes * 8 / 1e6 },
  { name: 'firewall', unit: 'pps', limit: 200000, load: t => t.pps },
  { name: 'load balancer', unit: 'conn/s', limit: 20000, load: t => t.cps },
  { name: 'app + database', unit: 'rps', limit: 3000, load: t => t.rps },
];
const scenarios = [
  { name: 'normal evening', pps: 40000, bytes: 625, cps: 1500, rps: 1200 },
  { name: 'sale peak x3', pps: 120000, bytes: 625, cps: 4500, rps: 3600 },
  { name: 'small-packet flood', pps: 400000, bytes: 64, cps: 1500, rps: 1200 },
  { name: 'large-packet flood', pps: 300000, bytes: 1200, cps: 1500, rps: 1200 },
  { name: 'costly-page flood', pps: 45000, bytes: 625, cps: 2000, rps: 7500 },
];
for (const s of scenarios) {
  console.log(`--- ${s.name}`);
  let first = null, worst = 0;
  for (const l of layers) {
    const used = l.load(s) / l.limit;
    const load = Math.round(l.load(s));
    const mark = used >= 1 ? ' OVER' : '';
    console.log(`${l.name.padEnd(15)} ${String(load).padStart(7)} / ${String(l.limit).padStart(6)} ${l.unit.padEnd(6)} ${(used * 100).toFixed(0).padStart(4)}%${mark}`);
    if (used > worst) { worst = used; first = l.name; }
  }
  console.log(worst >= 1 ? `bottleneck: ${first}` : `no layer over limit, tightest: ${first}`);
}

small-packet flood-এ দেখুন: uplink মাত্র 205 / 1000 Mbps, মানে 20%, অথচ firewall 200% OVER. শুধু Gbps-এর graph দেখলে আপনি বলতেন সব ঠিক আছে। large-packet flood-এ uplink 288%, firewall-ও 150%, কিন্তু কোড সবচেয়ে বেশি ভরা স্তর ধরে বলছে bottleneck: uplink. পথ ভরলে ভেতরের firewall-এ কিছু করে লাভ নেই। sale peak x3-এ কোনো হামলা নেই, তবু app + database 120% OVER. আর costly-page flood-এ network-এর সব মাপ স্বাভাবিক (23%), শুধু app 250% OVER. হামলা আর উৎসব, দুটিই একই স্তরকে ভরাতে পারে। এই কারণে অংশ ৯ দরকার।

নিজের সংখ্যা কীভাবে জানবেন

  • নিজের সীমা লিখে রাখুন: প্রতিটি স্তরের Gbps, pps, connection-এর সীমা আর প্রধান path-এর rps. Datasheet নয়, নিজের পরিবেশে মাপা সংখ্যা ভালো।
  • স্বাভাবিকের রেখা (baseline) রাখুন: দিন আর ঘণ্টা ধরে কত traffic হয়, না জানলে অস্বাভাবিকও চিনবেন না।
  • নিজের সিস্টেমে load test: অনুমতিসহ, নির্দিষ্ট সময়ে, staging-এ বা provider-কে জানিয়ে (অংশ ৯ দেখুন).

৬ · নেটওয়ার্কের স্তরে প্রতিরক্ষা — anycast, CDN, scrubbing আর SYN cookie

পানি উঠলে ঘরের ভেতরে বালতি দিয়ে কাজ হয় না, বাঁধ দিতে হয় নদীর ধারে। Volumetric চাপও তাই। আপনার link ভরে গেলে ভেতরের কোনো নিয়ম আর কাজে আসে না, কারণ ভালো-মন্দ দুটি প্যাকেটই পথে আটকে আছে। তাই শোষণের জায়গা হতে হবে আপনার link-এর আগে।

Anycast

একই IP ঠিকানা অনেক জায়গা থেকে ঘোষণা করা হয়। Traffic কাছের কেন্দ্রে যায়, তাই চাপ ছড়িয়ে পড়ে। BGP-র পর্বে এর ভিত্তি আছে।

চাপ ভাগ করে

CDN

বহু কেন্দ্রের network, যেখানে উত্তর জমা থাকে। Origin-এর ঠিকানা আড়ালে থাকলে সরাসরি হামলার পথও কমে।

Origin আড়াল করে

Scrubbing center

Traffic ঘুরিয়ে একটি বড় পরিষ্কার-কেন্দ্রে নেওয়া হয়। সেখানে ময়লা বাদ দিয়ে পরিষ্কারটুকু ফেরত আসে।

সবসময় বা দরকারে

Origin-এর ঠিকানা ফাঁস হলে edge-এর সুরক্ষা অকেজো। সরাসরি origin-এ traffic গেলে CDN পাশ কেটে যায়। Origin-এ শুধু edge provider-এর ঠিকানা থেকে traffic নিন, আর পুরোনো DNS record ও email header-এ আসল ঠিকানা আছে কি না দেখুন। বিস্তারিত edge-এর পর্বে।

SYN cookie — টেবিলে না লিখে মনে রাখা

TCP-তে client SYN পাঠালে সার্ভার SYN-ACK দেয়, আর উত্তরের অপেক্ষায় একটি অর্ধেক-খোলা entry রাখে তার SYN backlog-এ। জাল উৎসের SYN-এর উত্তর কখনো আসে না, তাই সেই entry timeout পর্যন্ত জায়গা দখল করে থাকে। সারি ভরলে আসল ক্রেতাও আর ঢুকতে পারেন না।

SYN cookie-র কৌশল সুন্দর। ডাকঘরে পার্সেল জমা না রেখে একটি সিলমোহর দেওয়া রসিদ ধরিয়ে দেওয়ার মতো। সার্ভার কিছু জমা রাখে না। সে একটি গোপন চাবি দিয়ে হিসাব করা মান sequence number হিসেবে পাঠায়। সত্যিকারের client সেটি ফেরত দিলে, সার্ভার আবার হিসাব করে মিলিয়ে নেয়।

খেলনা মান, আসল গণনা ভিন্ন
Client যা পাঠাল
সার্ভার যা করল
এই connection-এর জন্য জমা state
  1. SYN এলো। 203.0.113.10 থেকে একটি SYN এলো, sequence number 1000. Backlog ভরা, তাই সার্ভার এখন cookie পদ্ধতিতে চলে গেল।
  2. গণনা, জমা নয়। সার্ভার গোপন চাবি, দুই পাশের ঠিকানা-port আর সময়ের একটি ঘর মিলিয়ে একটি মান বের করল। এখানে খেলনা মান 7031. কিছুই জমা হলো না, তাই state 0.
  3. Cookie পাঠানো। SYN-ACK-এ সার্ভারের sequence number হিসেবে 7031 গেল, আর ack 1001. সার্ভার এই connection-এর কথা এখন ভুলে গেছে।
  4. Client ফেরত দিল। আসল client নিয়ম মেনে ack=7032 পাঠাল, মানে 7031 + 1. উত্তর পেতে হলে ঠিকানাটি সত্যি হতে হয়।
  5. যাচাই। সার্ভার ack থেকে 1 বাদ দিয়ে 7031 পেল, একই গণনা আবার করে একই মান পেল। মিলেছে, তাই এখনই connection তৈরি। State প্রথমবার 1 হলো।
  6. জাল উৎসের বেলায়। SYN-ACK গেল জাল ঠিকানায়, কোনো ACK এলো না। সার্ভারের টেবিলে কিছুই নেই, তাই কিছু মোছারও দরকার নেই। খরচ শুধু একটি উত্তর পাঠানো।

নিচের simulator একটি ১২৮ ঘরের খেলনা backlog চালায়। প্রতি tick-এ ১০ জন আসল client আসে, আর জাল SYN আসে ৬০টি। প্রতিটি entry ৫ tick পরে মুছে যায়। সিড-করা PRNG শুধু আগমনের ক্রম এলোমেলো করে, তাই ফল প্রতিবার একই।

// Toy SYN backlog on a simulated clock. Sends nothing; only arrays and counters.
function mulberry32(a) { return () => { a = (a + 0x6D2B79F5) | 0; let t = Math.imul(a ^ (a >>> 15), 1 | a);
  t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const CAP = 128, TIMEOUT = 5, TICKS = 20, FAKE_PER_TICK = 60, REAL_PER_TICK = 10;
function run(label, cookies, fakeRate) {
  const rnd = mulberry32(2026);
  let backlog = [], ok = 0, refused = 0, stored = 0, peak = 0;
  for (let t = 0; t < TICKS; t++) {
    backlog = backlog.filter(expiry => expiry > t);           // half-open entries time out
    const arrivals = [...Array(fakeRate).fill('fake'), ...Array(REAL_PER_TICK).fill('real')];
    for (let i = arrivals.length - 1; i > 0; i--) {           // shuffle arrival order
      const j = Math.floor(rnd() * (i + 1));
      [arrivals[i], arrivals[j]] = [arrivals[j], arrivals[i]];
    }
    for (const who of arrivals) {
      const full = backlog.length >= CAP;
      if (full && cookies) { if (who === 'real') ok++; continue; }  // no entry stored
      if (full) { if (who === 'real') refused++; continue; }
      if (who === 'real') ok++;                                 // ACK returns at once
      else { backlog.push(t + TIMEOUT); stored++; }             // spoofed: ACK never comes
    }
    peak = Math.max(peak, backlog.length);
  }
  const total = TICKS * REAL_PER_TICK;
  console.log(`${label.padEnd(24)} real ok ${String(ok).padStart(3)}/${total}  refused ${String(refused).padStart(3)}  backlog peak ${peak}/${CAP}`);
}
run('no flood', false, 0);
run('flood, no cookies', false, FAKE_PER_TICK);
run('flood, with cookies', true, FAKE_PER_TICK);

no flood-এ সবাই ঢুকলেন: real ok 200/200, backlog peak 0/128, কারণ আসল client-এর entry সাথে সাথে শেষ হয় (এই খেলনায় ACK সাথে সাথে আসে). flood, no cookies-এ backlog 128/128 ভরে গেল, আর real ok 83/200, মানে ১১৭ জন refused. flood, with cookies-এ backlog একই রকম ভরা, তবু real ok 200/200. Cookie সারি খালি করে না, সারি ভরা থাকলেও আসল মানুষকে ঢুকতে দেয়।

একটি সূত্র মনে রাখুন: backlog ভরে থাকবে যদি জাল SYN-এর হার × timeout ≥ backlog-এর আকার হয়। এখানে ৬০ × ৫ = ৩০০, যা ১২৮-এর চেয়ে বেশি। তাই timeout কমানোও একটি প্রতিরক্ষা, যদিও ধীর আসল client-এর ক্ষতি হতে পারে।

যা থামায়যা থামায় নাকীভাবে জানবেন
জাল উৎসের SYN-এ backlog ভরে যাওয়াLink ভরে যাওয়া; আসল ঠিকানা থেকে পুরো handshake শেষ করা connection; HTTP floodনিজের Linux সার্ভারে নিচের counter বাড়ছে কি না
# Read your own server's settings and counters. Values differ by system.
sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog
nstat -az TcpExtSyncookiesSent TcpExtSyncookiesRecv TcpExtListenDrops
# In /etc/sysctl.d/90-tcp.conf (1 = use cookies when the queue overflows):
# net.ipv4.tcp_syncookies = 1

৭ · Application স্তরে — rate limit, WAF, cache আর autoscaling-এর ফাঁদ

Application-layer চাপে প্রতিটি অনুরোধ দেখতে স্বাভাবিক। Provider জানে না আপনার কোন path দামি। এই অংশের কাজ অনেকটাই আপনার নিজের। আগের কোর্সে rate limiting-এর পুরো নকশা আর resilience pattern দেখানো হয়েছে। এখানে শুধু DDoS-এর দৃষ্টিতে দেখি।

নিয়ন্ত্রণযা করেযা পারে না বা যে ঝুঁকি
Rate limitএক key থেকে সময়ে কত অনুরোধ, তা বাঁধেছড়ানো botnet-এ প্রতি উৎসে চাপ কম; ভাগ করা IP-তে নিরীহরা আটকায়
Connection limitএক উৎসের একসাথে কতগুলো খোলা connection, তা বাঁধেভাগ করা IP-তে সীমা বেশি কড়া হলে ক্ষতি
WAF নিয়মPattern দেখে অনুরোধ বাদ বা challenge করেFalse positive; আগে count mode-এ দেখুন
Cacheএকই উত্তর origin-কে না ছুঁয়ে দেয়Login করা পাতা আর search সাধারণত cache হয় না
Autoscalingচাপ বাড়লে সার্ভার বাড়ায়Database বাড়ে না; bill বাড়ে; ভালো-মন্দ চেনে না

নিচের token bucket খেলনাটি দেখুন। প্রতিটি key-র একটি বালতি আছে, যাতে সর্বোচ্চ ১০টি token ধরে। সেকেন্ডে ৫টি token জমে। প্রতিটি অনুরোধে একটি token খরচ হয়। Clock simulated, ১০ সেকেন্ড চলে, আর শেষের সারিটি লক্ষ করুন।

// Token bucket per client key on a simulated clock (ms). Toy stream, no network.
const RATE = 5, BURST = 10, DURATION = 10000;      // 5 tokens/s, bucket holds 10
const clients = [
  { key: 'shopper 203.0.113.10', rps: 1 },
  { key: 'keen user 203.0.113.11', rps: 4 },
  { key: 'abuser 198.51.100.7', rps: 50 },
  { key: '40 users behind one CGNAT IP', rps: 40 },
];
function decide(bucket, now) {
  bucket.tokens = Math.min(BURST, bucket.tokens + (now - bucket.last) * RATE / 1000);
  bucket.last = now;
  if (bucket.tokens >= 1) { bucket.tokens -= 1; return true; }
  return false;
}
console.log('client                         sent  allowed  limited');
for (const c of clients) {
  const bucket = { tokens: BURST, last: 0 };
  const gap = 1000 / c.rps;
  let allowed = 0, limited = 0;
  for (let i = 0, now = 0; now < DURATION; i++, now = i * gap) {
    if (decide(bucket, now)) allowed++; else limited++;
  }
  console.log(`${c.key.padEnd(30)} ${String(allowed + limited).padStart(4)} ${String(allowed).padStart(8)} ${String(limited).padStart(8)}`);
}
console.log(`ceiling in 10 s = ${BURST} burst + ${RATE} * 10 refill = ${BURST + RATE * 10}`);

shopper আর keen user-এর সব অনুরোধ পার হলো (10 ও 40), কারণ দুজনই সেকেন্ডে ৫-এর নিচে আছেন। abuser ৫০০ পাঠিয়ে পেলেন 59, সীমা হওয়া 441. শেষের সারি ceiling in 10 s = ... = 60 তত্ত্বীয় ছাদ। শেষ মুহূর্তের ভগ্নাংশ token পূর্ণ না হওয়ায় ফল 59.

এবার আসল শিক্ষা: 40 users behind one CGNAT IP-ও 59 পেলেন, আর 341টি অনুরোধ আটকে গেল। এঁরা ৪০ জন নিরীহ মানুষ। বাংলাদেশে মোবাইল network-এ অনেক গ্রাহক একই public IP ভাগ করতে পারেন (CGNAT). শুধু IP-কে key বানালে সেলের সবচেয়ে ব্যস্ত সময়ে আপনি নিজেই গ্রাহক আটকাবেন। Login করা ব্যবহারকারীর জন্য account বা session-কে key বানান, আর IP-র সীমা ঢিলা রাখুন।

# Inside http { }: per-client state for your own site.
limit_req_zone  $binary_remote_addr zone=search:10m rate=5r/s;
limit_conn_zone $binary_remote_addr zone=peraddr:10m;

server {
    location /search {
        limit_req zone=search burst=10 nodelay;
        limit_req_status 429;
        limit_conn peraddr 20;
        proxy_pass http://app_backend;
    }
}

CDN-এর পেছনে থাকলে $binary_remote_addr হবে CDN-এর ঠিকানা, ক্রেতার নয়। আগে আসল client ঠিকানা নিরাপদে নেওয়ার ব্যবস্থা করুন, শুধু বিশ্বস্ত proxy-র header মেনে।

Autoscaling-এর ফাঁদ: হামলা থামল না, শুধু bill বাড়ল

ধরুন একটি সার্ভার ৫০০ rps সামলায়, আর হামলা ৭,৫০০ rps যোগ করল। Autoscaling ৭,৫০০ ÷ ৫০০ = ১৫টি বাড়তি সার্ভার চালু করবে। ধরা যাক প্রতি সার্ভার-ঘণ্টার খরচ ৳২০ (এটি শুধু অনুমান). ৭২ ঘণ্টায় ১৫ × ৭২ × ৳২০ = ৳২১,৬০০, এর সাথে data transfer আর log-এর খরচ যোগ হবে। হামলাকারী খরচ বাড়াতে পারলেই কিছুটা সফল। একে অনেকে economic denial of sustainability বলেন। অন্যদিকে database-এর সীমা একই থাকলে bottleneck শুধু এক ধাপ ভেতরে সরে যায়।

  • সর্বোচ্চ সীমা রাখুন: Autoscaling-এর ছাদ আর bill-এর alert.
  • দামি path আগে রক্ষা করুন: Search, login, report, OTP পাঠানো। এখানে কড়া সীমা আর queue.
  • Graceful degradation: চাপে search সীমিত করুন, কিন্তু checkout চালু রাখুন।
  • Provider-এর শর্ত পড়ুন: কিছু paid সুরক্ষায় হামলার সময়ের বাড়তি খরচ নিয়ে শর্ত থাকে। চুক্তিতে যাচাই করুন।

৮ · উজানের সাহায্য আর সাড়ার পরিকল্পনা

আপনার link ভরলে সমাধান আপনার ঘরে নেই, আছে আপনার ISP-র হাতে। হামলা শুরু হওয়ার পরে প্রথমবার ISP-র NOC-এর নম্বর খোঁজা খুব খারাপ পরিকল্পনা। তাই আগে থেকে জানুন, ISP কী কী দিতে পারে, চুক্তিতে কী আছে, আর কত সময়ে দেবে।

হাতিয়ারধারণাদাম
Scrubbing-এ route ঘোরানোBGP-র মাধ্যমে traffic পরিষ্কার-কেন্দ্রে নেওয়াচালু হতে কয়েক মিনিট লাগতে পারে; আগে মহড়া দরকার
Blackholing (RTBH)একটি লক্ষ্য IP-র সব traffic উজানেই ফেলে দেওয়াসেই IP-র ভালো traffic-ও যায়। হামলাকারীর কাজটি আপনি নিজেই শেষ করলেন, কিন্তু বাকি network বাঁচল
FlowSpecBGP দিয়ে সূক্ষ্ম filter ছড়ানো: লক্ষ্য, protocol, port, আকারসূক্ষ্ম, কিন্তু ভুল rule অনেক router-এ একসাথে পৌঁছায়। Router-এর সীমা জেনে চালান

Blackholing-কে বাড়িতে আগুন লাগলে একটি ঘরের দরজা বন্ধ করে পুরো বাড়ি বাঁচানোর মতো ভাবুন। একই IP-তে সবকিছু থাকলে পুরো সেবাই বন্ধ হবে, তাই গুরুত্বপূর্ণ সেবাগুলো আলাদা ঠিকানায় রাখা ভালো।

DDoS runbook-এ যা থাকবে

Runbook হলো চাপের মধ্যে অনুসরণ করার লেখা ধাপ। সাধারণ incident-এর ভিত্তি Incident management পর্বে আছে, আর পুরো IR প্রক্রিয়া আসবে পর্ব ৬১-এ। DDoS-এর জন্য বিশেষ করে যা লাগে:

যোগাযোগ

ISP-র NOC, CDN বা scrubbing provider-এর জরুরি নম্বর, চুক্তির নম্বর, hosting, আইনি পরামর্শক। একটি phone-ভিত্তিক বিকল্প রাখুন, কারণ আপনার নিজের email বা chat-ও পড়ে যেতে পারে।

Out-of-band

সিদ্ধান্ত

কে incident commander, কে scrubbing চালুর অনুমতি দেবেন, কখন blackhole হবে। সীমা আগেই লিখুন: যেমন uplink ৮০%-এর ওপরে ৫ মিনিট থাকলে ISP-কে ফোন।

পূর্বনির্ধারিত trigger

গ্রাহকের সাথে কথা

Status page মূল সাইট থেকে আলাদা জায়গায় রাখুন। বার্তার খসড়া তৈরি রাখুন। যা জানেন শুধু তাই বলুন, অনুমান নয়। পরের update কখন, তাও জানান।

সৎ, নিয়মিত

প্রমাণ

Flow log, WAF log আর সময়রেখা সংরক্ষণ করুন। পরে পর্যালোচনা, বিমা বা আইনি কাজে লাগতে পারে। নিয়ন্ত্রক বা কর্তৃপক্ষকে জানানোর প্রয়োজন আছে কি না, তা আগেই দেখে রাখুন।

পরে কাজে লাগবে

মুক্তিপণের দাবি এলে: কিছু হামলায় “টাকা দিন, নইলে হামলা” ধরনের বার্তা আসে। আতঙ্কে সিদ্ধান্ত নেবেন না। আগে আইন ও ব্যবস্থাপনার পথে নিয়ে যান, কর্তৃপক্ষকে জানানোর কথা ভাবুন, আর এই পরিস্থিতিও runbook-এ রাখুন।

আরও গভীরে: BCP 38 পরে RFC 3704 (BCP 84)-এ বিস্তৃত হয়, বিশেষত একাধিক ISP-তে যুক্ত network-এর জন্য। RFC 4987 (২০০৭) SYN flood-এর প্রচলিত প্রতিকারগুলোর তুলনা করে। RFC 5635 (২০০৯) remote-triggered blackhole, RFC 7999 (২০১৬) BLACKHOLE community, আর RFC 8955 (২০২০) FlowSpec-এর বর্তমান মান লিখেছে। CISA, FBI আর MS-ISAC-এর যৌথ গাইড Understanding and Responding to Distributed Denial-of-Service Attacks (২০২৪-এ হালনাগাদ) প্রস্তুতির একটি ভালো তালিকা।

৯ · ভিড় না হামলা — একটি সেলের দিন আর পরীক্ষার সীমা

ঈদের সেলের রাত ৮টা। লাখো মানুষ একসাথে ঢুকলেন, সাইট ধীর হলো। এটি flash crowd, হামলা নয়। ভুল করে আসল ক্রেতাকে block করলে আপনি নিজেই সেই ক্ষতি করবেন, যা হামলাকারী চাইছিল। আবার হামলাকে “ভিড়” ভেবে অপেক্ষা করলেও বিক্রি যায়। পার্থক্য চেনার কিছু সংকেত:

সংকেতFlash crowd-এ সাধারণতহামলায় সাধারণত
কারণ জানা?সেল, SMS, টিভি বিজ্ঞাপন, ভাইরাল পোস্টকোনো জানা কারণ নেই
ক্রেতার আচরণপাতা ঘোরেন, cart-এ রাখেন, অর্ডার করেনএকই path বারবার, অর্ডার প্রায় নেই
উৎসস্বাভাবিক এলাকা, মোবাইল আর বাড়ির networkঅস্বাভাবিক এলাকা বা data center-এর network-এ ঘনত্ব
Conversion (প্রতি ১০০ session-এ অর্ডার)থাকে বা বাড়ে, সাইট ধীর হলে কমেনাটকীয়ভাবে পড়ে যায়

কোনো একটি সংকেত একা যথেষ্ট নয়। সাইট খুব ধীর হলে আসল ক্রেতারাও অর্ডার করতে পারেন না, তাই conversion পড়ে যায়। নিচের খেলনা নিয়মটি কয়েকটি সংকেত মিলিয়ে ৭টি সময়-খণ্ড বিচার করে। ফল তিন রকম: crowd, attack, আর অনিশ্চিত হলে human.

// Toy triage rule: flash crowd or attack? Windows and labels are invented.
// conv = orders per 100 sessions (normal is 3.0), local = share from usual regions,
// dc = share from data-centre networks, pages = pages per session, campaign = announced.
const windows = [
  { id: 'W1', truth: 'crowd', x: 4, conv: 3.4, local: 0.93, dc: 0.02, pages: 5.1, campaign: true },
  { id: 'W2', truth: 'crowd', x: 6, conv: 1.9, local: 0.90, dc: 0.03, pages: 3.8, campaign: true },
  { id: 'W3', truth: 'crowd', x: 3, conv: 2.6, local: 0.88, dc: 0.04, pages: 2.9, campaign: false },
  { id: 'W4', truth: 'crowd', x: 8, conv: 0.4, local: 0.91, dc: 0.03, pages: 1.2, campaign: true },
  { id: 'W5', truth: 'attack', x: 9, conv: 0.1, local: 0.31, dc: 0.58, pages: 1.1, campaign: false },
  { id: 'W6', truth: 'attack', x: 5, conv: 0.3, local: 0.42, dc: 0.47, pages: 1.0, campaign: true },
  { id: 'W7', truth: 'attack', x: 4, conv: 1.0, local: 0.71, dc: 0.12, pages: 1.3, campaign: false },
];
function score(w) {
  let s = 0;
  if (w.conv < 1.0) s += 2;
  if (w.local < 0.6) s += 2;
  if (w.dc > 0.3) s += 2;
  if (w.pages < 1.5) s += 1;
  if (w.campaign) s -= 2;
  return s;
}
const verdict = s => (s >= 3 ? 'attack' : s <= 0 ? 'crowd' : 'human');
let tp = 0, fp = 0, human = 0;
console.log('id  size   score  verdict  truth');
for (const w of windows) {
  const s = score(w), v = verdict(s);
  console.log(`${w.id}  x${w.x}  ${String(s).padStart(6)}  ${v.padEnd(7)}  ${w.truth}`);
  if (v === 'human') { human++; continue; }
  if (v === 'attack' && w.truth === 'attack') tp++;
  if (v === 'attack' && w.truth === 'crowd') fp++;
}
console.log(`sent to a person: ${human}`);
const attacks = windows.filter(w => w.truth === 'attack').length;
console.log(`precision ${(tp / (tp + fp)).toFixed(2)}  recall ${(tp / attacks).toFixed(2)}`);

W1-W3 ঠিকভাবে crowd, W5 আর W6 ঠিকভাবে attack. W4 আসলে ভিড়, কিন্তু সাইট ভেঙে পড়ায় অর্ডার কমেছে, score 1, তাই human. W7 আসলে হামলা, কিন্তু উৎসগুলো স্থানীয় দেখাচ্ছে, তাই সেটিও human. শেষ লাইনে precision 1.00 recall 0.67: নিয়ম যাকে হামলা বলেছে সবই হামলা, কিন্তু ৩টি হামলার ২টিই নিজে ধরেছে। হিসাব ২ ÷ ৩ ≈ ০.৬৭। Precision আর recall-এর ব্যবহার IDS-এর প্রসঙ্গে দেখুন পর্ব ২৩-এ।

এই সাতটি সারি মনগড়া, আর এত ছোট নমুনার precision কোনো প্রমাণ নয়। মূল শিক্ষা sent to a person: 2: অনিশ্চিত অবস্থায় যন্ত্রকে block করতে না দিয়ে মানুষের কাছে পাঠানো। বাস্তবে সীমাগুলো আপনার নিজের baseline থেকে আসবে।

একটি কাল্পনিক সেলের রাত

এবার সব মিলিয়ে দেখি। কাল্পনিক অনলাইন বাজার, origin-এর সীমা ৩,০০০ rps, uplink ১ Gbps, আর স্বাভাবিক cache hit ৬০%. মোট rps মানে edge-এ আসা সব অনুরোধ। ধাপে ধাপে এগিয়ে দেখুন, প্রতিটি সংখ্যা কী সিদ্ধান্তের জন্ম দিচ্ছে।

কাল্পনিক dashboard
সময়
মোট rps
Origin rps
p95 সময়
5xx ত্রুটি
অর্ডার / ১০০ session
Uplink ব্যবহার
  1. ১৯:৫৫ · প্রস্তুতি। সেলের SMS গেছে। দল জানে কী আসছে, runbook খোলা, ISP-কে আগেই জানানো। ১,২০০ × ০.৪ = ৪৮০ rps origin-এ যাচ্ছে।
  2. ২০:০০ · ভিড়, যা চাওয়া হয়েছিল। Traffic ৫ গুণ, কিন্তু উদ্বেগ নেই। ৬,০০০ × ০.৪ = ২,৪০০ rps, সীমার নিচে। অর্ডার বেড়ে ৩.৪. এটি flash crowd, কোনো নিয়ম বদলানো দরকার নেই।
  3. ২০:১২ · Alert. p95 সময় ২,১০০ ms, 5xx ৬%. মোট বাড়ল ৩,৪০০, আর origin-এ ২,৪০০ + ৩,৪০০ = ৫,৮০০ rps, সীমার প্রায় দ্বিগুণ। বাড়তি অনুরোধের সবই cache-এর বাইরে যাচ্ছে। অর্ডার পড়ে গেল ১.২-এ।
  4. ২০:১৬ · Triage. Incident ঘোষণা, commander ঠিক হলো, status page-এ প্রথম বার্তা গেল। বাড়তি ৩,৪০০ rps সবই /search-এ, অল্প কয়েকটি network থেকে, অর্ডার নেই। সিদ্ধান্ত: ভিড়ের সাথে application-layer হামলা মিশে আছে। অর্ডার ১.০, ত্রুটি ৭.৫%.
  5. ২০:২৩ · নির্দিষ্ট প্রতিকার। /search-এ session-ভিত্তিক সীমা আর ৬০ সেকেন্ডের cache. ৩,৪০০ থেকে মাত্র ৩০০ origin-এ যায়, মোট ২,৭০০ rps. পুরো সাইট block হয়নি, তাই অর্ডার ফিরে এলো ২.৭-এ। মোট rps ৯,৪০০-ই আছে, কিন্তু চাপ থামছে edge-এ।
  6. ২০:৪১ · দ্বিতীয় ঢেউ। এবার পথই ভরে গেল: প্রায় ২.৯ Gbps volumetric চাপ, স্বাভাবিক ০.৬২ Gbps মিলে প্রায় ৩.৫২ Gbps, মানে uplink ৩৫২%. আসল অনুরোধই পৌঁছাচ্ছে না, তাই মোট rps পড়ে ৩,১০০। ভেতরের WAF এখানে কিছু করতে পারে না। Trigger মেনে ISP-কে ফোন আর scrubbing চালুর অনুমতি।
  7. ২০:৫২ · Scrubbing চালু। ১১ মিনিট লাগল, কারণ চুক্তি আর মহড়া আগেই ছিল। Uplink ৬৪%, origin ২,৬৫০ rps, অর্ডার ২.৬. Status page-এ হালনাগাদ গেল: সেবা স্বাভাবিকের পথে।
  8. ২৩:৩০ · শেষ আর পর্যালোচনা। সেল শেষ, সব মাপ স্বাভাবিকের কাছে। ISP নিশ্চিত করার পরেই scrubbing আর বিশেষ সীমা ধীরে তোলা হবে। সব log সংরক্ষিত, দুই দিনের মধ্যে পর্যালোচনা।

ঘটনার পরের পর্যালোচনা

Post-incident review-এ মানুষকে দোষ না দিয়ে ব্যবস্থাকে প্রশ্ন করুন। উপরের ঘটনায় কয়েকটি প্রশ্ন:

  • সময়রেখা: Alert কখন, সিদ্ধান্ত কখন, প্রতিকার কখন? ২০:১২ থেকে ২০:২৩, মানে ১১ মিনিট, কমানো যায় কি?
  • Alert ঠিক ছিল? /search-এর আলাদা মাপ থাকলে আগে ধরা পড়ত কি?
  • কী কাজ করেনি? Search-এ cache আগে থেকে থাকলে কেমন হতো? /search ৬০ সেকেন্ডের cache-এ ভুল ফল দিয়েছিল কি?
  • কার ক্ষতি হলো? কতজন আসল ক্রেতা আটকেছেন, কত অর্ডার গেছে? এটি মাপুন, শুধু হামলার আকার নয়।
  • কী বদলাবে? প্রতিটি সিদ্ধান্তের একজন মালিক আর একটি তারিখ। Runbook হালনাগাদ, আর একটি মহড়া (পর্ব ৬৬).

পরীক্ষার আইনি সীমা

“Stress testing” নাম দিলেই অনুমতি হয়ে যায় না। অন্যের সাইট, প্রতিদ্বন্দ্বীর সাইট, বা “শুধু দেখতে” কোনো সার্ভারে অনুমতি ছাড়া এমন traffic পাঠানো অপরাধ। DDoS-for-hire সেবা, যাকে booter বা stresser বলা হয়, তা ভাড়া নেওয়াও অপরাধ হতে পারে। আন্তর্জাতিক অভিযান Operation PowerOFF এমন সেবা বন্ধ করেছে আর ব্যবহারকারীদেরও সতর্ক করেছে।

নিজের সাইটে হলেও সাবধান। Traffic যায় ISP আর hosting-এর ভাগ করা পথ দিয়ে, তাই অন্যদের ক্ষতি হতে পারে। আর booter-এর traffic প্রায়ই অন্যের দখল করা যন্ত্র থেকে আসে, যা আপনি ব্যবহার করতে পারেন না। নিয়ম হলো: শুধু নিজের সিস্টেমে, আপনার provider-এর লিখিত অনুমতিসহ, নির্ধারিত সময়ে আর নির্ধারিত সীমায়। বৈধ load test টুল ব্যবহার করুন, staging পছন্দ করুন।

বাংলাদেশের সাইবার আইনের বর্তমান অবস্থা আর অনুমতির নীতি আছে পর্ব ৬-এ। এই অংশ আইনি পরামর্শ নয়। আপনার কোনো পরিকল্পনা থাকলে আইনের বর্তমান লেখা দেখুন আর আইনজীবীর পরামর্শ নিন।

পরীক্ষা ও ইন্টারভিউতে:

  • DoS আর DDoS-এর পার্থক্য? DoS-এ এক বা অল্প উৎস; DDoS-এ বহু ছড়ানো উৎস, তাই একটি IP আটকে সমাধান হয় না।
  • BCP 38 কী করে? ISP গ্রাহকের কাছ থেকে আসা জাল উৎসের প্যাকেট বাদ দেয়, ফলে reflection-এর ভিত্তি দুর্বল হয়।
  • SYN cookie কী বাঁচায়? সার্ভারের state. ACK ফিরে এলে তবেই connection তৈরি হয়।
  • ১ Gbps link-এ ৬৪ byte frame-এ সর্বোচ্চ pps কত? প্রায় ১৪.৯ লাখ, কারণ ৮৪ byte × ৮ = ৬৭২ bit.
  • Autoscaling কি DDoS সমাধান? না। এটি সময় কেনে, কিন্তু bill বাড়ায় আর database-এর bottleneck সরায় না।

১০ · AI-এর যুগে DDoS-এর প্রস্তুতি

AI একটি runbook-এর খসড়া, nginx-এর সীমা বা log-এর সারাংশ খুব দ্রুত দিতে পারে। কিন্তু সে আপনার traffic, চুক্তি আর গ্রাহককে দেখতে পায় না। হামলার সময়ের একটি ভুল নিয়ম নিজেই outage হতে পারে।

AI-এর ভুলবিপদযাচাই
“IP দিয়ে block করুন” বলে সবকিছু সেরে ফেলেCGNAT-এর নিরীহ গ্রাহক আটকায়নিয়ম আগে count mode-এ চালান
মনগড়া RFC বা CVE নম্বর দেয়ভুল সূত্রে সিদ্ধান্তrfc-editor.org আর মূল সূত্রে দেখুন
পুরোনো sysctl বা ভুল সীমা দেয়আসল ক্রেতা আটকায় বা সুরক্ষা বন্ধ হয়নিজের version-এর docs আর lab
Error ঠিক করতে সীমা বা WAF বন্ধ করতে বলেসুরক্ষা নিভে যায়Diff পড়ুন, কারণ খুঁজুন
Log দেখে নিশ্চিতভাবে “হামলা” বলে দেয়ভিড়কে block করাConversion আর ব্যবসার তথ্য মিলিয়ে মানুষ সিদ্ধান্ত নিন
Log-এ থাকা গ্রাহকের ডেটা prompt-এ চলে যায়ব্যক্তিগত তথ্য ফাঁসIP, ফোন, token মুছে তবেই দিন

AI-কে হামলা বানাতে নয়, আপনার প্রস্তুতির খুঁত ধরতে কাজে লাগান। নিচের prompt-এ সংখ্যাগুলো আপনার নিজের বসান, গোপন তথ্য বাদ দিয়ে:

তুমি একজন অভিজ্ঞ network ও incident response প্রকৌশলীর মতো আমার নিজের একটি অনলাইন দোকানের DDoS প্রস্তুতি পর্যালোচনা করো। এটি শুধু প্রতিরক্ষার জন্য। আমার তথ্য (সব সংখ্যা আনুমানিক, কোনো গোপন তথ্য নেই): - Uplink: [মান] Gbps, firewall: [মান] pps, load balancer: [মান] conn/s, app: [মান] rps - স্বাভাবিক ও সেলের দিনের traffic: [মান] - আমার runbook: [সারাংশ] ১. প্রথম bottleneck কোনটি হতে পারে, হিসাব দেখিয়ে বলো। ২. Runbook-এ কোন যোগাযোগ, trigger বা ভূমিকা অনুপস্থিত? ৩. Flash crowd-কে ভুল করে হামলা ভাবার ঝুঁকি কোথায়? ৪. প্রতিটি পরামর্শের সাথে নিজে যাচাইয়ের উপায় আর সূত্র দাও। RFC নম্বর নিশ্চিত না হলে বলো “নিশ্চিত নই”, বানিও না। ৫. কোনো হামলার পদ্ধতি, service-এর তালিকা বা পরীক্ষার traffic তৈরির কোড দিও না।

AI-এর পরামর্শ কাজে লাগানোর চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১BCP 38 প্রকাশিত হয়েছে ২০০০ সালে। এত বছর পরেও জাল ঠিকানার হামলা কেন শেষ হয়নি?

কারিগরি সমাধানটি পুরোনো আর সরল। RFC 2827 বলে, ISP তার গ্রাহকের প্রান্তে শুধু সেই উৎস ঠিকানা ঢুকতে দেবে, যা ওই গ্রাহকের। তবু সমস্যা রয়ে গেছে, আর এর মূল কারণ প্রযুক্তি নয়, প্রণোদনা।

  • খরচ এক জায়গায়, লাভ আরেক জায়গায়: Filter বসানোর খরচ দেয় একটি ISP. কিন্তু লাভ পায় পৃথিবীর অন্য কেউ, যার ওপর হামলা হলো না। নিজের গ্রাহকের কোনো উপকার সরাসরি দেখা যায় না। অর্থনীতিতে একে negative externality বলে: নদীর উজানের কারখানা দূষণ করে, দাম দেয় ভাটির গ্রাম।
  • একজন না মানলেই চলে: হাজার হাজার network-এর মধ্যে অল্প কয়েকটিও filter না করলে সেখান থেকে জাল প্যাকেট বেরোতে পারে। এটি এমন তালা, যা সব দরজায় না লাগালে কাজ অসম্পূর্ণ থাকে।
  • কারিগরি জটিলতা আছে: একাধিক ISP-তে যুক্ত network-এ আসা-যাওয়ার পথ এক থাকে না। সরল filter সেখানে বৈধ traffic ফেলে দিতে পারে। এজন্যই পরে RFC 3704 (BCP 84) এসেছে। অনেক পুরোনো সরঞ্জাম আর হাতে লেখা নিয়মও বাধা।

তাহলে অগ্রগতির পথ কী? MANRS-এর মতো উদ্যোগ network-গুলোকে anti-spoofing-সহ কিছু ন্যূনতম নিয়মে যুক্ত করার চেষ্টা করে। CAIDA-র Spoofer প্রকল্পের মতো কাজ মাপার চেষ্টা করে, কোন network থেকে জাল প্যাকেট বেরোতে পারে। যা মাপা যায়, তা নিয়ে চাপও দেওয়া যায়। তবে এই উন্নতি আংশিক, আর সঠিক হার সময়ভেদে বদলায়।

একজন network প্রকৌশলীর জন্য বার্তাটি সরাসরি: আপনার border-এ নিজের network থেকে বেরোনো traffic-এ এই filter আছে কি না দেখুন। অন্য কেউ না করলেও আপনার দায়িত্ব কমে না।

মূল উপলব্ধি: নিরাপত্তার অনেক সমস্যা প্রযুক্তিতে নয়, প্রণোদনায় আটকে থাকে। যে সমাধানের লাভ অন্যে পায়, তার জন্য নিয়ম, মাপ বা সামাজিক চাপ লাগে।

প্র ০২Mirai প্রমাণ করল সস্তা camera ইন্টারনেট কাঁপাতে পারে। এই ঝুঁকির দায় কার?

Mirai-র ক্ষেত্রে অবাক করা বিষয়টি হলো এর সরলতা। প্রকাশিত গবেষণা অনুযায়ী মূল সংস্করণ কোনো অসাধারণ ত্রুটি নয়, অল্প কিছু default credential দিয়েই লাখ লাখ যন্ত্রে পৌঁছেছিল। তাহলে দায় কার? উত্তরটি কয়েক স্তরে ভাগ করতে হয়।

  • ব্যবহারকারী: দোকান থেকে কেনা camera-র password কজন বদলান? যন্ত্রটি চলছে, তাই তিনি সন্তুষ্ট। হামলার খরচ তাঁর গায়ে লাগে না। এটিই অসুবিধা: মালিক ভুক্তভোগী নন।
  • নির্মাতা: সস্তা যন্ত্রে একই password রাখা সহজ। তবে এই সিদ্ধান্তই ব্যবহারকারীর ঘাড়ে ঝুঁকি চাপায়। পর্ব ৩-এর secure by default নীতি বলে, নিরাপদ অবস্থা হতে হবে শুরু থেকেই।
  • নীতি-নির্ধারক: এখানে বড় পরিবর্তন এসেছে। ETSI EN 303 645 (২০২০) ভোক্তা IoT-এর জন্য একটি ভিত্তি মান দেয়, যার একটি মূল কথা হলো সব যন্ত্রে এক default password নয়। যুক্তরাজ্যের Product Security and Telecommunications Infrastructure আইনের বিধান ২০২৪ সালের এপ্রিল থেকে কার্যকর হয়ে এমন সাধারণ default password নিষিদ্ধ করেছে।
  • ISP: সংক্রমিত গ্রাহককে জানানো বা আলাদা করা ISP-র পক্ষে সম্ভব, কিন্তু তাতে খরচ আর গ্রাহক-অসন্তোষ আছে।

Dyn-এর ঘটনা আরেকটি শিক্ষা দেয়। ক্ষতিগ্রস্ত সাইটগুলোর অনেকের নিজের কোনো দুর্বলতা ছিল না। তাদের নির্ভরতা, মানে DNS, আঘাত পেয়েছিল। তবে এই ঘটনার দায় নিয়ে সতর্ক থাকুন: Mirai-র তিন স্রষ্টার দোষ স্বীকার Dyn হামলার জন্য ছিল না। প্রকাশিত উৎস থেকে যা জানা যায়, শুধু ততটুকুই বলা উচিত।

মূল উপলব্ধি: DDoS শুধু আপনার সার্ভারের সমস্যা নয়, এটি ইন্টারনেট নামের ভাগ করা ব্যবস্থার সমস্যা। তাই প্রতিরক্ষায় মানুষ, নকশা, আইন আর নির্ভরতা, সবই লাগে।

প্র ০৩SYN cookie যদি এত ভালো, তাহলে কেন সবসময় ব্যবহার না করে শুধু backlog ভরলে ব্যবহার করা হয়?

১৯৯৬ সালে SYN flood বড় আলোচনায় আসে, যখন নিউ ইয়র্কের ISP Panix এমন হামলায় দীর্ঘ সমস্যায় পড়ে। সেই বছরই Daniel J. Bernstein আর Eric Schenk SYN cookie-র ধারণা গড়ে তোলেন। ধারণাটি চমৎকার: state-এর বদলে একটি মান ফিরিয়ে দেওয়া, আর পরে হিসাব করে মিলিয়ে নেওয়া।

কিন্তু প্রতিটি কৌশলের দাম আছে। RFC 4987 (২০০৭) এসব trade-off সাজিয়ে দেখায়।

  • জায়গা কম: Sequence number মাত্র ৩২ bit. সেখানেই যাচাইয়ের মান, সময়ের ঘর আর MSS-এর ইঙ্গিত ঢোকাতে হয়। তাই শুধু কয়েকটি MSS মান রাখা যায়।
  • TCP option-এর ক্ষতি: সার্ভার কিছু জমা না রাখায়, SYN-এ পাওয়া window scaling বা selective acknowledgment-এর মতো option মনে রাখা কঠিন। আধুনিক Linux TCP timestamp-এর ভেতরে কিছু তথ্য রেখে এই ক্ষতি কমায়, তবে তা শুধু timestamp চালু থাকলে কাজে লাগে।
  • পুনরায় পাঠানো যায় না: SYN-ACK হারিয়ে গেলে সার্ভারের মনে নেই, তাই সে আবার পাঠায় না। Client-কেই আবার চেষ্টা করতে হয়।
  • গণনার খরচ: প্রতিটি SYN-এ একটি cryptographic গণনা। এটি ছোট, তবু খুব বড় হারে তা গুরুত্বপূর্ণ।

তাই Linux-এ প্রচলিত setting tcp_syncookies=1 মানে স্বাভাবিক অবস্থায় সাধারণ backlog, আর সারি ভরলে তবেই cookie. স্বাভাবিক সময়ে পূর্ণ সুবিধা, চাপের সময়ে সেবা চালু।

ভুলে যাবেন না, এটি শুধু একটি সমস্যা মেটায়। আসল ঠিকানা থেকে পুরো handshake শেষ করা botnet-কে এটি থামায় না, আর link ভরে গেলে তো SYN সার্ভারেই পৌঁছায় না।

মূল উপলব্ধি: চাপের সময়ে “কম সুবিধায় চালু থাকা” প্রায়ই “পূর্ণ সুবিধায় বন্ধ হওয়া”-র চেয়ে ভালো। ভালো নকশা এই degradation আগে থেকে ঠিক করে রাখে।

প্র ০৪Blackholing-এ নিজের IP নিজেই বন্ধ করা হয়। FlowSpec সূক্ষ্ম হলে সবসময় সেটিই কেন নয়?

Blackholing শুনলে উল্টো মনে হয়: হামলাকারী আপনার সেবা বন্ধ করতে চায়, আর আপনি নিজেই তা বন্ধ করছেন! কিন্তু ছবিটি বড় করে দেখুন। ধরুন একটি hosting প্রতিষ্ঠানের ১০ Gbps link-এ ৫০ জন গ্রাহক, আর একজনের IP-তে ৮০ Gbps হামলা এলো। সবাই একসাথে পড়ে গেছেন। সেই একটি IP উজানে ফেলে দিলে ৪৯ জন ফিরে আসেন। এটি পর্ব ৩-এর blast radius কমানোর চরম রূপ।

FlowSpec আরও সূক্ষ্ম। পুরো IP নয়, শুধু নির্দিষ্ট protocol, port বা প্যাকেট আকারের traffic আটকানো যায়। তাহলে সবসময় এটি কেন নয়? কয়েকটি কারণ আছে।

  • ভুলের পরিধি বিশাল: একটি নিয়ম মুহূর্তে অনেক router-এ ছড়ায়। ২০১৩ সালের মার্চে Cloudflare তাদের postmortem-এ জানায়, হামলা ঠেকাতে তৈরি একটি FlowSpec rule, যাতে অস্বাভাবিক প্যাকেট আকার ছিল, তাদের edge router-গুলোর memory শেষ করে দেয়। ফলে তাদের network বেশ কিছু সময় ইন্টারনেট থেকে কার্যত সরে যায়। সুরক্ষার হাতিয়ারই outage ঘটিয়েছিল।
  • সমর্থন সীমিত: সব ISP গ্রাহকের কাছ থেকে FlowSpec নেয় না। নিলেও কড়া সীমা থাকে। Blackhole community অনেক বেশি প্রচলিত।
  • Router-এর সীমা: Filter-এর টেবিল সীমিত। নিয়ম বেশি হলে যন্ত্রের ওপরই চাপ বাড়ে।
  • নিশ্চিত signature লাগে: হামলা যদি আসল HTTPS অনুরোধের মতো দেখায়, তবে port বা আকার দিয়ে আলাদা করা যায় না। তখন edge-এর application-স্তরের সিদ্ধান্ত লাগে।

তাই পরিণত দলগুলো এই হাতিয়ারে যাচাই আর সীমা বসায়: নিয়মের স্বয়ংক্রিয় পরীক্ষা, ধীরে ধীরে ছড়ানো, স্বয়ংক্রিয় মেয়াদ, আর rollback.

মূল উপলব্ধি: যে হাতিয়ার এক মুহূর্তে পুরো network বদলাতে পারে, সেটি নিজেই একটি ঝুঁকি। হামলার চাপের মধ্যেও পরিবর্তনের নিয়ন্ত্রণ থাকতে হবে।

প্র ০৫সবচেয়ে বড় বিক্রির রাতেই কি হামলা চেনা সবচেয়ে কঠিন? Flash crowd আর হামলা কি সত্যিই আলাদা করা যায়?

“Flash crowd” শব্দটি এসেছে Larry Niven-এর ১৯৭৩ সালের একটি বিজ্ঞান-কল্পকাহিনি থেকে। পরে web-এ এটি পরিচিত হয় “Slashdot effect” হিসেবে: একটি জনপ্রিয় সাইটে link এলে ছোট সাইট ভিড়ে পড়ে যেত। Jung, Krishnamurthy ও Rabinovich-এর গবেষণাপত্র “Flash Crowds and Denial of Service Attacks” (WWW ২০০২) দেখায়, দুটি ঘটনার ফল কাছাকাছি হলেও ধরন আলাদা: ক্লায়েন্টের বৈশিষ্ট্য, ছড়ানো আর অনুরোধের ধরন। তাঁরা CDN-এর সুরক্ষা নিয়েও প্রশ্ন তোলেন।

তবে ব্যবহারিক সিদ্ধান্ত গবেষণাগারের চেয়ে কঠিন। কারণ:

  • দুটি একসাথে হতে পারে: সেলের রাতই হামলার জন্য লোভনীয়, কারণ তখন ক্ষতি সবচেয়ে বেশি আর দল ব্যস্ত।
  • ভিড়ও conversion নামায়: সাইট ধীর হলে আসল ক্রেতাও চলে যান। তাই শুধু এই সংকেতে ভিড়কে হামলা ভাবা সহজ।
  • Path-এর ঘনত্ব বিভ্রান্ত করে: সেলে সবাই একই পাতায় যান। হামলাতেও তাই হতে পারে।
  • দুই ভুলের দাম আলাদা: ভিড়কে আটকালে সরাসরি বিক্রি যায়। হামলা না ধরলে সাইট পড়ে। কোনটি বেশি খারাপ, তা ব্যবসার সিদ্ধান্ত, শুধু কারিগরি নয়।

এজন্যই ভালো দল “ভিড় না হামলা” নিয়ে তর্কে সময় নষ্ট করে না। তারা এমন প্রতিকার আগে নেয়, যা দুই ক্ষেত্রেই ক্ষতি করে না: cache বাড়ানো, দামি path সীমিত করা, waiting room, checkout-কে অগ্রাধিকার। এসব ভিড়ের জন্যও ভালো, হামলার জন্যও। আর মার্কেটিং দলের সাথে সেলের সময়সূচি আগে থেকে ভাগ করে নিলে সংকেতও ভালো হয়।

মূল উপলব্ধি: সঠিক নাম দেওয়ার চেয়ে সঠিক প্রতিকার জরুরি। অনিশ্চয়তায় এমন পদক্ষেপ বেছে নিন, যা ভুল হলেও সবচেয়ে কম ক্ষতি করে।

অনুশীলন

আগে নিজে করে দেখুন, তারপর উত্তর মেলান। এগুলো হিসাব আর চিন্তার কাজ, কোনো বাইরের system-এ পরীক্ষা নয়।

  1. হিসাব করুন: একটি firewall ৩,০০,০০০ pps আর link ২ Gbps সামলায়। App-এর সীমা ৪,০০০ rps, আর traffic-এর ৭৫% cache থেকে যায়। (ক) ১০০ byte প্যাকেটে ৫,০০,০০০ pps এলে কোনটি আগে ভরবে? (খ) ১২,০০০ rps এলে origin-এ কত যাবে? (গ) সর্বোচ্চ কত rps পর্যন্ত origin নিরাপদ?

    (ক) ৫,০০,০০০ × ১০০ × ৮ = ৪০,০০,০০,০০০ bit/s = ৪০০ Mbps, link-এর ২০%. Firewall-এ ৫,০০,০০০ ÷ ৩,০০,০০০ ≈ ১৬৭%. তাই firewall আগে ভরবে, Gbps-এর graph দেখে যা বোঝা যেত না।

    (খ) Cache-এর বাইরে যায় ২৫%: ১২,০০০ × ০.২৫ = ৩,০০০ rps. সীমা ৪,০০০-এর নিচে।

    (গ) ৪,০০০ ÷ ০.২৫ = ১৬,০০০ rps. তবে এই হিসাব ধরে নেয় hit ratio একই থাকে। হামলা যদি cache-এর বাইরের জিনিস চায়, তাহলে এই সংখ্যা ভেঙে পড়ে।

  2. Output অনুমান করুন: (ক) syn_backlog.js-এ TIMEOUT = 5-এর বদলে TIMEOUT = 2 করলে flood, no cookies সারিতে কী আসবে? (খ) token_bucket.js-এ একজন client-এর গতি সেকেন্ডে ১০ করলে তিনি ১০ সেকেন্ডে কতটি পাবেন? আগে লিখে রাখুন, তারপর কোড বদলে চালান।

    (ক) ৬০ × ২ = ১২০, যা ১২৮-এর কম, তাই backlog ভরবে না। আউটপুট: real ok 200/200 refused 0 backlog peak 120/128. Timeout কমানো এই ক্ষেত্রে যথেষ্ট, কিন্তু flood আরও বড় হলে আবার ভরবে।

    (খ) sent 100, allowed 59, limited 41. ছাদ ১০ + ৫ × ১০ = ৬০, আর শেষের ভগ্নাংশের জন্য ৫৯। এই ছাদ client-এর গতির ওপর নির্ভর করে না।

  3. নিয়মের দুর্বলতা: crowd_or_attack.js-এ W7-এর campaign মান true করলে কী হবে? এটি কেন বিপজ্জনক, আর আপনি নিয়মটি কীভাবে বদলাবেন?

    Score ১ থেকে ২ বাদ গিয়ে −১ হবে, তাই verdict crowd. একটি আসল হামলা মানুষের কাছে না গিয়ে “ভিড়” বলে পাশ হয়ে গেল। আগে recall ছিল ০.৬৭, মানুষও দেখতেন। এখন কেউ দেখবেন না।

    কারণ, “সেল চলছে” আচরণের প্রমাণ নয়, শুধু সময়ের তথ্য। সেলের রাতে হামলাও হতে পারে। সমাধান হতে পারে: campaign-এর ছাড় কমানো, অথবা conversion বা দামি path-এর চাপ খারাপ হলে campaign থাকলেও verdict human রাখা। অর্থাৎ ছাড় যেন শুধু স্বাস্থ্যকর সংকেত থাকলেই মেলে।

  4. নকশা ও সমালোচনা: ৩০ জনের একটি প্রতিষ্ঠানের DDoS পরিকল্পনা এই: “সব server-এ firewall আছে। হামলা হলে IT প্রধান আক্রমণকারীর IP block করবেন। সাইটের নোটিশ সাইটেই দেওয়া হবে।” অন্তত পাঁচটি দুর্বলতা বের করুন আর প্রতিটির সমাধান দিন।
    • Firewall পথের ভেতরে: Link ভরলে কিছুই করতে পারবে না। ISP বা CDN-এর সুরক্ষা আগে থেকে চুক্তি করুন।
    • IP block: DDoS-এ উৎস অসংখ্য, আর CGNAT-এর নিরীহ গ্রাহকও আটকাতে পারেন। আচরণ আর path-ভিত্তিক নিয়ম রাখুন।
    • একজনের ওপর নির্ভরতা: IT প্রধান ছুটিতে থাকলে? ভূমিকা আর বিকল্প ব্যক্তি লিখে রাখুন।
    • নোটিশ সাইটেই: সাইট পড়লে নোটিশও পড়বে। Status page আলাদা জায়গায়, আর SMS বা সামাজিক মাধ্যম বিকল্প রাখুন।
    • Trigger আর সংখ্যা নেই: Capacity আর baseline জানা নেই। প্রতিটি স্তরের সীমা মাপুন, আর কখন ফোন করবেন তা লিখুন।
    • Flash crowd-এর হিসাব নেই: সেলের ভিড়কে হামলা ভাবার ঝুঁকি। মার্কেটিংয়ের সময়সূচি যুক্ত করুন।
    • মহড়া আর পর্যালোচনা নেই: বছরে অন্তত একটি tabletop.

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি DDoS ঘটনায় সাড়ার ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. আগেই runbook, যোগাযোগ আর চুক্তি তৈরি রাখা
  2. Alert পেয়ে baseline-এর সাথে মিলিয়ে দেখা
  3. ভিড় না হামলা আর কোন স্তর ভরছে, তা ঠিক করা
  4. Incident ঘোষণা আর গ্রাহককে প্রথম বার্তা
  5. সঠিক স্তরে প্রতিকার, দরকারে ISP বা scrubbing
  6. Log রেখে পর্যালোচনা আর runbook হালনাগাদ

একটি সাইটে link-এর ব্যবহার মাত্র ২০%, কিন্তু firewall-এর CPU ১০০% আর সে প্যাকেট ফেলে দিচ্ছে। traffic-এর প্যাকেটগুলো খুব ছোট। কোন মাপটি সবচেয়ে বেশি প্রাসঙ্গিক?

  • Gbps
  • pps
  • rps
  • Cache hit ratio

BCP 38 (RFC 2827) মূলত কী করতে বলে?

  • ISP গ্রাহকের কাছ থেকে আসা এমন প্যাকেট বাদ দেবে, যার উৎস ঠিকানা ওই গ্রাহকের নয়
  • সার্ভার handshake-এর সময় কোনো state রাখবে না
  • লক্ষ্য IP-র সব traffic উজানে ফেলে দেওয়া হবে
  • সব DNS প্রশ্ন encrypted হতে হবে

একটি server-এ SYN cookie চালু আছে। নিচের কোন পরিস্থিতিতে এটি সবচেয়ে কম সাহায্য করবে?

  • জাল উৎস থেকে SYN এসে backlog ভরে যাচ্ছে
  • এমন SYN আসছে, যার ACK কখনো ফেরে না
  • Backlog ভরা অবস্থায় আসল client-কে ঢুকতে দেওয়া
  • Link পুরো ভরে গেছে, আর আসল ঠিকানা থেকে HTTP অনুরোধের বন্যা আসছে

একটি সাইটে ৩০,০০০ rps আসছে, cache hit ratio ৯০%, আর origin-এর সীমা ৪,০০০ rps. Origin-এ কত rps যাবে, আর সে কি নিরাপদ?

  • ২৭,০০০ rps, অনিরাপদ
  • ৯,০০০ rps, অনিরাপদ
  • ৩,০০০ rps, নিরাপদ, যদি hit ratio ঠিক থাকে
  • ০ rps, পুরোপুরি নিরাপদ

Remote-triggered blackholing-এর প্রধান দাম কী?

  • কয়েক সপ্তাহ অপেক্ষা করতে হয়
  • সেই লক্ষ্য IP-র ভালো traffic-ও ফেলে দেওয়া হয়
  • সব গ্রাহকের ইন্টারনেট বন্ধ হয়ে যায়
  • Website-এর TLS certificate বাতিল হয়ে যায়

একজন প্রকৌশলী নিজের কোম্পানির সাইটের সহনশীলতা পরীক্ষা করতে চান। কোন পথটি সঠিক?

  • একটি অনলাইন booter সেবা ভাড়া করে নিজের সাইটে চালানো
  • আগে প্রতিদ্বন্দ্বীর সাইটে “stress test” করে পদ্ধতিটি দেখা
  • শুধু নিজের সিস্টেমে, provider-এর লিখিত অনুমতি আর নির্ধারিত সময় ও সীমায়, বৈধ load test করা
  • কাউকে না জানিয়ে গভীর রাতে নিজের production-এ পরীক্ষা করা

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. DDoS-এর প্রথম প্রশ্ন: কোন জিনিসটি ভরছে? পথ, connection-এর state, না app.
  2. Gbps, pps, rps আলাদা মাপ। নিজের প্রতিটি স্তরের সীমা জানুন, আর প্রথম bottleneck খুঁজুন।
  3. Reflection টিকে থাকে জাল ঠিকানা আর খোলা service-এ। BCP 38 আর service বন্ধ করা এর সমাধান।
  4. প্রতিটি নিয়ন্ত্রণের সীমা আছে। Link ভরলে উজানে সাহায্য লাগে, আর autoscaling হামলা থামায় না।
  5. আগে থেকে runbook, যোগাযোগ আর মহড়া রাখুন। ভিড়কে হামলা ভাববেন না, আর শুধু নিজের সিস্টেমে লিখিত অনুমতিসহ পরীক্ষা করুন।

পরের পর্বে: Network-এর মডিউল শেষ। এবার নজর যাবে প্রতিটি যন্ত্রের দিকে: পর্ব ২৯-এ antivirus থেকে EDR, encryption আর device management.

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

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান