Collect Cisco Router logs
This document explains how to ingest Cisco Router logs to Google Security Operations using a Bindplane agent. The parser first extracts common fields from various syslog message formats using a series of Grok patterns, handling different timestamp and key-value data variations. Then, it applies specific logic based on the extracted event type (facility, mnemonics, message_type), enriching the data with additional fields and mapping them to the UDM model.
Before you begin
- Ensure that you have a Google SecOps instance.
- Ensure that you are using Windows 2016 or later, or a Linux host with systemd.
- If running behind a proxy, ensure firewall ports are open.
- Ensure that you have privileged access to a Cisco Router.
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 IDfrom the Organization Detailssection.
Install the Bindplane agent
Windows installation
- Open the Command Promptor PowerShellas an administrator.
-  Run the following command: msiexec / i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" / quiet
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 ) " install_unix.sh
Additional installation resources
- For additional installation options, consult this installation guide .
Configure the Bindplane agent to ingest Syslog and send to Google SecOps
-  Access the configuration file: - Locate the config.yamlfile. Typically, it's in the/etc/bindplane-agent/directory on Linux or in the installation directory on Windows.
- Open the file using a text editor (for example, nano,vi, or Notepad).
 
- Locate the 
-  Edit the config.yamlfile as follows:receivers : udplog : # Replace the port and IP address as required listen_address : "0.0.0.0:514" 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 : CISCO_ROUTER raw_log_field : body service : pipelines : logs/source0__chronicle_w_labels-0 : receivers : - udplog exporters : - chronicle/chronicle_w_labels
-  Replace the port and IP address as required in your infrastructure. 
-  Replace <customer_id>with the actual customer ID.
-  Update /path/to/ingestion-authentication-file.jsonto the path where the authentication file was saved in the Get Google SecOps ingestion authentication file section.
Restart the Bindplane agent to apply the changes
-  To restart the Bindplane agent in Linux, run the following command: sudo systemctl restart bindplane-agent
-  To restart the Bindplane agent in Windows, you can either use the Servicesconsole or enter the following command: net stop BindPlaneAgent && net start BindPlaneAgent
Configure Syslog on a Cisco Router
- Sign in to the Cisco Router.
-  Escalate privileges by entering the enablecommand:Switch> enable Switch#
-  Switch to configuration mode by entering the conf tcommand:Switch# conf t Switch ( config ) #
-  Enter the following commands: logging host <bindplane-server-ip> transport <tcp/udp> port <port-number> logging source-interface <interface>- Replace <bindplane-server-ip>with the Bindplane agent IP address, and<port-number>with the configured port.
- Replace <tcp/udp>with the configured listening protocol on the Bindplane agent; for example,udp.
- Replace <interface>with the Cisco interface ID; for example,Ethernet1/1.
 
- Replace 
-  Set the priority level by entering the following command: logging trap Informational logging console Informational logging severity Informational
-  Set the syslog facility: logging facility local6
-  Enable timestamps by entering the following command: service timestamps log datetime
-  Save and exit. 
-  Configure the settings to survive restart by entering the following command: copy running-config startup-config
UDM Mapping Table
| Log field | UDM mapping | Logic | 
|---|---|---|
| client_ip | target.ip, target.asset.ip | The value is taken from the client_ipfield extracted by the grok parser. | 
| client_mac | target.mac | The value is taken from the client_macfield extracted by the grok parser. | 
| dst_ip | target.ip, target.asset.ip | The value is taken from the dst_ipfield extracted by the grok parser. | 
| dst_port | target.port | The value is taken from the dst_portfield extracted by the grok parser and converted to an integer. | 
| duration | - | This field is not mapped to the UDM. | 
| host_ip | target.ip, target.asset.ip | The value is taken from the host_ipfield extracted by the grok parser. | 
| local_proxy | intermediary.ip | The value is taken from the local_proxyfield extracted by the grok parser. | 
| message_data | metadata.description | The value is taken from the message_datafield extracted by the grok parser. | 
| protocol | network.ip_protocol | The value is taken from the protocolfield extracted by the grok parser and converted to uppercase. | 
| received_bytes | network.received_bytes | The value is taken from the received_bytesfield extracted by the grok parser and converted to an unsigned integer. | 
| referral_url | network.http.referral_url | The value is taken from the referral_urlfield extracted by the grok parser. | 
| remote_proxy | intermediary.ip | The value is taken from the remote_proxyfield extracted by the grok parser. | 
| send_bytes | network.sent_bytes | The value is taken from the send_bytesfield extracted by the grok parser and converted to an unsigned integer. | 
| sent_bytes | network.sent_bytes | The value is taken from the sent_bytesfield extracted by the grok parser and converted to an unsigned integer. | 
| server_host | target.hostname, target.asset.hostname | The value is taken from the server_hostfield extracted by the grok parser. | 
| server_ip | target.ip, target.asset.ip | The value is taken from the server_ipfield extracted by the grok parser. | 
| src_ip | principal.ip, principal.asset.ip | The value is taken from the src_ipfield extracted by the grok parser. | 
| src_port | principal.port | The value is taken from the src_portfield extracted by the grok parser and converted to an integer. | 
| user_ip | target.ip, target.asset.ip | The value is taken from the user_ipfield extracted by the grok parser. | 
| user_mail | principal.user.userid, principal.user.email_addresses | The value is taken from the user_mailfield extracted by the grok parser. | 
| username | target.user.userid | The value is taken from the usernamefield extracted by the grok parser. | 
|   
- | metadata.event_timestamp | The value is taken from the create_timefield. | 
|   
- | metadata.event_type | The value is set to GENERIC_EVENTby default, and changed to specific event types based on the parsed log message. | 
|   
- | metadata.log_type | The value is set to CISCO_ROUTER. | 
|   
- | metadata.product_event_type | The value is taken from the message_typefield, which is generated by combining thefacility,priority, andmnemonicsfields. | 
|   
- | metadata.product_name | The value is set to Router. | 
|   
- | metadata.vendor_name | The value is set to Cisco. | 
|   
- | network.application_protocol | The value is set to HTTPorHTTPSif theprotocolfield ishttporhttps, respectively. | 
|   
- | extensions.auth.type | The value is set to AUTHTYPE_UNSPECIFIEDby default, and changed to specific authentication types based on the parsed log message. | 
|   
- | security_result.action | The value is set to ALLOWfor successful logins andBLOCKfor failed logins. | 
|   
- | security_result.category | The value is set to NETWORK_SUSPICIOUSfor events with IP options andAUTH_VIOLATIONfor failed logins. | 
|   
- | security_result.description | The value is set to specific messages for different events. | 
|   
- | security_result.severity | The value is set to LOWfor successful logins,MEDIUMfor failed logins, andINFORMATIONALfor other events. | 
|   
- | security_result.severity_details | The value is taken from the fail_reasonfield for failed logins, and set toInformational messagefor events with IP options. | 
|   
- | security_result.summary | The value is set to specific messages for different events. | 
Need more help? Get answers from Community members and Google SecOps professionals.

