קבלת מלכודות SNMP היא ההפך משאילתה של התקנים התומכים ב-SNMP.
במקרה זה, המידע נשלח ממכשיר התומך SNMP והוא נאסף או "נלכד" על ידי Zabbix.
בדרך כלל, מלכודות נשלחות על שינוי מצב כלשהו והסוכן מתחבר לשרת ביציאה 162 (בניגוד ליציאה 161 בסוכן צד המשמש לשאילתות). שימוש במלכודות עשוי לזהות קצרים מסוימים בעיות המתרחשות בתוך מרווח השאילתות ועשויות להחמיץ על ידי ה נתוני שאילתה.
קבלת מלכודות SNMP ב-Zabbix נועדה לעבוד עם snmptrapd ואחד המנגנונים להעברת המלכודות לזאביקס - או סקריפט Bash או Perl או SNMPTT.
הדרך הפשוטה ביותר להגדיר ניטור מלכודות לאחר הגדרת Zabbix הוא להשתמש בפתרון הסקריפט של Bash, כי Perl ו-SNMPTT הם לעתים קרובות חסר בהפצות מודרניות ודורשות תצורה מורכבת יותר. עם זאת, פתרון זה משתמש בסקריפט המוגדר כ-'traphandle'. לביצועים טובים יותר במערכות ייצור, השתמש בפתרון Perl המוטבע (או סקריפט עם אפשרות 'עשה perl' או SNMPTT).
זרימת העבודה של קבלת מלכודת:
snmptrapd
מקבל מלכודתsnmptrapd
מעביר את המלכודת לסקריפט המקלט (Bash, Perl) או SNMPTTsnmptrap[regexp]
. המלכודת מוגדרת כערך של הכל פריטים תואמים. אם לא נמצא פריט תואם ויש פריט snmptrap.fallback
, המלכודת מוגדרת כערך של זה.הגדרת השדות הבאים ב-frontend היא ספציפית לכך סוג פריט:
ב-תצורה → מארחים, בשדה ממשק מארח הגדר SNMP ממשק עם כתובת ה-IP או ה-DNS הנכונה. הכתובת מכל אחד מלכודת שקיבל מושווה לכתובות ה-IP וה-DNS של כל ה-SNMP ממשקים כדי למצוא את המארחים המתאימים.
בשדה מפתח השתמש באחד ממפתחות המלכודת של SNMP:
מפתח | ||
---|---|---|
תיאור | ערך החזרה | הערות |
snmptrap[regexp] | ||
תופס את כל מלכודות ה-SNMP שתואמות לביטוי הרגולרי שצוין ב-regexp. אם הביטוי הרגולרי אינו צוין, תופס כל trap. | SNMP trap | ניתן להגדיר פריט זה רק עבור ממשקי SNMP. פקודות מאקרו של משתמש וביטויים רגולריים גלובליים נתמכים בפרמטר של מפתח פריט זה. |
snmptrap.fallback | ||
תופס את כל מלכודות ה-SNMP שלא נתפסו על ידי אף אחד מהפריטים snmptrap[] עבור ממשק זה. | SNMP trap | ניתן להגדיר פריט זה רק עבור ממשקי SNMP. |
התאמת ביטוי רגולרי מרובה שורות אינה נתמכת בשלב זה זְמַן.
הגדר את סוג המידע ל'יומן' עבור חותמות הזמן מנותח. שים לב שגם פורמטים אחרים כגון 'נומרי' קבילים אך עשוי לדרוש מטפל מלכודות מותאם אישית.
כדי שניטור מלכודות SNMP יפעל, תחילה יש להגדיר אותו בצורה נכונה (ראה להלן).
כדי לקרוא את המלכודות, יש להגדיר את השרת או ה-proxy של Zabbix להפעלה תהליך ה-SNMP traper והצביע על קובץ ה- trap שנמצא נכתב על ידי SNMPTT או מקלט Bash/Perl trap. כדי לעשות זאת, ערוך את ה קובץ תצורה (zabbix_server.conf או zabbix_proxy.conf):
StartSNMPTrapper=1
SNMPTrapperFile=[קובץ מלכודת]
::: הערה אזהרה אם פרמטר systemd PrivateTmp בשימוש, לא סביר שקובץ זה יעבוד ב-/tmp. :::
דרישות: רק snmptrapd.
מקלט Bash trap script ניתן להשתמש כדי להעביר מלכודות לשרת Zabbix ישירות מ-snmptrapd. ל הגדר אותו, הוסף את האפשרות 'traphandle' לקובץ התצורה של snmptrapd (snmptrapd.conf
), ראה דוגמה.
דרישות: Perl, Net-SNMP הידור עם --enable-embedded-perl (בוצע כברירת מחדל מאז Net-SNMP 5.4)
מקלט מלכודת Perl (חפש את misc/snmptrap/zabbix_trap_receiver.pl) ניתן להשתמש כדי להעביר מלכודות לשרת Zabbix ישירות מ-snmptrapd. ל להגדיר את זה:
perl לעשות "[מסלול מלא ל-PERL RECEIVER SCRIPT]";
$SNMPTrapperFile = '[קובץ מלכודת]';
$DateTimeFormat = '[פורמט תאריך שעה]';
אם שם הסקריפט לא מצוטט, snmptrapd יסרב לעשות זאת התחל עם הודעות, דומות לאלה:
השינויים ב-Regexp "/l" ו-"/a" סותרים זה את זה בשורה 1 (eval 2), בסוף השורה
יתכן שהשינוי הרגולרי "/l" לא יופיע פעמיים בשורה 1 (בערך 2), בסוף השורה
בהתחלה, יש להגדיר את snmptrapd לשימוש ב-SNMPTT.
לקבלת הביצועים הטובים ביותר, יש להגדיר את SNMPTT כ דמון המשתמש ב-snmptthandler-embedded כדי להעביר אליו את המלכודות. לִרְאוֹת הוראות עבור הגדרת SNMPTT.
כאשר SNMPTT מוגדר לקבל את המלכודות, הגדר את snmptt.ini
:
net_snmp_perl_enable = 1
log_enable = 1
log_file = [קובץ מלכודת]
date_time_format = %H:%M:%S %Y/%m/%d = [פורמט תאריך שעה]
::: הערה אזהרה החבילה "net-snmp-perl" הוסרה ב-RHEL 8.0-8.2; נוסף מחדש ב-RHEL 8.3. למידע נוסף, ראה ידוע issues. :::
כעת עצב את המלכודות כדי ש-Zabix יזהה אותן (ערוך snmptt.conf):
אירוע coldStart .1.3.6.1.6.3.1.1.5.1 "אירועי סטטוס" רגיל
פורמט ZBXTRAP $aA התקן אותחל מחדש (coldStart)
::: שימו לב חשוב אל תשתמש במלכודות לא ידועות - Zabbix לא תוכל לזהות אותן. ניתן לטפל במלכודות לא ידועות על ידי הגדרת אירוע כללי ב-snmptt.conf:
אירוע כללי .* "אירוע כללי" רגיל
:::
כל מקלטי המלכודת של Perl ותצורת SNMPTT המותאמים אישית חייבים עצב את המלכודת בצורה הבאה:
[חותמת זמן] [המלכודת, חלק 1] ZBXTRAP [כתובת] [המלכודת, חלק 2]
איפה
שים לב ש"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 לא מספקת שום מערכת לסיבוב יומנים - שיש לטפל בה על ידי המשתמש. סיבוב היומן צריך לשנות תחילה את שם הקובץ הישן ורק מאוחר יותר תמחק אותו כדי שלא יאבדו מלכודות:
בגלל הטמעת קובץ ה- trap, Zabbix צריכה את מערכת הקבצים תמיכה באינודים להבדיל בין קבצים (המידע נרכש על ידי א stat() call).
דוגמה זו משתמשת ב-snmptrapd ובסקריפט של מקלט Bash כדי להעביר מלכודות לשרת Zabbix.
להכין:
zabbix_server.conf
:StartSNMPTrapper=1
SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
/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
snmtrapd.conf
(עיין ב-דוגמה)traphandle ברירת המחדל /bin/bash /usr/sbin/zabbix_trap_handler.sh
צור TEST של פריט SNMP:
IP של ממשק SNMP מארח: 127.0.0.1
מפתח: snmptrap["linkup"]
פורמט זמן יומן: yyyyMMdd.hhmmss
בשלב הבא נגדיר את snmptrapd
עבור גרסת פרוטוקול SNMP שבחרת ו שלח מלכודות בדיקה באמצעות כלי השירות snmptrap
.
פרוטוקולי 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 מטפל בבעיות אבטחה 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