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 ID from the Organization Details section.
Install the Bindplane agent
Windows installation
- Open the 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" /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 Services console 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.