استخر Sandbox در MultiAV
مشکل
در طول بررسی و تست سیستم MultiAV، مشکلات زیر شناسایی شدند که تأثیر قابلتوجهی بر عملکرد سیستم دارند.
1. عملکرد پایین سیستم با استفاده از یک Instance برای هر آنتیویروس
تمام راهکارهای آنتیویروس، بهجز Symantec، میتوانند چندین مسیر یا دایرکتوری را بهصورت همزمان اسکن کنند.
ما عملکرد هر آنتیویروس را هنگام اسکن یک مسیر و چند مسیر اندازهگیری کردیم. نتایج نشان داد که هر Instance آنتیویروس زمانی عملکرد بهتری دارد که تعداد مسیرهای کمتری برای اسکن داشته باشد.
برای مثال، فرض کنید 5 مسیر وجود دارد که باید اسکن شوند:
- سناریو 1: یک Instance آنتیویروس هر 5 مسیر را اسکن میکند.
- سناریو 2: پنج Instance آنتیویروس، هرکدام یک مسیر را اسکن میکنند.
با استفاده از منابع سیستمی یکسان، سناریو 2 زمان کمتری نیاز دارد؛ زیرا بار اسکن بین چندین Instance آنتیویروس تقسیم میشود.
2. محدودیت Symantec در اسکن همزمان
فرآیند Linux مربوط به Symantec Antivirus فقط میتواند یک مسیر یا دایرکتوری را در هر لحظه اسکن کند.
بنابراین، یک Instance از Symantec نمیتواند چند درخواست اسکن را بهصورت همزمان پردازش کند و این موضوع میتواند عملکرد کلی MultiAV را بهطور قابلتوجهی کاهش دهد.
راهکار
برای برطرف کردن این مشکلات، تصمیم گرفتیم ساختار Sandbox Pool را پیادهسازی کنیم.
یک Sandbox Pool میتواند شامل چندین Instance از یک آنتیویروس باشد. هنگامی که یک درخواست اسکن دریافت میشود، Pool با استفاده از الگوریتم Round-Robin یکی از Instanceها را برای پردازش درخواست انتخاب میکند.
این ساختار امکان میدهد چندین Instance از یک آنتیویروس، درخواستهای اسکن را بهصورت همزمان پردازش کنند.
نکته: طراحی قبلی را میتوان حالت خاصی از طراحی جدید در نظر گرفت که در آن تمام Instanceهای آنتیویروسها در یک Pool قرار دارند.
راهنمای مهاجرت
اگر قصد دارید به ساختار Sandbox Pool مهاجرت کنید، تمام انواع Sandbox باید به Pool منتقل شوند، نه فقط یک نوع Sandbox.
با این حال، در صورتی که اصلاً از Sandbox Pool استفاده نکنید، سیستم همچنان بهدرستی کار خواهد کرد.
1. ایجاد Instanceهای جدید
Instanceهای موردنیاز آنتیویروس را ایجاد کنید.
از آنجا که مقدار system_name هر Instance در تنظیمات MultiAV استفاده میشود، میتوانید برای شناسایی راحتتر Instanceهای هر نوع آنتیویروس، یک عدد به system_name اضافه کنید.
برای مثال:
<av-name>0
<av-name>1
<av-name>2
2. اضافه کردن Instanceها به sandbox-pool.conf
Instanceهای ایجادشده را به فایل زیر اضافه کنید:
/opt/pvm/multiav/configs/sandbox/sandbox-pool.conf
ساختار تنظیمات به شکل زیر است:
{
"sandbox_pool_list": [
{
"enable": true,
"name": "drweb",
"sandbox_list": [
{
"name": "drweb-0",
"system_name": "drweb0",
"mount_path": "/flash",
"command": "drweb-ctl",
"args": [
"scan",
"--OnKnownVirus=DELETE",
"--OnSuspicious=DELETE",
"--OnAdware=DELETE",
"--OnDialers=DELETE",
"--OnJokes=DELETE",
"--OnRiskware=DELETE",
"--OnHacktools=DELETE"
]
}
]
}
]
}
برای هر Instance که ایجاد کردهاید، یک Object جدید به آرایه sandbox_list اضافه کنید.
توجه: مطمئن شوید مقادیر
system_nameصحیح هستند.
3. فعالسازی Poolها
Poolهایی را که پیکربندی کردهاید فعال کنید.
4. مشخص کردن وضعیت Sandboxها در manager.conf
پس از انتقال یک Sandbox به Pool، آن Sandbox باید یا غیرفعال ("enable": false) شود یا از لیست sandboxes حذف شود.
مسیر فایل تنظیمات:
/opt/pvm/multiav/configs/sandbox/manager.conf
گزینه 1: غیرفعال کردن Sandbox
{
"debug": true,
"path": "/run/pvm/multiav/flash",
"concurrent_scan": 10,
"sandboxes": [
{
"enable": false,
"name": "clam",
"system_name": "clam",
"mount_path": "/flash",
"command": "clamscan",
"args": [
"-r",
"--remove"
]
}
]
}
گزینه 2: حذف Sandbox از لیست sandboxes
{
"debug": true,
"path": "/var/run/pvm/multiav/flash",
"concurrent_scan": 10,
"sandboxes": []
}
5. راهاندازی مجدد سرویس MultiAV
سرویس pvm-multiav را Restart کنید:
systemctl restart pvm-multiav