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 standardisant 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 le programme derrière un proxy, les ports du 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 à 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 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
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" /quiet
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.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
. En règle générale, il se trouve 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
,vi
ou le Bloc-notes).
- Recherchez le fichier
Modifiez le fichier
config.yaml
comme 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_labels
Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<customer_id>
par le numéro client réel.Mettez à jour
/path/to/ingestion-authentication-file.json
en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
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 bindplane-agent
Pour 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. |
Date/Heure | 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 en forme en tant que 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. Passé à 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.