Raccogliere i log di Citrix NetScaler
Questo documento spiega come importare i log di Citrix NetScaler in Google Security Operations utilizzando Bindplane.
L'analizzatore sintattico estrae i campi dai log formattati in formato syslog e chiave-valore di Citrix NetScaler. Utilizza grok e/o kv per analizzare il messaggio di log e quindi mappa questi valori al modello UDM (Unified Data Model). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host Linux con
systemd - Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane.
- Accesso con privilegi all'interfaccia web di Citrix NetScaler
Recuperare il file di autenticazione importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri Prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CITRIX_NETSCALER' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
udplog: utilizzaudplogper syslog UDP otcplogper syslog TCP0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0per ascoltare su tutte le interfacce)514: numero di porta su cui ascoltare (porta syslog standard)
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione importazione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: ID cliente dalla sezione Recupera ID clienteendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per un elenco completo, vedi Endpoint regionali.
- Stati Uniti:
log_type: Tipo di log esattamente come appare in Chronicle (CITRIX_NETSCALER)
Salvare il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configura l'inoltro di Syslog su Citrix NetScaler
- Accedi all'interfaccia web Citrix NetScaler (NSIP).
- Vai a Sistema > Audit > Syslog.
- Fai clic sulla scheda Server.
- Fai clic su Aggiungi per creare un nuovo server syslog.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio,
Google-SecOps-Bindplane). - IP server: inserisci l'indirizzo IP dell'host dell'agente Bindplane.
- Porta: inserisci
514. - Livello di log: seleziona tutti i livelli applicabili:
- TUTTO (consigliato per la registrazione completa)
- Struttura: seleziona LOCAL0 (o la struttura che preferisci).
- Formato data: seleziona MMGGAAAA.
- Fuso orario: seleziona GMT_TIME (UTC consigliato).
- Logging TCP: seleziona NESSUNO (per UDP).
- Log Facility (Strumento di logging): seleziona LOCAL0.
- Nome: inserisci un nome descrittivo (ad esempio,
- Fai clic su Crea.
- Vai alla scheda Norme.
- Fai clic su Aggiungi per creare una nuova policy di controllo syslog.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio,
Google-SecOps-Policy). - Server: seleziona il server syslog creato in precedenza.
- Nome: inserisci un nome descrittivo (ad esempio,
- Fai clic su Crea.
- Associa il criterio a livello globale:
- Vai a Sistema > Controllo.
- Fai clic su Global Bindings (Associazioni globali) in Syslog Audit Policies (Norme di controllo Syslog).
- Fai clic su Aggiungi associazione.
- Seleziona la policy creata in precedenza.
- Fai clic su Associa.
- Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.
In alternativa, configura tramite CLI:
add audit syslogAction Google-SecOps-Bindplane BINDPLANE_IP -serverPort 514 -logLevel ALL -dateFormat MMDDYYYY -timeZone GMT_TIME
add audit syslogPolicy Google-SecOps-Policy ns_true Google-SecOps-Bindplane
bind audit syslogGlobal -policyName Google-SecOps-Policy -priority 100
- Sostituisci
BINDPLANE_IPcon l'indirizzo IP dell'host dell'agente Bindplane.
Tabella di mappatura UDM
| Campo log | Mappatura UDM |
|---|---|
aaa_info_flags |
additional.fields |
aaa_trans_id |
security_result.detection.fields |
aaad_flags |
additional.fields |
aaad_resp |
additional.fields |
aaaFlags |
additional.fields |
aaaFlags2 |
additional.fields |
act |
securtiy_result.action_details,security_result.action |
action |
security_result.action |
ADM_User |
additional.fields |
allowed_interface |
security_result.detection.fields |
applicationname |
target.application |
auth_type |
additional.fields |
authActionLen |
security_result.detection_fields |
AuthAgent |
additional.fields |
AuthDuration |
network.session_duration.seconds |
authnvs |
additional.fields |
authorizationStatus |
security_result.detection.fields |
AuthStage |
additional.fields |
Authtype |
additional.fields |
C |
principal.location.country_or_region |
caseId |
additional.fields |
cfg_limit |
additional.fields |
cgp_tag |
sec_result.detection_fields |
channel_id_X |
additional.fields |
channel_id_X_val |
additional.fields |
channel_update_begin |
additional.fields |
channel_update_end |
additional.fields |
cipher_suite |
network.tls.cipher |
client_fip |
target.ip target.asset.ip |
client_fport |
target.port |
client_ip |
principal.ip,principal.asset.ip |
client_port |
principal.port |
Client_security_expression |
additional.fields |
client_type |
additional.fields |
client_version |
network.tls.version |
client.nat.ip |
principal.nat_ip,principal.asset.nat_ip |
clientside_jitter |
additional.fields |
clientside_packet_retransmits |
additional.fields |
clientside_rtt |
additional.fields |
clientside_rxbytes |
network.sent_bytes |
clientside_txbytes |
network.received_bytes |
ClientVersion |
network.tls.version_protocol |
CN |
principal.resource.attribute.labels |
cn1 |
additional.fields |
cn2 |
additional.fields |
code |
additional.fields |
commandExecutionStatus |
security_result.action_details |
Compression_ratio_recv |
additional.fields |
Compression_ratio_send |
additional.fields |
configurationCmd |
security_result.detection.fields |
connectionId |
network.session_id |
copied_nsb |
sec_result.detection_fields |
core_id |
additional.fields |
core_refmask |
additional.fields |
cs1 |
additional.fields |
cs2 |
additional.fields |
cs4 |
additional.fields |
cs5 |
additional.fields |
cs6 |
additional.fields |
CSappid |
additional.fields |
CSAppname |
- |
csg_flags |
additional.fields |
ctx_flags |
additional.fields |
cur_attempts |
additional.fields |
CurfactorPolname |
additional.fields |
customername |
additional.fields |
days_for_pwd_exp |
additional.fields |
days_for_pwd_exp_STR |
additional.fields |
delinkTime |
additional.fields |
Denied_by_policy |
security_result.rule_name |
desc |
metadata.description |
destination.ip |
target.ip,target.asset.ip |
destination.port |
target.resource.attribute.labels |
device_event_class_id |
metadata.product_event_type |
device_version |
metadata.product_version |
Deviceid |
target.resource.product_object_id |
Devicetype |
additional.fields |
dht_delete_status |
additional.fields |
diagnostic_info |
additional.fields |
digestSignatureAlgorithm |
security_result.detection_fields |
dns_additional_count |
additional.fields |
dns_answer_count |
additional.fields |
dns_authority_count |
additional.fields |
dns_flags |
additional.fields |
dns_flags_raw |
network.dns.recursion_desired |
dns_flags_raw |
network.dns.recursion_available |
dns_id |
network.dns.id |
dns_question_count |
additional.fields |
dns_question_name |
network.dns.question.name |
domain |
security_result.detection.fields,additional.fields |
domain |
target.administrative_domain |
ecs_version |
additional.fields |
encrypt_status |
security_result.detection_fields |
end_time |
additional.fields |
End_time |
additional.fields |
entityName |
target.resource.name |
Error Code |
additional.fields |
event_id |
metadata.product_log_id |
event_name |
metadata.product_event_type |
event_type |
sec_result.summary |
expired_refmask |
additional.fields |
factor |
security_result.detection.fields |
flags |
additional.fields |
flags2 |
additional.fields |
flags3 |
additional.fields |
flags4 |
additional.fields |
func |
security_result.detection_fields |
geolocation |
location.country_region |
Group(s) |
target.user.group_identifiers |
Group(s) |
target.user.group.identifiers |
handshake_time |
network.session_duration.seconds |
HandshakeTime |
additional.fields |
host_hostname |
principal.hostname |
host_ip |
principal.ip principal.asset.ip |
host.name |
target.hostname,target.asset.hostname |
hostname |
intermediary.hostname,intermediary.asset.hostname |
hostname |
target.hostname,target.asset.hostname |
hostname_1 |
target.hostname,target.asset.hostname |
http_method |
network.http.method |
Http_resources_accessed |
security_result.detection.fields |
http_uri |
target.url |
HTTPS |
network.application_protocol |
ica_conn_owner_refmask |
sec_result.detection_fields |
ica_rtt |
additional.fields |
ica_uuid |
network.session_id |
ICAUUID |
network.session_id |
id |
metadata.id |
init_icamode_homepage |
additional.fields |
inter_hostname |
intermediary.hostname |
interfaceKind |
security_result.detection.fields |
ip |
intermediary.asset.ip |
ip_x |
principal.ip principal.asset.ip |
ipaddress |
target.ip,target.asset.ip |
is_post |
additional.fields |
IssuerName |
network.tls.server.certificate.issuer |
L |
principal.location.city |
last_contact |
additional.fields |
loc |
target.url |
localdate |
additional.fields |
lock_duration |
additional.fields |
log_action |
sec_result.detection_fields |
log_action |
security_result.detection.fields |
log_category |
additional.fields |
log_data |
additional.fields |
log_format |
additional.fields |
log_timestamp |
additional.fields |
log_type |
additional.fields |
log.syslog.priority |
additional.fields |
login_count |
sec_result.detection_fields |
login_count |
security_result.detection_fields |
LogoutMethod |
additional.fields |
max_attempts |
additional.fields |
message_content |
security_result.summary |
message_id |
metadata.product_log_id |
message_status_code |
additional.fields |
method |
network.http.method |
monitored_resource |
additional.fields |
msg |
metadata.description |
msi_client_cookie |
additional.fields |
msticks |
additional.fields |
Nat_ip |
additional.fields,principal.nat_ip,principal.asset.nat_ip(se Nat_ip non è un indirizzo IP, si trova in additional.fields). |
netscaler_principal_ip_context |
principal.resource.attribute.labels |
netscaler_tag |
intermediary.asset.product_object_id |
netscaler_target_ip_context |
target.resource.attribute.labels |
new_webview |
additional.fields |
newWebview |
additional.fields |
NonHttp_services_accessed |
security_result.detection.fields |
nsPartitionName |
additional.fields |
on_port |
additional.fields |
Organization |
principal.resource.attribute.labels |
OU |
principal.resource.attribute.labels |
owner_from |
additional.fields |
owner_id |
additional.fields |
pcb_devno |
additional.fields |
pcbdevno |
additional.fields |
Policyname |
security_result.rule_name |
port |
principal.port |
port_details |
principal.port |
prin_ip |
principal.ip principal.asset.ip |
prin_user |
principal.user.userid |
principal_ip |
principal.ip,principal.asset.ip |
principal_port |
principal.port |
prod_event_type |
metadata.product_event_type |
protocol |
network.ip_protocol |
protocol_feature |
security_result.detection.fields |
ProtocolVersion |
network.tls.protocol_version |
pwdlen |
additional.fields |
pwdlen2 |
additional.fields |
q_flags |
additional.fields |
reason_val |
security_result.description |
receiver_version |
additional.fields |
record_type |
network.dns.question.type |
refmask |
additional.fields |
remote_ip |
principal.ip principal.asset.ip |
remote_port |
principal.port |
request |
target.url |
ReqURL |
additional.fields |
resource_cmd |
target.resource.name |
resource_name |
principal.resource.name |
response |
additional.fields |
response_code |
additional.fields |
rule_id |
security_result.rule.id |
rule_name |
security_result.rule_name |
SerialNumber |
network.tls.server.certificate.serial |
server_authenticated |
additional.fields |
serverside_jitter |
additional.fields |
serverside_packet_retransmits |
additional.fields |
serverside_rtt |
additional.fields |
service_name |
principal.applications |
sess_flags2: |
additional.fields |
sess_seq |
network.session_id |
sessFlags2 |
additional.fields |
Session |
additional.fields |
session_cookie |
security_result.detection_fields |
session_guid |
network.session_id |
session_id_label |
network.session_id |
session_setup_time |
additional.fields |
session_type |
sec_result.description |
SessionId |
network.session_id |
skip_code |
additional.fields |
source_file |
additional.fields |
source_hostname |
principal.hostname,principal.asset.hostname |
source_line |
additional.fields |
source.ip |
principal.ip,principal.asset.ip |
source.port |
principal.resource.attribute.labels |
spcb_id |
security_result.detecrion.fields |
SPCBId |
sec_result.detection_fields |
spt |
principal.port |
src |
principal.ip principal.asset.ip |
src_hostname |
principal.hostname principal.asset.hostname |
src_ip |
principal.ip principal.asset.ip |
src_ip1 |
src.ip,src.asset.ip |
src_port |
principal.port |
ssid |
network.session_id |
SSLVPN_client_type |
additional.fields |
SSO |
additional.fields |
sso |
additional.fields |
sso_auth_type |
additional.fields |
sso_flags |
security_result.detection_fields |
sso_state |
additional.fields |
SSOduration |
additional.fields |
SSOurl |
additional.fields |
ssoUsername |
additional.fields |
ssoUsername2 |
additional.fields |
ST |
principal.location.state |
sta_port |
additional.fields |
sta_ticket |
additional.fields |
start_time |
additional.fields |
Start_time |
additional.fields |
State |
security_result.action_details |
state |
additional.fields |
state_value |
additional.fields |
StatusCode |
additional.fields |
SubjectName |
network.tls.client.certificate.subject |
summ |
security_result.summary |
summary |
security_result.summary |
sysCmdPolLen |
security_result.detection.fields |
syslog_priority |
additional.fields |
tags |
additional.fields |
tar_ip |
target.ip target.asset.ip |
tar_port |
target.port |
target_id |
target.resource.id |
target_port |
target.port |
TCP |
network.ip_protocol |
timeout_ms |
additional.fields |
timestamp |
metadata.event_timestamp |
Total_bytes_send |
network.sent_bytes |
Total_compressedbytes_recv |
additional.fields |
Total_compressedbytes_send |
additional.fields |
Total_policies_allowed |
security_result.detection.fields |
Total_policies_denied |
security_result.detection.fields |
Total_TCP_connections |
security_result.detection.fields |
Total_UDP_flows |
security_result.detection.fields |
track_flags |
additional.fields |
trans_id |
- |
tt |
metadata.event_timestamp |
User |
principal.user.userid |
user_agent.original |
network.http.user_agent |
user_email |
principal.user.email_addresses |
user_id |
principal.user.userid |
user.domain |
target.administrative_domain |
user.name |
principal.user.user_display_name |
userids |
target.user.userid |
ValidFrom |
network.tls.server.certificate.not_before |
ValidTo |
network.tls.server.certificate.not_after |
version |
additional.fields |
VPNexportState |
additional.fields |
Vport |
target.port |
Vserver Timestamp |
additional.fields |
vserver_id |
target.resource.product_object_id |
Vserver_ip |
target.ip,target.asset.ip |
vserver_port |
target.port |
Vserver_port |
target.port |
vserver_timestamp |
additional.fields |
vserver.ip |
target.ip,target.asset.ip |
wirep |
additional.fields |
wirep_name |
additional.fields |
wirep_ref_cnt |
additional.fields |
Riferimento per le differenze tra le mappature UDM
Il 3 febbraio 2026, Google SecOps ha rilasciato una nuova versione del parser NetScaler, che include modifiche significative al mapping dei campi di log NetScaler ai campi UDM e modifiche al mapping dei tipi di eventi.
Differenza tra le mappature dei campi dei log
La tabella seguente elenca le differenze di mappatura per i campi di log-to-UDM di NetScaler esposti prima del 3 febbraio 2026 e successivamente (elencati rispettivamente nelle colonne Mappatura precedente e Mappatura attuale):
| Campo log | Mappatura precedente | Mappatura attuale |
|---|---|---|
act |
securit_.result.detetction_fields |
securtiy_result.action_details,security_result.action |
client_ip |
additional.fields |
principal.ip,principal.asset.ip |
ClientVersion |
network.tls.version |
network.tls.version_protocol |
connectionId |
security_result.detection_fields |
network.session_id |
CSAppname |
- |
- |
domain |
target.user.administrative_domain |
security_result.detection.fields,additional.fields |
end_time |
security_result.detection.fields security_result.last_discovered_time |
additional.fields |
event_id |
additional.fields |
metadata.product_log_id |
geolocation |
location.city |
location.country_region |
Group(s) |
target.user.group_display_name |
target.user.group_identifiers |
HandshakeTime |
network.session_duration.seconds |
additional.fields |
host.name |
intermediary.hostname |
target.hostname,target.asset.hostname |
hostname |
target.hostname,target.asset.hostname |
intermediary.hostname,intermediary.asset.hostname |
hostname |
principal.hostname,principal.asset.hostname |
target.hostname,target.asset.hostname |
ipaddress |
principal.ip,principal.asset.ip |
target.ip,target.asset.ip |
Nat_ip |
principal.ip,principal.asset.ip |
principal.nat_ip,principal.nat_ip |
port_details |
principal.labels |
principal.port |
principal_ip |
target.ip,target.asset.ip |
principal.ip,principal.asset.ip |
request |
security_result.summary |
target.url |
sess_seq |
additional.fields |
network.session_id |
session_guid |
metadata.product_log_id |
network.session_id |
source_hostname |
target.hostname,target.asset.hostname |
principal.hostname,principal.asset.hostname |
spcb_id |
additional.fields |
security_result.detecrion.fields |
ssid |
additional.fields |
network.session_id |
start_time |
security_result.detection.fields security_result.first_discovered_time |
additional.fields |
SubjectName |
principal.resource.attribute.labels |
network.tls.client.certificate.subject |
summary |
metadata.descritption |
security_result.summary |
target_port |
principal.port |
target.port |
trans_id |
security_result.detection.fields |
- |
user_id |
target.user.userid |
principal.user.userid |
Differenza tra le mappature dei tipi di eventi
La tabella seguente elenca la differenza per la gestione dei tipi di eventi NetScaler prima del 3 febbraio 2026 e successivamente (elencati rispettivamente nelle colonne Old event_type e Current event_type):
| Old event_type | Current event_type | Motivo |
|---|---|---|
NETWORK_CONNECTION |
NETWORK_DNS |
Se message_type è DNS_QUERY o denominato quando has_network_dns è true. |
NETWORK_CONNECTION |
NETWORK_HTTP |
Quando il campo message_type è SSLVPN HTTPREQUEST. |
STATUS_UPDATE |
NETWORK_CONNECTION |
Mappato a un tipo di evento specifico e appropriato. |
STATUS_UPDATE |
USER_RESOURCE_UPDATE_CONTENT |
Quando message_type è SNMP TRAP_SENT e has_target_resource è true, questo viene mappato a un tipo di evento specifico appropriato. |
STATUS_UPDATE |
USER_UNCATEGORIZED |
Mappato a un tipo di evento specifico e appropriato quando è presente il principal userid. |
USER_RESOURCE_ACCESS |
NETWORK_HTTP |
Quando message_type è SSLVPN HTTPREQUEST |
USER_STATS |
GENERIC_EVENT |
USER_STATS è deprecato, pertanto viene mappato a un tipo di evento specifico e appropriato. |
USER_STATS |
NETWORK_CONNECTION |
USER_STATS è deprecato, pertanto viene mappato a un tipo di evento specifico e appropriato. |
USER_STATS |
USER_LOGIN |
USER_STATS è deprecato, pertanto viene mappato a un tipo di evento specifico e appropriato. |
USER_STATS |
USER_LOGOUT |
USER_STATS è deprecato, pertanto viene mappato a un tipo di evento specifico appropriato quando message_type è LOGOUT. |
USER_UNCATEGORIZED |
GENERIC_EVENT |
Il log non contiene alcun campo macchina principale da mappare. |
USER_UNCATEGORIZED |
NETWORK_CONNECTION |
Mappato a un tipo di evento specifico e appropriato. |
USER_UNCATEGORIZED |
USER_LOGIN |
Mappato a un tipo di evento specifico e appropriato. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.