پایش با agent یا بدون agent: مقایسهٔ SNMP، WMI و سنسور نصبی

پایش با agent یا بدون agent: مقایسهٔ SNMP، WMI و سنسور نصبی
در این مقاله می‌خوانید
  1. SNMP: زبان مشترک تجهیزات شبکه
  2. WMI و WinRM: پایش ویندوز از راه دور
  3. SSH: معادل لینوکسی
  4. agent نصبی
  5. مقایسهٔ کلی
  6. ملاحظات امنیتی: سؤالی که باید پرسید
  7. چه زمانی کدام روش؟
  8. اشتباه‌های رایج
  9. منابع و مطالعهٔ بیشتر

اولین تصمیم فنی در راه‌اندازی هر سامانهٔ پایش این است که داده چطور از سرور به سامانهٔ مرکزی برسد. دو راه کلی هست: سامانهٔ مرکزی از راه دور سراغ هر سرور برود و بپرسد (بدون agent)، یا روی هر سرور برنامهٔ کوچکی نصب شود که داده را خودش جمع کند و بفرستد (با agent). بحث بین طرفداران این دو روش گاهی شبیه بحث‌های مذهبی است. واقعیت این است که هر دو جای خودشان را دارند، و انتخاب درست به این بستگی دارد که چه چیزی را پایش می‌کنید و چقدر به امنیت آن مسیر اهمیت می‌دهید.

این مقاله سه روش رایج را مقایسه می‌کند: SNMP، WMI/WinRM (و معادل لینوکسی‌اش SSH)، و agent نصبی. نقشهٔ کلی اینکه چه چیزی را باید پایید، در راهنمای جامع پایش سرور آمده است؛ اینجا فقط موضوع «چطور داده را بیاوریم» است.

SNMP: زبان مشترک تجهیزات شبکه

SNMP (Simple Network Management Protocol) قدیمی‌ترین و فراگیرترین روش است. تقریباً هر سوییچ، روتر، فایروال، UPS، چاپگر شبکه و NAS از آن پشتیبانی می‌کند. سامانهٔ پایش با درخواست UDP به پورت 161 مقدار شناسه‌هایی (OID) را می‌پرسد، مثل ترافیک هر پورت سوییچ یا وضعیت باتری UPS. دستگاه هم می‌تواند خودش رویدادی را با trap به پورت 162 بفرستد.

# Walk the interfaces table of a device (Net-SNMP tools, SNMPv3 with auth and privacy)
snmpwalk -v3 -l authPriv -u monitor -a SHA -A 'AuthPass' -x AES -X 'PrivPass' 192.0.2.10 IF-MIB::ifTable

# SNMPv2c, community string sent in clear text
snmpget -v2c -c public 192.0.2.10 SNMPv2-MIB::sysUpTime.0

نکتهٔ امنیتی مهم: در SNMP نسخهٔ ۱ و ۲c، «رمز» یک community string است که بدون رمزنگاری در شبکه می‌رود، و مقدار پیش‌فرض public روی بسیاری از دستگاه‌ها هنوز تغییر نکرده. اگر دستگاهی community با دسترسی نوشتن (read-write) دارد، هر کسی که آن را بشنود می‌تواند پیکربندی را عوض کند. SNMPv3 احراز هویت و رمزنگاری دارد و هر جا ممکن است باید از آن استفاده کرد.

برای سرورها، SNMP انتخاب ضعیفی است. سرویس SNMP ویندوز را مایکروسافت منسوخ (deprecated) اعلام کرده و فقط به‌صورت قابلیت اختیاری باقی است؛ و حتی وقتی نصب باشد، فقط سنجه‌های پایه (CPU، رم، دیسک، شبکه) را می‌دهد. Event Log، وضعیت آپدیت، آنتی‌ویروس و رویدادهای امنیتی از راه SNMP در دسترس نیستند. روی لینوکس، snmpd بیشتر می‌دهد ولی باز هم چیزی از لاگ ورود SSH یا آپدیت‌های معوق نمی‌گوید.

WMI و WinRM: پایش ویندوز از راه دور

WMI (Windows Management Instrumentation) رابط مدیریتی ویندوز است و تقریباً هر اطلاعاتی را از سیستم می‌دهد: سرویس‌ها، فرایندها، دیسک‌ها، Event Log، نرم‌افزارهای نصب‌شده. ابزارهای پایش بدون agent ویندوز (مثل حالت پیش‌فرض PRTG) از راه دور به WMI وصل می‌شوند. دو مسیر برای این اتصال هست:

  • DCOM/RPC: روش قدیمی. اتصال اولیه روی پورت 135 و سپس یک پورت پویا در بازهٔ 49152 تا 65535. باز کردن این بازه در فایروال بین سرور پایش و همهٔ سرورها، سطح حملهٔ بزرگی است.
  • WinRM: روش جدیدتر روی HTTP (پورت 5985) یا HTTPS (پورت 5986). همان مسیری است که PowerShell Remoting از آن استفاده می‌کند. بسته‌تر و قابل‌کنترل‌تر از DCOM است.
