Collecter les journaux du pare-feu OPNsense
Cet analyseur extrait des champs des journaux du pare-feu OPNsense (formats syslog et CSV) et les met en correspondance avec l'UDM. Il utilise l'analyse grok et CSV pour les journaux d'application "filterlog", gère différents formats de journaux et protocoles réseau (TCP, UDP, ICMP, etc.) pour renseigner 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 l'entité principale 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 du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
Obtenir le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
- Pour l'installation sous Windows, exécutez le script suivant:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Pour l'installation 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
- Pour en savoir plus sur les options d'installation, consultez ce guide d'installation.
Configurer l'agent BindPlane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez à la machine sur laquelle 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 d'OPNsense.
- Accédez à System (Système) > Settings (Paramètres) > Logging (Journalisation).
- Dans la section Journalisation à distance, cochez la case Envoyer les journaux à un serveur Syslog distant.
- Dans le champ Remote Syslog Servers (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 service syslog.
Définissez le niveau Syslog sur Alert (Alerte).
Cliquez sur Enregistrer pour appliquer les modifications.
Tableau 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 |
Mappé directement à 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 |
Mappé directement à 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 mappé directement à 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 |
Mappé directement à 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 |
Mappé directement à 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 |
Mappé directement à 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 |
Mappé directement à 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 "block", converti en majuscules "BLOCK". Si "pass", définissez la valeur sur "ALLOW". |
column8 |
network.direction |
Mappé à partir de column8 . Si "in", définissez la valeur sur "INBOUND". Si "out", définissez la valeur sur "OUTBOUND". |
domain |
principal.administrative_domain |
Mappé directement à partir de l'domain extrait par Grok. Définissez ce paramètre sur "NETWORK_CONNECTION" si les adresses IP principales et cibles sont présentes, sinon sur "GENERIC_EVENT". Code codé en dur sur "OPNSENSE". Code codé en dur sur "OPNSENSE". |
message |
Divers champs | Analyse avec les filtres grok et CSV pour extraire différents champs. Consultez les autres lignes pour obtenir des mappages spécifiques. |
ts |
metadata.event_timestamp.seconds , timestamp.seconds |
Extrait du champ de message à l'aide de grok, puis converti en code temporel. La valeur en secondes est utilisée pour renseigner à la fois metadata.event_timestamp.seconds et timestamp.seconds . |
application |
principal.application |
Mappé directement à partir de l'application extrait par Grok. |
Modifications
2023-11-22
- Analyseur nouvellement créé.