دسته بندی:

نصب ClamAV در Cpanel

برای نصب ClamAV در cPanel امروز هیچ چیزی را از سورس کامپایل نمی‌کنید: کافی است افزونه‌ی clamavconnector را از WHM نصب کنید تا cPanel خودش باینری‌ها، سرویس clamd و کرونِ به‌روزرسانی امضاها را برایتان بسازد. خودِ نصب چند کلیک بیشتر نیست؛ بخش سخت ماجرا این است که بدانید این آنتی‌ویروس دقیقاً چه چیزی را می‌گیرد و چه چیزی را نمی‌گیرد.

ClamAV چه چیزی را می‌گیرد و چه چیزی را نمی‌گیرد

ClamAV موتوری امضامحور است: فایل را با دیتابیسی از نمونه‌های شناخته‌شده مقایسه می‌کند و اگر تطابقی نبود، فایل را سالم اعلام می‌کند. این تفاوت را جدی بگیرید:

  • معمولاً می‌گیرد: بدافزارهای پخش‌شده به‌صورت انبوه — پیوست‌های آلوده‌ی ایمیل در مسیر Exim (که فیلتر هرزنامه‌ی آن را SpamAssassin تکمیل می‌کند؛ راه‌اندازی آن روی دایرکت‌ادمین را در نصب SpamAssassin در دایرکت ادمین آورده‌ایم)، وب‌شل‌های پرتکرار PHP در public_html، بک‌دُرهای قالب و افزونه‌ی نال‌شده، و فایل‌های آلوده‌ی ویندوزی که کاربر آپلود کرده است.
  • معمولاً نمی‌گیرد: بدافزار هدفمند یا تازه‌نوشته‌شده، کدی که با چند لایه مبهم‌سازی برای هر سایت متفاوت تولید می‌شود، حمله‌هایی که فایلی روی دیسک نمی‌گذارند، و سوءاستفاده از رمز یا کلید لو رفته.

پس ClamAV یک صافی است، نه ضمانت؛ اگر توقع دارید بعد از نصبش دیگر سایتی هک نشود، توقع اشتباهی دارید.

نصب درست در cPanel

در WHM (بخش مدیریتی سی‌پنل) وارد مسیر cPanel > Manage Plugins شوید، افزونه‌ی clamavconnector را پیدا کنید و گزینه‌ی Install and keep updated را بزنید. اگر ترجیح می‌دهید از خط فرمان کار کنید، روی سرورهای مبتنی بر RPM مثل AlmaLinux و CloudLinux همین دو دستور کافی است:

/usr/local/cpanel/scripts/update_local_rpm_versions --edit target_settings.clamav installed

/usr/local/cpanel/scripts/check_cpanel_pkgs --fix --targets=clamav

دستور اول به cPanel می‌گوید ClamAV باید نصب باشد و دستور دوم واقعاً نصبش می‌کند. اگر در راهنمایی قدیمی نام check_cpanel_rpms را دیدید، همان اسکریپت است که در نسخه‌های امروزی cPanel به check_cpanel_pkgs تغییر نام داده و دیگر با نام قبلی روی سرور وجود ندارد. این کار دسترسی روت می‌خواهد؛ یعنی فقط روی سرور مجازی یا اختصاصی خودتان با لایسنس معتبر cPanel شدنی است و روی هاست اشتراکی چنین دسترسی‌ای ندارید.

همه چیز زیر شاخه‌ی /usr/local/cpanel/3rdparty/ نصب می‌شود: باینری‌ها در bin/، پیکربندی در etc/ و دیتابیس امضاها در share/clamav/. نسخه‌ی جداگانه‌ای از مخزن توزیع نصب نکنید؛ دو نصب موازی فقط تداخل می‌سازد.

روش قدیمیِ کامپایل از سورس را کنار بگذارید