# Query a remote server over WinRM (CIM session)
$s = New-CimSession -ComputerName SRV-APP01
Get-CimInstance -CimSession $s -ClassName Win32_LogicalDisk -Filter "DriveType=3" |
  Select-Object DeviceID, Size, FreeSpace

# Same over legacy DCOM
$o = New-CimSessionOption -Protocol Dcom
$s2 = New-CimSession -ComputerName SRV-APP01 -SessionOption $o

مشکل اصلی پایش از راه دور با WMI امنیتی است، نه فنی. سامانهٔ پایش برای خواندن بسیاری از کلاس‌های WMI و به‌ویژه لاگ Security، به حسابی با دسترسی بالا روی همهٔ سرورها نیاز دارد. در عمل، بسیاری از تیم‌ها برای راحتی از یک حساب عضو Domain Admins استفاده می‌کنند. نتیجه: سرور پایش، رمز حسابی را نگه می‌دارد که به همهٔ شبکه دسترسی دارد، و به همهٔ سرورها از راه پورت‌های مدیریتی وصل می‌شود. این دقیقاً همان دارایی‌ای است که مهاجم برای گسترش در شبکه دنبالش است. می‌شود این ریسک را با حساب محدود، عضویت در گروه‌هایی مثل Event Log Readers و Performance Monitor Users و تنظیم دقیق مجوزهای WMI کم کرد، ولی این کار وقت‌گیر است و کمتر کسی کاملش می‌کند.

SSH: معادل لینوکسی

برای لینوکس، پایش بدون agent معمولاً یعنی سرور پایش با SSH وارد هر سرور شود، چند دستور (df، free، cat /proc/loadavg) اجرا کند و خروجی را تفسیر کند. ساده است و نصبی نمی‌خواهد. ولی همان مسئلهٔ امنیتی را دارد: کلید خصوصی‌ای روی سرور پایش که به همهٔ سرورها وارد می‌شود. اگر آن کاربر بیش از حد لازم دسترسی داشته باشد (مثلاً sudo بدون محدودیت برای خواندن لاگ‌ها)، کلیدش کلید همه‌چیز است. اگر از این روش استفاده می‌کنید، دست‌کم کلید را در authorized_keys با گزینهٔ command= و from= محدود کنید.

agent نصبی

در این روش برنامه‌ای کوچک روی هر سرور اجرا می‌شود، داده را محلی جمع می‌کند و به سامانهٔ مرکزی می‌فرستد. Zabbix agent، Prometheus node_exporter، agentهای سرویس‌های ابری پایش، و سنسورهایی مثل سنسور ServerMug همه از این نوع‌اند. ولی همهٔ agentها یک‌جور کار نمی‌کنند و تفاوت‌هایشان مهم است:

ویژگی حالت امن‌تر حالت پرریسک‌تر
جهت ارتباط فقط خروجی؛ agent به سرور مرکزی وصل می‌شود (push) پورت شنود روی سرور؛ سرور مرکزی وصل می‌شود (pull)
اجرای دستور از راه دور ندارد دارد؛ پنل مرکزی می‌تواند روی سرورها دستور اجرا کند
احراز هویت سرور مرکزی گواهی پین‌شده یا اعتبارسنجی کامل TLS بدون رمزنگاری یا بدون بررسی گواهی
به‌روزرسانی بستهٔ امضاشده که امضایش پیش از نصب بررسی می‌شود دانلود و اجرای هر چیزی که سرور مرکزی بدهد
وابستگی فایل اجرایی مستقل نیاز به Java، ⁦.NET⁩ یا Python با نسخهٔ خاص

برای مثال، node_exporter به‌طور پیش‌فرض روی پورت 9100 گوش می‌دهد و Prometheus آن را می‌خواند (pull)؛ این مدل برای محیط‌های کانتینری و شبکه‌های داخلی خوب کار می‌کند ولی یعنی یک پورت باز روی هر سرور. Zabbix agent هم می‌تواند در حالت passive (پورت 10050 روی سرور) یا active (اتصال خروجی agent به سرور) کار کند؛ حالت active برای سرورهایی که پشت NAT یا در شبکهٔ مشتری‌اند مناسب‌تر است.

مقایسهٔ کلی

معیار SNMP WMI / WinRM / SSH agent نصبی
نصب روی سرور فعال کردن سرویس ندارد (پیکربندی دسترسی لازم است) دارد
تجهیزات شبکه (سوییچ، UPS) بهترین و اغلب تنها راه نه نه
عمق داده روی سرور کم (سنجه‌های پایه) زیاد زیاد
رویدادهای امنیتی و Event Log نه بله، با دسترسی بالا بله، محلی
پورت ورودی روی سرور UDP 161 135 و پورت‌های پویا، یا 5985/5986، یا 22 بسته به agent؛ صفر در agentهای خروجی
حساب پرقدرت مرکزی community یا کاربر SNMPv3 معمولاً بله خیر
سرور پشت NAT یا در شبکهٔ دیگر دشوار دشوار ساده با agent خروجی
وقتی سرور پایش قطع است داده از دست می‌رود داده از دست می‌رود agent می‌تواند داده را نگه دارد و بعداً بفرستد
هزینهٔ نگه‌داری کم پیکربندی فایروال و مجوزها نصب و به‌روزرسانی agent

