Collect Juniper SRX Series Firewall logs
This document explains how to ingest Juniper SRX Series Firewall logs to Google Security Operations using Bindplane.
Juniper SRX Series firewalls are high-performance network security devices that provide next-generation firewall (NGFW) capabilities, including stateful inspection, intrusion detection and prevention (IDP), application security, and VPN. SRX firewalls generate syslog messages for traffic, security, system, and session events that can be forwarded to external SIEM platforms for centralized security monitoring.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance.
- Windows Server 2016 or later, or Linux host with
systemd. - Network connectivity between the Bindplane agent and the Juniper SRX firewall.
- If running behind a proxy, ensure firewall ports are open per the Bindplane agent requirements.
- Privileged access to the Juniper SRX firewall (root or super-user level access via J-Web or CLI).
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
- Download the Ingestion Authentication File. Save the file securely on the system where Bindplane will be installed.
Get Google SecOps customer ID
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Profile.
- Copy and save the Customer ID from the Organization Details section.
Install the Bindplane agent
Install the Bindplane agent on your Windows or Linux operating system according to the following instructions.
Windows installation
- Open Command Prompt or PowerShell as an administrator.
Run the following command:
msiexec /i "[https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi](https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi)" /quietWait for the installation to complete.
Verify the installation by running:
sc query observiq-otel-collector
The service should show as RUNNING.
Linux installation
- Open a terminal with root or sudo privileges.
Run the following command:
sudo sh -c "$(curl -fsSlL [https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh](https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh))" install_unix.shWait for the installation to complete.
Verify the installation by running:
sudo systemctl status observiq-otel-collector
The service should show as active (running).
Additional installation resources
For additional installation options and troubleshooting, see Bindplane agent installation guide.
Configure the Bindplane agent to ingest syslog and send to Google SecOps
Locate the configuration file
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit the configuration file
Replace the entire contents of
config.yamlwith the following configuration:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/juniper_firewall: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'your-customer-id-here' endpoint: malachiteingestion-pa.googleapis.com log_type: JUNIPER_FIREWALL raw_log_field: body ingestion_labels: env: production service: pipelines: logs/juniper_to_chronicle: receivers: - udplog exporters: - chronicle/juniper_firewall
Configuration parameters
Replace the following placeholders:
Receiver configuration:
listen_address: IP address and port to listen on. Use0.0.0.0to listen on all interfaces. Port514is the standard syslog port (requires root privileges on Linux). Use1514for non-root deployments.
Exporter configuration:
creds_file_path: Full path to the ingestion authentication file:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: Your Google SecOps customer ID.endpoint: Regional endpoint URL:- US:
malachiteingestion-pa.googleapis.com - Europe:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - See Regional Endpoints for the complete list.
- US:
ingestion_labels: Optional labels in YAML format (for example,env: production).
Save the configuration file
- After editing, save the file:
- Linux: Press
Ctrl+O, thenEnter, thenCtrl+X. - Windows: Click File > Save.
- Linux: Press
Restart the Bindplane agent to apply the changes
To restart the Bindplane agent in Linux:
Run the following command:
sudo systemctl restart observiq-otel-collectorVerify the service is running:
sudo systemctl status observiq-otel-collectorCheck logs for errors:
sudo journalctl -u observiq-otel-collector -f
To restart the Bindplane agent in Windows:
Choose one of the following options:
- Command Prompt or PowerShell as administrator:
net stop observiq-otel-collector && net start observiq-otel-collector- Services console:
- Press
Win+R, typeservices.msc, and press Enter. - Locate observIQ OpenTelemetry Collector.
- Right-click and select Restart.
- Press
Verify the service is running:
sc query observiq-otel-collectorCheck logs for errors:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configure Juniper SRX syslog forwarding
Configure the Juniper SRX firewall to forward syslog messages to the Bindplane agent.
Using J-Web interface
- Sign in to the Juniper SRX J-Web interface.
- Go to Configure > System Properties > Syslog.
- Click Add under the Host section to add a new syslog server.
- Provide the following configuration details:
- Host name: Enter the IP address of the Bindplane agent host (for example,
192.168.1.100). - Port: Enter
514(or the port configured in the Bindplane agent). - Log prefix: Optional prefix for log messages.
- Facility: Select the facility and severity levels to forward:
- any: Select severity level info or higher.
- Host name: Enter the IP address of the Bindplane agent host (for example,
- In the Source address field, enter the SRX management interface IP (optional but recommended for consistent source identification).
- Click OK to save.
- Click Commit to apply the configuration.
Using Junos CLI
- Connect to the Juniper SRX via SSH or console.
Enter configuration mode:
configureConfigure the syslog host:
set system syslog host BINDPLANE_IP any info set system syslog host BINDPLANE_IP port 514 set system syslog host BINDPLANE_IP source-address SRX_MGMT_IP set system syslog host BINDPLANE_IP structured-dataReplace:
BINDPLANE_IP: IP address of the Bindplane agent host.SRX_MGMT_IP: Management IP address of the SRX firewall.
Configure security log streaming (for traffic and session logs):
set security log mode stream set security log source-address SRX_MGMT_IP set security log stream chronicle-stream host BINDPLANE_IP set security log stream chronicle-stream port 514 set security log stream chronicle-stream transport protocol udp set security log stream chronicle-stream format sd-syslog set security log stream chronicle-stream severity info set security log stream chronicle-stream category allReplace:
BINDPLANE_IP: IP address of the Bindplane agent host.SRX_MGMT_IP: Management IP address of the SRX firewall.
Commit the configuration:
commitVerify the syslog configuration:
show system syslog show security log
Configure specific log categories
To forward specific log types, configure individual facilities:
set system syslog host BINDPLANE_IP firewall any set system syslog host BINDPLANE_IP authorization info set system syslog host BINDPLANE_IP daemon info set system syslog host BINDPLANE_IP kernel info set system syslog host BINDPLANE_IP interactive-commands info
Replace BINDPLANE_IP with the IP address of the Bindplane agent host.
Verify syslog forwarding
On the SRX, run the following command to view active syslog destinations:
show system syslogGenerate test traffic through the firewall and verify logs appear in the Bindplane agent logs.
For more information, see the Juniper SRX Series documentation.
UDM mapping table
| Log Field | UDM Mapping | Logic |
|---|---|---|
source-address |
event.idm.read_only_udm.principal.ip |
Value taken from source-address. |
source-port |
event.idm.read_only_udm.principal.port |
Value taken from source-port and converted to integer. |
destination-address |
event.idm.read_only_udm.target.ip |
Value taken from destination-address. |
destination-port |
event.idm.read_only_udm.target.port |
Value taken from destination-port and converted to integer. |
protocol-id |
event.idm.read_only_udm.network.ip_protocol |
Mapped from protocol number to name (6=TCP, 17=UDP, 1=ICMP). |
policy-name |
event.idm.read_only_udm.security_result.rule_name |
Value taken from policy-name. |
source-zone-name |
event.idm.read_only_udm.additional.fields |
Value taken from source-zone-name and added with key source-zone-name. |
destination-zone-name |
event.idm.read_only_udm.additional.fields |
Value taken from destination-zone-name and added with key destination-zone-name. |
service-name |
event.idm.read_only_udm.target.application |
Value taken from service-name. |
application |
event.idm.read_only_udm.target.application |
Value taken from application (if service-name is not present). |
nat-source-address |
event.idm.read_only_udm.principal.nat_ip |
Value taken from nat-source-address. |
nat-source-port |
event.idm.read_only_udm.principal.nat_port |
Value taken from nat-source-port and converted to integer. |
nat-destination-address |
event.idm.read_only_udm.target.nat_ip |
Value taken from nat-destination-address. |
nat-destination-port |
event.idm.read_only_udm.target.nat_port |
Value taken from nat-destination-port and converted to integer. |
bytes-from-client |
event.idm.read_only_udm.network.sent_bytes |
Value taken from bytes-from-client and converted to unsigned integer. |
bytes-from-server |
event.idm.read_only_udm.network.received_bytes |
Value taken from bytes-from-server and converted to unsigned integer. |
packets-from-client |
event.idm.read_only_udm.additional.fields |
Value taken from packets-from-client and added with key packets-from-client. |
packets-from-server |
event.idm.read_only_udm.additional.fields |
Value taken from packets-from-server and added with key packets-from-server. |
elapsed-time |
event.idm.read_only_udm.additional.fields |
Value taken from elapsed-time and added with key elapsed-time. |
username |
event.idm.read_only_udm.principal.user.userid |
Value taken from username. |
reason |
event.idm.read_only_udm.security_result.description |
Value taken from reason. |
action |
event.idm.read_only_udm.security_result.action |
If action is accept or permit, set to ALLOW. If action is deny, drop, reject, or close, set to BLOCK. |
hostname |
event.idm.read_only_udm.principal.hostname |
Value taken from syslog hostname field. |
attack-name |
event.idm.read_only_udm.security_result.threat_name |
Value taken from attack-name (IDP events). |
severity |
event.idm.read_only_udm.security_result.severity |
Mapped from severity string: info to INFORMATIONAL, warning to MEDIUM, error or major to ERROR, critical to CRITICAL. |
event.idm.read_only_udm.metadata.vendor_name |
Set to Juniper Networks. |
|
event.idm.read_only_udm.metadata.product_name |
Set to SRX Series Firewall. |
Need more help? Get answers from Community members and Google SecOps professionals.