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