ملاحظات امنیتی: سؤالی که باید پرسید

سؤال اصلی را این‌طور مطرح می‌کنم: اگر سرور پایش شما فردا هک شود، مهاجم به چه چیزی می‌رسد؟ در پایش بدون agent با WMI یا SSH، جواب معمولاً این است: به یک حساب یا کلید با دسترسی بالا روی همهٔ سرورها، و به مسیر شبکه‌ای باز به همهٔ آن‌ها. در agentی که پورت ورودی دارد و دستور از راه دور اجرا می‌کند، جواب تقریباً همان است: اجرای کد روی همهٔ سرورها. فقط در agentی که ارتباطش یک‌طرفه و خروجی است و هیچ فرمانی از مرکز نمی‌پذیرد، جواب این است: مهاجم داده‌های پایش را می‌بیند، ولی راهی به خود سرورها ندارد.

حمله به زنجیرهٔ تأمین نرم‌افزارهای مدیریت و پایش در سال‌های گذشته واقعی بوده است، و درس اصلی‌اش این است که ابزاری که به همهٔ سرورها دسترسی دارد، باید با همان جدیتی محافظت شود که Domain Controller. سؤال‌های امنیتی دیگری که دربارهٔ ابزارهای مدیریتی باید پرسید را در راهنمای امنیت سرور آورده‌ام.

چه زمانی کدام روش؟

  • سوییچ، روتر، فایروال سخت‌افزاری، UPS، چاپگر: SNMP، ترجیحاً نسخهٔ ۳. agent نصبی روی این دستگاه‌ها ممکن نیست.
  • سرورهای ویندوز و لینوکس در شبکهٔ خودتان با تیم و وقت کافی: هر دو روش شدنی است. اگر بدون agent می‌روید، WinRM روی HTTPS با حساب محدود را به DCOM با Domain Admin ترجیح دهید.
  • سرورهای پراکنده، پشت NAT، در شبکهٔ مشتری‌های مختلف (شرکت‌های پشتیبانی): agent با ارتباط خروجی تقریباً تنها راه عملی است؛ باز کردن پورت ورودی در شبکهٔ هر مشتری نه امن است و نه مدیریت‌پذیر.
  • وقتی رویدادهای امنیتی و وضعیت آنتی‌ویروس و آپدیت مهم است: agent، چون این داده‌ها را محلی و بدون نیاز به حساب پرقدرت مرکزی می‌خواند.

بسیاری از سازمان‌ها در عمل ترکیبی کار می‌کنند: SNMP برای تجهیزات شبکه در ابزاری مثل Zabbix یا PRTG، و agent برای سرورها. این ترکیب منطقی است و لازم نیست همه‌چیز در یک ابزار باشد.

اشتباه‌های رایج

اشتباه اصلاح
community string پیش‌فرض public یا private روی تجهیزات SNMPv3، یا دست‌کم community تصادفی و فقط خواندنی با محدودیت آی‌پی
حساب Domain Admin برای پایش WMI حساب جدا با عضویت در Event Log Readers و Performance Monitor Users و مجوز WMI محدود
بازهٔ کامل پورت‌های پویای RPC باز بین سرور پایش و همهٔ سرورها WinRM روی HTTPS، یا agent
agent با پورت شنود باز روی سرورهای در معرض اینترنت agent با ارتباط خروجی یا فایروال محدود به آی‌پی سرور پایش
agentی که هیچ‌وقت به‌روز نمی‌شود سازوکار به‌روزرسانی امن و پایش نسخهٔ agent

سنسور ServerMug را با همین ملاحظات طراحی کرده‌ایم: یک فایل اجرایی کوچک که فقط ارتباط خروجی HTTPS با گواهی پین‌شده دارد، هیچ پورتی روی سرور باز نمی‌کند، دستور از راه دور نمی‌پذیرد و به‌روزرسانی‌هایش امضای دیجیتال دارند. جزئیات این تصمیم‌ها در امنیت سنسور و داده‌ها و روش نصبش روی ویندوز در نصب سنسور روی ویندوز سرور آمده است. برای سوییچ و تجهیزات شبکه همچنان به یک ابزار SNMP نیاز دارید.

منابع و مطالعهٔ بیشتر

همهٔ سرورهایتان را در یک نگاه ببینید

دیسک، رم، آپدیت، آنتی‌ویروس، حملهٔ حدس رمز و نشانه‌های باج‌افزار — با پیامک به موقع. روی سرورهای خودتان نشانتان می‌دهیم.

درخواست دمو