Collect NetScaler logs
This document describes how you can collect the NetScaler logs by using a Google Security Operations forwarder.
For more information, see Data ingestion to Google Security Operations overview .
An ingestion label identifies the parser which normalizes raw log data to structured
UDM format. The information in this document applies to the parser with the CITRIX_NETSCALER 
ingestion label.
Configure NetScaler VPX
To configure the NetScaler VPX to send logs to the Google Security Operations forwarder, do the following:
- Verify hostname configuration .
- Create auditing server .
- Bind the created audit policy to the server .
Verify hostname configuration
- Sign in to the NetScaler web interface using administrator credentials.
- Select Configuration > Settings.
- Click Host name, DNS IP address, and Time zone.
- If the Host namefield is empty, enter the hostname. Don't include spaces. If this field is already configured, then no action is required.
- In the DNS IP addressfield, verify if the local DNS IP address is specified.
- In the Time zonefield, enter your time zone.
Create auditing server
- In the NetScaler web interface, select Configuration > System > Auditing > Syslog > Servers.
- Specify the syslog details in the following fields: - Name
- Server type
- IP address
- Port
 
- Select Log levelsas Custom.
- Select all checkboxes except DEBUGlevel in the configuration.
- In the Log facilitylist, select LOCAL0.
- In the Date formatlist, select MMDDYYYY.
- Select Time zoneas GMT.
- Clear the following checkboxes: - TCP logging
- ACL logging
- User configurable log messages
- AppFlow logging
- Large scale NAT logging
- ALG messages logging
- Subscriber logging
- DNS
- SSL interception
- URL filtering
- Content inspection logging
 
- Click Okto create the auditing server.
Bind the created audit policy to the server
- In the NetScaler web interface, select Configuration > System > Auditing > Syslog.
- Click Policiestab.
- In the Namefield, enter a name for the policy.
- In the Serverlist, select the policy from the previous section.
- Click Create.
- Right-click the created auditing policy and select Action > Global bindings.
- Click Add binding.
- In the Policy bindingwindow, do the following: - In the Select policyfield, enter the created audit policy.
- In the Binding detailspane, in the Priorityfield, enter 120as it is the default priority.
- Click Bind.
 
Configure NetScaler SDX
To configure the NetScaler SDX to send logs to the Google Security Operations forwarder, do the following:
- Verify hostname configuration for NetScaler SDX .
- Configure the syslog server .
- Configure the syslog parameters .
Verify hostname configuration for NetScaler SDX
- Sign in to the NetScaler web interface using administrator credentials.
- In the NetScaler web interface, select System > System settings.
- If the Host namefield is empty, enter the hostname. Don't include spaces. If this field is already configured, then no action is required.
- In the Time zonefield, select UTCor GMT.
Configure the syslog server
- In the NetScaler web interface, select System > Notifications > Syslog servers.
- In the Detailspane, click Add.
- In the Create syslog serverwindow, specify values for the following syslog server parameters: - In the Namefield, enter a name.
- In the IP addressfield, enter the Google Security Operations forwarder IP address.
- In the Portfield, port number.
- Select Log levelsas Custom.
- Select all log levels except Debug.
 
- Click Create.
Configure the syslog parameters
- In the NetScaler web interface, select System > Notifications > Syslog servers.
- In the Detailspane, click Syslog parameters.
- In the Configure syslog parameterspage, select Date formatas MMDDYYYYand select Time zoneas GMT.
- Click Ok.
Configure the Google Security Operations forwarder to ingest NetScaler logs
- Select SIEM Settings > Forwarders.
- Click Add new forwarder.
- In the Forwarder namefield, enter a unique name for the forwarder.
- Click Submitand then click Confirm. The forwarder is added and the Add collector configurationwindow appears.
- In the Collector namefield, type a unique name for the collector.
- Select Citrix NetScaleras the Log type.
- In the Collector typefield, select Syslog.
- Configure the following mandatory input parameters: - Protocol: specify the connection protocol that the collector uses to listen to syslog data.
- Address: specify the target IP address or hostname where the collector resides and listens to syslog data.
- Port: specify the target port where the collector resides and listens to syslog data.
 
