This is a translation of the original English documentation page. Help us make it better.

3 מלכודות SNMP

סקירה כללית

קבלת מלכודות SNMP היא ההפך משאילתה של התקנים התומכים ב-SNMP.

במקרה זה, המידע נשלח ממכשיר התומך SNMP והוא נאסף או "נלכד" על ידי Zabbix.

בדרך כלל, מלכודות נשלחות על שינוי מצב כלשהו והסוכן מתחבר לשרת ביציאה 162 (בניגוד ליציאה 161 בסוכן צד המשמש לשאילתות). שימוש במלכודות עשוי לזהות קצרים מסוימים בעיות המתרחשות בתוך מרווח השאילתות ועשויות להחמיץ על ידי ה נתוני שאילתה.

קבלת מלכודות SNMP ב-Zabbix נועדה לעבוד עם snmptrapd ואחד המנגנונים להעברת המלכודות לזאביקס - או סקריפט Bash או Perl או SNMPTT.

הדרך הפשוטה ביותר להגדיר ניטור מלכודות לאחר הגדרת Zabbix הוא להשתמש בפתרון הסקריפט של Bash, כי Perl ו-SNMPTT הם לעתים קרובות חסר בהפצות מודרניות ודורשות תצורה מורכבת יותר. עם זאת, פתרון זה משתמש בסקריפט המוגדר כ-'traphandle'. לביצועים טובים יותר במערכות ייצור, השתמש בפתרון Perl המוטבע (או סקריפט עם אפשרות 'עשה perl' או SNMPTT).

זרימת העבודה של קבלת מלכודת:

  1. snmptrapd מקבל מלכודת
  2. snmptrapd מעביר את המלכודת לסקריפט המקלט (Bash, Perl) או SNMPTT
  3. המקלט מנתח, מעצב וכותב את המלכודת קובץ
  4. Zabbix SNMP traper קורא ומנתח את קובץ ה- trap
  5. עבור כל מלכודת Zabbix מוצא את כל פריטי ה-"SNMP Traper" עם מארח ממשקים התואמים לכתובת המלכודת שהתקבלה. שימו לב שרק ה "IP" או "DNS" שנבחרו בממשק המארח משמש במהלך תוֹאֵם.
  6. עבור כל פריט שנמצא, המלכודת מושווה ל-Regexp in snmptrap[regexp]. המלכודת מוגדרת כערך של הכל פריטים תואמים. אם לא נמצא פריט תואם ויש פריט snmptrap.fallback, המלכודת מוגדרת כערך של זה.
  7. אם המלכודת לא הוגדרה כערך של פריט כלשהו, Zabbix כברירת מחדל רושם את המלכודת שאין כמותה. (זה מוגדר על ידי "יומן SNMP ללא התאמה מלכודות" בניהול → כללי → אחר.)

הגדרת מלכודות SNMP

הגדרת השדות הבאים ב-frontend היא ספציפית לכך סוג פריט:

  • המארח שלך חייב להיות בעל ממשק SNMP

ב-תצורה → מארחים, בשדה ממשק מארח הגדר SNMP ממשק עם כתובת ה-IP או ה-DNS הנכונה. הכתובת מכל אחד מלכודת שקיבל מושווה לכתובות ה-IP וה-DNS של כל ה-SNMP ממשקים כדי למצוא את המארחים המתאימים.

  • הגדר את הפריט

בשדה מפתח השתמש באחד ממפתחות המלכודת של SNMP:

מפתח
תיאור ערך החזרה הערות
snmptrap[regexp]
תופס את כל מלכודות ה-SNMP שתואמות לביטוי הרגולרי שצוין ב-regexp. אם הביטוי הרגולרי אינו צוין, תופס כל trap. SNMP trap ניתן להגדיר פריט זה רק עבור ממשקי SNMP.
פקודות מאקרו של משתמש וביטויים רגולריים גלובליים נתמכים בפרמטר של מפתח פריט זה.
snmptrap.fallback
תופס את כל מלכודות ה-SNMP שלא נתפסו על ידי אף אחד מהפריטים snmptrap[] עבור ממשק זה. SNMP trap ניתן להגדיר פריט זה רק עבור ממשקי SNMP.

