Collecter les journaux HAProxy
Ce document explique comment ingérer des journaux HAProxy dans Google Security Operations à l'aide de l'agent Bindplane.
HAProxy est un équilibreur de charge et un serveur proxy à haute disponibilité qui génère des messages syslog pour les requêtes HTTP, les événements de connexion, les vérifications de l'état du backend et l'activité des processus. L'analyseur utilise la correspondance de modèle Grok pour extraire les champs de différents formats de journaux HAProxy et les mapper au modèle de données unifié (UDM).
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Windows Server 2016 ou version ultérieure, ou hôte Linux avec
systemd - Connectivité réseau entre l'agent Bindplane et le serveur HAProxy
- Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès administrateur à la configuration HAProxy
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
Enregistrez le fichier de manière sécurisée sur le système sur lequel l'agent Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sc query observiq-otel-collectorLe service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sudo systemctl status observiq-otel-collectorLe service doit être indiqué comme actif (en cours d'exécution).
Ressources d'installation supplémentaires
Pour obtenir d'autres options d'installation et des conseils de dépannage, consultez le guide d'installation de l'agent Bindplane.
Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps
Localiser le fichier de configuration
Linux :
sudo nano /etc/bindplane-agent/config.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar la configuration suivante :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
Paramètres de configuration
Remplacez les espaces réservés suivants :
Configuration du récepteur :
listen_address: adresse IP et port à écouter :0.0.0.0pour écouter sur toutes les interfaces (recommandé)- Le port
514est le port syslog standard (nécessite la racine sous Linux ; utilisez1514pour les utilisateurs non racine).
Configuration de l'exportateur :
creds_file_path: chemin d'accès complet au fichier d'authentification de l'ingestion :- Linux :
/etc/bindplane-agent/ingestion-auth.json - Windows :
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux :
customer_id: ID client copié depuis la console Google SecOpsendpoint: URL du point de terminaison régional :- États-Unis :
malachiteingestion-pa.googleapis.com - Europe :
europe-malachiteingestion-pa.googleapis.com - Asie :
asia-southeast1-malachiteingestion-pa.googleapis.com - Pour obtenir la liste complète, consultez Points de terminaison régionaux.
- États-Unis :
Enregistrez le fichier de configuration.
- Après avoir modifié le fichier, enregistrez-le :
- Linux : appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
- Linux : appuyez sur
Redémarrez l'agent Bindplane pour appliquer les modifications.
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane dans Windows, choisissez l'une des options suivantes :
Invite de commandes ou PowerShell en tant qu'administrateur :
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Localisez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Appuyez sur
Configurer syslog pour HAProxy
- Connectez-vous à HAProxy à l'aide de la CLI.
Ajoutez la directive log dans la section global de la Configuration pour transférer les messages syslog via UDP.
- Remplacez
<bindplane-ip>par l'adresse IP réelle de l'agent Bindplane.
global log <bindplane-ip>:514 local0 defaults log global- Remplacez
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| accept_date_ms | ||
| actconn | ||
| backend_name | ||
| backend_queue | ||
| beconn | ||
| bytes_read | network.received_bytes | Extrait du champ bytes_read du journal et converti en entier non signé. |
| captured_request_headers | ||
| client_ip | principal.ip | Extrait du champ client_ip du journal. |
| client_port | principal.port | Extrait du champ client_port du journal et converti en entier. |
| command_description | metadata.description | Extrait du champ command_description du journal, le cas échéant. Sinon, il est dérivé d'autres champs tels que action ou status, en fonction du message de journal. |
| Date/Heure | metadata.event_timestamp.seconds | Extrait du champ datetime du journal, le cas échéant. Sinon, il est dérivé du champ timestamp de l'entrée de journal. |
| description | metadata.description | Extrait du champ description du journal, le cas échéant. Sinon, il est dérivé d'autres champs tels que command_description ou action, en fonction du message de journal. |
| feconn | ||
| frontend_name | ||
| http_request | target.url | Extrait du champ http_request du journal. |
| http_status_code | network.http.response_code | Extrait du champ http_status_code du journal et converti en entier. |
| http_verb | network.http.method | Extrait du champ http_verb du journal. |
| http_version | metadata.product_version | Extrait du champ http_version du journal et mis en forme comme HTTP/{version}. |
| initiateur | target.application | Extrait du champ initiator du journal. |
| module | ||
| Message | security_result.summary | Extrait du champ msg du journal. |
| pid | target.process.pid | Extrait du champ pid du journal. |
| de diffusion inverse | ||
| process_name | target.application | Extrait du champ process_name du journal. |
| retries | ||
| server_name | target.hostname | Extrait du champ server_name du journal. Si ce champ est vide, la valeur par défaut est celle de syslog_server. |
| de gravité, | security_result.severity | Mappé à partir du champ severity dans le journal. WARNING correspond à MEDIUM, ALERT correspond à CRITICAL et NOTICE correspond à INFORMATIONAL. |
| shell | ||
| srv_queue | ||
| srvconn | ||
| état | ||
| syslog_server | target.hostname, intermediary.hostname | Extrait du champ syslog_server du journal. Utilisé à la fois pour le nom d'hôte cible (si server_name est vide) et pour le nom d'hôte intermédiaire. |
| 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 | ||
| timestamp | metadata.event_timestamp.seconds | Extrait du champ timestamp du journal et analysé pour obtenir des informations sur la date et l'heure. Utilisé comme code temporel de l'événement. |
| unknown_parameters1 | ||
| unknown_parameters2 | ||
| user_name | target.user.userid | Extrait du champ user_name du journal. |
| metadata.event_type | Défini sur NETWORK_HTTP par défaut. Remplacé par des types d'événements spécifiques tels que PROCESS_UNCATEGORIZED, STATUS_UPDATE ou USER_UNCATEGORIZED en fonction du message du journal et des champs analysés. |
|
| metadata.vendor_name | Variable définie sur HAProxy Enterprise. |
|
| metadata.product_name | Variable définie sur HAProxy. |
|
| network.application_protocol | Définie sur HTTP si le champ message contient HTTP. |
|
| metadata.log_type | Variable définie sur HAPROXY. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.