Backend Security & Engineering

API Rate Limiting: Mitigating Brute-Force and DDoS Attacks in Node.js

পাবলিক এপিআই এন্ডপয়েন্ট বা লগইন সিস্টেম ডেভলপ করার পর তার ওপর সবচেয়ে বড় থ্রেট হলো ব্রুট-ফোর্স (Brute-force) এবং ডস (DDoS) অ্যাটাক। কোনো হ্যাকার বা অটোমেটেড স্ক্রিপ্ট যদি সেকেন্ডে হাজার হাজার ভুয়া রিকোয়েস্ট পাঠাতে থাকে, তবে আপনার মূল্যবান সার্ভার রিসোর্স সম্পূর্ণ ডাউন হয়ে ক্র্যাশ করবে।

এই সমস্যা ব্লক করার সবচেয়ে কার্যকর আর্কিটেকচারাল প্যাটার্ন হলো **Rate Limiting**। এর মাধ্যমে আমরা নির্দিষ্ট আইপির জন্য একটি নির্দিষ্ট সময়ে সর্বোচ্চ কতবার রিকোয়েস্ট পাঠানো যাবে তা শক্তভাবে বেঁধে দিতে পারি।

১. মিডলওয়্যার সেটআপ এবং এক্সপ্রেস কনফিগারেশন

প্রথমে আপনার ব্যাকএন্ড নোড প্রোজেক্টে এপিআই রেট লিমিটিং হ্যান্ডেল করার জন্য জনপ্রিয় এবং হালকা লাইব্রেরিটি ইনস্টল করে নিন:

npm install express-rate-limit

ধাপ ২: প্রফেশনাল সিকিউরিটি গেটওয়ে কোড

আপনার মূল অ্যাপ্লিকেশন ফাইলে (যেমন `app.js` বা `server.js`) নিচের সিকিউরড মেকানিজম লেয়ারটি ইনজেক্ট করুন:

const express = require('express');
const rateLimit = require('express-rate-limit');

const app = express();

// ১৫ মিনিটে প্রতিটি আইপি থেকে সর্বোচ্চ ১০০টি রিকোয়েস্টের পলিসি সেট করা
const apiLimiter = rateLimit({
    windowMs: 15 * 60 * 1000, // ১৫ মিনিট সময় সীমা (Milliseconds)
    max: 100, // সর্বোচ্চ অনুমোদিত রিকোয়েস্ট সংখ্যা
    statusCodes: true, // এক্সপায়ার্ড স্ট্যাটাস কোড যুক্ত করা
    message: {
        error: "Too many requests from this IP gateway.",
        message: "Your client identity has breached security limits. Try again after 15 minutes."
    },
    standardHeaders: true, // রেসপন্স হেডারে `RateLimit-*` লিমিট রিটার্ন করা
    legacyHeaders: false, // পুরাতন `X-RateLimit-*` হেডার ডিসেবল করা
});

// গ্লোবালি সব রাউটে অথবা নির্দিষ্ট এপিআই রাউটে মিডলওয়্যারটি অ্যাপ্লাই করা
app.use('/api/', apiLimiter);

app.get('/api/data', (req, res) => {
    res.json({ status: "success", data: "Secure pipeline content served." });
});

app.listen(3000, () => console.log('Secured server gateway running on port 3000'));

প্রো-লেভেল সিকিউরিটি এডভাইস: ক্লাউড এনভায়রনমেন্টে যদি আপনার সাইটের সামনে Nginx রিভার্স প্রক্সি বা Cloudflare CDN থাকে, তবে এক্সপ্রেস অ্যাপে অবশ্যই app.set('trust proxy', 1); লাইনটি যুক্ত করবেন। তা না হলে রেট লিমিট মডিউলটি ক্লায়েন্টের মূল আইপি ট্র্যাক করতে না পেরে প্রতিবার সিডিএনের একক আইপিকে ব্লক করে পুরো সাইট ডাউন করে দিতে পারে।