איסוף יומנים של HAProxy
במאמר הזה מוסבר איך להטמיע יומני HAProxy ב-Google Security Operations באמצעות סוכן Bindplane.
HAProxy הוא מאזן עומסים ושרת proxy עם זמינות גבוהה, שמפיק הודעות syslog לבקשות HTTP, לאירועי חיבור, לבדיקות תקינות של קצה עורפי ולפעילות של תהליכים. הכלי לניתוח משתמש בהתאמת תבניות של Grok כדי לחלץ שדות מפורמטים שונים של יומני HAProxy ולמפות אותם למודל הנתונים המאוחד (UDM).
לפני שמתחילים
חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:
- מופע של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות רשת בין סוכן Bindplane לבין שרת HAProxy
- אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
- הרשאת אדמין להגדרת HAProxy
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מקבלים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collectorהשירות אמור להופיע עם הערך RUNNING.
התקנה של Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collectorהשירות צריך להופיע כפעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane להטמעה של syslog ושליחה אל Google SecOps
איתור קובץ התצורה
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ התצורה
מחליפים את כל התוכן של
config.yamlבהגדרה הבאה:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/haproxy: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: HAPROXY raw_log_field: body service: pipelines: logs/haproxy_to_chronicle: receivers: - udplog exporters: - chronicle/haproxy
פרמטרים להגדרה
מחליפים את ה-placeholders הבאים:
הגדרת מקלט:
-
listen_address: כתובת ה-IP והיציאה להאזנה:-
0.0.0.0כדי להאזין בכל הממשקים (מומלץ) - יציאה
514היא יציאת syslog רגילה (נדרשת הרשאת root ב-Linux; אפשר להשתמש ביציאה1514ללא הרשאת root)
-
-
הגדרות של הכלי לייצוא:
-
creds_file_path: הנתיב המלא לקובץ האימות להטמעת נתונים:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
-
customer_id: מספר הלקוח שהועתק ממסוף Google SecOps endpoint: Regional endpoint URL:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
-
שמירת קובץ ההגדרות
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
שורת פקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorמסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מחפשים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- מקישים על
הגדרת syslog ל-HAProxy
- נכנסים אל HAProxy באמצעות CLI.
מוסיפים את ההנחיה log בקטע global של Configuration כדי להעביר הודעות syslog דרך UDP.
- מחליפים את
<bindplane-ip>בכתובת ה-IP של סוכן Bindplane.
global log <bindplane-ip>:514 local0 defaults log global- מחליפים את
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | לוגיקה |
|---|---|---|
| accept_date_ms | ||
| actconn | ||
| backend_name | ||
| backend_queue | ||
| beconn | ||
| bytes_read | network.received_bytes | הערך חולץ מהשדה bytes_read ביומן והומר למספר שלם לא חתום. |
| captured_request_headers | ||
| client_ip | principal.ip | חילוץ מהשדה client_ip ביומן. |
| client_port | principal.port | הערך חולץ מהשדה client_port ביומן והומר למספר שלם. |
| command_description | metadata.description | הערך חולץ מהשדה command_description ביומן, אם הוא זמין. אחרת, הערך נגזר משדות אחרים כמו action או status, בהתאם להודעה ביומן. |
| datetime | metadata.event_timestamp.seconds | הערך חולץ מהשדה datetime ביומן, אם הוא זמין. אחרת, הערך נגזר מהשדה timestamp ברשומה ביומן. |
| description | metadata.description | הערך חולץ מהשדה description ביומן, אם הוא זמין. אחרת, הערך נגזר משדות אחרים כמו command_description או action, בהתאם להודעה ביומן. |
| feconn | ||
| frontend_name | ||
| http_request | target.url | חילוץ מהשדה http_request ביומן. |
| http_status_code | network.http.response_code | הערך חולץ מהשדה http_status_code ביומן והומר למספר שלם. |
| http_verb | network.http.method | חילוץ מהשדה http_verb ביומן. |
| http_version | metadata.product_version | חילוץ מהשדה http_version ביומן ועיצוב כ-HTTP/{version}. |
| יוזם | target.application | חילוץ מהשדה initiator ביומן. |
| מודול | ||
| msg | security_result.summary | חילוץ מהשדה msg ביומן. |
| pid | target.process.pid | חילוץ מהשדה pid ביומן. |
| תהליך דיפוזיה הפוך | ||
| process_name | target.application | חילוץ מהשדה process_name ביומן. |
| ניסיונות חוזרים | ||
| server_name | target.hostname | חילוץ מהשדה server_name ביומן. אם השדה ריק, ערך ברירת המחדל הוא syslog_server. |
| severity | security_result.severity | ממופה מהשדה severity ביומן. WARNING ממופה ל-MEDIUM, ALERT ממופה ל-CRITICAL ו-NOTICE ממופה ל-INFORMATIONAL. |
| מעטפת | ||
| srv_queue | ||
| srvconn | ||
| סטטוס | ||
| syslog_server | target.hostname, intermediary.hostname | חילוץ מהשדה syslog_server ביומן. הערך הזה משמש גם כשם המארח של היעד (אם server_name ריק) וגם כשם המארח של הביניים. |
| syslog_timestamp | ||
| syslog_timestamp_1 | ||
| syslog_timestamp_2 | ||
| syslog_timestamp_4 | ||
| target_ip | ||
| time_backend_connect | ||
| time_backend_response | ||
| time_duration | ||
| time_queue | ||
| time_request | ||
| חותמת זמן | metadata.event_timestamp.seconds | הערך חולץ מהשדה timestamp ביומן ועבר ניתוח כדי לקבל מידע על התאריך והשעה. משמש כחותמת הזמן של האירוע. |
| unknown_parameters1 | ||
| unknown_parameters2 | ||
| user_name | target.user.userid | חילוץ מהשדה user_name ביומן. |
| metadata.event_type | מוגדר כ-NETWORK_HTTP כברירת מחדל. השתנה לסוגי אירועים ספציפיים כמו PROCESS_UNCATEGORIZED, STATUS_UPDATE או USER_UNCATEGORIZED על סמך הודעת היומן והשדות המנותחים. |
|
| metadata.vendor_name | ההגדרה היא HAProxy Enterprise. |
|
| metadata.product_name | ההגדרה היא HAProxy. |
|
| network.application_protocol | מגדירים ל-HTTP אם השדה message מכיל HTTP. |
|
| metadata.log_type | ההגדרה היא HAPROXY. |
|
source_ip |
event.idm.read_only_udm.principal.ip |
מופה מיומן השינויים |
source_ip |
event.idm.read_only_udm.principal.asset.ip |
מופה מיומן השינויים |
source_port |
event.idm.read_only_udm.principal.port |
מופה מיומן השינויים |
status_code |
event.idm.read_only_udm.network.http.response_code |
מופה מיומן השינויים |
bytes |
event.idm.read_only_udm.network.received_bytes |
מופה מיומן השינויים |
inter_ip |
event.idm.read_only_udm.intermediary.ip |
מופה מיומן השינויים |
inter_port |
event.idm.read_only_udm.intermediary.port |
מופה מיומן השינויים |
destination_ip |
event.idm.read_only_udm.target.ip |
מופה מיומן השינויים |
destination_ip |
event.idm.read_only_udm.target.asset.ip |
מופה מיומן השינויים |
destination_port |
event.idm.read_only_udm.target.port |
מופה מיומן השינויים |
referer |
event.idm.read_only_udm.network.http.referral_url |
מופה מיומן השינויים |
user_agent |
event.idm.read_only_udm.network.http.user_agent |
מופה מיומן השינויים |
time_stamp |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
x_forwarded_for |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
content_length |
event.idm.read_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
datetime |
event.idm.read_only_udm.metadata.event_timestamp |
מופה מיומן השינויים |
שנה רישום
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.