Collecter les journaux de pare-feu OPNsense
Cet analyseur extrait les champs des journaux de pare-feu OPNsense (formats syslog et CSV) et les mappe à l'UDM. Il utilise l'analyse grok et CSV pour les journaux d'application "filterlog", en gérant différents formats de journaux et protocoles réseau (TCP, UDP, ICMP, etc.) pour remplir les champs UDM tels que principal, target, network et security_result. Il ajoute également des métadonnées telles que le nom du fournisseur et du produit, et détermine le type d'événement en fonction de la présence d'informations sur le principal et la cible.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous de disposer d'un accès privilégié à l'interface Web OPNsense.
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
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
- Pour installer sous Windows, exécutez le script suivant :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Pour installer sous Linux, exécutez le script suivant :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Vous trouverez d'autres options d'installation dans ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux Syslog et les envoyer à Google SecOps
- Accédez à la machine sur laquelle l'agent Bindplane est installé.
Modifiez le fichier
config.yaml
comme suit :receivers: tcplog: # Replace the below port <54525> and IP (0.0.0.0) with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Redémarrez l'agent Bindplane pour appliquer les modifications à l'aide de la commande suivante :
sudo systemctl bindplane restart
Ajouter la configuration du serveur Syslog à OPNsense
- Connectez-vous à l'interface Web OPNsense.
- Accédez à Système > Paramètres > Journalisation.
- Dans la section Journalisation à distance, cochez la case Envoyer les journaux au serveur syslog distant pour activer cette option.
- Dans le champ Serveurs Syslog distants, saisissez l'adresse IP du serveur Syslog, y compris le PORT (par exemple, 10.10.10.10:54525).
- Sélectionnez Local0 comme facility syslog.
Définissez le niveau Syslog sur Alerte.
Cliquez sur Enregistrer pour appliquer les modifications.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
column1 |
security_result.rule_id |
Mappé directement à partir de column1 . |
column10 |
additional.fields[].key : "tos"additional.fields[].value.string_value : valeur de column10 |
Directement mappé à partir de column10 , imbriqué sous additional.fields avec la clé "tos". |
column12 |
additional.fields[].key : "ttl"additional.fields[].value.string_value : valeur de column12 |
Mappé directement à partir de column12 , imbriqué sous additional.fields avec la clé "ttl". |
column13 |
additional.fields[].key : "Id"additional.fields[].value.string_value : valeur de column13 |
Mappé directement à partir de column13 , imbriqué sous additional.fields avec la clé "Id". |
column14 |
additional.fields[].key : "offset"additional.fields[].value.string_value : valeur de column14 |
Mappé directement à partir de column14 , imbriqué sous additional.fields avec la clé "offset". |
column15 |
additional.fields[].key : "flags"additional.fields[].value.string_value : valeur de column15 |
Directement mappé à partir de column15 , imbriqué sous additional.fields avec la clé "flags". |
column17 |
network.ip_protocol |
Mappé directement à partir de column17 après conversion en majuscules. |
column18 |
network.received_bytes |
Mappé directement à partir de column18 après conversion en entier non signé. |
column19 |
principal.ip |
Mappé directement à partir de column19 . |
column20 |
target.ip |
Mappé directement à partir de column20 . |
column21 |
principal.port (si column17 est TCP ou UDP)additional.fields[].key : "data_length"additional.fields[].value.string_value : valeur extraite (si column17 est ICMP, GRE, ESP ou IGMP) |
Si column17 est TCP/UDP, il est directement mappé à partir de column21 et converti en entier. Sinon, la valeur "datalength" est extraite à l'aide de grok et placée dans additional.fields avec la clé "data_length". |
column22 |
target.port |
Directement mappé à partir de column22 si column17 est TCP ou UDP, et converti en entier. |
column24 |
additional.fields[].key : "tcp_flags"additional.fields[].value.string_value : valeur de column24 |
Directement mappé à partir de column24 si column17 est TCP, imbriqué sous additional.fields avec la clé "tcp_flags". |
column29 |
additional.fields[].key : "tcp_options"additional.fields[].value.string_value : valeur de column29 |
Directement mappé à partir de column29 si column17 est TCP, imbriqué sous additional.fields avec la clé "tcp_options". |
column4 |
additional.fields[].key : "tracker"additional.fields[].value.string_value : valeur de column4 |
Mappé directement à partir de column4 , imbriqué sous additional.fields avec la clé "tracker". |
column5 |
additional.fields[].key : "interface"additional.fields[].value.string_value : valeur de column5 |
Directement mappé à partir de column5 , imbriqué sous additional.fields avec la clé "interface". |
column6 |
security_result.rule_type |
Mappé directement à partir de column6 . |
column7 |
security_result.action |
Mappé à partir de column7 . Si la valeur est "block", elle est convertie en majuscules ("BLOCK"). Si la réponse est "pass", définissez la valeur sur "ALLOW". |
column8 |
network.direction |
Mappé à partir de column8 . Si la valeur est "in", définissez-la sur "INBOUND". Si la valeur est "out", définissez-la sur "OUTBOUND". |
domain |
principal.administrative_domain |
Directement mappé à partir de domain extrait par Grok. Définissez la valeur sur "NETWORK_CONNECTION" si les adresses IP principales et cibles sont présentes, sinon sur "GENERIC_EVENT". Codé en dur sur "OPNSENSE". Codé en dur sur "OPNSENSE". |
message |
Différents champs | Analysé à l'aide des filtres grok et CSV pour extraire différents champs. Consultez les autres lignes pour connaître les mappages spécifiques. |
ts |
metadata.event_timestamp.seconds , timestamp.seconds |
Analysé à partir du champ de message à l'aide de grok, puis converti en code temporel. La valeur en secondes est utilisée pour renseigner metadata.event_timestamp.seconds et timestamp.seconds . |
application |
principal.application |
Directement mappé à partir de application extrait par Grok. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.