راهنماهای قدیمی می‌گویند clamav-0.99.2.tar.gz را دانلود کنید، ./configure --disable-zlib-vcheck بزنید، make install کنید و بعد یک اسکریپت init برای CentOS 6 یا CentOS 7 بگیرید. هر چهار قدم این مسیر امروز غلط است:

  • شاخه‌ی 0.99 و حتی 0.103 به پایان پشتیبانی رسیده‌اند و نسخه‌های منسوخ از دریافت امضاهای جدید مسدود می‌شوند. حاصلش یک آنتی‌ویروسِ ظاهراً نصب‌شده با دیتابیسی است که سال‌ها به‌روز نشده.
  • ClamAV در شاخه‌ی 1.x با CMake ساخته می‌شود، نه با ./configure؛ پس آن دستورها اصلاً اجرا نمی‌شوند.
  • CentOS 6 و CentOS 7 و CentOS 8 هر سه EOL هستند و cPanel امروز روی AlmaLinux و CloudLinux و Ubuntu اجرا می‌شود؛ Rocky Linux هم از فهرست سیستم‌عامل‌های پشتیبانی‌شده‌ی cPanel کنار گذاشته شده است. اسکریپت‌های SysV آن راهنماها روی این سیستم‌ها معنایی ندارند.
  • باینری دست‌ساز در /usr/local با نسخه‌ای که cPanel مدیریت می‌کند تداخل پیدا می‌کند.

اگر ترجیح می‌دهید اصلاً درگیر این جزئیات نشوید، روی VPS مدیریت‌شده نصب و پیکربندی کنترل‌پنل و عیب‌یابی نرم‌افزارهای نصب‌شده بر عهده‌ی تیم ارائه‌دهنده است.

بررسی کنید که واقعاً کار می‌کند

cPanel یونیت /etc/systemd/system/clamd.service را می‌سازد، پس systemctl status clamd کار می‌کند و برای راه‌اندازی مجدد هم /usr/local/cpanel/scripts/restartsrv_clamd در دسترس است. اما مهم‌تر از «سرویس بالاست»، دیدن موتور و دیتابیس با هم است: دستور /usr/local/cpanel/3rdparty/bin/clamd --version هم نسخه و هم شماره و تاریخ دیتابیس امضاها را چاپ می‌کند و اگر آن تاریخ مربوط به هفته‌ها قبل بود، عملاً آنتی‌ویروس ندارید. برای دیدن پیکربندی مؤثر هم /usr/local/cpanel/3rdparty/bin/clamconf کمک می‌کند.

در سمت کاربر، ابزار Virus Scanner در بخش Advanced کنترل‌پنل ظاهر می‌شود و کاربر می‌تواند پوشه‌ی خانگی یا ایمیل‌هایش را اسکن کند؛ گزینه‌های اسکن بدافزار ایمیل هم در زبانه‌ی Security از WHM > Exim Configuration Manager فعال‌شدنی می‌شوند و زبانه‌ی Filters فقط به فیلتر سیستمی و پیوست‌های خطرناک مربوط است.

اگر سایت شما روی سرویس اشتراکی مثل هاست وردپرس ایران است، هیچ‌کدام از این تنظیم‌های سطح سرور دست شما نیست؛ آن لایه‌ها را ارائه‌دهنده مدیریت می‌کند و کار شما امن نگه‌داشتن خود سایت است.

تازه نگه‌داشتن امضاها با freshclam

افزونه خودش یک رکورد کرون برای کاربر روت اضافه می‌کند که روزی یک بار freshclam را اجرا می‌کند؛ با crontab -l می‌توانید ببینیدش. cPanel مقدار DatabaseMirror را هم در /usr/local/cpanel/3rdparty/etc/freshclam.conf روی آینه‌ی خودش تنظیم می‌کند، نه CDN عمومی. این تنظیم را دستکاری نکنید و فرکانس به‌روزرسانی را بی‌دلیل بالا نبرید؛ درخواست بیش از حد به آینه‌های عمومی می‌تواند به مسدود شدن آی‌پی سرور منجر شود.

برای عیب‌یابی، تاریخ main.cld و daily.cld را در /usr/local/cpanel/3rdparty/share/clamav/ ببینید. اگر daily.cld کهنه بود، یک بار freshclam را دستی و بدون --quiet اجرا کنید تا خطای واقعی را ببینید. شایع‌ترین دلایل شکست: بسته بودن ترافیک خروجی در فایروال، پر شدن دیسک، و مالکیت نادرست پوشه‌ی دیتابیس که باید متعلق به کاربر clamav باشد.

