Collecter les journaux de pare-feu Juniper NetScreen

Compatible avec :

Ce document explique comment configurer l'envoi des journaux Juniper NetScreen Firewall à Google Security Operations. L'analyseur extrait les champs à l'aide de modèles Grok, en gérant différents formats Syslog et charges utiles JSON. Il mappe ensuite ces champs extraits à l'UDM, en classant les événements comme des connexions réseau, des connexions utilisateur, des mises à jour d'état ou des événements génériques en fonction de la présence de champs spécifiques tels que les adresses IP, les noms d'utilisateur et les ports.

Avant de commencer

  • Assurez-vous de disposer d'un accès administrateur à votre pare-feu Juniper NetScreen.
  • Assurez-vous de disposer d'une instance Google Security Operations.

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. 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

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent Bindplane

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. 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

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :

    1. 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.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou le Bloc-notes).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        tcplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:54525"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/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: SYSLOG
                namespace: juniper_firewall
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    
  3. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <customer_id> par le numéro client réel.

  5. 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 le pare-feu Juniper Networks NetScreen

  1. Connectez-vous à l'interface Web Juniper NetScreen.
  2. Sélectionnez Configuration > Paramètres du rapport > Paramètres du journal.
  3. Cochez toutes les cases Gravité de l'événement.
  4. Cliquez sur Appliquer.
  5. Sélectionnez Configuration > Paramètres du rapport > Syslog.
  6. Cochez la case Activer les messages syslog.
  7. Dans la liste Interface source, sélectionnez l'interface NetScreen à partir de laquelle les paquets syslog doivent être envoyés.
  8. Dans la section Serveurs Syslog, cochez la case Activer et fournissez les informations suivantes :
    1. Adresse IP/Nom d'hôte : saisissez l'adresse IP Bindplane.
    2. Port : saisissez le numéro de port Bindplane.
    3. Établissement MDR : sélectionnez le niveau d'établissement Local0.
    4. Établissement : sélectionnez le niveau d'établissement Local0.
  9. Cliquez sur Appliquer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
