«Linux-এ অ্যান্টিভাইরাস লাগে না» একটা বহুল প্রচলিত মত, আর তার মূল রূপে সেটি সঠিক: Linux-এর সিস্টেম ফাইল সংক্রমিত করে এমন ভাইরাস প্রায় নেই-ই। সার্ভারে ClamAV-র কাজ ভিন্ন, আর সেটি এভাবে বলা হয়: আপনার সাইটের মাধ্যমে যা আপলোড করা হয়েছে তা খুঁজে বের করো। সবার আগে web shell।
আমরা ঠিক কী খুঁজছি
web shell হলো ছোট একটা PHP ফাইল যা ব্রাউজারের মাধ্যমে কমান্ড চালানো সম্ভব করে। সে আসে আপলোড ফর্ম, দুর্বল কোনো প্লাগইন বা অনুমান করা প্রশাসক পাসওয়ার্ড দিয়ে, আপলোডের ডিরেক্টরিতে ছবির মাঝে বসে যায় আর মাসের পর মাস সেখানে থাকে। না ফায়ারওয়াল তাকে দেখবে, না Fail2ban: তার কাছে যাওয়া অনুরোধ সাইটের সাধারণ অনুরোধের মতোই দেখায়।
এছাড়াও ClamAV খুঁজে পায়:
- ব্যবহারকারীদের আপলোড করা আর আপনার সার্ভার থেকে আরও এগিয়ে দেওয়া ক্ষতিকর ফাইল — প্রদানকারীর চিঠি সাধারণত এ নিয়েই;
- মেইলের সংযুক্তি, যদি সার্ভার মেইল সামলায়;
- ফাইল সংরক্ষণে Windows-এর ম্যালওয়্যার — খোদ সার্ভারের তাতে কিছু যায় আসে না, কিন্তু ফাইলটি ডাউনলোড করা কর্মী ভুগবেন।
সীমা নিয়ে সঙ্গে সঙ্গেই: ClamAV সিঁধ কাটা ঠেকায় না আর নিজে থেকে তা শনাক্তও করে না। সে চিহ্ন শনাক্ত করে। বিদ্যমান কোনো থিম ফাইলের শেষে জোড়া সূক্ষ্ম পেছনের দরজা স্বাক্ষর স্ক্যানারের চোখ এড়িয়ে যাবে — তার জন্যই ফাইলের অখণ্ডতার নজরদারি।
স্থাপন এবং যে একটিমাত্র সেটিংস গুরুত্বপূর্ণ
sudo apt install clamav clamav-daemon
sudo systemctl status clamav-freshclam
দ্বিতীয় কমান্ডটি প্রথমটির চেয়ে বেশি গুরুত্বপূর্ণ। freshclam হলো স্বাক্ষর হালনাগাদের সেবা, আর সেটি না চললে ClamAV অকেজো হয়ে যায় আর একই সঙ্গে সফল স্ক্যানের খবর দিতে থাকে। ডেটাবেসের বয়স এভাবে যাচাই করুন:
sudo ls -l /var/lib/clamav/*.c?d
sudo freshclam
সপ্তাহের চেয়ে পুরনো ডেটাবেস মানে ব্যবস্থাটি ভাঙা। প্রচলিত কারণ হলো বাইরে যাওয়া সংযোগ অবরুদ্ধ থাকা, বা freshclam হাতে root হিসেবে চালানো, যার পরে অনুমতির কারণে সেবাটি নিজের ফাইলেই লিখতে পারে না।
মেমরি: ডেমন নাকি একবারের চালানো
ব্যবহারের দুটি উপায় আছে, আর পছন্দটা ভেবেচিন্তে হওয়া উচিত।
clamd হলো অবিরত চলা ডেমন যা ডেটাবেস মেমরিতে রাখে। সে দ্রুত উত্তর দেয় কিন্তু প্রায় এক গিগাবাইট RAM দখল করে। এক-দুই গিগাবাইটের VPS-এ এটা গ্রহণযোগ্য নয়: ডেমন ডেটাবেস আর PHP-FPM-কে ঠেলে বের করে দেবে, আর সার্ভার দৃশ্যমান কারণ ছাড়াই হামাগুড়ি দিতে শুরু করবে। এর নির্ণয় হয় free -m দিয়ে আর সক্রিয় swap দিয়ে।
বিকল্প হলো সূচি ধরে clamscan। সে ধীর (প্রতিবার চালানোয় ডেটাবেস লোড করে, প্রায় এক মিনিট) কিন্তু কেবল স্ক্যানের সময়েই কাজ করে:
sudo clamscan -r -i --exclude-dir='^/(proc|sys|dev|run)' /var/www
-i পতাকা কেবল যা পাওয়া গেছে তাই ছাপে; নইলে ফলাফল লক্ষ লক্ষ লাইনে গড়ায়।
ডিস্ক নয়, ডিরেক্টরি স্ক্যান করুন
দুর্বল সার্ভারে পুরো ডিস্কের স্ক্যান ঘণ্টার পর ঘণ্টা নেয় আর চাপ তৈরি করে, সেজন্যই সেটি রাতে রাখা হয় আর তারপর একেবারে বন্ধ করে দেওয়া হয়। বেশি ব্যবহারিক হলো যা সত্যিই বাইরে থেকে বদলায় তা স্ক্যান করা:
0 3 * * * ionice -c3 nice -n19 clamscan -r -i --move=/var/quarantine /var/www/uploads
ওই লাইনে তিনটি জিনিস গুরুত্বপূর্ণ। ionice ও nice সাইটের উপর প্রভাব সরিয়ে দেয়। --remove নয়, --move — ফাইল মোছার বদলে কোয়ারেন্টিনে যায়: মিথ্যা ফল ঘটে, আর ভুল করে মুছে ফেলা ক্রেতার ফাইল কোথাও থেকে ফেরে না। আর স্ক্যানের ডিরেক্টরি হলো সেটিই যেখানে ফাইল আপলোড হয়, মূল নয়।
web shell-এর স্বাক্ষর
ClamAV-র আদর্শ ডেটাবেস PHP পেছনের দরজায় দুর্বল — সেগুলো মূলত মেইল ট্রাফিকের দিকে লক্ষ্য করা। Linux Malware Detect (maldet) এখানে লক্ষণীয়ভাবে ভালো: তার নিজস্ব স্বাক্ষর সেট আছে যা ঠিক web shell-এর চারপাশে গড়া, আর ClamAV বসানো থাকলে সে ওই ইঞ্জিন দিয়েই স্ক্যান করে। প্রচলিত সংমিশ্রণ এটাই: ইঞ্জিন ও হালনাগাদযোগ্য ডেটাবেস হিসেবে ClamAV, বিশেষায়িত স্বাক্ষরের উৎস হিসেবে maldet।
কিছু পাওয়া গেলে কী করবেন
পাওয়া web shell তদন্তের শেষ নয়, তার শুরু। আপলোড ডিরেক্টরিতে ফাইল মানে কেউ সেখানে লিখতে পেরেছে, আর ফাইল মুছলে সেই ক্ষমতা সরে না।
- সেটি সঙ্গে সঙ্গে মুছবেন না — অনুলিপি রাখুন আর ফাইলের পরিবর্তনের সময় টুকে নিন।
- সেই সময় ধরে ওয়েব সার্ভারের লগে খুঁজুন কোন অনুরোধ সেটিকে সেখানে রেখেছে। সেটাই দুর্বলতা।
- প্রতিবেশী খুঁজুন: পেছনের দরজা প্রায় কখনও একটিমাত্র অনুলিপিতে রেখে যাওয়া হয় না।
- যাচাই করুন একই সময়ে ডিস্কে আর কী বদলেছে, আর নতুন cron কাজ ও SSH কি এসেছে কি না।
মিথ্যা ফল নিয়ে আলাদা করে। টেমপ্লেট লাইব্রেরি আর ছোট করা JavaScript কখনও কখনও স্বাক্ষরের সঙ্গে মিলে যায়। সেজন্যই মোছা নয়, কোয়ারেন্টিন, আর সেজন্যই এই পরামর্শ যে যত তৃতীয় পক্ষের স্বাক্ষর সেট পান সব জুড়ে দেবেন না: যে রিপোর্টের অর্ধেক লাইন কোলাহল, তাতে আস্থা এক সপ্তাহে ফুরিয়ে যায়, আর লোকে সেটি পড়া বন্ধ করে দেয়।
স্ক্যানারের ব্যবহারিক মূল্য এটাই যে তার ফলাফল চোখে পড়ুক: শেষ স্ক্যান কখন চলেছে, ডেটাবেস কত পুরনো, কী পাওয়া গেছে। এটি একটি লাইন, কিন্তু তার অনুপস্থিতি বসানো অ্যান্টিভাইরাসকে একটা টিকচিহ্নে পরিণত করে। ওই লাইন কেমন দেখায় তা নিচের ডেমো পাতায়।