زمان‌بندی اسکن و هزینه‌ی واقعی آن

این بخش معمولاً دست‌کم گرفته می‌شود. سرویس clamd کل دیتابیس امضاها را در حافظه نگه می‌دارد و این دیتابیس امروز چند صد مگابایت است؛ در عمل انتظار داشته باشید بیش از یک گیگابایت رم فقط صرف همین سرویس شود و با بزرگ‌تر شدن دیتابیس بالاتر هم برود. چند قاعده بار را قابل تحمل نگه می‌دارد:

  • clamdscan را جایگزین clamscan کنید؛ اولی از دیمنِ از قبل بارگذاری‌شده استفاده می‌کند و دومی هر بار کل دیتابیس را از نو می‌خواند.
  • اسکن را با nice و ionice و در کم‌ترافیک‌ترین ساعت شبانه‌روز اجرا کنید؛ اسکن کامل یک سرور پر از سایت بیش از آنکه CPU بخواهد، دیسک را اشباع می‌کند.
  • به‌جای اسکن سراسری، هر شب چند حساب را نوبتی اسکن کنید.
  • برای کنار گذاشتن مسیرهای کش و بکاپ حواستان به ابزار باشد: سوئیچ --exclude-dir فقط گزینه‌ی clamscan است و clamdscan چنین سوئیچی ندارد؛ استثناهای دیمن را باید با دستورِ ExcludePath در clamd.conf تعریف کنید.
  • اگر clamd به فایل‌های کاربران دسترسی ندارد، سوئیچ --fdpass را به clamdscan بیفزایید.
  • اسکن هنگام دسترسی با clamonacc روی سرور شلوغ گران است؛ پیش از فعال‌سازی اثرش را روی لود اندازه بگیرید.

کارهایی که بیشتر از آنتی‌ویروس جواب می‌دهند

تجربه‌ی عملی می‌گوید بیشتر سایت‌های آلوده قربانی «ویروس» نشده‌اند، بلکه از یک افزونه‌ی به‌روزنشده یا یک دسترسی بازِ فایل ضربه خورده‌اند. اگر سرور همین حالا آلوده است هم پاک کردن تک‌تک شل‌ها معمولاً جواب نمی‌دهد، چون مهاجم راه بازگشتی برای خودش گذاشته؛ مسیر مطمئن‌تر بازسازی سرور و بازگرداندن از یک بکاپ سالم است و بهتر است پیش از هر تغییری با تیم پشتیبانی و مدیریت سرور مشورت کنید، چون حرکت اشتباه در این مرحله شواهد نفوذ را از بین می‌برد. فارغ از این، سه کار زیر اثر بیشتری از ClamAV دارند:

  • سطح دسترسی فایل‌ها: فایل‌ها 644، پوشه‌ها 755، پیکربندی حساسی مثل wp-config.php محدودتر، و هرگز 777. اجرای PHP را هم در پوشه‌های آپلود ببندید.
  • به‌روز بودن CMS: هسته، قالب و افزونه‌ها را به‌موقع به‌روز کنید و افزونه‌ی نال‌شده نصب نکنید؛ هیچ آنتی‌ویروسی جای این کار را نمی‌گیرد.
  • فایروال و رمزهای قوی: یک فایروال CSF درست پیکربندی‌شده جلوی بخش بزرگی از تلاش‌های ورود را می‌گیرد، و با بررسی آخرین تغییر رمز کاربران می‌توانید حساب‌هایی را که سال‌هاست رمزشان عوض نشده پیدا کنید.
  • بکاپ تغییرناپذیر: نسخه‌ی پشتیبان باید جایی باشد که کاربر وب‌سرور نتواند در آن بنویسد یا پاکش کند، ترجیحاً بیرون از همان سرور. بکاپی که تست بازیابی نشده، بکاپ نیست.

جمع‌بندی ساده است: ClamAV را نصب کنید، چون هزینه‌اش کم و سود آن در برابر بدافزارهای انبوه واقعی است؛ اما آن را لایه‌ی اول بدانید، نه آخرین خط دفاع.