در این پست در خصوص پروتکل Simple Network Management Protocol یا به اختصار SNMP توضیحاتی خواهیم داد و این پروتکل را مورد بررسی قرار میدهیم.
Simple Network Management Protocol (SNMP)
پروتکل مدیریت آسان شبکه (به انگلیسی: Simple Network Management Protocol (SNMP)) عبارت است از قراردادی جهت نقل و انتقال بستههای داده که در لایه کاربرد روی TCP/IP پیادهسازی میشود. این پروتکل که برای سادهکردن نقل و انتقالات بستههای مدیریت سیستمها طراحی شده است، فقط پنج فرمان دارد که ساختار همهٔ آنها کاملاً مشخص و معلوم است. با استفاده از همین پنج فرمان میتوان کل نیارمندیهای مدیریت یک وسیله از روی شبکه را مدیریت کرد.
بسیاری نرمافزارها و میانافزارهای استاندارد امروزی مجهز به اسانامپی هستند و همراه آنها فایل MIB آنها هم ارایه میشود. MIB فایلی است که ساختار و موقعیت Node های تعریف شده برای وسیله را در MIB استاندارد ITU مشخص میکند.
SNMP در لایه Application از مدل OSI رفتار می کند، به این گونه که برای جلوگیری از پیدایش ناهماهنگی در کارکرد پروتکل TCP/IP، پروتکل SNMP تبادل داده را بدون برگزاری پیوند انجام می دهد، یعنی داده فرستاده شده با این پروتکل از لایه Session که لایه برگزار کننده اتصال بین فرستنده و گیرنده است نمیگذرد و در نتیجه برای ارسال داده خط اشغال نشده و اختلالی در کارکرد پروتکل اصلی شبکه (TCP/IP) پدید نمیآید. در واقع پروتکل SNMP راهی را در شبکه برای ارسال داد پدید نمیآورد، بلکه داده را از یک میانگاه به میانگاه دیگر راهبری می کند تا به مقصد برسد. از همین رو، قابلیت اطمینان پروتکل SNMP که حاوی لایه Session نمیباشد، کمتر از پروتکل TCP/IP است.
به صورت ساده SNMP پروتکلی است که برای مدیریت شبکه مورد استفاده قرار میگیرد. این پروتکل برای جمع آوری اطلاعات از تنظیمات و وضعیت تجهیزات شبکه همانند سرور ها،روترها،سوئیچ ها، پرینترها، دوربین های مداربسته و هر دستگاه دیگری که در شبکه بر روی پروتکل IP فعالیت میکنند استفاده می شود.
SNMP دارای 3 عنصر اصلی است:
- سیستم مدیریت شبکه
- نماینده (Agent)
- عناصر مدیریت شده.
سیستم های مدیریت شبکه (NMS) با استفاده از چهار دستور اصلی تجهیرات شبکه را مدیریت می کند که عملکرد آنها به شرح زیر است:
- read: به منظور دریافت اطلاعات ذخیره شده توسط Agent
- write: به منظور اعمال تغییرات در مقادیر مدیریتی Agent
- trap: به منظور ارسال گزارش از طرف Agent ها در زمان بروز یک رخداد
- traversal operation: به منظور انتخاب متغییر های موجود در گزارش های Agent
پروتکل SNMP شامل دو بخش است:
SNMP Manager:
سیستم مدیریت شبکه که از SNMP برای نظارت و دریافت داده ها از هرتعداد از تجهیزات استفاده میکند. SNMP Manager معمولا نرم افزاری است که در یک نقطه مرکزی اجرا میشود.
SNMP Agent :
یک فرایند است که برروی تجهیزات شبکه که تحت نظارت هستند اجرا میشود و تمامی داده ها توسط خود دستگاه جمع آوری شده و در یک پایگاه داده محلی ذخیره میشوند. سپس Agent میتواند به درخواست های SNMP دریافت شده با اطلاعاتی که در پایگاه داده محلی خود ذخیره کرده پاسخ دهد و میتواند Alert و Trap ها را نیز به SNMP Manager ارسال کند.
به عنوان مثال هر سوئیچ در شبکه بصورت خودکار اطلاعات مربوط به خود و تمامی اینترفیس هایش را جمع آوری میکند.
این اطلاعات در محلی به نام (Management Information Base (MIB در Memory ذخیره شده و بصورت بر خط (Real Time) بروزرسانی میشوند.
این MIB در ساختار Hierarchical یک ساختار درختی را ایجاد میکند. بصورت ساده تمام MIB ها مجموعه ای از متغییر ها می باشد که در MIB های جداگانه ذخیره میشوند این MIB ها شاخه های این درخت را تشکیل میدهند.
هر MIB براساس زبان (Abstract Syntax Notation 1 (ASN.1 ایحاد شده و هر متغییر در MIB با یک شناسه به نام (object identifier(OID وجود دارد که یک رشته ی طولانی است که مسیر Root Tree تا مکان دقیق متغییر را دنبال میکند. می شود گفت که OID به صورت ساده یک آدرس از محل ذخیره سازی متغیر مورد نظر است.
برای دریافت و مشاهده هریک از اطلاعات MIB مورد نظر ما بایستی SNMP Manager یک SNMP Poll و یا Query را به سمت سو.یچ ارسال کند. این Query حاوی OID متغییری است که SNMP Manager درخواست کرده تا Agent در حال اجرا بر روی سوییچ متوجه شود که چه اطلاعاتی برای پاسخ بایستی تحویل دهد.
SNMP Manager میتواند با استفاده از یکسری از مکانیزم ها با SNMP Agent ارتباط برقرار کرده و لازم به ذکر است که تمامی این ارتباط بر روی پورت UDP 161 میباشد.
پروتکل SNMP تا کنون در سه نسخه بروز رسانی شده است:
SNMP نسخه یک:
از یک متغییر ساده Get و Set Request همراه با یک SNMP Trap ساده استفاده میکند. SNMP Manager با تطبیق یک Community text String میتواند به SNMP Agent ها دسترسی پیدا کند.
هنگامی که SNMP Manager میخواهد یک متغییر MIB را در یک دستگاه بخواند و یا آنرا بنویسد یک Community String را به عنوان بخشی از Request ارسال میکند.
در تئوری اینگونه بیان شده که Manager و Agent تنها به شرط یکسان بودن Community ها میتوانند باهم ارتباط برقرار کنند. اما در عمل و واقعیت هردستگاه توانایی خواندن و نوشتن متغییرها به دیتایس MIB یک Agent با ارسال رشته ی Community درست و مناسب بدون نیاز به اینکه آن دستگاه SNMP Manager می باشد یا خیر را دارد و این یک حفره ی امنیتی بزرگ در SNMP ایجاد میکند.
SNMP نسخه دو:
نسخه ی دوم SNMP برای رفع برخی ضعف های امنیتی و نگرانی ها بوجود اومد. بطور مثال در SNMP V1 معنا کردن شمارنده ی متغییر (Variable Counters) بسیار پیچیده بود. این متغیر 32 بیتی در SNMP V2 به 64 بیت تغییر کرد.
علاوه بر این SNMP V2 یک Request یعنی Bulk Request را نیز عرضه میکند که در SNMP V1 وجود نداشت و با استفاده از آن میتوان متغییر های MIB را با یک Request مجزا در یک فرم بزرگ بازیابی کرد. همچنین Event های ارسال شده از یک SNMP Agent میتواند به شکل SNMP Trap و یا Inform Request اطلاع رسانی شوند.
توجه داشته باشید که Inform Request نیاز به Ack از سمت SNMP Manager دارد که تایید می کند پیام دریافت شده. در SNMP V2 هیچ یک از مشکلات امنیتی موجود در SNMP V1 رفع نشده است. همچنین پیاده سازی های دیگری از SNMP V2 وجود داشت که با SNMP V2C ناسازگار بودند و این دو مانع از گسترش این نسخه شدند و به همین دلیل نسخه 3 ارایه شد.
SNMP نسخه سه:
آخرین نسخه SNMP که در حال حاضر از آن استفاده میشود SNMP V3 می باشد. در این نسخه تمامی مشکلات امنیتی که در ورژن های قبل موجود بود رفع شده است.
نسخه سه میتواند با استفاده از Username (نام کاربری) SNMP Manager ها را Authenticate (تایید) کند. هنگامی که بر روی SNMP Agent ها Username تنظیم شود میتوان آنهارا در گروه های SNMP V3 سازماندهی کرد. همچنین دسترسی به اطلاعات هر MIB را میتوان بر اساس هر گروه کنترل کرد. میتوان تایید کرد که کدام مقدار های MIB از Tree را میتوان خواند یا نوشت.
هر گروه SNMPv3 با یک سطح امنیتی تعریف شده است که از میزان مشخصی از داده های SNMP محافظت می کند. پکت های داده ها میتوانند Authenticate شوند، همچنین میتوانند Encrypt شوند.
حال نگاهی به این سطح های امنیتی در نسخه 3 می اندازیم:
noAuthNoPriv: پکت های SNMP نه Authenticate و نه Encrypt میشوند.
AuthNoPriv: پکت های SNMP احراز هویت Authenticate میشوند اما Encrypt نمیشوند.
AuthPriv: پکت های SNMP هم Authenticate و هم Encrypt میشوند.