এই প্রশ্নটা খুব কমই হঠাৎ ওঠে। সার্ভার ধীর হয়ে গেছে, হোস্টিং বাইরে যাওয়া ট্রাফিক নিয়ে চিঠি দিয়েছে, কিংবা মেইলে এমন একটা লগইনের বিজ্ঞপ্তি এসেছে যা আপনি করেননি। এরপর শুরু হয় অপ্রীতিকর অংশ: কী এবং কোন ক্রমে দেখতে হবে তা স্পষ্ট নয়, আর প্রথম প্রবৃত্তি — সব মুছে নতুন করে বসানো — প্রায় সবসময়ই তাড়াহুড়ো।
নিচে যাচাইয়ের সেই ক্রম যা প্রায় বিশ মিনিট নেয় এবং বেশিরভাগ ক্ষেত্রে স্পষ্ট উত্তর দেয়। এটি সবচেয়ে সস্তা জিনিস থেকে সবচেয়ে দামির দিকে চলে: প্রথমে যা সঙ্গে সঙ্গে দেখা যায়, তারপর যা কোনো মানদণ্ডের সঙ্গে মেলাতে হয়।
প্রথম ধাপ: কে ঢুকেছে
শুরু করুন লগইন দিয়ে। অন্য কেউ ঢুকে থাকলে প্রায় নিশ্চিতভাবেই SSH দিয়ে ঢুকেছে, এবং তার চিহ্ন রয়ে গেছে।
last -20
lastb | head -20
who
last দেখায় সাম্প্রতিক সফল লগইন, lastb ব্যর্থগুলো, আর who এখন কে যুক্ত আছে। গুরুত্বপূর্ণ সংখ্যা নয়, বরং তার আকৃতি। যেসব ঠিকানা আর কখনও ফেরে না তাদের থেকে হাজার হাজার ব্যর্থ চেষ্টা হলো সাধারণ পটভূমি; এটি প্রতিটি প্রকাশ্য ঠিকানার বিরুদ্ধে বিরতিহীন চলে এবং কিছুই বোঝায় না।
উদ্বিগ্ন হওয়া উচিত অন্য কিছুতে:
- এমন ঠিকানা থেকে সফল লগইন যেখানে আপনার কেউ নেই;
- এমন ব্যবহারকারী নামে লগইন যা আপনি কখনও তৈরি করেননি;
- এমন নামের বিরুদ্ধে ব্যর্থ চেষ্টা যা এই যন্ত্রে সত্যিই আছে — এর মানে কেউ অভিধান চালানোর বদলে আপনার ব্যবহারকারীদের জেনে নিয়েছে;
- এই মুহূর্তে খোলা এমন সেশন যা আপনি খোলেননি।
আলাদা করে দেখুন অচেনা কোনো কি এসেছে কি না। ফাইল ~/.ssh/authorized_keys ভিতরে থেকে যাওয়ার সবচেয়ে প্রচলিত উপায়: পাসওয়ার্ড যতবার খুশি বদলান, কি থেকে যায়।
cat ~/.ssh/authorized_keys
sudo cat /root/.ssh/authorized_keys
সেখানকার প্রতিটি লাইন কারও না কারও প্রবেশাধিকার। কার, তা যদি বলতে না পারেন, তবে সেটিকে পরের বলে ধরুন।
দ্বিতীয় ধাপ: সিস্টেমে কী বদলেছে
অনুপ্রবেশ প্রায় সবসময় ডিস্কে চিহ্ন রাখে: বদলে দেওয়া বাইনারি, কনফিগে বাড়তি একটা লাইন, ওয়েব সার্ভারের ডিরেক্টরিতে নতুন ফাইল। চোখে দেখে এটা যাচাই করা অসম্ভব — মানদণ্ড দরকার।
Debian ও Ubuntu-তে মানদণ্ড আগে থেকেই আছে: প্রতিটি প্যাকেজ নিজের ফাইলের চেকসাম জানে।
sudo apt install debsums
sudo debsums -c
কমান্ডটি সেসব ফাইলের তালিকা দেয় যা ডিস্ট্রিবিউশনের বসানো ফাইল থেকে আলাদা। কিছু ফলাফল বৈধ হবে — /etc-এর কনফিগ ফাইল সম্পাদনার জন্যই থাকে। কিন্তু যে সার্ভারে আপনি হাত দেননি সেখানে /usr/bin, /usr/sbin বা /bin-এ বদলে যাওয়া চলনযোগ্য ফাইল সম্পূর্ণ আলাদা ব্যাপার।
দ্বিতীয় উৎস — যেখানে কোনো নতুন ফাইল থাকার কথা নয় সেখানে সাম্প্রতিক ফাইল। web shell সাধারণত আপলোডের ডিরেক্টরিতে বসে থাকে এবং নিরীহ একটা .php-এর মতো দেখায়:
find /var/www -type f -name '*.php' -mtime -14 -ls
চোদ্দ দিন কেবল শুরুর বিন্দু; সেই সময়কাল নিন যখন আপনি নিশ্চিতভাবে কিছু প্রকাশ করেননি।
তৃতীয় ধাপ: বাইরে কী যাচ্ছে
আপসকৃত সার্ভার খুব কমই নিজের জন্য ভাঙা হয়। তাকে ব্যবহার করা হয়: স্প্যাম পাঠাতে, মাইনিং করতে, অন্য নেটওয়ার্কে পৌঁছাতে, অন্যের ফাইল রাখতে। এসবই বাইরে যাওয়া সংযোগ তৈরি করে যা আগে ছিল না।
ss -tulpn
ss -tp state established
প্রথম কমান্ড দেখায় কী শুনছে, দ্বিতীয়টি — এখন কী যুক্ত আছে। প্রক্রিয়ার কলামটি পড়ুন। প্রশ্ন ওঠে যা নিয়ে: 0.0.0.0-তে শুনছে এমন অচেনা প্রক্রিয়া; এমন ঠিকানার উঁচু পোর্টে বাইরে যাওয়া সংযোগ যাদের সঙ্গে আপনার অ্যাপ্লিকেশনের কোনো সম্পর্ক নেই; এবং সবচেয়ে বেশি /tmp বা /dev/shm থেকে চালু হওয়া প্রক্রিয়া — এসব ডিরেক্টরি থেকে বৈধ কিছুই চলে না।
সঙ্গে সঙ্গে লোডও দেখে নিন। মাইনার নিজেকে ধরিয়ে দেয় এভাবে যে কোনো জনপ্রিয়তাহীন সাইটে প্রসেসর অবিরত ব্যস্ত থাকে।
লক্ষণ পাওয়া গেলে
প্রথম তাড়না হলো দ্রুত পরিষ্কার করা: পরের কি মুছে ফেলা, প্রক্রিয়া থামানো, ফাইল সরানো। করবেন না — এর সঙ্গেই ধ্বংস হয়ে যায় সেই জিনিস যা পরে বলতে পারত তারা কীভাবে ঢুকেছিল। আর সেটা অজানা থেকে গেলে তারা ফিরে আসবে, হয়তো আগামীকালই।
যে ক্রম তথ্য ও ছবি দুটোই বাঁচায়:
- প্রদানকারীর কাছে সম্ভব হলে ডিস্কের স্ন্যাপশট নিন। এই একটি ধাপই পরে আর পুনরাবৃত্তি করা যায় না।
- যন্ত্রটি নেটওয়ার্ক থেকে বিচ্ছিন্ন করুন, বা নিজের IP ছাড়া সব বন্ধ করুন — কিন্তু বন্ধ করবেন না। শাটডাউনে প্রক্রিয়ার তালিকা ও খোলা সংযোগ হারিয়ে যায়, আর সেটাই অর্ধেক প্রমাণ।
- লগ যন্ত্র থেকে বাইরে কপি করুন:
/var/log/auth.log, ওয়েব সার্ভারের লগ, উপরের তিনটি কমান্ডের ফলাফল। - এবং কেবল এখন বোঝার চেষ্টা করুন তারা কীভাবে ঢুকল।
প্রবেশাধিকার root-এর ক্ষমতা নিয়ে পাওয়া গেলে পরিষ্কার পুনঃস্থাপনই সঠিক সমাপ্তি। কোনো পরিচ্ছন্নতাই নিশ্চয়তা দেয় না যে পেছনে কিছু রাখা হয়নি। কিন্তু কারণ না বুঝে নতুন করে বসানো অর্থহীন: আপনি একই ছিদ্র নতুন সিস্টেমে বসিয়ে দেবেন।
প্রশ্নটা যেন হঠাৎ না আসে
উপরের সবটাই একবারের হাতে-করা যাচাই, আর সেটি «এই মুহূর্তে কী ঘটছে» প্রশ্নের উত্তর দেয়। সমস্যা হলো এই প্রশ্ন সাধারণত দেরিতে করা হয়: যখন প্রদানকারী চিঠি দিয়ে ফেলেছে বা সাইট পড়ে গেছে।
এসব যাচাইয়ের প্রতিটিই আলাদা সরঞ্জাম হিসেবে আছে যা অবিরত নজর রাখতে পারে: ব্যর্থ লগইন — fail2ban, ফাইলের পরিবর্তন — AIDE, প্যাকেজের অখণ্ডতা — debsums, খোলা পোর্ট — ss-এর নিয়মিত স্ন্যাপশট। এগুলো একে একে বসানো কঠিন নয়; কঠিন হলো রোজ ঢুকে ছয়টি আলাদা ফলাফল পড়ার অভ্যাস গড়া, আর সেজন্যই বাস্তবে কেউ পড়ে না।
এগুলো একত্র করা প্যানেলের পুরো অর্থ ঠিক এটাই: একই তথ্য, কিন্তু এক পাতায় এবং ইতিহাসসহ, যাতে «কালকে এমন ছিল না» আলাদা করে খোঁজ না নিয়েই চোখে পড়ে। নিচের ডেমো পাতাগুলো দেখায় জোড়া লাগানো অবস্থায় এটি কেমন দেখায়।