- Click Submit.
For more information about the Google Security Operations forwarders, see Manage forwarder configurations through the Google Security Operations UI .
If you encounter issues when you create forwarders, contact Google Security Operations support .
Field mapping reference
This parser processes Citrix Netscaler SYSLOG logs in key-value format, extracting JSON-formatted data from the message 
field and enriching the UDM with information from other fields like host.hostname 
and user_agent.original 
after sanitizing them.  It handles cases where the primary message is empty by falling back to the original log message.
UDM mapping table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
|   
AAA trans id | security_result.detection_fields[].value | Value extracted from "AAA trans id" field. | 
|   
Access | security_result.action_details | If "Access" is "Allowed", set security_result.actionto ALLOW. If "Access" is "Denied", setsecurity_result.actionto BLOCK. | 
|   
applicationName | principal.application | Value extracted from "applicationName" field. | 
|   
Browser_type | network.http.user_agent | Value extracted from "Browser_type" field. | 
|   
ClientIP | principal.ip,principal.asset.ip | Value extracted from "ClientIP" field. | 
|   
ClientPort | principal.port | Value extracted from "ClientPort" field. | 
|   
client_cookie | additional.fields[].value.string_value | Value extracted from "client_cookie" field. | 
|   
Command | target.process.command_line | Value extracted from "Command" field. | 
|   
connectionId | security_result.detection_fields[].value | Value extracted from "connectionId" field. | 
|   
Destination | target.ip,target.asset.ip | Value extracted from "Destination" field. | 
|   
Destination | target.ip,target.asset.ip | Value extracted from "Destination" field. | 
|   
device_serial_number | target.asset_id | target.asset_idis set to "device_serial_number: | 
|   
Duration | network.session_duration.seconds | Duration is converted to seconds and mapped. | 
|   
End Time | security_result.detection_fields[].value | Value extracted from "End Time" field. | 
|   
Failure_reason | metadata.description | Value extracted from "Failure_reason" field. | 
|   
flags | additional.fields[].value.string_value | Value extracted from "flags" field. | 
|   
Group(s) | target.group.group_display_name | Value extracted from "Group(s)" field. | 
|   
Reason | metadata.description | Value extracted from "Reason" field. | 
|   
Remote_ip | target.ip,target.asset.ip | Value extracted from "Remote_ip" field. | 
|   
ServerIP | target.ip,target.asset.ip | Value extracted from "ServerIP" field. | 
|   
ServerPort | target.port | Value extracted from "ServerPort" field. | 
|   
session_guid | metadata.product_log_id | Value extracted from "session_guid" field. | 
|   
SessionId | network.session_id | Value extracted from "SessionId" field. | 
|   
Source | principal.ip,principal.asset.ip | Value extracted from "Source" field. | 
|   
Start Time | security_result.detection_fields[].value | Value extracted from "Start Time" field. | 
|   
startTime | security_result.detection_fields[].value | Value extracted from "startTime" field. | 
|   
Status | security_result.description | Value extracted from "Status" field. | 
|   
Total_bytes_recv | network.received_bytes | Value extracted from "Total_bytes_recv" field. | 
|   
Total_bytes_send | network.sent_bytes | Value extracted from "Total_bytes_send" field. | 
|   
Total_bytes_wire_recv | security_result.detection_fields[].value | Value extracted from "Total_bytes_wire_recv" field. | 
|   
Total_bytes_wire_send | security_result.detection_fields[].value | Value extracted from "Total_bytes_wire_send" field. | 
|   
User | principal.user.userid | Value extracted from "User" field. | 
|   
VserverServiceIP | target.ip,target.asset.ip | Value extracted from "VserverServiceIP" field. | 
|   
VserverServicePort | target.port | Value extracted from "VserverServicePort" field. Hardcoded to "CITRIX". Hardcoded to "NETSCALER". Hardcoded to "CITRIX_NETSCALER". Determined by the parser based on the product_event_type.  Examples: NETWORK_CONNECTION, USER_LOGIN, USER_LOGOUT, USER_STATS, STATUS_UPDATE, USER_UNCATEGORIZED, GENERIC_EVENT. Value extracted from the log prefix (e.g., CONN_DELINK, CONN_TERMINATE, OTHERCONN_DELINK, etc.).  A short description of the event, sometimes derived from other fields like "Reason" or "Failure_reason". Calculated from the date and time fields in the log entry.  The parser handles various formats and timezones. Extracted from the "username:domainname" field, taking the part after the colon. Hardcoded to TCP for events with "TCP" in metadata.product_event_type. Set to ALLOW for successful logins and commands, BLOCK for failed logins and blocked resource access.  Derived from fields like "Status", "Failure_reason", and "Access". Set to USERNAME_PASSWORD when username and password are used for authentication (inferred from certain log messages). Set to VPN for VPN related login/logout events. Parsed from thenetwork.http.user_agentfield using a user-agent parsing library. | 
Need more help? Get answers from Community members and Google SecOps professionals.