ACTION security_result.action_details Directement mappé à partir du champ ACTION extrait à l'aide des filtres GROK et KV.
APPLICATION principal.application Directement mappé à partir du champ APPLICATION extrait à l'aide des filtres GROK et KV.
application target.application Mappé directement à partir du champ application extrait via GROK.
attack-name security_result.threat_name Mappé directement à partir du champ attack-name extrait via GROK.
bytes-from-client network.sent_bytes Mappé directement à partir du champ bytes-from-client extrait via GROK.
bytes-from-server network.received_bytes Mappé directement à partir du champ bytes-from-server extrait via GROK.
command target.process.command_line Mappé directement à partir du champ command extrait via GROK.
destination-address target.ip Mappé directement à partir du champ destination-address extrait via GROK.
destination-port target.port Mappé directement à partir du champ destination-port extrait via GROK.
destination-zone additional.fields[].value.string_value Directement mappé à partir du champ destination-zone extrait à l'aide des filtres GROK et KV. La valeur de key est définie sur destination-zone.
destination_zone-name security_result.detection_fields[].value Mappé directement à partir du champ destination_zone-name extrait via GROK. La valeur de key est définie sur dstzone.
dst-nat-rule-name security_result.detection_fields[].value Mappé directement à partir du champ dst-nat-rule-name extrait via GROK. La valeur de key est définie sur dst-nat-rule-name.
dst-nat-rule-type security_result.detection_fields[].value Mappé directement à partir du champ dst-nat-rule-type extrait via GROK. La valeur de key est définie sur dst-nat-rule-type.
elapsed-time network.session_duration.seconds Mappé directement à partir du champ elapsed-time extrait via GROK.
encrypted security_result.detection_fields[].value Mappé directement à partir du champ encrypted extrait via GROK. La valeur de key est définie sur encrypted.
event_time metadata.event_timestamp L'horodatage est extrait du journal brut à l'aide de différents modèles GROK, en privilégiant event_time, puis TIMESTAMP_ISO8601 et enfin SYSLOGTIMESTAMP. Il est ensuite converti en objet d'horodatage.
host principal.hostname, intermediary.hostname Si type est NetScreen, il est mappé sur intermediary.hostname. Sinon, elle est mappée sur principal.hostname.
host_ip intermediary.ip Mappé directement à partir du champ host_ip extrait via GROK.
icmp-type network.icmp_type Mappé directement à partir du champ icmp-type extrait via GROK.
ident target.application Directement mappé à partir du champ ident extrait à l'aide des filtres GROK et JSON.
inbound-bytes network.received_bytes Mappé directement à partir du champ inbound-bytes extrait via GROK.
inbound-packets network.received_packets Mappé directement à partir du champ inbound-packets extrait via GROK.
ip principal.ip, intermediary.ip Si type est NetScreen, il est mappé sur intermediary.ip. Sinon, elle est mappée sur principal.hostname.
message security_result.description Si le message est au format JSON et que le champ log_message_data n'est pas présent, le champ message est utilisé comme description.
msg_data security_result.summary Mappé directement à partir du champ msg_data extrait via GROK.
nat-destination-address target.nat_ip Mappé directement à partir du champ nat-destination-address extrait via GROK.
nat-destination-port target.nat_port Mappé directement à partir du champ nat-destination-port extrait via GROK.
nat-source-address principal.nat_ip Mappé directement à partir du champ nat-source-address extrait via GROK.
nat-source-port principal.nat_port Mappé directement à partir du champ nat-source-port extrait via GROK.
outbound-bytes network.sent_bytes Mappé directement à partir du champ outbound-bytes extrait via GROK.
outbound-packets network.sent_packets Mappé directement à partir du champ outbound-packets extrait via GROK.
packets-from-client network.sent_packets Mappé directement à partir du champ packets-from-client extrait via GROK.
packets-from-server network.received_packets Mappé directement à partir du champ packets-from-server extrait via GROK.
packet-incoming-interface security_result.detection_fields[].value Mappé directement à partir du champ packet-incoming-interface extrait via GROK. La valeur de key est définie sur packet-incoming-interface.
pid target.process.pid Directement mappé à partir du champ pid extrait à l'aide des filtres GROK et JSON.
policy-name security_result.rule_name Mappé directement à partir du champ policy-name extrait via GROK.
PROFILE additional.fields[].value.string_value Directement mappé à partir du champ PROFILE extrait à l'aide des filtres GROK et KV. La valeur de key est définie sur PROFILE.
protocol-id, protocol-name network.ip_protocol Mappé à partir du champ protocol-id ou protocol-name extrait via GROK. La valeur est convertie en énumération du protocole IP correspondant.
REASON additional.fields[].value.string_value Directement mappé à partir du champ REASON extrait à l'aide des filtres GROK et KV. La valeur de key est définie sur REASON.
reason security_result.description Mappé directement à partir du champ reason extrait via GROK.
rule-name security_result.rule_name Mappé directement à partir du champ rule-name extrait via GROK.
SESSION_ID network.session_id Directement mappé à partir du champ SESSION_ID extrait à l'aide des filtres GROK et KV.
service-name security_result.detection_fields[].value Mappé directement à partir du champ service-name extrait via GROK. La valeur de key est définie sur srvname.
source-address principal.ip Mappé directement à partir du champ source-address extrait via GROK.
source-port principal.port Mappé directement à partir du champ source-port extrait via GROK.
source-zone additional.fields[].value.string_value Directement mappé à partir du champ source-zone extrait à l'aide des filtres GROK et KV. La valeur de key est définie sur source-zone.
source_zone-name security_result.detection_fields[].value Mappé directement à partir du champ source_zone-name extrait via GROK. La valeur de key est définie sur srczone.
src-nat-rule-name security_result.detection_fields[].value Mappé directement à partir du champ src-nat-rule-name extrait via GROK. La valeur de key est définie sur src-nat-rule-name.
src-nat-rule-type security_result.detection_fields[].value Mappé directement à partir du champ src-nat-rule-type extrait via GROK. La valeur de key est définie sur src-nat-rule-type.
subtype metadata.product_event_type Mappé directement à partir du champ subtype extrait via GROK.
threat-severity security_result.severity_details Mappé directement à partir du champ threat-severity extrait via GROK.
time metadata.event_timestamp Directement mappé à partir du champ time extrait à l'aide des filtres GROK et JSON. Converti en objet d'horodatage.
username target.user.userid Mappé directement à partir du champ username extrait via GROK.
metadata.log_type Codé en dur sur JUNIPER_FIREWALL. Codé en dur sur JUNIPER_FIREWALL ou NetScreen en fonction du champ type. Codé en dur sur JUNIPER_FIREWALL. Définissez sur ALLOW ou BLOCK en fonction de la logique du parseur. Définissez la valeur sur LOW, MEDIUM, HIGH, INFORMATIONAL ou CRITICAL en fonction des champs subtype et severity_details.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.