Simple Network Management Protocol (ראשי תיבות: SNMP, בתרגום חופשי: פרוטוקול פשוט לניהול רשת) הוא פרוטוקול תקשורת לניהול התקני רשת (Network elements) ברשתותIP. הפרוטוקול מאפשר להגדיר את תצורת ההתקן (Configuration), ולאסוף מידע מהתקן הרשת לגבי מצבו (Status) ולגבי הגדרות התצורה שלו. רשת המנוהלת באמצעות SNMP מורכבת מתחנות ניהול רשת (Network Management Stations) הכוללות יישום לניטור ולשליטה בהתקני הרשת. התקני רשת הם התקנים כגון מתגים, נתבים, שרתים ועוד, הכוללים סוכני ניהול המתקשרים עם תחנת ניהול הרשת, באמצעות פרוטוקול SNMP, ומבצעים את הוראותיה[1].
פרוטוקול SNMP פועל בשכבת היישום במודל OSI. והוא משתמש בפרוטוקול TCP/IP ועובד מעל UDP בפורטים 161 ו-162. הפרוטוקול פועל במודל שרת–לקוח, כאשר צד הסוכן הוא השרת ותחנת הניהול היא הלקוח.
למרות יכולותיו, השימוש בפרוטוקול ברוב המקרים הוא לקבלת נתונים ולא לשינוי הגדרות תצורה.
תיאור כללי
בפרוטוקול זה מדברים ביניהם שני צדדים:
סוכן SNMP - זוהי תוכנה שרצה על ההתקנים המנוהלים ברשת. הסוכן הוא זה שנגיש אל המידע המקומי של ההתקן המנוהל.
תחנת הניהול הראשית (Network Management Station או בקיצור NMS), המשמשת כתחנה מרכזית לניטור ואיסוף מידע. ה-NMS יכול לשלוח בקשות אל סוכן ה-SNMP לקבלת או שינוי המידע עבור ההתקן הספציפי עליו הוא יושב. המידע המבוקש יתקבל בהודעת תגובה מהסוכן.
במודל הקלאסי של הפרוטוקול, ישנו NMS אחד ברשת, ועל כל רכיב מנוהל יושב סוכן. בפועל, במקרים רבים ישנם מספר NMS ברשת, בעיקר לצורכי נוחות ונגישות.
לפרוטוקול קיימת גם גרסה מאובטחת (secure SNMP) הפועלת בפורטים 10161 ו-10162.
היסטוריה
פרוטוקול SNMP פותח בשנות השמונים של המאה ה-20. גרסת התקן הראשונה שנקראת RFC 1067 שוחררה על ידי ארגון IETF בשנת 1988. בשנת 1989 בוצעו תיקונים בתקן שפורסמו ב-[[RFC 1098]] שהחליף את RFC 1067. בשנת 1990 הוחלף שוב התקן על ידי RFC 1157. בדיעבד קיבלה גרסה זו של הפרוטוקול את הכינוי SNMPv1. השימוש בגרסה זו נפוץ ביותר. SNMPv1 זכה לביקורת רבה בגלל ההתעלמות של הפרוטוקול מסוגיות הקשורות לאבטחת מידע.
בשנת 1993 פורסמה גרסה שנייה לפרוטוקול הנקראת SNMPv2 ב-RFC 1441,RFC 1452 ו-RFC 1448. בגרסה השנייה נוספו שתי בקשות לפרוטוקול Inform Request ו-Get Bulk Request. מבנה הבקשה שונה ולמבנה הבקשה נוספו הנתונים הנחוצים עבור הבקשות החדשות. כמו כן, שופר קלות הטיפול באבטחת מידע ונוספה תמיכה במונים בגודל 64 סיביות. SNMPv2 נעדר תאימות אחורה ל-SNMPv1. ארגון IETF הגדיר אסטרטגיות לניהול רשת המכילה את שתי הגרסאות בו זמנית בעזרת תחנות ניהול "דו לשניות" וסוכני פרוקסי[2].
בשנת 1996 פורסם תיקון ל-SNMPv2 שהחליף את התקן מ-1993.
בשנת 1998 פורסם התקן ל-SNMPv3. בגרסה זו הושם דגש רב על נושא אבטחת המידע והיא כוללת מנגנונים חזקים לאימות משתמשים, בקרת גישה, והצפנה.
מודל הנתונים
התקני רשת המנוהלים בעזרת SNMP, משמשים לפונקציות שונות ומיוצרים על ידי יצרנים שונים. על כן ייתכן שחלק מהמידע המשמש להגדרות תצורת ההתקן או המידע המשקף את מצב התקן יהיה שונה מהתקן להתקן. כדי ליצור שפה משותפת לתחנת הניהול ולהתקן הרשת, יש צורך ליצור מודל המיצג את המידע בהתקן הרשת ולהכיר את אותו מודל לתחנת הניהול.
ייצוג המידע בהתקן הרשת נעשה על ידי מודל נתונים הנקרא Management Information Base, או בקיצור MIB. מסתכלים על כלל המידע המשמש לניהול (הגדרות התצורה, ומידע של מצב ההתקן) כאוסף של אובייקטים מנוהלים. ה-MIB הוא אוסף של כל האובייקטים ומכיל הגדרה פורמלית של המידע בכל אובייקט. לכל אובייקט יש מזהה ייחודי, הנקרא Object Identifier, ובקיצור OID. ה-MIB ממדל את אוסף האובייקטים כעץ היררכי, בו כל עלה הוא אובייקט המיוצג על ידי ה-OID שלו. מזהה האובייקט הוא מחרוזת המורכבת ממספרים המפורדים על ידי נקודות; המחרוזת מתארת את המסלול שיש לבצע כדי להגיע אל העלה משורש העץ: כל מספר מייצג בתורו לאיזה צומת יש לעבור בשלב זה של המסלול. למשל, 1.2.4 הוא ה-OID המתאים לעלה אליו מגיעים אם בוחרים במסלול המוביל מהשורש (1) אל הצומת השני המחובר ישירות אל השורש (2) ומשם אל הצומת הרביעי (4).
כאשר רוצה NMS לקבל מידע מסוכן כלשהו, הוא שולח אליו בקשה ובה הוא מציין את ה-OID אותו הוא רוצה לקבל. כעת, הסוכן ניגש אל המקום הרלוונטי המאחסן את המידע של האובייקט המבוקש ושולף משם את המידע הנחוץ, אותו הוא מחזיר אל ה-NMS. ה-NMS, באמצעות ההגדרה הפורמלית המופיעה ב-MIB, יודע גם לבצע את התרגום בין OID לערך קריא וברור, ובכך מאפשר להשתמש בו בצורה מובנת.
אופן פעולת הפרוטוקול
בעת פעילות סטנדרטית של הפרוטוקול, מתבצעים השלבים הבאים:
ה-NMS שולח בקשה אל סוכן ספציפי (ב-UDP אל פורט 161) תוך שימוש בכתובת ה-IP של הסוכן.
הסוכן מקבל את הבקשה, שולף את המידע הנחוץ ומחזיר אותו אל ה-NMS.
ה-NMS מקבל אליו את התשובה של הסוכן.
מבנה הבקשה (Protocol Data Units - PDU)
בשליחת בקשה אל סוכן, ה-NMS צריך לציין את הפרטים הבאים:
גרסה - Version : גרסת ה-SNMP
מידע הקשור לאבטחת מידע : ב-SNMPv3 בלבד. לדוגמה מידע הקשור לבקרת גישה.
סוג הבקשה - PDU Type : (ראו בהמשך).
מזהה קהילה - Community name: מחרוזת המשמשת לזיהוי
מזהה בקשה - Request ID :מזהה ייחודי לבקשה. משמש להתאמה בין הבקשה לבין התשובה עליה
מצב שגיאה - Error status : אינדיקציה לכך שארעה שגיאה בזמן עיבוד הבקשה על ידי הסוכן.
זיהוי השגיאה - Error Index : מידע נוסף לגבי השגיאה ואיזה משתנה גרם לשגיאה.
רשימה משתנה של מזהים - Variable binding list : רשימת OID עם הערכי המידע המתייחס אליהם
סוגי הבקשות
סוכן SNMP תומך במספר סוגים של בקשות עבור OID או רשימת OID נתונה:
GET - בקשה, הנשלחת על ידי תחנת הניהול, לקבלת ערכיהם של אובייקטים על פי ה-OIDs המופיעים בבקשה.
GET-NEXT - בקשה, הנשלחת על ידי תחנת הניהול, לקבלת ערכו של האובייקט הבא על פי סדר הזיהוי של האובייקטים. מאפשר לטייל (WALK) על תת-עץ לקבלת את ערכיהם של כל האובייקטים אותם הוא מכיל, על פי סדר.
SET - בקשה, הנשלחת על ידי תחנת הניהול, לשינוי ערכו של אובייקט על פי ה-OIDs שבקשה. משמש לשינוי הגדרת התצורה של תקן הרשת.
GET-RESPONSE - תשובת הסוכן לבקשת תחנת הניהול. מכילה את מספר הבקשה עליה מגיב הסוכן.
TRAP - זוהי הודעה על מאורע חריג שאירע בהתקן הרשת. ההודעה תשלח באופן עצמאי על ידי הסוכן אל תחנת הניהול בפורט 162. בהודעה זו יישלח הזמן שעבר מאז שהרכיב נדלק לראשונה, OID שמגדיר את ה-trap, ומידע נוסף במידת הצורך.
GET-BULK - נתמכת מ-SNMPv2. בקשה, הנשלחת על ידי תחנת הניהול, המשמשת לקבלת כמות גדולה של נתונים כתגובה לבקשה אחת. כאשר ניתן עבור קבוצת הנתונים בבקשה, לקבל בתשובה רשימה של נתונים כפי המספר שצוין בבקשה (Max Repetitions).יכול להוות תחליף למספר בקשות של GET-NEXT.
INFORM - נתמכת מ-SNMPv2. בקשה, הנשלחת על ידי הסוכן, מודיעה על אירוע חריג שאריע בהתקן הרשת (בדומה ל-TRAP). תחנת הניהול אמורה לשילוח הודעת אישור על כך שקיבלה את בקשת ה-INFORM. אם לא התקבל אישור ניתן לשוב ולשלוח את הבקשה.
^[https://tools.ietf.org/html/rfc3584 Coexistence between Version 1, Version 2, and Version 3
- of the Internet-standard Network Management Framework], IETF, אוגוסט 2003