Collecter les journaux HAProxy
Ce document explique comment ingérer des journaux HAProxy dans Google Security Operations à l'aide de Bindplane. L'analyseur Logstash extrait les champs des messages syslog HAProxy à l'aide d'une série de règles de correspondance de modèle Grok, spécialement conçues pour gérer différents formats de journaux HAProxy. Il mappe ensuite les champs extraits au modèle de données unifié (UDM), en enrichissant les données avec un contexte supplémentaire et en normalisant la représentation pour une analyse plus approfondie.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Windows 2016 ou version ultérieure, ou un hôte Linux avec
systemd - Si vous exécutez l'application derrière un proxy, les ports de pare-feu sont ouverts.
- Accès privilégié à HAProxy
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à SIEM Settings > Collection Agents (Paramètres 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 où Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Profil.
- Copiez l'ID client dans la section Organization Details (Informations sur l'organisation) et enregistrez-le.
Installer l'agent Bindplane
Installation sous Windows
- 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" /quiet
Installation sous Linux
- Ouvrez un terminal avec des 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.sh
Ressources d'installation supplémentaires
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml. Il se trouve généralement dans le répertoire/etc/bindplane-agent/sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yamlcomme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'HAPROXY' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labelsRemplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<customer_id>par l'ID client réel.Mettez à jour
/path/to/ingestion-authentication-file.jsonavec le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.
Redémarrer l'agent Bindplane pour appliquer les modifications
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart bindplane-agentPour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :
net stop BindPlaneAgent && net start BindPlaneAgent
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-ips>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, s'il est disponible. Sinon, il est dérivé d'autres champs tels que action ou status, en fonction du message du journal. |
| datetime | metadata.event_timestamp.seconds | Extrait du champ datetime du journal, s'il est disponible. Sinon, il est dérivé du champ timestamp de l'entrée de journal. |
| description | metadata.description | Extrait du champ description du journal, s'il est disponible. Sinon, il est dérivé d'autres champs tels que command_description ou action, en fonction du message du 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 au format HTTP/{version}. |
| initiator | target.application | Extrait du champ initiator du journal. |
| module | ||
| msg | security_result.summary | Extrait du champ msg du journal. |
| pid | target.process.pid | Extrait du champ pid du journal. |
| process | ||
| process_name | target.application | Extrait du champ process_name du journal. |
| retries | ||
| server_name | target.hostname | Extrait du champ server_name du journal. S'il est vide, la valeur par défaut est celle de syslog_server. |
| severity | security_result.severity | Mappé à partir du champ severity du journal. WARNING est mappé à MEDIUM, ALERT à CRITICAL et NOTICE à INFORMATIONAL. |
| shell | ||
| srv_queue | ||
| srvconn | ||
| status | ||
| 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 par défaut sur NETWORK_HTTP. Modifié en 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 | Défini sur HAProxy Enterprise. |
|
| metadata.product_name | Défini sur HAProxy. |
|
| network.application_protocol | Défini sur HTTP si le champ message contient HTTP. |
|
| metadata.log_type | Défini sur HAPROXY. |
Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.