התאמת ביטוי רגולרי מרובה שורות אינה נתמכת בשלב זה זְמַן.

הגדר את סוג המידע ל'יומן' עבור חותמות הזמן מנותח. שים לב שגם פורמטים אחרים כגון 'נומרי' קבילים אך עשוי לדרוש מטפל מלכודות מותאם אישית.

כדי שניטור מלכודות SNMP יפעל, תחילה יש להגדיר אותו בצורה נכונה (ראה להלן).

הגדרת ניטור מלכודות SNMP

הגדרת שרת/פרוקסי של Zabbix

כדי לקרוא את המלכודות, יש להגדיר את השרת או ה-proxy של Zabbix להפעלה תהליך ה-SNMP traper והצביע על קובץ ה- trap שנמצא נכתב על ידי SNMPTT או מקלט Bash/Perl trap. כדי לעשות זאת, ערוך את ה קובץ תצורה (zabbix_server.conf או zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[קובץ מלכודת]

::: הערה אזהרה אם פרמטר systemd PrivateTmp בשימוש, לא סביר שקובץ זה יעבוד ב-/tmp. :::

הגדרת מקלט Bash trap

דרישות: רק snmptrapd.

מקלט Bash trap script ניתן להשתמש כדי להעביר מלכודות לשרת Zabbix ישירות מ-snmptrapd. ל הגדר אותו, הוסף את האפשרות 'traphandle' לקובץ התצורה של snmptrapd (snmptrapd.conf), ראה דוגמה.

הגדרת מקלט מלכודת Perl

דרישות: Perl, Net-SNMP הידור עם --enable-embedded-perl (בוצע כברירת מחדל מאז Net-SNMP 5.4)

מקלט מלכודת Perl (חפש את misc/snmptrap/zabbix_trap_receiver.pl) ניתן להשתמש כדי להעביר מלכודות לשרת Zabbix ישירות מ-snmptrapd. ל להגדיר את זה:

  • הוסף את סקריפט Perl לקובץ התצורה snmptrapd (snmptrapd.conf), למשל:
perl לעשות "[מסלול מלא ל-PERL RECEIVER SCRIPT]";
  • הגדר את המקלט, למשל:
$SNMPTrapperFile = '[קובץ מלכודת]';
       $DateTimeFormat = '[פורמט תאריך שעה]';

אם שם הסקריפט לא מצוטט, snmptrapd יסרב לעשות זאת התחל עם הודעות, דומות לאלה:

השינויים ב-Regexp "/l" ו-"/a" סותרים זה את זה בשורה 1 (eval 2), בסוף השורה
       יתכן שהשינוי הרגולרי "/l" לא יופיע פעמיים בשורה 1 (בערך 2), בסוף השורה
הגדרת SNMPTT

בהתחלה, יש להגדיר את snmptrapd לשימוש ב-SNMPTT.

לקבלת הביצועים הטובים ביותר, יש להגדיר את SNMPTT כ דמון המשתמש ב-snmptthandler-embedded כדי להעביר אליו את המלכודות. לִרְאוֹת הוראות עבור הגדרת SNMPTT.

כאשר SNMPTT מוגדר לקבל את המלכודות, הגדר את snmptt.ini:

  1. אפשר את השימוש במודול Perl מחבילת NET-SNMP:
net_snmp_perl_enable = 1
  1. יומן מלכודות לקובץ המלכודות אשר ייקרא על ידי Zabbix:
log_enable = 1
       log_file = [קובץ מלכודת]
  1. הגדר את פורמט התאריך-שעה:
date_time_format = %H:%M:%S %Y/%m/%d = [פורמט תאריך שעה]

::: הערה אזהרה החבילה "net-snmp-perl" הוסרה ב-RHEL 8.0-8.2; נוסף מחדש ב-RHEL 8.3. למידע נוסף, ראה ידוע issues. :::

כעת עצב את המלכודות כדי ש-Zabix יזהה אותן (ערוך snmptt.conf):

  1. כל משפט FORMAT צריך להתחיל ב-"ZBXTRAP [כתובת]", שבו [כתובת] תושווה לכתובות IP ו-DNS של SNMP ממשקים ב- Zabbix. לְמָשָׁל.:
אירוע coldStart .1.3.6.1.6.3.1.1.5.1 "אירועי סטטוס" רגיל
       פורמט ZBXTRAP $aA התקן אותחל מחדש (coldStart)
  1. ראה עוד על פורמט מלכודת SNMP להלן.

::: שימו לב חשוב אל תשתמש במלכודות לא ידועות - Zabbix לא תוכל לזהות אותן. ניתן לטפל במלכודות לא ידועות על ידי הגדרת אירוע כללי ב-snmptt.conf:

אירוע כללי .* "אירוע כללי" רגיל

:::

פורמט מלכודת SNMP

כל מקלטי המלכודת של Perl ותצורת SNMPTT המותאמים אישית חייבים עצב את המלכודת בצורה הבאה:

[חותמת זמן] [המלכודת, חלק 1] ZBXTRAP [כתובת] [המלכודת, חלק 2]

איפה

  • [חותמת זמן] - חותמת הזמן המשמשת לפריטי יומן
  • ZBXTRAP - כותרת שמציינת שמתחילה מלכודת חדשה בשורה זו
  • [כתובת] - כתובת IP המשמשת לאיתור המארח עבור מלכודת זו

שים לב ש"ZBXTRAP" ו-"[כתובת]" ייחתכו מההודעה במהלך העיבוד. אם המלכודת מעוצבת אחרת, Zabbix עשויה לנתח את המלכודות באופן בלתי צפוי.

מלכודת דוגמה:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 מארח מקומי "סטטוס" רגיל - ZBXTRAP 192.168.1.1 קישור למטה בממשק 2. מצב אדמין: 1. מצב תפעולי: 2

זה יביא למלכודת הבאה עבור ממשק SNMP עם IP=192.168.1.1:

11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 "אירועי סטטוס" רגילים
       localhost - קישור למטה בממשק 2. מצב ניהול: 1. מצב תפעולי: 2

דרישות מערכת

תמיכה בקבצים גדולים

ל- Zabbix יש תמיכה בקבצים גדולים עבור קבצי SNMP Traper. הקובץ המקסימלי הגודל ש-Zabix יכול לקרוא הוא 2^63 (8 EiB). שים לב שמערכת הקבצים עשויה להטיל מגבלה נמוכה יותר על גודל הקובץ.

סיבוב יומן

Zabbix לא מספקת שום מערכת לסיבוב יומנים - שיש לטפל בה על ידי המשתמש. סיבוב היומן צריך לשנות תחילה את שם הקובץ הישן ורק מאוחר יותר תמחק אותו כדי שלא יאבדו מלכודות:

  1. Zabbix פותח את קובץ ה- trap במיקום האחרון הידוע והולך אל שלב 3
  2. Zabbix בודק אם הקובץ שנפתח כעת סובב על ידי השוואת מספר האינודה למספר האינודה המוגדר של קובץ ה- trap. אם אין קובץ פתוח, Zabbix מאפס את המיקום האחרון והולך לשלב 1.
  3. Zabbix קורא את הנתונים מהקובץ שנפתח כעת ומגדיר את מיקום חדש.
  4. הנתונים החדשים מנותחים. אם זה היה הקובץ המסובב, הקובץ הוא נסגר וחוזר לשלב 2.
  5. אם לא היו נתונים חדשים, Zabbix ישן שנייה וחוזר אחורה לשלב 2.
מערכת קבצים

בגלל הטמעת קובץ ה- trap, Zabbix צריכה את מערכת הקבצים תמיכה באינודים להבדיל בין קבצים (המידע נרכש על ידי א stat() call).

דוגמאות להגדרה באמצעות גרסאות שונות של פרוטוקול SNMP

דוגמה זו משתמשת ב-snmptrapd ובסקריפט של מקלט Bash כדי להעביר מלכודות לשרת Zabbix.

להכין:

  1. הגדר את Zabbix כדי להפעיל את SNMP Traper ו הגדר את קובץ המלכודת. הוסף אל zabbix_server.conf:
StartSNMPTrapper=1
       SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
  1. הורד את הסקריפט של Bash אל /usr/sbin/zabbix_trap_handler.sh:
curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/6.2/Dockkerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

במידת הצורך, התאם את המשתנה ZABBIX_TRAPS_FILE בסקריפט. כדי להשתמש בערך ברירת המחדל, תחילה צור את ספריית האב:

mkdir -p /var/lib/zabbix/snmptraps
  1. הוסף את הדברים הבאים ל-snmtrapd.conf (עיין ב-דוגמה)
traphandle ברירת המחדל /bin/bash /usr/sbin/zabbix_trap_handler.sh
  1. צור TEST של פריט SNMP:

    IP של ממשק SNMP מארח: 127.0.0.1
    מפתח: snmptrap["linkup"]
    פורמט זמן יומן: yyyyMMdd.hhmmss

  2. בשלב הבא נגדיר את snmptrapd עבור גרסת פרוטוקול SNMP שבחרת ו שלח מלכודות בדיקה באמצעות כלי השירות snmptrap.

SNMPv1, SNMPv2

פרוטוקולי SNMPv1 ו-SNMPv2 מסתמכים על אימות "מחרוזת קהילה". בדוגמה למטה נשתמש ב"סוד" כמחרוזת קהילה. יש להגדיר אותו לאותו ערך בשולחי מלכודות SNMP.

שים לב שאמנם נעשה שימוש נרחב בסביבות ייצור, אך SNMPv2 אינו מציע כל הצפנה ואימות שולח אמיתי. הנתונים נשלחים כטקסט רגיל ולכן יש להשתמש בגרסאות פרוטוקול אלו רק בסביבות מאובטחות כגון רשת פרטית ואסור להשתמש בשום רשת ציבורית או של צד שלישי.

SNMP גרסה 1 לא ממש בשימוש בימים אלה מכיוון שהיא לא תומכת במונים של 64 סיביות נחשב לפרוטוקול מדור קודם.

כדי לאפשר קבלת מלכודות SNMPv1 או SNMPv2, עליך להוסיף את השורה הבאה ל-snmptrapd.conf. החלף את "סוד" במחרוזת קהילת SNMP המוגדרת בשולחי מלכודות SNMP:

authCommunity log,execute,net secret

בשלב הבא נוכל לשלוח מלכודת בדיקה באמצעות snmptrap. נשתמש ב-OID הנפוץ "קישור" בדוגמה זו:

snmptrap -v 2c -c secret localhost 0 linkUp.0
SNMPv3

SNMPv3 מטפל בבעיות אבטחה SNMPv1/v2 ומספק אימות והצפנה. אתה יכול להשתמש בשיטות אימות MD5 או במספר SHA וב-DES/מרובות AES כצופן.

כדי לאפשר קבלת SNMPv3 הוסף את השורה הבאה אל snmptrapd.conf:

createUser -e 0x8000000001020304 traptest SHA mypassword AES
       יומן authuser, בצע traptest

:::הערה חשוב שימו לב למילת המפתח "ביצוע" המאפשרת להפעיל סקריפטים עבור מודל אבטחת משתמש זה. :::

snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0

::: הערה אזהרה אם ברצונך להשתמש בשיטות הצפנה חזקות כגון AES192 או AES256, אנא השתמש net-snmp החל מגרסה 5.8. ייתכן שיהיה עליך להדר אותו מחדש עם configure אפשרות: --enable-bluenthal-aes. גרסאות ישנות יותר של net-snmp אינן תומכות ב-AES192/AES256. ראה גם: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption :::

אימות

בשתי הדוגמאות תראה שורות דומות ב- /var/lib/zabbix/snmptraps/snmptraps.log שלך:

20220805.102235 ZBXTRAP 127.0.0.1
       UDP: [127.0.0.1]:35736->[127.0.0.1]:162
       DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
       SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

ערך הפריט ב-Zabix יהיה:

2022-08-05 10:54:43 2022-08-05 10:54:41

       20220805.105441 UDP: [127.0.0.1]:44262->[127.0.0.1]:162
       DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
       SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0

ראה גם