Introducció
Què és lippycat?
lippycat és una eina de captura i anàlisi del trànsit de xarxa creada per a infraestructures modernes. Captura paquets d’interfícies de xarxa o de fitxers PCAP i ofereix modes CLI i TUI (interfície d’usuari de terminal) per al monitoratge i l’anàlisi en temps real.
Mentre que eines tradicionals com tcpdump ofereixen bolcats de paquets en brut i Wireshark necessita una interfície gràfica, lippycat omple aquest buit: anàlisi que té en compte els protocols amb la comoditat d’una interfície de terminal, i captura distribuïda quan una sola màquina no és suficient.
Casos d’ús
Monitoratge de xarxa Captureu i analitzeu el trànsit de qualsevol interfície. Filtreu per protocol, amfitrió, port o expressions BPF personalitzades. Escriviu fitxers PCAP per a l’anàlisi fora de línia.
Anàlisi de VoIP Feu el seguiment de les trucades SIP d’extrem a extrem, correlacioneu fluxos RTP i escriviu fitxers PCAP per trucada. Superviseu les mètriques de qualitat de les trucades i detecteu problemes en temps real.
Monitoratge de seguretat Inspeccioneu les negociacions TLS, detecteu anomalies dels protocols i captureu trànsit per a l’anàlisi forense. Admet la desencapsulació ESP-NULL per inspeccionar túnels xifrats.
Captura distribuïda Desplegueu nodes Hunter lleugers en diversos segments de xarxa i agregueu el trànsit en un processador central. Superviseu-ho tot des d’una única TUI.
Comparació amb eines semblants
| Funció | tcpdump | Wireshark | tshark | lippycat |
|---|---|---|---|---|
| Captura CLI | Sí | No | Sí | Sí |
| TUI interactiva | No | GUI | No | Sí |
| Anàlisi de protocols | Bàsica | Àmplia | Àmplia | Especialitzada* |
| Captura distribuïda | No | No | No | Sí |
| PCAP VoIP per trucada | No | No | No | Sí |
| Acceleració GPU | No | No | No | Sí |
| Monitoratge remot | No | No | No | Sí |
lippycat se centra en els protocols DNS, TLS, HTTP, correu electrònic, RADIUS i VoIP, amb una anàlisi detallada de cadascun.
Quan convé utilitzar lippycat en lloc d’altres opcions:
- Necessiteu captura distribuïda en diversos segments de xarxa
- Voleu monitoratge interactiu al terminal (sense interfície gràfica)
- Analitzeu trànsit VoIP i voleu fitxers PCAP per trucada
- Necessiteu desplegar agents de captura en servidors sense interfície gràfica
Quan convé utilitzar altres opcions:
- Necessiteu analitzar protocols poc habituals o propietaris (Wireshark)
- Necessiteu un bolcat ràpid de paquets amb una sola línia d’ordres (tcpdump)
- Necessiteu estadístiques àmplies de protocols (tshark)
Visió general de les ordres
lippycat segueix un patró coherent [verb] [object]:
lc [verb] [object] [flags]
| Ordre | Finalitat | Analogia |
|---|---|---|
lc sniff | Captura de paquets CLI | Com tcpdump/tshark |
lc watch | TUI interactiva | Com Wireshark (en un terminal) |
lc hunt | Captura distribuïda a la perifèria | Agent de captura |
lc process | Agregació central | Servidor de recollida |
lc tap | Captura i processament autònoms | hunt i process en un |
lc list | Llistar recursos (interfícies, etc.) | |
lc show | Mostrar diagnòstics | |
lc set | Crear o actualitzar recursos (filtres) | |
lc rm | Eliminar recursos (filtres) |
L’itinerari d’aprenentatge d’aquest manual segueix una complexitat progressiva:
graph LR
sniff["lc sniff"]
watch["lc watch"]
hunt["lc hunt"]
process["lc process"]
tap["lc tap"]
remote["lc watch remote"]
sniff --> watch --> hunt --> process --> tap --> remote
subgraph Local
sniff
watch
end
subgraph Distributed
hunt
process
tap
remote
end
Cada ordre es basa en conceptes de l’anterior; per això, llegir el manual en ordre facilita l’aprenentatge.
Conceptes bàsics
Aquest capítol tracta els conceptes fonamentals que cal entendre abans de capturar trànsit amb lippycat. Si ja coneixeu la captura de paquets (per exemple, per experiència amb tcpdump o Wireshark), podeu llegir-lo per sobre i continuar amb Instal·lació i configuració.
Paquets i protocols
El trànsit de xarxa es compon de paquets, unitats de dades discretes que s’envien entre amfitrions. Cada paquet conté capes de protocol imbricades:
Ethernet → IP → TCP/UDP → Application (HTTP, SIP, DNS, ...)
lippycat captura paquets a la capa d’enllaç i analitza cada capa de protocol, extraient informació significativa segons el mode de protocol que utilitzeu.
Protocols que analitza lippycat
| Protocol | Subordre | Què captura |
|---|---|---|
| DNS | lc sniff dns | Consultes, respostes i tipus de registre |
| TLS | lc sniff tls | Negociacions, certificats i conjunts de xifratge |
| HTTP | lc sniff http | Peticions, respostes i capçaleres |
| Correu electrònic | lc sniff email | Sessions SMTP/IMAP/POP3 |
| RADIUS | lc sniff radius | Missatges d’autenticació/comptabilització i associació de peticions |
| VoIP | lc sniff voip | Senyalització SIP i fluxos multimèdia RTP |
Interfícies de xarxa
Una interfície de xarxa és el punt on la vostra màquina es connecta a una xarxa. Exemples habituals:
eth0/ens33— Ethernet per cablewlan0— Sense fillo— Bucle local (només trànsit local)any— Captura simultània en totes les interfícies
Per veure les interfícies disponibles:
lc list interfaces
Permisos de captura
La captura de paquets requereix privilegis elevats perquè implica llegir tot el trànsit d’una interfície, i no només el destinat a la vostra aplicació.
Opció 1: executar com a root
sudo lc sniff -i eth0
Opció 2: concedir una capacitat (recomanada per a producció)
sudo setcap cap_net_raw+ep /usr/local/bin/lc
Això concedeix únicament la capacitat específica necessària, d’acord amb el principi de privilegi mínim.
Filtres BPF
Els Berkeley Packet Filters (BPF) permeten indicar al nucli quins paquets ha de capturar, reduint la càrrega de CPU mitjançant el filtratge al nivell més baix, abans que els paquets arribin a l’espai d’usuari.
Capturar només trànsit DNS:
lc sniff -i eth0 -f "port 53"
Capturar només trànsit cap a un amfitrió concret o des d’aquest:
lc sniff -i eth0 -f "host 10.0.0.1"
Combinar filtres:
lc sniff -i eth0 -f "host 10.0.0.1 and port 5060"
Els filtres BPF utilitzen una sintaxi estàndard compartida amb tcpdump i Wireshark. Consulteu l’Apèndix C: referència de filtres BPF per veure patrons habituals.
Format PCAP
PCAP (Packet Capture) és el format de fitxer estàndard per emmagatzemar paquets capturats. Els fitxers escrits per lippycat es poden obrir amb Wireshark, analitzar amb tshark o reproduir amb tcpreplay.
Escriure els paquets capturats en un fitxer:
lc sniff -i eth0 -w capture.pcap
Llegir un fitxer PCAP a la TUI:
lc watch file capture.pcap
lippycat admet diversos modes d’escriptura de PCAP:
- PCAP unificat — Tots els paquets en un fitxer
- PCAP per trucada — Un fitxer per trucada VoIP (SIP Call-ID)
- PCAP amb rotació automàtica — Fitxer nou en arribar a un llindar de mida o temps
Anàlisi de protocols
Més enllà de la simple captura de paquets, lippycat fa anàlisi de protocols: entén l’estructura i la semàntica dels protocols que supervisa:
- DNS: analitza els tipus de consulta, els codis de resposta i les dades dels registres
- TLS: extreu SNI, cadenes de certificats, negociació de xifratge i empremtes JA3/JA3S/JA4
- VoIP: segueix els diàlegs SIP, correlaciona fluxos RTP i calcula mètriques de qualitat de les trucades
- HTTP: reconstrueix parelles de petició/resposta dels fluxos TCP (amb desxifratge TLS opcional)
- Correu electrònic: segueix sessions SMTP, IMAP i POP3 amb correlació de remitent/destinatari
- RADIUS: descodifica missatges UDP visibles d’autenticació/comptabilització i associa respostes amb peticions
Aquesta anàlisi es fa en temps real durant la captura i es mostra tant al mode CLI com al mode TUI.
El model distribuït
lippycat pot funcionar com un sistema distribuït per capturar trànsit en diversos segments de xarxa:
graph LR
h1["Hunter<br>(edge)"]
h2["Hunter<br>(edge)"]
p["Processor<br>(central)"]
out["TUI / PCAP / Analysis"]
h1 -->|gRPC| p
h2 -->|gRPC| p
p --> out
- Els nodes Hunter capturen paquets a la perifèria de la xarxa i els transmeten mitjançant gRPC
- Els processadors reben, agreguen i analitzen paquets de diversos nodes Hunter
- Tap combina tots dos rols per a desplegaments en una sola màquina
Aquesta arquitectura es tracta detalladament a la Part III: captura distribuïda. De moment, n’hi ha prou amb saber que tots els conceptes de captura local (interfícies, filtres, protocols) també s’apliquen al mode distribuït.
Instal·lació i configuració
Compilació des del codi font
Requisits:
- Go 1.25 o posterior
- Make
- Capçaleres de desenvolupament de libpcap (
libpcap-deva Debian/Ubuntu,libpcap-devela RHEL/Fedora)
Clonar el repositori:
git clone https://github.com/endorses/lippycat.git
Entrar al directori del projecte:
cd lippycat
Crear una compilació de desenvolupament (conjunt complet, amb símbols de depuració):
make build
Alternativament, crear una compilació de publicació optimitzada (sense símbols):
make build-release
Per a una compilació ràpida de desenvolupament sense informació de versió:
make dev
Compilacions especialitzades
lippycat utilitza etiquetes de compilació de Go per crear binaris més petits i especialitzats. Si només necessiteu un subconjunt de funcions:
Compilar totes les variants a bin/:
make binaries
| Objectiu | Binari | Finalitat | Mida aproximada |
|---|---|---|---|
make all | bin/lc | Conjunt complet | 22 MB |
make hunter | bin/lc-hunt | Agent de captura a la perifèria | 18 MB |
make processor | bin/lc-process | Agregació central | 14 MB |
make tap | bin/lc-tap | Captura i processament autònoms | — |
make cli | bin/lc-cli | Només ordres CLI | — |
make tui | bin/lc-tui | Només interfície TUI | — |
Per a la majoria d’usuaris, el conjunt complet (make build) és l’opció més senzilla. Les compilacions especialitzades són útils per a desplegaments de producció en què voleu binaris mínims a cada node.
Acceleració GPU
Per a acceleració GPU amb CUDA (requereix GPU NVIDIA i el conjunt d’eines CUDA):
make build-cuda
Consulteu Optimització del rendiment per obtenir detalls sobre els motors GPU.
Objectius d’instal·lació
Instal·lar a $GOPATH/bin:
make install
Instal·lar per a tot el sistema a /usr/local/bin (requereix sudo):
make install-system
Permisos
La captura de paquets requereix accés a sòcols de xarxa en brut. Teniu dues opcions:
Opció 1: executar amb sudo
L’opció més senzilla per a desenvolupament i proves:
sudo lc sniff -i eth0
Opció 2: capacitats de Linux (recomanada)
Concedir només la capacitat específica necessària:
sudo setcap cap_net_raw+ep $(which lc)
Després d’això, lc pot capturar sense sudo:
lc sniff -i eth0
Nota: la capacitat s’assigna al fitxer binari. Si el torneu a compilar i el sobreescriviu, heu d’assignar-li la capacitat de nou.
Configuració
lippycat cerca un fitxer de configuració YAML en aquestes ubicacions (per ordre de prioritat):
$HOME/.config/lippycat/config.yaml(preferida)$HOME/.config/lippycat.yaml(estàndard XDG)$HOME/.lippycat.yaml(heretada)
Ordre de prioritat (guanya la més alta):
CLI flags > Environment variables > Config file > Defaults
Exemple de configuració:
# PCAP read timeout (ms)
pcap_timeout_ms: 200
# Promiscuous mode
promiscuous: false
# DNS settings
dns:
ports: "53"
track_queries: true
detect_tunneling: true
# VoIP settings
voip:
tcp_performance_mode: balanced
L’arrel del repositori inclou un example-config.yaml complet amb totes les opcions disponibles documentades. Consulteu l’Apèndix B: referència de configuració per veure l’esquema complet.
Variables d’entorn
| Variable | Finalitat |
|---|---|
LIPPYCAT_PRODUCTION | Establiu-lo a true per imposar el xifratge TLS (bloqueja l’opció --insecure) |
Verificació de la instal·lació
Després de la instal·lació, verifiqueu que tot funciona:
Comprovar la versió:
lc version
Llistar les interfícies de xarxa disponibles:
lc list interfaces
Mostrar la configuració actual:
lc show config
Si lc list interfaces mostra les vostres interfícies de xarxa, ja podeu començar a capturar. Continueu amb Captura CLI amb lc sniff.
Captura CLI amb lc sniff
lc sniff és la base de lippycat: una eina CLI de captura de paquets semblant a tcpdump o tshark, amb anàlisi de protocols integrada i compatibilitat amb VoIP.
La vostra primera captura
Selecció d’una interfície
Primer, esbrineu quines interfícies estan disponibles:
lc list interfaces
Això mostra les interfícies de captura amb el tipus, l’estat operatiu i les adreces IP, incloent-hi el bucle local, interfícies VPN/túnel i interfícies inactives. Una indicació de la ruta per defecte, quan està disponible, ajuda a identificar les interfícies de sortida de l’amfitrió. Trieu la interfície connectada a la xarxa que voleu supervisar. Utilitzeu --json per obtenir metadades estructurades o --names per obtenir un nom d’interfície per línia.
Consell: utilitzeu
lc list interfaces --allper incloure ponts reconeguts, enllaços de contenidors/VM i fonts especials de captura ocultes a la vista per defecte. Utilitzeu--checkper provar breument l’accés de captura sense mode promiscu ni lectura de paquets; s’ometen les fonts especials de captura. El llistat per si sol no comprova els permisos.
Captura bàsica
Iniciar la captura en una interfície:
sudo lc sniff -i eth0
La interfície per defecte és any (totes les interfícies). Podeu indicar diverses interfícies separades per comes:
sudo lc sniff -i eth0,eth1
Premeu Ctrl+C per aturar la captura. lippycat mostra un resum dels paquets capturats.
Format de sortida
lc sniff escriu cada paquet capturat a stdout com una línia de JSON. Això facilita passar-lo a jq, grep o altres eines. Canvieu al format de text per obtenir una sortida fàcil de llegir:
sudo lc sniff -i eth0 --format text
Consulteu Treballar amb la sortida JSON per canalitzar, filtrar i desar la sortida de paquets.
Utilitzeu -q (mode silenciós) per suprimir la sortida de paquets i millorar el rendiment quan només necessiteu fitxers PCAP.
Filtratge bàsic
Utilitzeu filtres BPF amb -f / --filter per centrar-vos en trànsit concret (consulteu l’Apèndix C: referència de filtres BPF per veure la sintaxi completa):
Capturar només trànsit DNS:
sudo lc sniff -i eth0 -f "port 53"
Capturar trànsit cap a un amfitrió concret o des d’aquest:
sudo lc sniff -i eth0 -f "host 10.0.0.1"
Capturar només trànsit TCP al port 5060 (SIP):
sudo lc sniff -i eth0 -f "tcp port 5060"
Combinar condicions:
sudo lc sniff -i eth0 -f "host 10.0.0.1 and port 5060"
Mode promiscu
Per defecte, la interfície només captura trànsit destinat a la vostra màquina. Activeu el mode promiscu per veure tot el trànsit del segment:
sudo lc sniff -i eth0 -p
Lectura de fitxers PCAP
Analitzar fitxers PCAP existents en lloc d’interfícies en viu:
lc sniff -r capture.pcap
No calen privilegis elevats per llegir fitxers.
Registres estructurats de protocols
Establiu --log-dir per escriure fitxers de protocols normalitzats tot mantenint la sortida de paquets existent a stdout. Aquestes opcions de l’ordre pare funcionen amb totes les subordres de protocol:
lc sniff http -r capture.pcap --log-dir ./logs --log-streams conn,http,files
El registre està desactivat per defecte. La sortida és TSV d’estil Zeek per defecte, o JSONL amb --log-format json. Les cues són limitades: ateneu els avisos de descart i utilitzeu una aturada ordenada per buidar els buffers als fitxers. Consulteu Registres estructurats de protocols per veure tots els esquemes, les opcions, la rotació, la semàntica de completesa i les indicacions de privadesa.
Treballar amb la sortida JSON
Tots els analitzadors de protocols comparteixen la mateixa estructura de sortida JSON basada en PacketDisplay. Cada paquet té camps comuns (marca de temps, IP i port d’origen/destinació, protocol, longitud) i un objecte opcional de metadades específiques del protocol (VoIPData, DNSData, TLSData, HTTPData, EmailData o RADIUSData).
Separació de stdout i stderr
lippycat segueix les convencions Unix: les dades de paquets van a stdout i els missatges de registre a stderr. Això permet canalitzar les dades de paquets de manera neta sense deixar de veure els registres:
Canalitzar els paquets cap a jq mantenint els registres visibles al terminal:
sudo lc sniff dns -i eth0 | jq '.DNSData.QueryName'
Redirigir els registres a un fitxer i canalitzar els paquets per processar-los:
sudo lc sniff dns -i eth0 2>dns-capture.log | jq '.DNSData.QueryName'
Descartar completament els registres:
sudo lc sniff dns -i eth0 2>/dev/null | jq '.DNSData.QueryName'
Anàlisi entre protocols
Com que tots els protocols comparteixen els mateixos camps bàsics, podeu capturar sense una subordre de protocol i filtrar per metadades específiques de protocol amb jq:
Capturar trànsit general i després filtrar DNS i TLS:
sudo lc sniff -i eth0 2>/dev/null | \
jq -r 'if .DNSData then
"DNS: " + .DNSData.QueryName
elif .TLSData then
"TLS: " + (.TLSData.SNI // "no-sni")
else empty end'
Desament i reproducció
Combineu la sortida JSON amb l’escriptura PCAP per obtenir anàlisi estructurada i fidelitat completa dels paquets:
Escriure PCAP i JSON simultàniament:
sudo lc sniff dns -i eth0 -w dns-traffic.pcap 2>/dev/null > dns-analysis.jsonl
Reproduir el PCAP més tard amb un analitzador de protocol diferent:
lc sniff tls -r dns-traffic.pcap
El fitxer PCAP conté els paquets en brut i es pot tornar a analitzar amb qualsevol subordre de protocol o obrir amb Wireshark.
Modes de protocol
lc sniff té subordres específiques de protocol que permeten una anàlisi detallada. Cadascuna afegeix filtratge, correlació i sortida adaptats al protocol.
Anàlisi de DNS
sudo lc sniff dns -i eth0
Captura consultes i respostes DNS amb correlació de consulta/resposta i seguiment del temps de resposta.
Opcions principals:
| Opció | Valor per defecte | Descripció |
|---|---|---|
--domain | — | Filtrar per patró de domini (glob: *.example.com) |
--domains-file | — | Carregar patrons de domini d’un fitxer |
--dns-port | 53 | Ports DNS, separats per comes |
--udp-only | false | Capturar només DNS UDP (omet TCP) |
--track-queries | true | Correlació de consulta/resposta amb RTT |
--detect-tunneling | true | Detecció de túnels DNS mitjançant anàlisi d’entropia |
Inspecció de TLS
sudo lc sniff tls -i eth0
Analitza negociacions TLS sense desxifrar el trànsit. Extreu SNI, detalls de certificats, conjunts de xifratge i empremtes TLS.
Opcions principals:
| Opció | Valor per defecte | Descripció |
|---|---|---|
--sni | — | Filtrar per patró SNI (glob: *.example.com) |
--sni-file | — | Carregar patrons SNI d’un fitxer |
--ja3 | — | Filtrar pel hash de l’empremta JA3 |
--ja3s | — | Filtrar pel hash de l’empremta JA3S |
--ja4 | — | Filtrar per empremta JA4 |
--tls-port | 443 | Ports TLS, separats per comes |
--track-connections | true | Correlació de ClientHello/ServerHello |
Cada opció d’empremta té una variant -file corresponent per a la càrrega massiva des de fitxers.
Captura HTTP
sudo lc sniff http -i eth0
Reconstrueix parelles de petició/resposta HTTP dels fluxos TCP amb mesurament de RTT.
Opcions principals:
| Opció | Valor per defecte | Descripció |
|---|---|---|
--host | — | Filtrar per patró d’amfitrió (glob) |
--path | — | Filtrar per patró de camí URL (glob) |
--method | — | Filtrar per mètodes HTTP (GET,POST) |
--status | — | Filtrar per codis d’estat (404, 4xx, 400-499) |
--user-agent | — | Filtrar per patró User-Agent |
--content-type | — | Filtrar per patró Content-Type |
--capture-body | false | Activar la captura del cos per cercar paraules clau |
--max-body-size | 65536 | Mida màxima del cos en bytes |
--http-port | 80,8080,8000,3000,8888 | Ports HTTP |
--tls-keylog | — | Camí SSLKEYLOGFILE per al desxifratge HTTPS |
--track-requests | true | Correlació de petició/resposta amb RTT |
Cada opció de patró té una variant -file corresponent per a la càrrega massiva (p. ex., --hosts-file, --paths-file). La cerca massiva de paraules clau utilitza l’algoritme Aho-Corasick mitjançant --keywords-file.
Monitoratge de correu electrònic
sudo lc sniff email -i eth0
Captura sessions SMTP, IMAP i POP3 amb seguiment de sessions.
Opcions principals:
| Opció | Valor per defecte | Descripció |
|---|---|---|
--address | — | Filtrar per adreça de correu (remitent O destinatari) |
--sender | — | Filtrar per adreça del remitent (MAIL FROM) |
--recipient | — | Filtrar per adreça del destinatari (RCPT TO) |
--subject | — | Filtrar per patró d’assumpte |
--protocol | all | Protocol: smtp, imap, pop3, all |
--smtp-port | 25,587,465 | Ports SMTP |
--imap-port | 143,993 | Ports IMAP |
--pop3-port | 110,995 | Ports POP3 |
--capture-body | false | Activar la captura del cos |
--track-sessions | true | Seguiment i correlació de sessions |
Autenticació i comptabilització RADIUS
sudo lc sniff radius -i eth0
Captura missatges UDP RADIUS visibles d’autenticació i comptabilització, associa respostes amb peticions observades i elimina els atributs que contenen credencials de la sortida habitual. Quan calgui, restringiu la captura a un compte exacte o a una identitat de línia vinculada al desplegament:
sudo lc sniff radius -i eth0 --radius-username 'alice@example.test'
Opcions principals:
| Opció | Valor per defecte | Descripció |
|---|---|---|
--radius-port | 1812,1813 | Ports UDP RADIUS addicionals |
--radius-username | — | User-Name complet exacte |
--radius-mac | — | Calling-Station-Id exacta en majúscules amb guionets |
--radius-mac-profile | — | Obligatori amb MAC: calling-station-id-uppercase-hyphen-v1 |
--radius-attribute | — | AVP hexadecimal complet; repetiu-lo per a coincidències conjuntives |
--radius-line-profile | — | Font de la identitat de línia: nas-port-id o agent-circuit-id |
--radius-line-id | — | Valor exacte de la identitat de línia |
--radius-transaction-timeout | 30s | Durada de l’associació de petició/resposta |
El capítol de captura RADIUS i POI documenta totes les opcions compartides, la vinculació d’àmbit, els límits d’estat i el lliurament LI opcional.
Anàlisi de VoIP
VoIP és el mode de protocol de lippycat amb més funcions:
Iniciar una captura VoIP bàsica:
sudo lc sniff voip -i eth0
Filtrar per un usuari SIP (s’admeten comodins):
sudo lc sniff voip -i eth0 -u alicent
Utilitzar una coincidència de sufix:
sudo lc sniff voip -i eth0 -u "*456789"
Filtrar diversos usuaris:
sudo lc sniff voip -i eth0 -u "alicent,robb"
Restringir la captura a un port SIP concret:
sudo lc sniff voip -i eth0 -S 5060
Utilitzar un interval de ports RTP personalitzat:
sudo lc sniff voip -i eth0 -R 8000-9000
Opcions principals:
| Opció | Forma curta | Valor per defecte | Descripció |
|---|---|---|---|
--sip-user | -u | — | Usuari SIP/telèfon que cal comparar (comodins, separats per comes) |
--sip-port | -S | — | Ports SIP, separats per comes |
--rtp-port-range | -R | 10000-32768 | Intervals de ports RTP |
--udp-only | -U | false | Mode heretat només UDP; ocult i obsolet |
--tcp-performance-mode | -M | — | Perfil TCP: balanced, throughput, latency, memory |
--gpu-backend | -g | auto | Motor GPU en compilacions CUDA: auto, cuda, opencl, cpu-simd, disabled |
--pcap-grace-period | — | 5s | Període de gràcia abans de tancar els PCAP per trucada |
--esp-null | — | false | Desencapsular ESP mitjançant validació del tràiler/SPI |
--esp-heuristic | — | false | Desencapsular ESP inspeccionant el contingut de la càrrega útil |
--esp-icv-size | — | -1 (automàtic) | Mida ICV en bytes: 0, 8, 12 o 16 |
Desencapsulació ESP-NULL
La desencapsulació ESP està desactivada per defecte: sense --esp-null o --esp-heuristic, els paquets ESP es transmeten intactes i el filtre BPF de VoIP no els admet.
Activeu-la per al trànsit VoIP dins de túnels ESP-NULL (habituals en desplegaments IPsec on el xifratge està desactivat però es manté l’emmarcament ESP):
sudo lc sniff voip -i eth0 --esp-null --esp-icv-size 12
lippycat elimina la capçalera ESP i el tràiler ICV, exposant els paquets UDP/SIP/RTP interns per a l’anàlisi normal. Amb --esp-icv-size -1 (valor per defecte), la mida ICV es detecta automàticament.
--esp-heuristic identifica ESP-NULL inspeccionant el contingut de la càrrega útil en lloc del tràiler ESP. Preferiu --esp-null quan se sap que la SA utilitza xifratge NULL: en SA realment xifrades, l’heurística de contingut pot confondre text xifrat amb trànsit intern.
Sortida de fitxers PCAP
Escriptura de fitxers PCAP
Desar els paquets capturats per a l’anàlisi fora de línia amb -w:
sudo lc sniff -i eth0 -w capture.pcap
El fitxer resultant es pot obrir amb Wireshark, analitzar amb tshark o tornar a llegir amb lc watch file.
Cada subordre de protocol també admet -w:
Per a DNS:
sudo lc sniff dns -i eth0 -w dns-traffic.pcap
Per a VoIP:
sudo lc sniff voip -i eth0 -w voip-traffic.pcap
PCAP per trucada (VoIP)
En mode VoIP, l’opció -w crea automàticament fitxers PCAP separats per trucada, dividits entre senyalització SIP i contingut multimèdia RTP:
sudo lc sniff voip -i eth0 --sip-user alicent -w /var/capture/alicent
Això crea /var/capture/alicent_sip_<callid>.pcap i /var/capture/alicent_rtp_<callid>.pcap.
Per veure funcions més avançades de PCAP per trucada (organització de directoris, patrons de nom de fitxer i accions de finalització), consulteu Agregació central amb lc process i Mode autònom amb lc tap.
Ajust del rendiment
Modes de rendiment TCP
El reassemblatge TCP és necessari per a SIP sobre TCP i HTTP. lippycat ofereix perfils de rendiment preconfigurats mitjançant -M / --tcp-performance-mode:
| Perfil | Pressupost de memòria | Ideal per a |
|---|---|---|
balanced | 100 MB | La majoria de casos d’ús (per defecte) |
throughput | 500 MB | Entorns amb molt trànsit |
latency | 200 MB | Anàlisi en temps real |
memory | 25 MB | Sistemes encastats, poc trànsit |
sudo lc sniff voip -i eth0 -M throughput
Per a un control detallat, es poden ajustar paràmetres TCP individuals (límits de goroutines, mides de buffer, temps d’espera). Consulteu lc sniff voip --help per veure la llista completa.
Restricció de ports
En xarxes amb molt trànsit TCP, utilitzeu restriccions explícites de ports SIP i RTP per centrar la captura tot permetent SIP sobre TCP quan n’hi hagi:
sudo lc sniff voip -i eth0 -S 5060 -R 10000-20000
L’antiga opció VoIP --udp-only encara s’accepta per compatibilitat, però està oculta i és obsoleta perquè pot ometre trànsit SIP TCP.
Acceleració GPU
Traslladar la comparació de patrons dels filtres d’aplicació a CUDA per a captures d’alt cabal:
sudo lc sniff voip -i eth0 -g auto
Les opcions GPU de sniff voip només es registren en compilacions CUDA, com ara binaris compilats amb make build-cuda.
| Motor | Valor de l’opció | Requisits |
|---|---|---|
| CUDA | cuda | GPU NVIDIA i conjunt d’eines CUDA, make build-cuda |
| CPU SIMD | cpu-simd | Compatibilitat amb AVX2 o SSE4.2 |
| Detecció automàtica | auto | Selecciona la millor opció disponible |
Actualment OpenCL no està implementat. El valor s’accepta per compatibilitat de configuració, però es recorre a la comparació amb CPU. L’anàlisi de SIP i l’extracció de Call-ID també es mantenen a la CPU.
Consulteu Optimització del rendiment per veure la configuració GPU i les proves de rendiment.
Injecció en una interfície virtual
Injectar paquets filtrats en una interfície de xarxa virtual perquè altres eines els utilitzin:
sudo lc sniff voip -i eth0 -V --vif-name lc0
Això crea una interfície TAP lc0 des de la qual altres eines (Wireshark, tcpdump) poden capturar, veient només el trànsit filtrat seleccionat per lippycat.
| Opció | Valor per defecte | Descripció |
|---|---|---|
-V / --virtual-interface | false | Activar la interfície virtual |
--vif-name | lc0 | Nom de la interfície |
--vif-type | tap | Tipus: tap (capa 2) o tun (capa 3) |
--vif-startup-delay | 3s | Retard abans d’iniciar la injecció |
--vif-replay-timing | false | Respectar la temporització original dels paquets PCAP |
--vif-buffer-size | 65536 | Mida de la cua d’injecció (paquets) |
--vif-netns | — | Espai de noms de xarxa per a l’aïllament |
--vif-drop-privileges | — | Canviar a aquest usuari després de crear la interfície |
Captura interactiva amb lc watch
lc watch ofereix una interfície d’usuari de terminal (TUI) interactiva per al monitoratge de paquets en temps real. Si lc sniff és com tcpdump, lc watch és com Wireshark, però al vostre terminal.
Mode de captura en viu
Inici de la captura en viu
Iniciar la captura en viu en el mode per defecte:
sudo lc watch
Especificar explícitament el mode en viu:
sudo lc watch live
Capturar en una interfície concreta amb un filtre BPF:
sudo lc watch live -i eth0 -f "port 5060"
Activar el mode promiscu:
sudo lc watch live -i eth0 -p
Opcions principals:
| Opció | Forma curta | Valor per defecte | Descripció |
|---|---|---|---|
--interface | -i | any | Interfícies de xarxa, separades per comes |
--filter | -f | — | Expressió de filtre BPF |
--promiscuous | -p | false | Mode promiscu |
--buffer-size | — | 10000 | Màxim de paquets en memòria |
--max-calls | — | 5000 | Màxim de trucades VoIP en memòria |
--enable-gpu | — | false | Activar l’anàlisi VoIP accelerada amb GPU |
--gpu-backend | -g | auto | Motor GPU: auto, cuda, opencl, cpu-simd |
--gpu-batch-size | — | 100 | Mida del lot per al processament GPU |
--debug-log | — | — | Escriure registres de depuració en un fitxer |
Disposició de la TUI
La interfície s’organitza en cinc pestanyes:
| Pestanya | Drecera | Finalitat |
|---|---|---|
| Capture | Alt+1 | Paquets, trucades, consultes DNS, correu electrònic i trànsit HTTP |
| Nodes | Alt+2 | Gestió de nodes Hunter/processador |
| Statistics | Alt+3 | Distribució de protocols i anàlisi del trànsit |
| Settings | Alt+4 | Configuració de captura |
| Help | Alt+5 o ? | Dreceres de teclat i fluxos de treball cercables |
Dreceres de teclat globals
Funcionen en qualsevol pestanya:
| Tecla | Acció |
|---|---|
Space | Pausar/reprendre la captura |
p | Obrir el selector de protocol |
Tab / Shift+Tab | Pestanya següent / anterior |
De Alt+1 a Alt+5 | Anar a una pestanya |
? | Anar a la pestanya Help |
q / Ctrl+C | Sortir |
Navegació a la pestanya Capture
La pestanya Capture és la vista principal. Navegueu amb tecles d’estil vim:
| Tecla | Acció |
|---|---|
j / ↓ | Desplaçar avall |
k / ↑ | Desplaçar amunt |
g / Home | Anar al primer paquet |
G / End | Anar a l’últim paquet |
PgUp / PgDn | Pàgina amunt / avall |
h / ← | Donar el focus al panell esquerre (llista de paquets) |
l / → | Donar el focus al panell dret (detalls/hex) |
d | Mostrar/amagar el panell de detalls |
t | Alternar la visualització del temps (rellotge / relatiu) |
v | Alternar el mode de vista (paquets / específic de protocol) |
x | Buidar/eliminar tots els paquets |
w | Desar els paquets en PCAP |
Filtratge a la TUI
Premeu / a la pestanya Capture per entrar al mode de filtre. Escriviu una expressió de filtre i premeu Enter per aplicar-la.
Tipus de filtre:
| Filtre | Exemple | Descripció |
|---|---|---|
| Protocol | protocol:voip | Mostrar només trànsit VoIP |
| Text (tot) | text:all alicent | Cercar a tots els camps |
| Text (origen) | text:src 10.0.0.1 | Cercar a l’origen |
| Text (destinació) | text:dst 10.0.0.1 | Cercar a la destinació |
| Text (informació) | text:info INVITE | Cercar al camp d’informació |
| Port BPF | port 5060 | Port concret |
| Amfitrió BPF | host 10.0.0.1 | IP d’origen o destinació |
| Call-ID de VoIP | callid abc123 | Trucada concreta |
| Mètode SIP | method:INVITE | Tipus de mètode SIP |
Gestió de filtres:
| Tecla | Acció |
|---|---|
/ | Entrar al mode de filtre |
Enter | Aplicar el filtre |
Escape | Cancel·lar |
c | Eliminar l’últim filtre |
C (Majúscules) | Eliminar tots els filtres |
Modes de vista
Premeu v per alternar entre vistes específiques de protocol:
| Protocol | Vistes |
|---|---|
| VoIP | Paquets ↔ Trucades |
| DNS | Paquets ↔ Consultes |
| HTTP | Paquets ↔ Trànsit HTTP |
| Correu electrònic | Paquets ↔ Correus electrònics |
RADIUS no té una vista agregada separada. Les seves metadades descodificades, amb les credencials eliminades, apareixen a la llista normal de paquets i al panell de detalls en sessions en viu i de fitxer.
Anàlisi de fitxers PCAP
Obertura de fitxers PCAP
Analitzar trànsit capturat prèviament, sense privilegis elevats:
Obrir un sol fitxer PCAP:
lc watch file capture.pcap
Obrir diversos fitxers PCAP en una vista combinada:
lc watch file sip.pcap rtp.pcap signaling.pcap
En obrir diversos fitxers, els paquets es combinen i es mostren per ordre de marca de temps.
L’obertura indexa tots els paquets lògics acceptats en un emmagatzematge temporal privat. El diàleg de progrés mostra les fases de lectura, ordenació i indexació, el nombre de fonts, els paquets/bytes lògics, el temps transcorregut i l’ús temporal de disc. Escape cancel·la i espera la neteja; si la substitució falla o es cancel·la, es conserva el conjunt de dades anterior que ja estava preparat. La navegació comença només després que l’anàlisi finalitzi correctament. El BPF d’entrada (-f) s’aplica abans de la indexació; el reassemblatge i la desencapsulació poden modificar els paquets lògics respecte dels registres originals.
Cada paquet indexat continua sent navegable, filtrable i exportable després de l’expulsió de la memòria cau. watch.buffer_size / --buffer-size limita els anells de paquets en viu/remots i l’historial d’esdeveniments retingut, no la completesa dels paquets fora de línia. La capçalera mostra el total de paquets; Statistics separa el total i els paquets coincidents de les files/bytes en cau i dels bytes d’índex. La zona inferior es reserva per a notificacions. Les estadístiques globals i de coincidències cobreixen tot el conjunt de dades/consulta; les estimacions limitades d’extrems s’etiqueten per separat. Els esdeveniments i les trucades continuen tenint historials retinguts limitats; els seus filtres no ofereixen l’historial complet d’esdeveniments o trucades del fitxer.
Els filtres interactius de paquets recorren tot el conjunt de dades de manera asíncrona. Escape cancel·la el recorregut. Si falla o es cancel·la, es conserven l’última consulta completada, les etiquetes dels filtres i les estadístiques. Eliminar o buidar els filtres també consulta tot el conjunt de dades.
S’admeten marques de temps que retrocedeixen: els paquets lògics normalitzats s’ordenen al disc abans de l’anàlisi amb estat, preservant les marques de temps i utilitzant primer l’ordre dels arguments i després la seqüència original de cada font per desfer empats. L’ordenació utilitza memòria limitada i comparteix el pressupost de disc configurat amb els conjunts de dades i les consultes. Les entrades malformades, el disc ple i un BPF invàlid fan fallar l’obertura sense publicar resultats parcials. S’admeten fins a 64 fonts de fitxer regular; es poden combinar fitxers PCAP i PCAPNG d’una sola secció i interfície. Dividiu les captures PCAPNG amb diverses seccions/interfícies abans d’obrir-les.
Opcions del mode de fitxer:
| Opció | Forma curta | Valor per defecte | Descripció |
|---|---|---|---|
--filter | -f | cap | Filtre BPF al nivell de la font |
--tls-keylog | — | cap | SSLKEYLOGFILE per al desxifratge TLS |
--offline-backing-policy | — | source | Descriptors de les fonts originals o còpies privades snapshot validades |
--offline-session-dir | — | Directori temporal del sistema operatiu | Directori pare existent i escrivible dels directoris privats de sessió |
--offline-max-disk-bytes | — | 4294967296 (4 GiB) | Pressupost de disc compartit per ordenació/conjunts de dades/consultes |
--offline-cache-bytes | — | 67108864 (64 MiB) | Pressupost de cau de visualització, detalls fixats, lectura anticipada i lectures en curs |
--offline-max-record-bytes | — | 8388608 (8 MiB) | Registre de paquet codificat màxim; ha de cabre als pressupostos de cau/disc |
--offline-max-sources | — | 64 | Fonts simultànies, d’1 a 64 |
Aquestes opcions sobreescriuen les claus de configuració watch.offline.*. També s’apliquen en passar al mode fora de línia mitjançant Settings o un diàleg de fitxer. Sortiu del mode fora de línia abans de canviar els pressupostos de recursos. El camp de buffer de Settings correspon als anells de paquets en viu/remots i a l’historial d’esdeveniments retingut; configureu l’emmagatzematge fora de línia amb les opcions o claus YAML anteriors.
El còmput de disc inclou resums, detalls, desplaçaments, manifests i fitxers de consulta; els conjunts de dades preparat i de substitució comparteixen el pressupost. Reserveu espai per a tots dos durant la substitució i per als vectors de consulta filtrada; les consultes on tot coincideix utilitzen identificadors implícits. L’emmagatzematge normalitzat pot superar la mida de la font. L’esgotament físic del disc, els límits de pressupost configurats i els errors de permisos provoquen errors explícits, preservant l’últim conjunt de dades/consulta completat. Allibereu espai o canvieu el directori/pressupost i torneu-ho a provar. Els fitxers temporals propis s’eliminen en cancel·lar/aturar; els errors de neteja continuen visibles per tornar-ho a provar. El pressupost de cau no és un límit RSS del procés: la memòria del lector/reassemblatge, l’analitzador, els esdeveniments/trucades retinguts i l’entorn d’execució Go és addicional. El text en clar TLS fora de línia té un límit separat de 16 MiB; superar-lo fa fallar la indexació.
L’emmagatzematge de fitxers fora de línia manté metadades compactes cercables i llegeix els bytes de paquet inalterats dels fitxers oberts originalment. Manteniu les entrades sense canvis fins que acabin la sessió i les exportacions: editar-les o truncar-les fa fallar explícitament les lectures. Un camí substituït mai no subministra bytes a una sessió existent. Reanomenar o desenllaçar pot conservar l’accés mitjançant el descriptor propi quan el sistema operatiu ho admet.
Trieu --offline-backing-policy snapshot per crear còpies privades validades de les entrades abans d’indexar-les. La seva mida completa compta contra el pressupost de disc. El PCAP clàssic comprimit amb gzip també necessita un suport descomprimit; els paquets transformats conserven els seus bytes efectius per separat. No hi ha cap recurs automàtic a snapshots després d’un error de font. La política queda fixada per a cada obertura. La navegació i els filtres d’aplicació només estan disponibles quan l’anàlisi ordenada completa i les seves metadades finals estan preparades.
Premeu w per exportar l’última consulta de coincidències completada (o tots els paquets si no hi ha filtre de paquets). L’exportació transmet una instantània fixa a PCAP de nanosegons, preservant els bytes en brut normalitzats, el tipus d’enllaç efectiu, les marques de temps i les longituds capturades/originals. Es rebutgen els tipus d’enllaç efectius mixtos; exporteu aquestes entrades per separat. Les marques de temps absents o fora de l’interval de segons Unix de 32 bits sense signe també provoquen errors explícits. Les consultes buides indiquen que no hi ha paquets per desar. Escape cancel·la l’exportació. La destinació només se substitueix atòmicament si l’operació té èxit; la cancel·lació o els errors preserven una destinació existent i eliminen la sortida temporal. L’exportació requereix espai lliure addicional al costat de la destinació, fora del pressupost de disc de la sessió.
Desxifratge TLS
Si teniu un fitxer de registre de claus TLS (p. ex., de la variable d’entorn SSLKEYLOGFILE), podeu desxifrar trànsit HTTPS durant l’anàlisi de fitxers:
lc watch file capture.pcap --tls-keylog keys.log
Funcions de la TUI
Diàlegs clicables
Els diàlegs admeten entrada de ratolí i teclat. Feu clic en un botó habilitat per actuar, o utilitzeu Tab / Shift+Tab per donar el focus als controls i Enter / Space per activar un botó amb focus. Feu clic als camps de text per editar-los. La barra d’accions es distribueix en diverses línies en terminals estrets; utilitzeu la roda sobre una llista per desplaçar-la. Fer clic fora d’un diàleg només cancel·la la seva capa visible.
Al selector de protocol, feu clic en una fila i trieu Apply, o feu doble clic a la fila per aplicar-la. La descripció es manté sota la llista perquè la selecció no mogui les altres files.
Els diàlegs de fitxer ofereixen segments del camí clicables i controls Up, New folder i Show details. Un clic selecciona una fila; Open obre un fitxer o entra en un directori. Fer doble clic també entra en un directori o obre un fitxer en mode d’obertura. Feu clic al camp de cerca o de nom de fitxer per editar-lo; Cancel edit abandona l’edició en línia, mentre que Cancel tanca el diàleg. Els mateixos controls s’apliquen als selectors de fitxer de Settings.
En mode de desament, seleccionar un fitxer existent omple el seu nom i fer doble clic dona el focus al nom de fitxer sense desar. Trieu Save per enviar el nom de fitxer. Si la destinació existeix, Replace confirma la sobreescriptura i Keep editing torna al diàleg de fitxer conservant el nom.
Els diàlegs d’obertura i filtratge fora de línia ofereixen Cancel i continuen visibles mentre acaba la neteja. No es pot tornar a sol·licitar la cancel·lació mentre està en curs. Si la neteja falla, Retry cleanup i Quit estan disponibles allà on s’ofereixen.
Pestanya Statistics
Premeu Alt+3 per veure estadístiques de trànsit en temps real:
- Distribució de protocols i recomptes de paquets
- Taxes de trànsit
- Estadístiques de nodes distribuïts (quan es connecta a processadors)
La vista de detalls dels paquets és deliberadament limitada durant la captura en viu. Els comptadors exactes d’entrada continuen comptant cada paquet vàlid, mentre que el canal de detalls pot mostrejar paquets, descartar un lot de detalls en cua o expulsar el paquet més antic del seu anell pendent per mantenir visibles els diagnòstics més recents. La pestanya Statistics mostra aquestes etapes per separat com Sampled Out, Batch Queue Drops i Pending Evictions. Packets Delivered i el seu percentatge retingut mesuren la retenció de detalls d’extrem a extrem des de l’entrada vàlida de la TUI; no mesuren la integritat de la captura ni els paquets escrits a PCAP.
Els paquets SIP reconeguts eviten el mostreig adaptatiu de detalls, però encara es poden perdre a les etapes posteriors de cua de lots o anell pendent. La reproducció PCAP fora de línia utilitza un camí pendent separat que ho preserva tot i no hereta l’expulsió de l’anell en viu.
Tots aquests comptadors de la TUI són acumulatius per a la sessió actual. No sumeu instantànies successives. Un percentatge retingut baix significa que les files de paquets són una mostra diagnòstica incompleta. Utilitzeu els comptadors exactes d’entrada/protocol per a les taxes de trànsit i una sortida PCAP quan calguin proves completes dels paquets.
Alterneu entre les subvistes Overview i Distributed amb v o les tecles 1/2. Exporteu les estadístiques a JSON amb e.
Pestanya Settings
Premeu Alt+4 per veure i modificar les opcions de captura:
- Selecció de la interfície
- Configuració del filtre BPF
Pestanya Help
Premeu ? per obrir el sistema d’ajuda cercable:
- Referència de dreceres de teclat
- Sintaxi de filtres
- Ordres
- Fluxos de treball
Cerqueu amb / i navegueu pels resultats amb n/N. Aneu a les seccions amb 1-4.
Notificacions emergents
Els missatges d’estat apareixen com notificacions emergents a la part inferior de la pantalla i desapareixen automàticament al cap de 2–5 segons. Els tipus inclouen èxit (verd), error (vermell), informació (blau) i advertiment (groc). Les notificacions relacionades se substitueixen entre si; per exemple, “Paused” se substitueix per “Resumed”.
Desament de paquets
Premeu w a la pestanya Capture per desar els paquets mostrats en un fitxer PCAP. S’obre un diàleg de fitxer per triar el camí de sortida. Torneu a prémer w per aturar l’escriptura contínua al fitxer.
Ara que coneixeu la captura local (CLI i TUI), podeu aprendre sobre la captura distribuïda a la Part III, on els nodes Hunter capturen a la perifèria i els processadors agreguen centralment.
Visió general de l’arquitectura distribuïda
El mode distribuït de lippycat permet capturar trànsit en diversos segments de xarxa i agregar-lo en un punt central per analitzar-lo. Aquest capítol explica l’arquitectura, quan utilitzar-la i com triar la topologia de desplegament adequada.
Per què distribuir la captura?
Un únic punt de captura només veu el trànsit del seu segment de xarxa. En xarxes reals, el trànsit d’interès passa per diversos segments: centres de dades, sucursals, DMZ i regions del núvol. La captura distribuïda resol tres problemes:
- Visibilitat entre segments: desplegueu nodes Hunter allà on passa el trànsit. Un processador central ho agrega tot en una sola vista.
- Escalabilitat: repartiu la càrrega de captura entre molts agents lleugers en lloc d’una màquina sobrecarregada.
- Separació de responsabilitats: captureu en zones restringides (DMZ, producció) i analitzeu des d’una zona de monitoratge. Els nodes Hunter necessiten
CAP_NET_RAW; el processador no.
El model Hunter/processador
L’arquitectura distribuïda de lippycat té dos tipus de node:
- Els nodes Hunter capturen paquets a la perifèria de la xarxa i els transmeten a un processador mitjançant gRPC. Són lleugers (~50 MB de RAM) i estan dissenyats per funcionar en cada segment de xarxa que voleu supervisar.
- Els processadors reben paquets de diversos nodes Hunter, fan anàlisi de protocols, escriuen fitxers PCAP i atenen clients TUI per al monitoratge en temps real.
flowchart TB
subgraph Edge["Distributed Hunters"]
direction LR
H1[Hunter<br/>datacenter-1]
H2[Hunter<br/>datacenter-2]
H3[Hunter<br/>branch-office]
end
subgraph Processor["Processor Node"]
P[Processor<br/>monitor.internal:55555]
VIRT[Virtual Interface<br/>lc0]
end
subgraph Outputs[" "]
direction LR
subgraph Tools["Analysis Tools"]
direction LR
WS[Wireshark]
TD[tcpdump]
SNORT[Snort/Zeek]
end
PCAP[(PCAP Files)]
subgraph Clients["Monitoring Clients"]
direction LR
TUI1[TUI Client]
TUI2[TUI Client]
end
end
H1 -->|gRPC/TLS| P
H2 -->|gRPC/TLS| P
H3 -->|gRPC/TLS| P
VIRT --> Tools
P --> PCAP
P <-->|gRPC/TLS| Clients
Flux de dades: els nodes Hunter agrupen paquets en lots (per defecte: 64 per lot) i els transmeten al processador per gRPC. El processador escriu PCAP, difon als subscriptors TUI, injecta en interfícies virtuals i, opcionalment, reenvia cap amunt.
Reenviament de paquets i esdeveniments
Cada sessió Hunter o Tap que reenvia utilitza una representació canònica cap amunt:
| Mode | Autoritat d’anàlisi | Enviat cap amunt | Funcions centrals |
|---|---|---|---|
packets (per defecte) | Processador | Paquets en brut seleccionats | PCAP, vistes de paquets, interfície virtual, nova anàlisi i esdeveniments normalitzats |
events | Hunter o Tap | Metadades normalitzades negociades; sense bytes en brut ni contingut de fitxers | Vistes d’esdeveniments, registres estructurats i consumidors de metadades autoritzats |
El mode d’esdeveniments redueix l’amplada de banda i l’exposició de contingut en brut, però el receptor no pot reconstruir proves de paquets ni repetir anàlisis dependents de paquets. Utilitzeu un node Tap amb retenció PCAP local quan calguin tant metadades centralitzades com proves a la perifèria. L’API d’esdeveniments i les capacitats d’anàlisi es negocien; la incompatibilitat provoca un tancament segur llevat que el productor permeti explícitament un recurs a paquets que es registra. En mode d’esdeveniments jeràrquic, els processadors conserven la identitat d’origen i utilitzen un spool recuperable i un límit de confirmació per a cada salt de reenviament.
També hi ha un tercer tipus de node:
- Tap combina Hunter i processador en un sol procés. Captura localment i ofereix totes les funcions del processador sense la sobrecàrrega gRPC entre captura i processament. Consulteu el Capítol 9 per obtenir més detalls.
Topologies de xarxa
Radial
La topologia més senzilla. Tots els nodes Hunter es connecten directament a un processador:
flowchart TB
H1[Hunter 1] -->|gRPC/TLS| P
H2[Hunter 2] -->|gRPC/TLS| P
H3[Hunter 3] -->|gRPC/TLS| P
subgraph P[Processor]
direction TB
A[Aggregation]
F[Filtering]
W[PCAP Writing]
end
Quan utilitzar-la: desplegaments petits o mitjans (fins a ~50 nodes Hunter), un sol emplaçament i requisits senzills.
Processador:
lc process --listen :55555 --write-file /var/capture/all.pcap \
--tls-cert server.crt --tls-key server.key
Nodes Hunter:
sudo lc hunt --processor processor:55555 -i eth0 --tls-ca ca.crt
Jeràrquica
Arquitectura de diversos nivells per a segmentació geogràfica o de xarxa. Els processadors de perifèria agreguen localment i reenvien a processadors regionals o centrals:
flowchart LR
subgraph Site1["Site A"]
H1[Hunter 1] --> E1[Edge Processor]
H2[Hunter 2] --> E1
end
subgraph Site2["Site B"]
H3[Hunter 3] --> E2[Edge Processor]
H4[Hunter 4] --> E2
end
E1 -->|gRPC/TLS| R[Regional Processor]
E2 -->|gRPC/TLS| R
R -->|gRPC/TLS| C[Central Processor]
Quan utilitzar-la: desplegaments en diversos emplaçaments, distribució geogràfica, segmentació DMZ/interna i agregació gradual amb filtratge a cada nivell.
Processador central:
lc process --listen :55555 --write-file /var/capture/central.pcap \
--tls-cert server.crt --tls-key server.key
Processador regional (reenvia al central):
lc process --listen :55555 --processor central:55555 \
--tls-cert server.crt --tls-key server.key --tls-ca ca.crt
Processador de perifèria (reenvia al regional):
lc process --listen :55555 --processor regional:55555 \
--tls-cert server.crt --tls-key server.key --tls-ca ca.crt
La profunditat de la jerarquia està limitada a 10 nivells. Manteniu-la en 3 o menys per obtenir un rendiment òptim (cada salt afegeix ~500 ms a les operacions de gestió).
Diversos processadors
Repartiu els nodes Hunter entre diversos processadors independents per distribuir la càrrega:
flowchart LR
H1["Hunters 1-50"] --> P1[Processor 1]
H2["Hunters 51-100"] --> P2[Processor 2]
H3["Hunters 101-150"] --> P3[Processor 3]
Quan utilitzar-la: desplegaments molt grans on un sol processador no pot gestionar tot el trànsit, o quan voleu dominis de monitoratge independents.
Segmentació DMZ
Capturar tant de la DMZ com de xarxes internes mitjançant reenviament jeràrquic a través del tallafoc:
flowchart TB
subgraph DMZ["DMZ"]
DH1[Hunter: web-01]
DH2[Hunter: web-02]
DP[DMZ Processor]
end
subgraph Internal["Internal Network"]
IH1[Hunter: app-01]
IH2[Hunter: db-01]
IP[Central Processor]
end
DH1 --> DP
DH2 --> DP
DP -->|"firewall (port 55555)"| IP
IH1 --> IP
IH2 --> IP
El processador DMZ reenvia el trànsit agregat a través d’un únic port del tallafoc al processador intern, que el combina amb les captures internes. Això significa:
- Els nodes Hunter de la DMZ mai no necessiten accés directe a la xarxa interna
- Només cal una regla de tallafoc (processador DMZ → processador intern al port 55555)
- El processador intern té una vista unificada de totes dues zones
Quan utilitzar-la: entorns sensibles a la seguretat on la captura travessa límits de confiança.
Model de seguretat
Totes les connexions gRPC utilitzen TLS per defecte. Heu d’indicar explícitament --insecure per desactivar el xifratge (bloquejat quan LIPPYCAT_PRODUCTION=true).
Hi ha tres modes de seguretat disponibles:
| Mode | Opcions del processador | Opcions del node Hunter | Protecció |
|---|---|---|---|
| TLS de servidor | --tls-cert, --tls-key | --tls-ca | Xifrat, el node Hunter verifica el processador |
| TLS mutu | --tls-cert, --tls-key, --tls-ca, --tls-client-auth | --tls-cert, --tls-key, --tls-ca | Xifrat, totes dues parts es verifiquen mútuament |
| Insegur | --insecure | --insecure | Sense xifratge (només per a proves) |
Recomanació: utilitzeu TLS mutu en producció. Impedeix que nodes Hunter no autoritzats es connectin al vostre processador.
Per a la generació i gestió de certificats, consulteu el Capítol 13: seguretat.
Triar el mode adequat
No tots els desplegaments necessiten l’arquitectura distribuïda completa. Aquesta guia ajuda a decidir:
| Escenari | Mode recomanat | Motiu |
|---|---|---|
| Inspecció ràpida de paquets | lc sniff | Sortida CLI, sense necessitat d’infraestructura |
| Anàlisi interactiva en una màquina | lc watch live | TUI amb captura local |
| Monitoratge VoIP, una sola màquina | lc tap voip | PCAP per trucada, TUI, sense configurar gRPC |
| Captura de 2 o més segments de xarxa | lc hunt + lc process | Única manera de veure trànsit de diversos segments |
| Node de perifèria amb TUI local i agregació central | lc tap amb --processor | Captura autònoma amb reenviament cap amunt |
| Monitoratge a gran escala de diversos emplaçaments | Processadors jeràrquics | Agregació regional abans de la central |
Camí de migració: comenceu amb sniff o tap en una sola màquina. Quan necessiteu visibilitat entre segments, desplegueu nodes Hunter i un processador. El coneixement de les opcions es transfereix: la majoria d’opcions de sniff també funcionen amb hunt (consulteu el Capítol 7).
Planificació de capacitat
Nodes Hunter
| Recurs | Ús habitual | Notes |
|---|---|---|
| Memòria | ~50MB | Augmenta amb la mida del buffer i els buffers de trucades VoIP |
| CPU | Mínim | Depèn de la taxa de paquets i de l’acceleració GPU |
| Xarxa | Depèn del trànsit | Els nodes Hunter VoIP redueixen l’amplada de banda més d’un 90% amb reenviament selectiu |
Processadors
| Recurs | Ús habitual | Notes |
|---|---|---|
| Memòria | ~5–10 MB per node Hunter | Més ~2–5 MB per subscriptor TUI |
| CPU | Mínim per node Hunter | La detecció de protocols afegeix una mica de sobrecàrrega |
| E/S de disc | Depèn de l’escriptura PCAP | SSD/NVMe recomanat per a taxes de paquets altes |
| Xarxa | Suma del trànsit dels nodes Hunter | Més el trànsit dels subscriptors TUI |
Regles orientatives:
- El valor per defecte de
--max-huntersés 100; ajusteu-lo segons la RAM disponible - Cada node Hunter transmet ~10.000 paquets/s en hores punta
- La latència d’extrem a extrem és habitualment <100 ms
- L’interval de batec és de 5 segons; els nodes Hunter inactius es netegen després de 5 minuts
Què ve a continuació
- Capítol 7: captura a la perifèria amb
lc hunt— desplegar i configurar nodes Hunter - Capítol 8: agregació central amb
lc process— configurar processadors - Capítol 9: mode autònom amb
lc tap— quan voleu tots dos rols en un binari - Capítol 13: seguretat — configurar certificats TLS/mTLS
Captura a la perifèria amb lc hunt
Els nodes Hunter són agents de captura lleugers que funcionen a la perifèria de la xarxa. Si heu utilitzat lc sniff (Capítol 4), ja coneixeu gairebé tot el necessari: hunt captura com sniff, però reenvia a un processador en lloc d’escriure localment.
De Sniff a Hunt
Si ja coneixeu lc sniff, també us orientareu ràpidament amb lc hunt. Compareu:
El que heu après amb sniff:
sudo lc sniff voip -i eth0 --sip-user alicent -w calls.pcap
L’equivalent distribuït comença creant un filtre:
lc set filter -P central:55555 --tls-ca ca.crt \
--type sip_user --pattern alicent
Després, inicieu el node Hunter:
sudo lc hunt voip -i eth0 --processor central:55555 --tls-ca ca.crt
La majoria d’opcions de captura (-i, -f, --sip-port, --rtp-port-range) es mantenen. Canvien el filtratge i la sortida: els filtres de trucades VoIP es gestionen centralment al processador amb lc set filter, i --processor envia els paquets coincidents a aquest processador. El processador s’encarrega d’escriure PCAP, servir la TUI i fer l’anàlisi (consulteu el Capítol 8).
Què es manté igual
| Opció | Sniff | Hunt | Igual? |
|---|---|---|---|
-i, --interface | Interfícies de xarxa | Interfícies de xarxa | Sí |
-f, --filter | Filtre BPF | Filtre BPF | Sí |
-p, --promisc | Mode promiscu | Mode promiscu | Sí |
--esp-null | Desencapsulació ESP-NULL | Desencapsulació ESP-NULL | Sí |
--esp-heuristic | Detecció ESP-NULL pel contingut | Detecció ESP-NULL pel contingut | Sí |
--esp-icv-size | Mida ICV d’ESP | Mida ICV d’ESP | Sí |
--sip-user | Filtre local d’usuari SIP | Filtre gestionat pel processador | No |
--sip-port | Restricció de port SIP (VoIP) | Restricció de port SIP (VoIP) | Sí |
--rtp-port-range | Interval de ports RTP (VoIP) | Interval de ports RTP (VoIP) | Sí |
--gpu-backend | Acceleració GPU en compilacions CUDA | Acceleració GPU en compilacions CUDA | Sí |
Novetats
| Opció | Finalitat |
|---|---|
-P, --processor | Adreça del processador (host:port) — obligatòria |
-I, --id | Identificador del node Hunter (per defecte: nom de l’amfitrió) |
-b, --buffer-size | Mida del buffer de paquets (per defecte: 10000) |
--sip-buffer-size | Mida del canal prioritari SIP (per defecte: 0, coincideix automàticament amb --buffer-size) |
--batch-size | Paquets per lot gRPC (per defecte: 64) |
--batch-timeout | Temps d’espera d’enviament de lot en ms (per defecte: 100) |
--batch-queue-size | Buffer de la cua de lots (per defecte: 1000) |
--tls-cert, --tls-key, --tls-ca | Certificats TLS |
--insecure | Desactivar TLS (només per a proves) |
--disk-buffer | Activar el buffer de desbordament a disc |
--no-filter-policy | Reenviar tots els paquets o cap quan no existeixen filtres (deny per defecte) |
--debug-listen | Escolta pprof opcional per a diagnòstics |
La vostra primera captura distribuïda
Inicieu un processador (consulteu el Capítol 8 per obtenir tots els detalls):
Al terminal 1, inicieu el processador:
lc process --listen :55555 --write-file /tmp/captured.pcap \
--tls-cert server.crt --tls-key server.key
Al terminal 2, inicieu un node Hunter:
sudo lc hunt --processor localhost:55555 -i eth0 --tls-ca ca.crt
El node Hunter captura paquets a eth0, els agrupa en lots i els transmet al processador mitjançant gRPC. El processador ho escriu tot a captured.pcap.
Reenviament de paquets o esdeveniments
Els nodes Hunter utilitzen --forward-mode packets per defecte per compatibilitat. El processador rep paquets en brut, és responsable de l’anàlisi de protocols i pot oferir sortida PCAP, vistes TUI de paquets, injecció en interfícies virtuals i nova anàlisi posterior.
Amb --forward-mode events, l’anàlisi passa al node Hunter. Només els esdeveniments normalitzats de connexió, DNS, TLS, HTTP, SMTP, RADIUS i metadades de fitxers travessen la xarxa; els paquets en brut i el contingut dels fitxers no. El processador central pot registrar i mostrar els esdeveniments negociats, però no pot reconstruir proves de paquets, repetir l’anàlisi ni oferir sortida dependent de paquets per a aquest productor.
sudo lc hunt -P processor:55555 -i eth0 --forward-mode events \
--event-delivery-profile reliable \
--event-spool-dir /var/lib/lippycat/event-spool --tls-ca ca.crt
El perfil fiable per defecte reté els lots no confirmats en un spool recuperable de perifèria. memory-only redueix l’ús de disc, però les admissions en cua confirmades es poden perdre si el processador falla. Configureu límits de bytes/antiguitat i trieu drop_oldest o drop_new; la pèrdua continua visible a l’estat del node Hunter.
Operació del spool fiable d’esdeveniments
Doneu a cada node Hunter el seu propi directori de spool i superviseu tant el límit configurat com l’espai lliure del sistema de fitxers. Les càrregues útils dels registres codificats estan limitades a 4 MiB fins i tot quan l’emmagatzematge total del spool és il·limitat; si no es pot desar un esdeveniment o el seu informe exacte de pèrdua, el reenviament s’atura en lloc d’ocultar la pèrdua. Per veure el comportament de recuperació i la resposta segura als errors d’inici o durabilitat, consulteu Emmagatzematge i recuperació del spool d’esdeveniments.
Es negocien les capacitats d’esdeveniments i la política d’anàlisi. La incompatibilitat provoca un tancament segur llevat que --event-fallback-to-packets permeti explícitament recórrer a paquets en brut. Manteniu aquesta opció desactivada quan el mode d’esdeveniments sigui un límit de privadesa. Els nodes existents que només admeten paquets continuen sent compatibles perquè el mode de paquets és el valor per defecte.
Les metadades no són anònimes: URL, adreces de correu, noms DNS, certificats i atributs de fitxers poden ser sensibles. Utilitzeu TLS/mTLS, autoritzeu les identitats dels nodes, restringiu i xifreu l’emmagatzematge del spool i apliqueu límits de retenció.
Per a proves locals ràpides sense TLS:
Iniciar el processador en mode insegur (només per a proves):
lc process --listen :55555 --write-file /tmp/captured.pcap --insecure
Després, iniciar el node Hunter en mode insegur (només per a proves):
sudo lc hunt --processor localhost:55555 -i eth0 --insecure
Nodes Hunter específics de protocol
Com sniff, hunt té subordres de protocol que afegeixen filtratge i anàlisi especialitzats.
Node Hunter VoIP (hunt voip)
El node Hunter VoIP és el mode més utilitzat. Captura trànsit SIP/RTP amb emmagatzematge intel·ligent de trucades en buffers: els paquets es mantenen localment fins que una trucada coincideix amb els filtres del processador, i després es reenvien. Les trucades sense coincidència es descarten a la perifèria, reduint l’amplada de banda més d’un 90%.
Comportament en actualitzar: els nodes Hunter VoIP ara reben filtres d’aplicació amb eBPF desactivat. Una incompatibilitat anterior d’interfície podia seleccionar trucades àmpliament malgrat tenir filtres distribuïts d’identitat o IP instal·lats. --no-filter-policy utilitza deny per defecte: un conjunt buit de filtres aplicables no reenvia cap trucada. La correcció pot reduir el trànsit reenviat després d’actualitzar. Per seleccionar intencionadament de manera àmplia, utilitzeu un conjunt buit de filtres aplicables amb --no-filter-policy allow; allow no anul·la filtres instal·lats ni predicats explícits de captura. Consulteu el registre de canvis del repositori per veure els canvis de comportament de la versió.
Node Hunter VoIP amb TLS:
sudo lc hunt voip --processor processor:55555 -i eth0 --tls-ca ca.crt
Node Hunter VoIP amb optimització BPF per a un port SIP concret:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--sip-port 5060 --tls-ca ca.crt
Node Hunter VoIP amb captura selectiva de contingut multimèdia a Linux:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--rtp-ebpf --sip-port 5060 --tls-ca ca.crt
Amb --rtp-ebpf, els extrems RTP/RTCP s’aprenen de l’SDP de les trucades coincidents; --rtp-port-range és innecessari. --sip-port és opcional i restringeix la captura de senyalització. El contingut multimèdia es captura només després de la selecció i la publicació dels extrems, de manera que l’RTP anterior no es desa en buffers. Un interval RTP configurat explícitament continua restringint els extrems apresos. Consulteu Captura selectiva de contingut multimèdia amb eBPF.
Node Hunter VoIP amb un interval de ports RTP personalitzat:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--rtp-port-range 8000-9000 --tls-ca ca.crt
Node Hunter VoIP amb TLS mutu:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--tls-cert hunter.crt --tls-key hunter.key --tls-ca ca.crt
Com funciona el buffer de trucades:
flowchart LR
C[Capture] --> D[Detect SIP/RTP]
D --> B[Buffer per call]
B --> M{Filter match?}
M -->|Yes| F[Forward to processor]
M -->|No| X[Drop]
- El node Hunter captura paquets SIP i RTP
- Els paquets es desen localment en buffers, agrupats per SIP Call-ID
- La subscripció de filtres rep filtres del processador (usuari SIP, número de telèfon, IP)
- Els paquets del buffer es comparen amb els filtres
- Només es reenvien les trucades coincidents: senyalització SIP i contingut multimèdia RTP associat
Els filtres es gestionen centralment al processador i s’envien als nodes Hunter. Els nodes Hunter no configuren filtres de trucades localment. Utilitzeu lc set filter / lc rm filter per a canvis de filtre en viu; consulteu el Capítol 10 per a l’administració CLI.
Node Hunter DNS (hunt dns)
Captura consultes i respostes DNS per reenviar-les al processador.
Node Hunter DNS:
sudo lc hunt dns --processor processor:55555 -i eth0 --tls-ca ca.crt
Node Hunter DNS només UDP amb ports personalitzats:
sudo lc hunt dns --processor processor:55555 -i eth0 \
--dns-port 53,5353 --udp-only --tls-ca ca.crt
Opcions específiques de DNS: --dns-port (per defecte: 53), --udp-only.
Node Hunter HTTP (hunt http)
Captura trànsit HTTP amb filtratge opcional d’amfitrió/camí/mètode a la perifèria.
Node Hunter HTTP amb filtratge d’amfitrió:
sudo lc hunt http --processor processor:55555 -i eth0 \
--host "*.example.com" --http-port 80,8080 --tls-ca ca.crt
Opcions específiques d’HTTP: --http-port, --host, --path, --method.
Node Hunter TLS (hunt tls)
Captura negociacions TLS per a l’anàlisi d’empremtes (JA3/JA3S/JA4).
Node Hunter TLS en diversos ports:
sudo lc hunt tls --processor processor:55555 -i eth0 \
--tls-port 443,8443 --tls-ca ca.crt
Opcions específiques de TLS: --tls-port (per defecte: 443).
Node Hunter de correu electrònic (hunt email)
Captura trànsit SMTP, IMAP i POP3 amb filtratge d’adreces.
Node Hunter de correu només SMTP amb filtratge de remitent:
sudo lc hunt email --processor processor:55555 -i eth0 \
--protocol smtp --sender "*@suspicious.com" --tls-ca ca.crt
Opcions específiques de correu: --protocol (smtp/imap/pop3/all), --smtp-port, --imap-port, --pop3-port, --address, --sender, --recipient.
Node Hunter RADIUS (hunt radius)
Captura trànsit UDP RADIUS visible d’autenticació i comptabilització, aplica criteris exactes d’identitat a la perifèria i reenvia al processador els paquets seleccionats i les seves metadades validades d’observació i procedència. Les projeccions habituals de visualització i registre estructurat eliminen els atributs que contenen credencials:
sudo lc hunt radius --processor processor:55555 -i mirror0 \
--radius-username 'alice@example.test' --tls-ca ca.crt
La subordre RADIUS comparteix les opcions de port, identitat, àmbit i correlació limitada amb sniff radius i tap radius. Consulteu Captura RADIUS i POI per veure la taula completa d’opcions i les restriccions del desplegament distribuït.
Resiliència i control de flux
Els nodes Hunter estan dissenyats per resistir interrupcions de xarxa i caigudes del processador.
Control de flux
El processador envia senyals de control de flux als nodes Hunter mitjançant respostes als batecs:
| Estat | Significat | Resposta del node Hunter |
|---|---|---|
CONTINUE | Funcionament normal | Enviar a plena velocitat |
SLOW | Cua del processador plena entre un 30 i un 70% | Augmentar el temps d’espera del lot |
PAUSE | Cua del processador plena més d’un 90% | Aturar l’enviament i desar en buffers locals |
RESUME | Cua per sota del llindar | Reprendre el funcionament normal |
El control de flux es basa en l’ús de la cua d’escriptura PCAP del processador. Els clients TUI lents no activen el control de flux; en canvi, s’hi descarten paquets selectivament.
Reconnexió automàtica
Quan es perd la connexió amb el processador, el node Hunter es reconnecta automàticament:
| Intent | Espera progressiva | Temps total |
|---|---|---|
| 1 | 1s | 1s |
| 2 | 2s | 3s |
| 3 | 4s | 7s |
| 4 | 8s | 15s |
| 5 | 16s | 31s |
| 6 | 32s | 63s |
| 7-10 | 60s | ~5 minuts |
Durant la reconnexió, la captura de paquets continua. Els canals d’entrada normal i prioritari SIP tenen límits separats, seguits d’un canal de sortida combinat limitat. El canal SIP coincideix automàticament amb --buffer-size llevat que --sip-buffer-size s’estableixi a un valor positiu que el sobreescrigui. Cues més grans donen marge per a pics i utilitzen més memòria; no fan que una sobrecàrrega sostinguda sigui sense pèrdues.
Buffer de desbordament a disc
Per a desconnexions llargues (hores, dies), activeu el buffer de desbordament a disc:
sudo lc hunt --processor processor:55555 -i eth0 \
--disk-buffer --disk-buffer-max-mb 2048 --tls-ca ca.crt
Quan la cua de memòria s’omple, els lots es desen al disc. Quan es restableix la connexió, els lots de disc tornen a la cua de memòria (ordre FIFO, els més antics primer).
--disk-buffer— activar el desbordament a disc--disk-buffer-dir— directori del buffer (per defecte:/var/tmp/lippycat-buffer)--disk-buffer-max-mb— ús màxim de disc en MB (per defecte: 1024)
Tallacircuit
Quan el processador cau durant un període llarg, el tallacircuit evita intents constants de connexió:
- S’obre després de 5 errors de connexió consecutius
- Espera 30 segons abans de permetre un nou intent
- Estat semiobert: permet connexions de prova limitades abans de la recuperació completa
Ajust del rendiment
Pressió del buffer de captura
Utilitzeu els indicadors de longitud i capacitat de cada canal per identificar si està saturat el canal normal, el prioritari SIP o el de sortida combinada. Interpreteu els comptadors SIP com resultats successius:
| Comptador | Significat |
|---|---|
sip_priority_classified | Paquets reconeguts i encaminats pel camí prioritari SIP, inclosos els que després es degraden o es descarten definitivament. |
capture_buffer_sip_demotions | Paquets SIP classificats retinguts al canal normal quan el prioritari s’ha omplert. Les degradacions no són pèrdues de paquets. |
capture_buffer_sip_drops | Paquets SIP classificats rebutjats per tots dos canals d’entrada i, per tant, perduts. |
El creixement persistent del canal de sortida indica problemes de cabal en el processament o reenviament posterior, més que només un problema de capacitat d’entrada.
Configuració dels lots
L’agrupació en lots controla com s’agreguen els paquets abans d’enviar-los. Lots més grans redueixen la sobrecàrrega gRPC però augmenten la latència:
Per a monitoratge en temps real de baixa latència:
sudo lc hunt --processor processor:55555 -i eth0 \
--batch-size 16 --batch-timeout 50 --tls-ca ca.crt
Per a captura massiva d’alt cabal:
sudo lc hunt --processor processor:55555 -i eth0 \
--batch-size 256 --batch-timeout 500 --tls-ca ca.crt
Per al perfil equilibrat per defecte:
sudo lc hunt --processor processor:55555 -i eth0 \
--batch-size 64 --batch-timeout 100 --tls-ca ca.crt
| Perfil | Mida del lot | Temps d’espera | Cas d’ús |
|---|---|---|---|
| Baixa latència | 16-32 | 50-100ms | Anàlisi en temps real |
| Equilibrat | 64-128 | 100-200ms | Monitoratge general |
| Alt cabal | 256-512 | 500-1000ms | Captura massiva, arxivament |
Acceleració GPU
Aquestes opcions estan disponibles en compilacions CUDA.
Activar la comparació de patrons VoIP accelerada amb GPU a la perifèria:
Detectar automàticament el millor motor:
sudo lc hunt --processor processor:55555 -i eth0 \
--enable-voip-filter --gpu-backend auto --tls-ca ca.crt
Forçar CUDA en GPU NVIDIA:
sudo lc hunt --processor processor:55555 -i eth0 \
--enable-voip-filter --gpu-backend cuda --gpu-batch-size 200 --tls-ca ca.crt
Utilitzar SIMD de CPU sense necessitat de GPU:
sudo lc hunt --processor processor:55555 -i eth0 \
--enable-voip-filter --gpu-backend cpu-simd --tls-ca ca.crt
L’acceleració GPU és més útil amb taxes de paquets altes (>10.000 pps) i moltes trucades SIP simultànies. Consulteu el Capítol 14: rendiment per veure proves de rendiment.
Optimització dels filtres BPF
Per als nodes Hunter VoIP en xarxes amb molt trànsit TCP, utilitzeu opcions BPF per ometre trànsit TCP i centrar-vos en SIP/RTP:
Restringir la captura a un port SIP concret:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--sip-port 5060 --tls-ca ca.crt
Restringir tant el port SIP com l’interval RTP:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--sip-port 5060 --rtp-port-range 10000-20000 --tls-ca ca.crt
L’antiga opció VoIP --udp-only encara s’accepta per compatibilitat, però està oculta i és obsoleta perquè pot ometre trànsit SIP TCP.
Algoritme de comparació de patrons
Per a conjunts grans de filtres, l’algoritme Aho-Corasick ofereix una comparació ~265 vegades més ràpida que el recorregut lineal:
Seleccionar automàticament Aho-Corasick per a 100 patrons o més i la comparació lineal en la resta de casos:
sudo lc hunt --processor processor:55555 -i eth0 \
--pattern-algorithm auto --tls-ca ca.crt
Forçar Aho-Corasick per a conjunts més petits de filtres:
sudo lc hunt --processor processor:55555 -i eth0 \
--pattern-algorithm aho-corasick --tls-ca ca.crt
Fitxer de configuració
Totes les opcions de hunt es poden establir a ~/.config/lippycat/config.yaml:
hunter:
processor_addr: "processor.example.com:55555"
id: "edge-hunter-01"
interfaces:
- eth0
- eth1
bpf_filter: "port 5060 or portrange 10000-20000"
buffer_size: 10000
batch_size: 64
batch_timeout_ms: 100
batch_queue_size: 1000
voip:
udp_only: false
sip_ports: "5060"
rtp_port_ranges: "10000-32768"
tls:
cert_file: "/etc/lippycat/certs/hunter.crt"
key_file: "/etc/lippycat/certs/hunter.key"
ca_file: "/etc/lippycat/certs/ca.crt"
Els valors de les opcions tenen prioritat sobre els valors del fitxer de configuració.
Agregació central amb lc process
Els processadors són el centre de l’arquitectura distribuïda. Reben paquets dels nodes Hunter, fan anàlisi de protocols, escriuen fitxers PCAP i atenen clients TUI per al monitoratge en temps real. Aquest capítol cobreix tot el necessari per executar un processador.
Conceptes bàsics del processador
Inici d’un processador
Un processador necessita una adreça d’escolta i certificats TLS:
Processador mínim amb TLS:
lc process --listen :55555 \
--tls-cert server.crt --tls-key server.key
Processador amb escriptura PCAP:
lc process --listen 0.0.0.0:55555 \
--write-file /var/capture/packets.pcap \
--tls-cert server.crt --tls-key server.key
Per a proves locals sense TLS:
lc process --listen :55555 --insecure
Els nodes Hunter es connecten automàticament al processador. No cal configuració al processador per acceptar un node Hunter concret: qualsevol node Hunter amb les credencials TLS correctes es pot connectar.
Productors de paquets i esdeveniments
Un processador pot acceptar simultàniament nodes en mode de paquets i d’esdeveniments. El mode de paquets és el valor per defecte i manté l’autoritat d’anàlisi al processador: hi ha paquets en brut disponibles per a PCAP, vistes de paquets, interfícies virtuals i anàlisi central. El mode d’esdeveniments és opcional i dona l’autoritat d’anàlisi a la perifèria: s’accepten metadades normalitzades del productor sense bytes de paquets en brut ni contingut de fitxers, i el processador no crea un segon flux canònic d’esdeveniments per a aquesta sessió.
lc process és neutre respecte dels protocols i, per tant, no té subordres de protocol. Els paquets i les metadades de hunt radius i tap radius utilitzen els mateixos camins d’entrada, PCAP, registre estructurat i TUI que els altres protocols admesos. La selecció de captura RADIUS s’aplica al productor; els filtres gestionats pel processador es distribueixen als nodes Hunter RADIUS compatibles. El processador mostra i registra una projecció amb les credencials eliminades. Consulteu Captura RADIUS i POI per veure els requisits d’àmbit distribuït i de lliurament LI opcional.
El registre negocia l’API d’esdeveniments, els tipus, el perfil d’anàlisi amb estat, l’enriquiment i els límits. Es rebutja una petició incompatible llevat que el productor permeti explícitament un recurs visible a paquets. Això permet que nodes antics que només admeten paquets convisquin amb nodes nous capaços de transmetre esdeveniments sense afeblir silenciosament una política de privadesa del mode d’esdeveniments.
Un Write-Ahead Log (WAL) és un diari persistent. En mode d’entrada fiable d’esdeveniments, el processador escriu els esdeveniments rebuts en aquest diari abans de confirmar-los al productor. Això permet recuperar-los després d’una caiguda del processador. Consulteu el Glossari.
L’entrada fiable confirma l’admissió recuperable al WAL; l’entrada només en memòria confirma l’admissió en cua i pot perdre esdeveniments confirmats si el processador falla. L’entrada almenys una vegada es deduplica per identitat de productor/sessió/esdeveniment, mentre que la pressió de sortida i la pèrdua de transport continuen sent observables per separat. Protegiu el WAL i les sortides de metadades com proves sensibles i utilitzeu TLS/mTLS i autorització de privilegi mínim.
Opcions principals
| Opció | Valor per defecte | Descripció |
|---|---|---|
-l, --listen | :55555 | Adreça d’escolta per a connexions de nodes Hunter i TUI |
-I, --id | nom de l’amfitrió | Identificador del processador |
-m, --max-hunters | 100 | Màxim de connexions simultànies de nodes Hunter |
--max-subscribers | 100 | Màxim de subscriptors TUI (0 = il·limitat) |
-s, --stats | true | Mostrar estadístiques periòdiques |
-d, --enable-detection | true | Activar la detecció de protocols en els paquets rebuts |
Gestió de nodes Hunter
Quan es connecten nodes Hunter, el processador:
- Registra el node Hunter i l’assigna al conjunt de connexions
- Comença a rebre lots de paquets mitjançant transmissió contínua gRPC
- Envia respostes als batecs amb senyals de control de flux
- Distribueix els filtres actius al node Hunter
L’estat dels nodes Hunter se supervisa mitjançant batecs (interval de 5 segons). Els nodes Hunter inactius es netegen després de 5 minuts sense batec.
Canals de sortida
Cada paquet que rep un processador es pot enviar a diverses destinacions simultàniament. Aquests canals de sortida són independents; activeu qualsevol combinació:
flowchart LR
Hunters -->|gRPC| P[Processor]
P --> PCAP["PCAP Files<br/>(unified, per-call, auto-rotating)"]
P --> LOGS["Structured Logs<br/>(TSV or JSONL)"]
P --> TUI["TUI Subscribers<br/>(lc watch remote)"]
P --> VIF["Virtual Interface<br/>(lc0 → Wireshark, Snort, etc.)"]
P --> UP["Upstream Processor<br/>(hierarchical forwarding)"]
P --> Hooks["Command Hooks<br/>(gzip, upload, alerting)"]
P --> LI["LI Delivery<br/>(X2/X3 to MDF)"]
| Canal | Opcions | Descripció |
|---|---|---|
| PCAP unificat | -w | Tots els paquets en un sol fitxer |
| PCAP per trucada | --per-call-pcap | Fitxers separats per trucada VoIP (SIP + RTP) |
| PCAP amb rotació automàtica | --auto-rotate-pcap | Paquets no VoIP en fitxers amb rotació per temps/mida |
| Registres estructurats | --log-dir | Metadades de connexió i protocol compatibles amb Zeek |
| Subscriptors TUI | (sempre activat) | Transmissió en temps real a clients lc watch remote |
| Interfície virtual | -V | Injectar en un dispositiu tap/tun per a eines externes |
| Reenviament cap amunt | -P | Reenviar a un altre processador (mode jeràrquic) |
| Accions d’ordres | --pcap-command, --voip-command | Executar scripts quan es tanca un PCAP o finalitza una trucada |
| Lliurament LI | --li-enabled | PDU X2/X3 cap a MDF (requereix compilació -tags li) |
lc tap admet els mateixos canals de sortida (consulteu Mode autònom amb lc tap).
Les seccions següents cobreixen cada canal en detall. Per al lliurament LI, consulteu Intercepció legal.
Registres estructurats de protocols
Establiu --log-dir per activar els fluxos normalitzats per defecte conn, dns, ssl, http, smtp, files i radius. El registre està desactivat per defecte i utilitza TSV d’estil Zeek llevat que se seleccioni --log-format json:
lc process --listen :55555 --log-dir /var/log/lippycat \
--log-streams conn,dns,ssl --tls-cert server.crt --tls-key server.key
El valor per defecte --log-emit-stage terminal evita fitxers duplicats en una jerarquia de processadors. Les cues limitades protegeixen el processament de paquets; per això els operadors han de supervisar els avisos de descart. Consulteu la guia completa Registres estructurats de protocols per veure esquemes, rotació, completesa, entrada a SIEM i privadesa.
Modes d’escriptura PCAP
Els processadors admeten tres modes d’escriptura PCAP independents. Tots tres poden estar actius simultàniament.
PCAP unificat
Escriure tots els paquets rebuts en un únic fitxer continu:
lc process --listen :55555 \
--write-file /var/capture/all-traffic.pcap \
--tls-cert server.crt --tls-key server.key
Casos d’ús: compliment normatiu/pistes d’auditoria, anàlisi forense i reproducció del trànsit.
PCAP per trucada (VoIP)
Escriure fitxers PCAP SIP i RTP separats per a cada trucada VoIP:
lc process --listen :55555 \
--per-call-pcap \
--per-call-pcap-dir /var/capture/calls \
--per-call-pcap-pattern "{timestamp}_{callid}.pcap" \
--tls-cert server.crt --tls-key server.key
Per a cada trucada es creen dos fitxers:
20250123_143022_abc123_sip.pcap # SIP signaling
20250123_143022_abc123_rtp.pcap # RTP media
Marcadors de patró: {callid}, {from}, {to}, {timestamp}.
Els fitxers roten independentment quan arriben a 100 MB. El PCAP per trucada només s’aplica al trànsit VoIP; els paquets no VoIP els gestionen els altres escriptors.
Casos d’ús: enregistrament de trucades VoIP, anàlisi de qualitat per trucada i arxivament selectiu.
Cicle de vida dels fitxers per trucada
El gestor d’escriptors per trucada és responsable de la vida lògica de cada Call-ID. La seva màquina d’estats és:
| Estat | Admissió d’escriptors i comportament dels paquets |
|---|---|
| Actiu | Una generació d’escriptor propietat del gestor accepta paquets SIP i RTP. La rotació continua sent part d’aquesta mateixa generació. |
| Finalitzant | L’escriptor s’ha eliminat del conjunt actiu i s’ha instal·lat una marca de baixa en una sola transició atòmica. No es pot admetre cap escriptor normal nou mentre es sincronitzen i tanquen els fitxers, es netegen les associacions d’extrems i s’executen les accions de finalització. |
| Finalitzat / marcat de baixa | Els paquets que arriben per a la Call-ID són trànsit tardà esperat i se suprimeixen. Això es comunica com un resultat tipat i no fatal de trucada finalitzada, amb un advertiment com a màxim un cop per minut i un comptador atòmic de paquets tardans suprimits; no es comunica com un error de creació de fitxer. |
| Caducat | Després que caduqui la marca de baixa, reutilitzar la Call-ID pot iniciar una generació nova d’escriptor. La generació nova rep un nom de fitxer sense col·lisions i mai no sobreescriu ni afegeix dades a un artefacte d’una trucada anterior. |
| Aturada del gestor | S’atura l’admissió d’escriptors, els actius passen a finalització i els buffers dels fitxers es buiden abans de tancar-los. Utilitzeu SIGTERM o SIGINT per permetre que aquest buidatge acabi. |
Les Call-ID finalitzades es retenen durant una hora, coincidint amb la finestra de compatibilitat de trucades tancades. El gestor també aplica un límit intern estricte de 100.000 marques de baixa i expulsa les entrades més antigues quan cal. Aquests límits restringeixen l’ús de memòria tot absorbint trànsit de xarxa retardat o duplicat. Quan qualsevol límit de retenció elimina una entrada, un paquet posterior es pot tractar com una generació nova de Call-ID; els noms dels artefactes continuen incloent material únic de generació perquè un fitxer antic no es confongui amb la nova trucada activa.
per_call_pcap.max_writers és un llindar flexible de pressió, no un límit destructiu de capacitat. Superar-lo emet un advertiment amb freqüència limitada, però no finalitza, marca de baixa ni desconnecta una trucada possiblement activa. Les trucades inactives i les completades segons el protocol continuen sent les vies segures per alliberar recursos. Els operadors que estableixen aquest llindar han de dimensionar els límits de descriptors de fitxer per a superacions temporals.
La política actual no reté paquets tardans. En particular, els paquets suprimits no creen un PCAP .late i no poden invocar una segona vegada l’acció normal de finalització de trucada. Un futur mode de retenció tardana hauria d’utilitzar un PCAP independent diferent amb la seva pròpia capçalera vàlida i una semàntica de finalització separada.
Les dates de modificació dels fitxers no són un estat de cicle de vida. Per tant, un reinici del procés o una marca de baixa caducada mai no provoca que un escriptor continuï un fitxer existent només perquè s’ha modificat recentment. Només un escriptor que encara sigui al conjunt actiu del gestor pot afegir dades als seus fitxers. Els artefactes nous s’obren amb creació exclusiva. Una col·lisió de camí selecciona un nom amb el sufix _gen_<Unix-nanoseconds> (amb un sufix numèric de reintent si cal), escriu una capçalera PCAP independent nova i mai no trunca ni afegeix dades ambiguament al fitxer existent.
PCAP amb rotació automàtica
Escriure paquets no VoIP en fitxers amb rotació automàtica segons l’activitat:
lc process --listen :55555 \
--auto-rotate-pcap \
--auto-rotate-pcap-dir /var/capture/bursts \
--auto-rotate-idle-timeout 30s \
--auto-rotate-max-size 100M \
--tls-cert server.crt --tls-key server.key
Desencadenants de rotació:
- Temps d’inactivitat: tancar el fitxer després de 30 segons d’inactivitat (configurable)
- Mida del fitxer: rotar quan el fitxer arriba a 100 MB (configurable)
- Durada: rotar després d’1 hora com a màxim
Sortida:
20250123_143022.pcap # First burst
20250123_144530.pcap # Next burst after 30s idle
Casos d’ús: pics de trànsit de xarxa, captura basada en sessions i monitoratge de l’amplada de banda.
Combinació de modes
Tots tres modes són independents. Activeu-los junts per obtenir una captura completa:
lc process --listen :55555 \
--write-file /var/capture/all.pcap \
--per-call-pcap --per-call-pcap-dir /var/capture/calls \
--auto-rotate-pcap --auto-rotate-pcap-dir /var/capture/bursts \
--tls-cert server.crt --tls-key server.key
Els paquets VoIP s’encaminen a l’escriptor per trucada. Els paquets no VoIP van a l’escriptor amb rotació automàtica. Tots els paquets van a l’escriptor unificat.
Accions d’ordres
Executar ordres personalitzades quan s’escriuen fitxers PCAP o finalitzen trucades VoIP.
Acció de finalització PCAP
S’executa quan es tanca qualsevol fitxer PCAP:
Comprimir fitxers PCAP:
lc process --listen :55555 --per-call-pcap \
--pcap-command 'gzip %pcap%' \
--tls-cert server.crt --tls-key server.key
Pujar fitxers PCAP a emmagatzematge al núvol:
lc process --listen :55555 --per-call-pcap \
--pcap-command 'aws s3 cp %pcap% s3://captures/' \
--tls-cert server.crt --tls-key server.key
Marcador: %pcap% — camí complet del fitxer PCAP.
Acció de finalització de trucada VoIP
S’executa quan acaba una trucada VoIP (després d’un període de gràcia de 5 segons per a paquets tardans):
lc process --listen :55555 --per-call-pcap \
--voip-command '/opt/scripts/process-call.sh %callid% %dirname%' \
--tls-cert server.crt --tls-key server.key
Marcadors:
| Marcador | Descripció |
|---|---|
%callid% | Call-ID de SIP |
%dirname% | Directori que conté els fitxers PCAP de la trucada |
%caller% | Trucant (usuari SIP From) |
%called% | Destinatari de la trucada (usuari SIP To) |
%calldate% | Hora d’inici de la trucada (format RFC3339) |
Acció de túnels DNS
S’executa quan es detecta un túnel DNS (processador o mode tap dns):
lc process --listen :55555 \
--tunneling-command 'echo "ALERT: %domain% score=%score%" >> /var/log/tunneling.log' \
--tunneling-threshold 0.7 \
--tunneling-debounce 5m \
--tls-cert server.crt --tls-key server.key
Marcadors: %domain%, %score%, %entropy%, %queries%, %srcips%, %hunter%, %timestamp%.
Detalls d’execució de les accions
- Les ordres s’executen de manera asíncrona; mai no bloquegen el processament de paquets
- Les ordres s’executen mitjançant l’intèrpret d’ordres (
sh -c) --command-timeoutcontrola el temps límit d’execució (per defecte: 30 s)--command-concurrencylimita les execucions paral·leles (per defecte: 10)- Les ordres fallides es registren però no afecten el processament
Gestió de filtres
Els processadors gestionen filtres que controlen quins paquets reenvien els nodes Hunter. Això és especialment important per als nodes Hunter VoIP, on els filtres determinen quines trucades es capturen.
Fitxer de filtres
Els filtres es desen en un fitxer YAML:
lc process --listen :55555 \
--filter-file /etc/lippycat/filters.yaml \
--tls-cert server.crt --tls-key server.key
Ubicació per defecte: ~/.config/lippycat/filters.yaml.
Format del fitxer de filtres:
filters:
- id: "filter-001"
type: "sip_user"
pattern: "alicent@example.com"
action: "forward"
enabled: true
- id: "filter-002"
type: "phone_number"
pattern: "*456789"
action: "forward"
enabled: true
- id: "filter-003"
type: "ip_address"
pattern: "192.168.1.0/24"
action: "forward"
enabled: false
- id: "filter-004"
type: "dns_domain"
pattern: "*.malware-domain.com"
action: "forward"
enabled: true
- id: "filter-005"
type: "tls_sni"
pattern: "*.example.com"
action: "forward"
enabled: true
Tipus de filtre
Els filtres cobreixen totes les categories de protocols admeses:
| Categoria | Tipus habituals | Patró d’exemple |
|---|---|---|
| VoIP | sip_user, phone_number, call_id, imsi, imei | alicent@example.com |
| DNS | dns_domain | *.malware-domain.com |
| TLS | tls_sni, tls_ja3, tls_ja4 | *.example.com |
| HTTP | http_host, http_url | api.example.com |
| Correu electrònic | email_address, email_subject | *@example.com |
| RADIUS | radius_username, radius_mac, radius_attribute, radius_compound | alice@example.test |
| Universal | ip_address, bpf | 10.0.1.0/24 |
Per veure la llista completa de tipus de filtre, patrons de comodins i detalls de coincidència, consulteu l’Apèndix E: referència de tipus de filtre.
Distribució de filtres
Quan es carreguen filtres, el processador els distribueix automàticament a tots els nodes Hunter connectats. Els nodes Hunter reben actualitzacions de filtres mitjançant transmissió contínua gRPC i les apliquen al processament local de paquets.
Per a canvis en viu, utilitzeu les ordres d’administració:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type sip_user --pattern alicent
lc rm filter -P processor:55555 --tls-ca ca.crt --id filter-001
El fitxer YAML de filtres continua sent útil per a l’estat d’inici i la importació per lots, però les actualitzacions habituals de filtres no requereixen reiniciar el processador.
Topologies avançades
Mode jeràrquic
Els processadors poden reenviar trànsit a processadors superiors, creant arquitectures de diversos nivells:
Processador de perifèria, que rep dels nodes Hunter i reenvia al regional:
lc process --listen :55555 \
--processor regional-processor:55555 \
--tls-cert server.crt --tls-key server.key --tls-ca ca.crt
Processador regional, que rep de la perifèria i reenvia al central:
lc process --listen :55555 \
--processor central-processor:55555 \
--tls-cert server.crt --tls-key server.key --tls-ca ca.crt
Processador central per a l’agregació final:
lc process --listen :55555 \
--write-file /var/capture/all-traffic.pcap \
--tls-cert server.crt --tls-key server.key
flowchart LR
subgraph Site1["Site A"]
H1[Hunter] --> E1[Edge Processor]
H2[Hunter] --> E1
end
subgraph Site2["Site B"]
H3[Hunter] --> E2[Edge Processor]
H4[Hunter] --> E2
end
E1 -->|gRPC/TLS| R[Regional]
E2 -->|gRPC/TLS| R
R -->|gRPC/TLS| C[Central]
Cada processador de la cadena pot escriure PCAP localment a més de reenviar cap amunt.
El reenviament de paquets és el valor per defecte per compatibilitat. Per transmetre esdeveniments normalitzats amb un límit d’admissió recuperable a cada salt, configureu explícitament cada processador no terminal:
lc process --listen :55555 --id regional \
--processor central:55555 --forward-mode events \
--event-delivery-profile reliable \
--event-spool-dir /var/lib/lippycat/processor-event-spool \
--tls-cert server.crt --tls-key server.key --tls-ca ca.crt
La transmissió conserva la identitat i la seqüència del productor original. El mode fiable reté els lots no confirmats al spool d’esdeveniments; el mode només en memòria pot perdre treball confirmat en una caiguda. El recurs a paquets està desactivat llevat que s’estableixi explícitament --event-fallback-to-packets.
Operació del spool fiable d’esdeveniments cap amunt
Doneu a cada processador el seu propi directori de spool i superviseu tant el límit configurat com l’espai lliure del sistema de fitxers. Les càrregues útils dels registres codificats estan limitades a 4 MiB fins i tot quan l’emmagatzematge total del spool és il·limitat. Per tant, --event-ingress-max-batch-bytes del receptor ha de ser com a mínim de 4 MiB, i --event-queue-size ha de poder contenir un lot entrant complet (fins a 4.096 esdeveniments). Per veure el comportament de recuperació i la resposta segura als errors d’inici o durabilitat, consulteu Emmagatzematge i recuperació del spool d’esdeveniments.
Interfície virtual
Exposeu el trànsit agregat de tots els nodes Hunter connectats en una interfície de xarxa virtual per integrar-lo amb eines de tercers:
Iniciar un processador amb una interfície virtual:
lc process --listen :55555 --virtual-interface \
--tls-cert server.crt --tls-key server.key
Supervisar la interfície amb Wireshark:
wireshark -i lc0
Alternativament, executar un IDS sobre el flux agregat:
snort -i lc0 -c /etc/snort/snort.conf
Opcions d’interfície virtual: --virtual-interface, --vif-name (per defecte: lc0), --vif-type (tap/tun), --vif-buffer-size.
Requereix la capacitat CAP_NET_ADMIN.
Fitxer de configuració
Totes les opcions del processador es poden establir a ~/.config/lippycat/config.yaml:
processor:
listen_addr: "0.0.0.0:55555"
id: "prod-processor-01"
max_hunters: 100
max_subscribers: 100
write_file: "/var/capture/packets.pcap"
enable_detection: true
filter_file: "/etc/lippycat/filters.yaml"
per_call_pcap:
enabled: true
output_dir: "/var/capture/calls"
file_pattern: "{timestamp}_{callid}.pcap"
auto_rotate_pcap:
enabled: true
output_dir: "/var/capture/bursts"
idle_timeout: "30s"
max_size: "100M"
pcap_command: "gzip %pcap%"
voip_command: "/opt/scripts/process-call.sh %callid% %dirname%"
command_timeout: "30s"
command_concurrency: 10
tls:
cert_file: "/etc/lippycat/certs/server.crt"
key_file: "/etc/lippycat/certs/server.key"
ca_file: "/etc/lippycat/certs/ca.crt"
client_auth: true
Per veure procediments de desplegament en producció (serveis systemd, monitoratge, comprovacions d’estat), consulteu el Capítol 12: manual d’operacions.
Mode autònom amb lc tap
El mode Tap combina captura local de paquets amb totes les funcions del processador en un sol procés. És l’opció adequada quan voleu PCAP per trucada, servei TUI, accions d’ordres o reenviament cap amunt, però no necessiteu la complexitat de nodes Hunter i processador separats.
La fórmula: tap = process + hunt - gRPC
Tot el que pot fer hunt (captura, filtratge GPU, detecció de protocols) i tot el que pot fer process (escriptura PCAP, servei TUI, accions d’ordres, interfície virtual), sense el transport gRPC entre tots dos.
flowchart LR
subgraph Tap["lc tap (single process)"]
direction LR
C[Capture<br>+ Filtering] --> A[Protocol<br>Analysis]
A --> W[(PCAP Writing)]
A --> V[Virtual<br>Interface]
end
NIC["Network<br>Interface"] --> C
TUI[TUI Client] <-->|gRPC| Tap
A -.->|optional| UP[Upstream<br>Processor]
Quan utilitzar Tap
| Escenari | Ús | Motiu |
|---|---|---|
| Inspecció ràpida de paquets | lc sniff | L’opció més senzilla, només sortida CLI |
| Monitoratge VoIP en una màquina | lc tap voip | PCAP per trucada, TUI, sense infraestructura |
| Captura i TUI en una màquina | lc tap | Totes les funcions del processador localment |
| Node de perifèria amb captura local i central | lc tap --processor | Mode autònom i reenviament cap amunt |
| Captura distribuïda en diversos segments | lc hunt + lc process | Calen diversos punts de captura |
La pregunta clau: necessiteu capturar des de diverses màquines? Si és així, utilitzeu hunt + process. Si no, tap és més senzill.
Modes de reenviament cap amunt i proves locals
Quan s’estableix --processor, --forward-mode packets és el valor per defecte per compatibilitat. Envia paquets en brut perquè el processador superior pugui crear PCAP, servir vistes de paquets, injectar en una interfície virtual i fer l’anàlisi canònica.
--forward-mode events, en canvi, fa l’anàlisi canònica al node Tap i només envia metadades normalitzades. Els bytes dels paquets en brut i el contingut dels fitxers mai no entren al transport d’esdeveniments. Per tant, les funcions superiors dependents de paquets no estan disponibles, però els escriptors PCAP locals, la rotació, la sortida per trucada i les accions posteriors a l’escriptura del node Tap continuen funcionant:
sudo lc tap -i eth0 -P central:55555 --forward-mode events \
--auto-rotate-pcap --auto-rotate-pcap-dir /var/lib/lippycat/pcap \
--event-spool-dir /var/lib/lippycat/event-spool --tls-ca ca.crt
Utilitzeu aquesta topologia per retenir proves forenses a la perifèria tot centralitzant metadades menys reveladores. La transmissió fiable d’esdeveniments utilitza un spool recuperable; memory-only pot perdre esdeveniments admesos en cua si el processador falla. Protegiu tant els PCAP com els spools d’esdeveniments amb permisos restringits, xifratge i límits de retenció. La negociació d’esdeveniments provoca un tancament segur llevat que --event-fallback-to-packets permeti explícitament el recurs. El mode de paquets per defecte continua sent interoperable amb versions superiors que només admeten paquets.
Operació del spool fiable d’esdeveniments cap amunt
Doneu a cada node Tap el seu propi directori de spool i superviseu tant el límit configurat com l’espai lliure del sistema de fitxers. Les càrregues útils dels registres codificats estan limitades a 4 MiB fins i tot quan l’emmagatzematge total del spool és il·limitat; si no es pot desar un esdeveniment o el seu informe exacte de pèrdua, el reenviament s’atura en lloc d’ocultar la pèrdua. Per veure el comportament de recuperació i la resposta segura als errors d’inici o durabilitat, consulteu Emmagatzematge i recuperació del spool d’esdeveniments.
Ús bàsic
Registres estructurats de protocols
Tap comparteix la cadena de registre estructurat del processador. tap dns, tap http i les altres subordres de protocol hereten les opcions de l’ordre pare:
sudo lc tap dns -i eth0 --insecure \
--log-dir /var/log/lippycat --log-streams conn,dns
El registre està desactivat per defecte. En reenviar cap amunt, el valor per defecte --log-emit-stage terminal només emet al processador terminal. Consulteu Registres estructurats de protocols per veure esquemes de camps, comportament TSV/JSONL, rotació, observacions de límit inferior i controls de privadesa.
TLS està activat per defecte per a la interfície de gestió (connexions TUI):
Captura autònoma amb TLS:
sudo lc tap -i eth0 --tls-cert server.crt --tls-key server.key
Per a proves locals sense TLS:
sudo lc tap -i eth0 --insecure
Connectar la TUI al node Tap:
lc watch remote -P tap-host:55555 --tls-ca ca.crt
Alternativament, connectar sense TLS:
lc watch remote -P localhost:55555 --insecure
lc watch remote es pot connectar directament amb --processor (-P) o llegir els processadors i nodes Tap de destinació d’un fitxer YAML de nodes. Consulteu Monitoratge remot amb la TUI per veure el format de fitxer i els camins de cerca per defecte.
Subordres de protocol
Com sniff i hunt, tap té subordres específiques de protocol.
VoIP (tap voip)
El mode Tap més habitual. El PCAP per trucada està activat per defecte:
Captura VoIP amb filtratge d’usuari SIP:
sudo lc tap voip -i eth0 --sip-user alicent --insecure
Captura VoIP amb TLS i un directori PCAP per trucada:
sudo lc tap voip -i eth0 \
--per-call-pcap-dir /var/voip/calls \
--tls-cert server.crt --tls-key server.key
Captura VoIP restringida a un port SIP:
sudo lc tap voip -i eth0 --sip-port 5060 --insecure
Captura selectiva de contingut multimèdia a Linux:
sudo lc tap voip -i eth0 --sip-user alicent \
--rtp-ebpf --sip-port 5060 --insecure
Amb --rtp-ebpf, els extrems RTP/RTCP s’aprenen de l’SDP de les trucades coincidents; --rtp-port-range és innecessari. --sip-port és opcional i restringeix la captura de senyalització. El contingut multimèdia es captura només després de la selecció i la publicació dels extrems, de manera que l’RTP anterior no es desa en buffers. Un interval RTP configurat explícitament continua restringint els extrems apresos. Consulteu Captura selectiva de contingut multimèdia amb eBPF.
Captura VoIP d’alt rendiment:
sudo lc tap voip -i eth0 --tcp-performance-mode high_performance --insecure
El PCAP per trucada crea fitxers SIP i RTP separats per a cada trucada:
20250123_143022_abc123_sip.pcap # SIP signaling
20250123_143022_abc123_rtp.pcap # RTP media
Les accions d’ordres VoIP funcionen igual que al processador:
sudo lc tap voip -i eth0 \
--voip-command '/opt/scripts/process-call.sh %callid% %dirname%' \
--insecure
DNS (tap dns)
Captura DNS amb detecció de túnels i alertes:
Captura DNS amb alertes de túnels:
sudo lc tap dns -i eth0 \
--tunneling-command 'echo "ALERT: %domain% score=%score%" >> /var/log/tunneling.log' \
--tunneling-threshold 0.7 \
--insecure
Captura DNS amb ports personalitzats:
sudo lc tap dns -i eth0 --dns-port 53,5353 --udp-only --insecure
HTTP (tap http)
Captura HTTP amb filtratge d’amfitrió, camí i mètode:
Captura HTTP amb filtratge d’amfitrió:
sudo lc tap http -i eth0 --host "*.example.com" --insecure
Captura HTTP amb desxifratge HTTPS:
sudo lc tap http -i eth0 --tls-keylog /tmp/sslkeys.log --insecure
TLS (tap tls)
Captura de negociacions TLS amb empremtes JA3/JA3S/JA4:
Captura TLS amb filtratge SNI:
sudo lc tap tls -i eth0 --sni "*.example.com" --insecure
Correu electrònic (tap email)
Captura SMTP, IMAP i POP3 amb filtratge d’adreces:
Captura de correu només SMTP:
sudo lc tap email -i eth0 --protocol smtp --insecure
Captura de correu amb filtratge de remitent:
sudo lc tap email -i eth0 --sender "*@suspicious.com" --insecure
RADIUS (tap radius)
El mode RADIUS combina la captura local d’autenticació/comptabilització amb sortides del processador com PCAP, registres estructurats i visualització TUI remota:
sudo lc tap radius -i mirror0 --radius-port 1645,1646 \
--log-dir /var/log/lippycat --log-streams radius --insecure
Els criteris exactes de compte, MAC, atribut i línia amb àmbit utilitzen les mateixes opcions que sniff radius i hunt radius. La captura RADIUS ordinària no requereix una compilació LI; el lliurament X2 autoritzat opcional es configura independentment. Consulteu Captura RADIUS i POI per veure la configuració completa.
Escriptura PCAP
Tap admet els tres modes PCAP del processador (consulteu el Capítol 8 per obtenir detalls):
PCAP unificat:
sudo lc tap -i eth0 --write-file /var/capture/all.pcap --insecure
PCAP per trucada, activat per defecte per a tap voip:
sudo lc tap voip -i eth0 \
--per-call-pcap --per-call-pcap-dir /var/capture/calls --insecure
PCAP amb rotació automàtica:
sudo lc tap -i eth0 \
--auto-rotate-pcap --auto-rotate-pcap-dir /var/capture/bursts \
--auto-rotate-idle-timeout 30s --auto-rotate-max-size 100M --insecure
Les accions d’ordres (--pcap-command, --voip-command) funcionen igual que al processador.
Servei TUI
Els nodes Tap ofereixen una API de gestió gRPC a --listen (per defecte: :55555), que permet als clients TUI connectar-se per al monitoratge en temps real:
Iniciar el node Tap amb TLS:
sudo lc tap voip -i eth0 --tls-cert server.crt --tls-key server.key
Connectar la TUI des d’un altre terminal:
lc watch remote -P tap-host:55555 --tls-ca ca.crt
Per al desenvolupament local, utilitzeu --insecure tant al node Tap com a la TUI:
sudo lc tap voip -i eth0 --insecure
lc watch remote -P localhost:55555 --insecure
Reenviament cap amunt
Els nodes Tap poden reenviar trànsit capturat a un processador central, actuant com nodes de perifèria en un desplegament jeràrquic:
Un node Tap de perifèria captura localment i reenvia al processador central:
sudo lc tap voip -i eth0 \
--processor central-processor:55555 \
--tls-cert edge.crt --tls-key edge.key --tls-ca ca.crt
Això combina l’escriptura PCAP local i l’accés TUI a la perifèria amb l’agregació central.
Telemetria del buffer de captura
Tap utilitza canals normal, prioritari SIP i de sortida combinada. Amb sip_buffer_size: 0, la capacitat SIP coincideix automàticament amb buffer_size; un valor positiu la sobreescriu explícitament.
sip_priority_classified compta cada paquet reconegut i encaminat pel camí prioritari SIP, inclosos els que després es degraden o es descarten definitivament. capture_buffer_sip_demotions compta paquets classificats retinguts al canal normal després d’omplir-se el canal SIP i no és una pèrdua de paquets. capture_buffer_sip_drops compta paquets classificats rebutjats per tots dos canals d’entrada i és una pèrdua definitiva de paquets. Utilitzeu els tres parells de longitud/capacitat dels canals per localitzar l’etapa saturada.
flowchart LR
subgraph Edge["Edge Tap Node"]
T[Local Capture]
LP[(Local PCAP)]
T --> LP
end
subgraph Central["Central Processor"]
P[Aggregation]
CP[(Central PCAP)]
P --> CP
end
T -->|gRPC/TLS| P
TUI1[Local TUI] <-->|gRPC| T
TUI2[Central TUI] <-->|gRPC| P
Interfície virtual
Exposar trànsit filtrat a eines de tercers mitjançant una interfície de xarxa virtual:
Capturar i exposar trànsit en una interfície virtual:
sudo lc tap voip -i eth0 --virtual-interface --insecure
Supervisar amb Wireshark:
wireshark -i lc0
Alternativament, executar tcpdump:
tcpdump -i lc0 -w filtered.pcap
Requereix la capacitat CAP_NET_ADMIN. Consulteu --vif-name, --vif-type, --vif-buffer-size per a la configuració.
Fitxer de configuració
Totes les opcions de tap es poden establir a ~/.config/lippycat/config.yaml:
tap:
interfaces:
- eth0
bpf_filter: ""
buffer_size: 10000
sip_buffer_size: 0 # Automatic: match buffer_size
batch_size: 100
batch_timeout_ms: 100
listen_addr: ":55555"
id: "edge-tap-01"
processor_addr: "" # Empty for standalone, set for upstream forwarding
per_call_pcap:
enabled: true
output_dir: "/var/capture/calls"
file_pattern: "{timestamp}_{callid}.pcap"
auto_rotate_pcap:
enabled: false
output_dir: "/var/capture/bursts"
idle_timeout: "30s"
max_size: "100M"
pcap_command: "gzip %pcap%"
voip_command: ""
command_timeout: "30s"
command_concurrency: 10
tls:
cert_file: "/etc/lippycat/certs/server.crt"
key_file: "/etc/lippycat/certs/server.key"
voip:
sip_user: ""
udp_only: false
sip_ports: ""
tcp_performance_mode: "balanced"
tcp_reassembly_shards: 1
Administració CLI
lippycat ofereix un conjunt d’ordres CLI per gestionar i inspeccionar desplegaments distribuïts. Aquestes ordres segueixen un patró coherent de verb i objecte i generen JSON per facilitar-ne l’ús en scripts.
flowchart LR
subgraph Commands["CLI Admin Commands"]
direction TB
Show["lc show"]
List["lc list"]
Set["lc set"]
Rm["lc rm"]
end
subgraph Targets["Resources"]
direction TB
Proc[Processor Status]
Hunters[Hunter Info]
Filters[Filters]
Topo[Topology]
Ifaces[Interfaces]
end
Show --> Proc
Show --> Hunters
Show --> Topo
Show --> Filters
List --> Ifaces
List --> Hunters
List --> Filters
Set --> Filters
Rm --> Filters
Totes les ordres remotes es connecten a un processador mitjançant gRPC i comparteixen un conjunt d’opcions de connexió. Les ordres locals (show config, list interfaces) s’executen sense connexió a un processador.
Els resultats d’exemple següents utilitzen valors il·lustratius. Els noms i les descripcions de les interfícies depenen de l’amfitrió; els camps JSON opcionals depenen del desplegament i de la telemetria disponible.
Opcions de connexió
Totes les ordres remotes admeten aquestes opcions. TLS està activat per defecte: cal passar explícitament --insecure per desactivar-lo.
| Opció | Descripció |
|---|---|
-P, --processor | Adreça del processador (amfitrió:port): obligatòria per a les ordres remotes |
--tls-ca | Fitxer del certificat de la CA |
--tls-cert | Certificat del client (per a mTLS) |
--tls-key | Clau privada del client (per a mTLS) |
--tls-skip-verify | Omet la verificació del certificat (només per a proves) |
--insecure | Desactiva completament TLS (només per a proves) |
Aquestes opcions també es poden definir al fitxer de configuració, sota remote:
remote:
processor: "processor.example.com:55555"
insecure: false
tls:
ca: "/etc/lippycat/certs/ca.crt"
cert: "/etc/lippycat/certs/client.crt"
key: "/etc/lippycat/certs/client.key"
skip_verify: false
Inspecció amb lc show
L’ordre show obté informació d’un processador en execució. Totes les subordres excepte show config requereixen -P.
show status
Mostra l’estat del processador i les estadístiques agregades:
lc show status -P processor:55555 --tls-ca ca.crt
{
"storage": {
"filters": {
"mode": "yaml",
"state": "ready",
"last_outcome": "committed",
"commits": 3
}
},
"processor_id": "central-proc",
"status": "healthy",
"total_hunters": 1,
"healthy_hunters": 1,
"warning_hunters": 0,
"error_hunters": 0,
"total_packets_received": 12500,
"total_packets_forwarded": 0,
"total_filters": 3
}
show hunter
Mostra els detalls d’un Hunter concret:
lc show hunter --id edge-01 -P processor:55555 --tls-ca ca.crt
{
"hunter_id": "edge-01",
"hostname": "capture-node-1",
"remote_addr": "10.0.1.10:45678",
"status": "healthy",
"connected_duration_sec": 3600,
"interfaces": ["eth0"],
"stats": {
"packets_captured": 500000,
"packets_matched": 12500,
"packets_forwarded": 12500,
"packets_dropped": 0,
"capture_buffer_regular_drops": 0,
"capture_buffer_sip_drops": 0,
"capture_buffer_sip_demotions": 0,
"batch_channel_drops": 0,
"capture_buffer_regular_len": 0,
"capture_buffer_regular_capacity": 1000,
"capture_buffer_sip_len": 0,
"capture_buffer_sip_capacity": 100,
"capture_buffer_output_len": 0,
"capture_buffer_output_capacity": 100,
"buffer_bytes": 1048576,
"active_filters": 3,
"cpu_percent": 12.5,
"memory_rss_bytes": 67108864,
"rtp_ownership_unresolved": 0,
"rtp_ownership_ambiguous": 0,
"identity_inheritance_suppressed": 0,
"tcp_established_idle_retentions": 0,
"tcp_pre_rearm_discarded_chunks": 0,
"tcp_rearm_rejected_chunks": 0
},
"capabilities": {
"filter_types": ["sip_user", "ip_address"],
"max_buffer_size": 67108864,
"gpu_acceleration": true,
"af_xdp": false
}
}
show topology
Mostra tot l’arbre de la topologia distribuïda. És útil per verificar desplegaments jeràrquics:
lc show topology -P processor:55555 --tls-ca ca.crt
{
"processor_id": "central-proc",
"address": ":55555",
"status": "healthy",
"hierarchy_depth": 0,
"reachable": true,
"hunters": [
{
"hunter_id": "edge-01",
"hostname": "capture-node-1",
"remote_addr": "10.0.1.10:45678",
"status": "healthy",
"connected_duration_sec": 3600,
"interfaces": ["eth0"],
"stats": {
"packets_captured": 500000,
"packets_matched": 12500,
"packets_forwarded": 12500,
"packets_dropped": 0,
"capture_buffer_regular_drops": 0,
"capture_buffer_sip_drops": 0,
"capture_buffer_sip_demotions": 0,
"batch_channel_drops": 0,
"capture_buffer_regular_len": 0,
"capture_buffer_regular_capacity": 1000,
"capture_buffer_sip_len": 0,
"capture_buffer_sip_capacity": 100,
"capture_buffer_output_len": 0,
"capture_buffer_output_capacity": 100,
"buffer_bytes": 1048576,
"active_filters": 3,
"cpu_percent": 12.5,
"memory_rss_bytes": 67108864,
"rtp_ownership_unresolved": 0,
"rtp_ownership_ambiguous": 0,
"identity_inheritance_suppressed": 0,
"tcp_established_idle_retentions": 0,
"tcp_pre_rearm_discarded_chunks": 0,
"tcp_rearm_rejected_chunks": 0
},
"capabilities": {
"filter_types": ["sip_user", "ip_address"],
"max_buffer_size": 67108864,
"gpu_acceleration": true,
"af_xdp": false
}
}
],
"downstream_processors": [
{
"processor_id": "region-east",
"address": "10.0.2.1:55555",
"status": "healthy",
"upstream_processor": "central-proc:55555",
"hierarchy_depth": 1,
"reachable": true
}
]
}
show filter
Mostra els detalls d’un filtre concret:
lc show filter --id myfilter -P processor:55555 --tls-ca ca.crt
show config
Mostra la configuració local com a JSON. Aquesta és l’única subordre de show que no requereix connexió a un processador:
lc show config
Llistats amb lc list
list interfaces
Descobreix les interfícies de xarxa disponibles per a la captura. És una ordre local: no cal connexió a un processador:
lc list interfaces
NAME TYPE STATE ADDRESSES NOTES
eth0 Ethernet up 192.168.1.42/24 default route
wlan0 Wi-Fi down —
lo Loopback up 127.0.0.1/8, ::1/128
any Aggregate — — all network interfaces
7 additional capture devices hidden; use --all to show them.
La vista per defecte inclou interfícies físiques, de bucle local, VPN/túnel i interfícies de xarxa sense classificar, encara que estiguin inactives. any només apareix quan la biblioteca de captura l’ofereix. S’amaguen els ponts reconeguts, determinats enllaços virtuals com ara veth de contenidors i dispositius TAP de màquines virtuals, i fonts de captura especials com D-Bus i NFQUEUE; les interfícies amb una ruta per defecte detectada continuen visibles. Utilitzeu --all per veure tots els dispositius de captura. Les llistes llargues d’adreces es reparteixen en línies de continuació sense ometre cap adreça.
A Linux, les metadades del sistema operatiu proporcionen els tipus d’interfície, l’estat operatiu i indicacions sobre les rutes per defecte IPv4/IPv6 de la taula d’encaminament principal. Altres plataformes utilitzen les metadades disponibles i indiquen com a desconegudes les dades que no poden obtenir. La indicació de la ruta per defecte no avalua l’encaminament basat en polítiques ni selecciona automàticament la interfície adequada per a la vostra captura.
lc list interfaces --all
lc list interfaces --names
lc list interfaces --json --check
--names imprimeix un nom per línia i no es pot combinar amb --json ni --check. El JSON conté una matriu interfaces, un hidden_count i, opcionalment, warnings. Cada interfície inclou name, type, state i default_route; description i addresses s’inclouen quan estan disponibles. Les entrades d’adreça contenen ip i un prefix_len opcional.
El llistat no comprova els permisos ni requereix root. --check obre breument els dispositius de xarxa mostrats sense mode promiscu i els tanca sense llegir paquets. La columna CAPTURE indica available, unavailable o skipped; els errors apareixen a NOTES. Les fonts de captura especials s’ometen. Amb --json, els resultats utilitzen els camps capture_access i, opcionalment, capture_error. Aquests resultats descriuen l’accés en el moment de la comprovació; les captures posteriors poden utilitzar opcions diferents.
Els errors d’accés a dispositius individuals no fan fallar l’ordre. Els errors d’enumeració retornen un estat de sortida diferent de zero i escriuen diagnòstics a stderr (--json utilitza un objecte d’error JSON). Els avisos de descobriment apareixen a stderr en mode de text/noms i dins del resultat en mode JSON.
list hunters
Llista els Hunters connectats a un processador remot:
Llista tots els Hunters connectats:
lc list hunters -P processor:55555 --tls-ca ca.crt
list filters
Llista els filtres configurats en un processador remot:
Llista tots els filtres:
lc list filters -P processor:55555 --tls-ca ca.crt
Llista els filtres d’un Hunter concret:
lc list filters -P processor:55555 --tls-ca ca.crt --hunter hunter-1
Creació de filtres amb lc set
L’ordre set filter crea o actualitza filtres en un processador (semàntica d’upsert). Funciona en dos modes: en línia i amb fitxer.
Mode en línia
Especifiqueu les propietats del filtre directament mitjançant opcions:
Creeu un filtre d’usuari SIP:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type sip_user --pattern "alicent@example.com"
Creeu un filtre de domini DNS amb comodí:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type dns_domain --pattern "*.malware-domain.com"
Creeu un filtre d’empremta TLS JA3:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type tls_ja3 --pattern e7d705a3286e19ea42f587b344ee6865
Creeu un filtre d’interval IP CIDR:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type ip_address --pattern "192.168.1.0/24"
Creeu un filtre de compte RADIUS exacte amb una revisió explícita:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type radius_username --pattern 'alice@example.test' --revision 1
Els filtres MAC requereixen exactament el perfil d’interpretació admès:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type radius_mac --pattern '02-00-00-00-00-01' --revision 1 \
--radius-mac-profile calling-station-id-uppercase-hyphen-v1
Creeu un filtre amb un ID i una descripció personalitzats:
lc set filter -P processor:55555 --tls-ca ca.crt \
--id voip-monitor-01 \
--type sip_user --pattern "*456789" \
--description "Monitor calls to 456789"
Seleccioneu Hunters concrets:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type sip_user --pattern "robb@example.com" \
--hunters edge-01,edge-02
Si s’omet --id, es genera automàticament un UUID.
Mode amb fitxer (per lots)
Importeu diversos filtres d’un fitxer YAML:
lc set filter -P processor:55555 --tls-ca ca.crt -f filters.yaml
El fitxer YAML utilitza el mateix format que el fitxer de filtres del processador. Els criteris RADIUS compostos han d’utilitzar el mode amb fitxer; consulteu l’esquema i exemple de filtre RADIUS.
Tipus de filtre
| Categoria | Tipus habituals | Patró d’exemple |
|---|---|---|
| VoIP | sip_user, phone_number, call_id, imsi, imei | alicent@example.com |
| DNS | dns_domain | *.example.com |
| TLS | tls_sni, tls_ja3, tls_ja4 | *.example.com |
| HTTP | http_host, http_url | *.example.com |
| Correu electrònic | email_address, email_subject | *@suspicious.com |
| RADIUS | radius_username, radius_mac, radius_attribute, radius_compound | alice@example.test |
| Universal | ip_address, bpf | 192.168.1.0/24 |
Per veure la llista completa de tipus de filtre, descripcions, patrons amb comodins i detalls de coincidència, consulteu l’Apèndix E: Referència dels tipus de filtre.
Opcions de set filter
| Opció | Descripció |
|---|---|
--id | ID del filtre (UUID generat automàticament si s’omet) |
-t, --type | Tipus de filtre (vegeu la taula anterior): obligatori en mode en línia |
--pattern | Patró del filtre: obligatori en mode en línia |
--description | Descripció opcional |
--enabled | Activa el filtre (per defecte: true) |
--hunters | Selecciona IDs de Hunter concrets (separats per comes) |
-f, --file | Fitxer YAML per a la importació per lots |
--revision | Revisió del filtre RADIUS; incrementeu-la quan modifiqueu el filtre |
--radius-mac-profile | Perfil d’interpretació obligatori per a radius_mac |
--radius-operator-scope | Àmbit del desplegament de l’operador/NAS |
--radius-profile-revision | Revisió del perfil de desplegament |
--radius-origin-node | Restringeix l’àmbit RADIUS a un node d’origen |
--radius-source | Restringeix l’àmbit RADIUS a una font de captura |
Eliminació de filtres amb lc rm
Filtre individual
lc rm filter --id myfilter -P processor:55555 --tls-ca ca.crt
Eliminació per lots
Elimineu diversos filtres a partir d’un fitxer d’IDs (un per línia):
lc rm filter -f filter-ids.txt -P processor:55555 --tls-ca ca.crt
El format del fitxer és senzill: un ID de filtre per línia; s’ignoren els comentaris amb # i les línies en blanc.
# VoIP filters to remove
voip-monitor-01
voip-monitor-02
# DNS filter
dns-tunnel-detector
Sortida JSON i codis de sortida
Totes les ordres remotes escriuen JSON a stdout (resultats) i stderr (errors). La sortida es formata amb sagnat quan s’escriu en un terminal i de manera compacta quan es passa per una canonada.
Codis de sortida
| Codi | Significat |
|---|---|
| 0 | Èxit |
| 1 | Error general |
| 2 | Error de connexió |
| 3 | Error de validació |
| 4 | Recurs no trobat |
Format dels errors
{
"error": "processor address is required (use --processor or set remote.processor in config)",
"code": "UNAVAILABLE"
}
Exemples de scripts
Script de comprovació de l’estat
#!/bin/bash
status=$(lc show status -P processor:55555 --tls-ca /etc/lippycat/ca.crt \
2>/dev/null | jq -r '.status')
if [ "$status" = "healthy" ]; then
echo "OK"
else
echo "UNHEALTHY: $status"
exit 1
fi
Supervisió del nombre de Hunters
watch -n 5 'lc show status -P processor:55555 --tls-ca ca.crt | \
jq "{total: .total_hunters, healthy: .healthy_hunters}"'
Exportació d’una instantània de la topologia
lc show topology -P processor:55555 --tls-ca ca.crt \
> topology-$(date +%Y%m%d).json
Cicle de vida dels filtres
Creeu un filtre:
lc set filter -P processor:55555 --tls-ca ca.crt \
--id suspect-01 --type sip_user --pattern "*456789"
Comproveu que existeix:
lc show filter --id suspect-01 -P processor:55555 --tls-ca ca.crt
Llista tots els filtres:
lc list filters -P processor:55555 --tls-ca ca.crt
Elimineu el filtre quan hàgiu acabat:
lc rm filter --id suspect-01 -P processor:55555 --tls-ca ca.crt
Monitoratge remot amb la TUI
El mode remot de la TUI (lc watch remote) es connecta als processadors i mostra dades de paquets en directe dels Hunters distribuïts. Us ofereix una vista centralitzada de diversos segments de xarxa sense executar cap captura local.
flowchart LR
subgraph Edge["Network Edge"]
H1[Hunter 1]
H2[Hunter 2]
H3[Hunter 3]
end
subgraph Central["Processor"]
P[Aggregation]
end
H1 -->|gRPC| P
H2 -->|gRPC| P
H3 -->|gRPC| P
TUI["lc watch remote"] <-->|gRPC/TLS| P
Inici ràpid
Connecteu-vos directament a un processador:
lc watch remote -P processor.example.com:55555 --tls-ca ca.crt
Connecteu-vos mitjançant un fitxer de nodes:
lc watch remote --nodes-file nodes.yaml
Alternativament, utilitzeu la ubicació per defecte ~/.config/lippycat/nodes.yaml:
lc watch remote
Connecteu-vos amb TLS:
lc watch remote -P processor.example.com:55555 --tls-ca ca.crt
Connecteu-vos amb TLS mutu:
lc watch remote -P processor.example.com:55555 --tls-ca ca.crt --tls-cert client.crt --tls-key client.key
Per a proves locals:
lc watch remote -P localhost:55555 --insecure
Configuració del fitxer de nodes
Utilitzeu --processor (-P) per connectar-vos directament a un sol processador o node Tap. Utilitzeu --nodes-file si voleu que la TUI carregui un o diversos processadors d’un YAML en iniciar-se. Podeu proporcionar totes dues opcions; la TUI posarà a la cua les connexions de totes dues fonts.
El fitxer de nodes indica a la TUI a quins processadors i Hunters s’ha de connectar.
Ubicació del fitxer
La TUI cerca nodes.yaml en aquest ordre:
- Camí indicat amb
--nodes-file ~/.config/lippycat/nodes.yaml./nodes.yaml(directori actual)
Format
processors:
- name: main-processor
address: processor.example.com:55555
tls:
enabled: true
ca_file: /etc/lippycat/certs/ca.crt
cert_file: /etc/lippycat/certs/client.crt
key_file: /etc/lippycat/certs/client.key
skip_verify: false
- name: backup-processor
address: 192.168.1.101:55555
Camps de configuració
| Camp | Obligatori | Descripció |
|---|---|---|
name | Sí | Nom del node que es mostra |
address | Sí | Adreça en format host:port |
tls.enabled | No | Activa TLS per a aquest node |
tls.ca_file | No | Camí del certificat de la CA |
tls.cert_file | No | Camí del certificat del client (mTLS) |
tls.key_file | No | Camí de la clau privada del client (mTLS) |
tls.skip_verify | No | Omet la verificació del certificat (només per a proves) |
subscribed_hunters | No | Llista dels IDs de Hunter als quals subscriure’s |
Cada node pot tenir la seva pròpia configuració TLS, cosa que permet entorns mixtos (p. ex., producció amb mTLS i desenvolupament sense xifratge).
Navegació per la TUI
Tecles globals
| Tecla | Acció |
|---|---|
Tab | Canvia de pestanya |
De Alt+1 a Alt+5 | Salta a una pestanya (1=Capture, 2=Nodes, 3=Statistics, 4=Settings, 5=Help) |
Space | Pausa/reprèn la visualització de paquets |
q / Ctrl+C | Sortir |
? | Help |
Vista de paquets
La llista de paquets i el panell de detalls inclouen metadades RADIUS descodificades, amb les credencials ocultades, rebudes dels Hunters i nodes Tap; RADIUS no requereix una subordre watch específica.
| Tecla | Acció |
|---|---|
j / k / ↑ / ↓ | Navega pels paquets |
g / Home | Anar al primer paquet |
G / End | Anar a l’últim paquet |
Enter | Mostra els detalls del paquet |
Ctrl+S | Desa els paquets en un fitxer PCAP |
Vista Nodes
| Tecla | Acció |
|---|---|
↑ / ↓ o j / k | Navega per la llista de nodes |
Enter | Connecta al processador / edita l’entrada |
s | Obre el selector de subscripcions a Hunters |
d | Cancel·la la subscripció al Hunter o elimina el processador |
Esc | Tanca el diàleg / surt de l’entrada |
Vista de trucades (VoIP)
| Tecla | Acció |
|---|---|
j / k | Navega per les trucades |
Enter | Mostra els detalls de la trucada |
Pestanya Nodes
La pestanya Nodes mostra els processadors connectats i els seus Hunters en una vista d’arbre:
┌─ Nodes ────────────────────────────────────────────┐
│ │
│ Processor: main-processor (192.168.1.100:55555) │
│ ├─ edge-hunter-01 (10.0.1.10) │
│ │ Status: ACTIVE | Packets: 1,234 | Dropped: 0 │
│ │ Interfaces: eth0 │
│ │ │
│ └─ edge-hunter-02 (10.0.1.11) │
│ Status: ACTIVE | Packets: 5,678 | Dropped: 2 │
│ Interfaces: eth1, wlan0 │
│ │
│ [Enter node address to add...] │
└────────────────────────────────────────────────────┘
Cada Hunter mostra:
- Estat: ACTIVE, IDLE o DISCONNECTED
- Paquets: capturats, coincidents, reenviats, descartats
- Filtres actius: nombre de filtres aplicats
- Interfícies: interfícies de xarxa supervisades
- Últim senyal de vida: temps des de l’última comprovació de l’estat
Indicadors de canvi
La CPU i la RAM utilitzen colors de text persistents segons la utilització: el color de primer pla normal del tema per sota del 70%, taronja Solarized (#cb4b16) a partir del 70% i vermell Solarized (#dc322f) a partir del 90%. L’augment de nivell requereix tres mostres reals diferents de mètriques; les instantànies repetides i els redibuixats no compten. El color de nivell elevat desapareix per sota del 65% i el de nivell alt per sota del 85%. Aquests llindars de presentació no modifiquen l’estat del node. Els valors de CPU/RAM ja no parpellegen ni mostren fletxes de canvi.
El percentatge de CPU mostrat continua sent l’ús brut del procés: el 100% representa un nucli, de manera que els valors poden superar el 100%. La classificació del color divideix aquest percentatge per la capacitat efectiva de CPU indicada en nuclis, incloses les quotes fraccionàries. La capacitat reflecteix l’afinitat de CPU visible i les restriccions de quota dels cgroups, inclosos els avantpassats restrictius; no és una reserva garantida de CPU. El color de la RAM compara el RSS del procés amb el límit de memòria indicat del cgroup. És una relació aproximada entre procés i límit: exclou altra memòria imputada al cgroup.
Totes dues mètriques comparteixen els llindars percentuals validats watch.nodes_resources.elevated (per defecte 70) i watch.nodes_resources.high (per defecte 90). Els valors han de ser finits i complir 0 < elevated < high <= 100; els parells no vàlids es registren i se substitueixen pels dos valors per defecte. El marge de retorn per defecte és de cinc punts percentuals. Amb llindars personalitzats baixos o molt propers, el marge es redueix a la meitat del llindar elevat o a la meitat de la distància entre els llindars, el que sigui més petit. Si falten dades de capacitat o límits de memòria, les mètriques no són vàlides o els nodes estan desconnectats, el text és neutre. Els camps addicionals de telemetria de capacitat i marca temporal de les mostres mantenen la compatibilitat: els clients antics els ignoren, mentre que els nodes o intermediaris antics els poden ometre. Sense una marca temporal d’una mostra real de mètriques, els colors dels recursos es mantenen neutres encara que es puguin mostrar els valors.
Els totals de paquets comparteixen un indicador d’activitat discret per node. Els totals de paquets capturats o reenviats que augmenten utilitzen breument un fons verd (#859900) només quan canvia el total arrodonit mostrat; els reinicis dels comptadors estableixen una nova referència sense ressaltat. Els canvis de filtres utilitzen un fons blau neutre (#268bd2) amb una diferència amb signe. Aquestes cel·les temporals utilitzen text Solarized base3 (#fdf6e3). NEW i RECOVERED marquen transicions observades del cicle de vida. Les instantànies inicials i els canvis de subscripció estableixen una referència sense avisos d’incorporació. Els comptadors sense activitat no impliquen que els nodes siguin obsolets o estiguin desconnectats.
La taula i el graf comparteixen els mateixos indicadors. Una línia fixa d’esdeveniments recents mostra l’última transició de cicle de vida o d’estat, la seva antiguitat i qualsevol altre esdeveniment dels 30 segons anteriors. Desapareix al cap de 30 segons i s’omet en terminals molt baixos. Els indicadors de comptadors i filtres duren aproximadament un segon i els de cicle de vida uns cinc segons; expiren en el següent tic de la interfície encara que la captura estigui en pausa.
A Settings en mode remot, seleccioneu Nodes highlighting i premeu Enter per alternar entre normal (per defecte) i quiet. El mode silenciós conserva els colors persistents del text de CPU/RAM, les etiquetes, l’estat i els esdeveniments recents, però suprimeix els fons temporals de comptadors, filtres i cicle de vida i els ressalts de les vores. El canvi té efecte immediat sense reiniciar la captura i es desa com a watch.nodes_highlighting al fitxer de configuració.
Afegir nodes de manera interactiva
Podeu afegir nodes sense editar el fitxer de nodes:
- Aneu a la pestanya Nodes (
Alt+2) - Seleccioneu el camp d’entrada i premeu
Enter - Escriviu l’adreça del processador (p. ex.,
192.168.1.100:55555) - Feu clic a Confirm o premeu
Enterper connectar-vos; Cancel tanca el diàleg per afegir un node. Feu clic al camp d’adreça per donar-li el focus.
Gestió de subscripcions a Hunters
Per defecte, en connectar-vos a un processador es transmeten els paquets de tots els seus Hunters. Les subscripcions a Hunters us permeten centrar-vos en segments de xarxa concrets.
Subscripció a Hunters
Seleccioneu un processador a la pestanya Nodes i premeu s. Feu clic a les caselles dels Hunters o a les seves etiquetes per alternar les subscripcions, o navegueu amb ↑ / ↓ i alterneu-les amb Space. All i None modifiquen tota la llista. Trieu Confirm (o premeu Enter mentre la llista tingui el focus) per aplicar els canvis; Cancel o Esc els descarta. Confirmar una selecció buida no subscriu a cap Hunter.
Cancel·lació de la subscripció
- Un sol Hunter: aneu al Hunter i premeu
d - Tots els Hunters: obriu el selector (
s), desmarqueu-los tots i confirmeu
Avantatges
- Redueix l’amplada de banda: només els Hunters als quals esteu subscrits transmeten paquets a la vostra TUI
- Permet centrar-vos en segments concrets sense soroll dels altres
- Diversos clients TUI poden tenir subscripcions independents al mateix processador
Gestió de filtres
La TUI ofereix gestió interactiva de filtres per als processadors connectats i els seus Hunters. Els filtres controlen quin trànsit capturen i reenvien els Hunters: són el mecanisme principal per seleccionar trucades, dominis o amfitrions concrets en un desplegament distribuït. Els filtres es poden aplicar globalment (a tots els Hunters) o a Hunters concrets.
Gestió de filtres des de la TUI
A la pestanya Nodes, premeu f per obrir la vista de gestió de filtres. Això us permet:
- Veure els filtres actius del processador connectat
- Crear filtres nous amb tipus i patró
- Activar/desactivar filtres sense eliminar-los
- Eliminar els filtres que ja no necessiteu
Feu clic en una fila de filtre per seleccionar-la i després utilitzeu Edit o Delete; fer clic a la casella alterna l’estat d’activació sense obrir l’editor. New crea un filtre i Close tanca el gestor. Search, Type i Status es poden clicar; Clear search elimina el text de cerca. L’eliminació requereix confirmació.
A l’editor, feu clic als camps de text, les opcions de tipus, la casella d’activació o els Hunters de destinació. Save valida i envia l’esborrany; Cancel el descarta. El selector de destinataris només ofereix Hunters compatibles, amb els controls All, None, Confirm i Cancel. Cancel·lar la selecció de destinataris conserva l’esborrany pare. Una llista buida de destinataris del filtre significa tots els Hunters compatibles; això és diferent d’una subscripció de paquets buida, que no rep res.
Els canvis de filtre tenen efecte immediat: el processador envia els filtres actualitzats a tots els Hunters connectats.
L’editor interactiu gestiona els tipus de filtre simples de VoIP, DNS, TLS, HTTP, correu electrònic i universals. Pot mostrar i eliminar filtres RADIUS existents, però per crear-los, editar-los, activar-los, desactivar-los o revisar-los cal lc set filter, per conservar les dades estructurades d’àmbit i revisió.
Tipus de filtre
L’editor de la TUI admet filtres de VoIP, DNS, TLS, HTTP, correu electrònic i universals. La creació i modificació de filtres RADIUS continuen restringides a CLI/YAML. Consulteu l’Apèndix E: Referència dels tipus de filtre per veure la llista completa de tipus gestionats des de la CLI.
Alternativa CLI
Per a operacions amb filtres mitjançant scripts o per lots, utilitzeu les ordres CLI (vegeu Administració amb la CLI):
Llisteu els filtres actuals:
lc list filters -P processor:55555 --tls-ca ca.crt
Creeu un filtre:
lc set filter -P processor:55555 --tls-ca ca.crt \
--type sip_user --pattern "alicent@example.com"
Mostreu els detalls del filtre:
lc show filter --id myfilter -P processor:55555 --tls-ca ca.crt
Elimineu un filtre:
lc rm filter --id myfilter -P processor:55555 --tls-ca ca.crt
Configuració TLS
Opcions de la línia d’ordres
Utilitzeu TLS de servidor per verificar el certificat del processador:
lc watch remote -P processor.example.com:55555 --tls-ca ca.crt
Utilitzeu TLS mutu perquè totes dues parts s’autentiquin:
lc watch remote -P processor.example.com:55555 --tls-ca ca.crt --tls-cert client.crt --tls-key client.key
Ometeu la verificació per tenir una connexió xifrada sense comprovació d’identitat (només per a proves):
lc watch remote -P processor.example.com:55555 --tls-skip-verify
Desactiveu completament TLS per a proves. El mode de producció bloqueja aquesta opció:
lc watch remote -P localhost:55555 --insecure
TLS per node al fitxer de nodes
Quan us connecteu a diversos processadors amb autoritats de certificació diferents:
processors:
- name: production
address: prod-processor.internal:55555
tls:
enabled: true
ca_file: /etc/lippycat/certs/prod-ca.crt
cert_file: /etc/lippycat/certs/prod-client.crt
key_file: /etc/lippycat/certs/prod-client.key
- name: staging
address: staging-processor.internal:55555
tls:
enabled: true
ca_file: /etc/lippycat/certs/staging-ca.crt
Fitxer de configuració
Els valors per defecte de TLS es poden definir al fitxer de configuració:
watch:
tls:
enabled: true
ca_file: "/etc/lippycat/certs/ca.crt"
cert_file: ""
key_file: ""
La configuració TLS per node de nodes.yaml substitueix aquests valors per defecte.
Supervisió de diversos nodes
Desplegament en diversos centres
processors:
- name: nyc-processor
address: nyc-monitor.company.com:55555
tls:
enabled: true
ca_file: /etc/lippycat/certs/ca.crt
- name: london-processor
address: lon-monitor.company.com:55555
tls:
enabled: true
ca_file: /etc/lippycat/certs/ca.crt
Segmentació de xarxa
Superviseu diferents zones des d’una sola TUI:
processors:
- name: dmz-processor
address: 192.168.1.10:55555
- name: internal-processor
address: 10.0.0.50:55555
- name: guest-wifi-processor
address: 172.16.0.20:55555
Subscripcions a Hunters preseleccionades
Limiteu de quins Hunters rebeu dades en iniciar:
processors:
- name: main-processor
address: processor.example.com:55555
subscribed_hunters:
- "edge-hunter-01"
- "edge-hunter-03"
Resolució de problemes
“Failed to connect to node”
Comproveu que el processador està en execució i escoltant:
ss -tlnp | grep 55555
Proveu la connectivitat de xarxa:
nc -zv processor-host 55555
Comproveu les regles del tallafoc:
sudo iptables -L -n | grep 55555
No es mostren paquets
- Comproveu que els Hunters estan realment connectats al processador:
lc list hunters -P processor:55555 --tls-ca ca.crt - Comproveu que hi ha trànsit a la interfície del Hunter:
sudo tcpdump -i eth0 -c 10 - Comproveu si esteu subscrits a algun Hunter (premeu
sa la pestanya Nodes) - Proveu-ho sense filtres BPF per descartar un filtratge excessiu
Desconnexions freqüents
- Comproveu l’estabilitat de la xarxa:
ping -c 100 processor-host - Superviseu l’ús de recursos del processador:
top -p $(pgrep lippycat) - Augmenteu els límits de connexió del sistema:
ulimit -n 4096 - Reviseu si hi ha errors als registres del processador
Notes sobre el rendiment
La TUI remota és lleugera: només mostra dades, no captura paquets:
| Recurs | Ús habitual |
|---|---|
| CPU | ~1-5% (renderització de la visualització) |
| Memòria | ~50-100MB (depèn de la mida del búfer) |
| Xarxa | Mínim (rep dades processades) |
Ajusteu --buffer-size per controlar l’ús de memòria (per defecte: 10.000 paquets).
Límits recomanats
- Processadors per TUI: 5-10 per a una interfície àgil
- Total de Hunters visibles: 50-100 segons la latència de xarxa
Manual d’operacions
Aquest capítol tracta el desplegament, la supervisió i el manteniment de lippycat en producció. Inclou la configuració de serveis systemd, les comprovacions d’estat, la gestió de registres, la resposta a incidents i els procediments de manteniment.
Desplegament
Requisits del sistema
| Requisit | Mínim | Recomanat |
|---|---|---|
| RAM | 4 GB | 8 GB (volum elevat) |
| Disc | Depèn de la retenció dels PCAP | ~1 GB per cada 1.000 trucades VoIP |
| Xarxa | Accés a la interfície | Interfície dedicada de supervisió |
| Privilegis | CAP_NET_RAW | CAP_NET_RAW + CAP_NET_ADMIN |
| Biblioteques | libpcap | libpcap-dev |
Instal·lació del binari
Compileu a partir del codi font:
make build-release
sudo cp bin/lc /usr/local/bin/
sudo chmod +x /usr/local/bin/lc
Atorgueu capacitats de captura per evitar executar-lo com a root:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/lc
Creació de la configuració
sudo mkdir -p /etc/lippycat/certs
sudo cp config.yaml /etc/lippycat/
sudo chown root:root /etc/lippycat/config.yaml
sudo chmod 600 /etc/lippycat/config.yaml
Serveis systemd
Captura autònoma (Sniff)
# /etc/systemd/system/lippycat.service
[Unit]
Description=lippycat Network Traffic Capture
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/lc sniff voip -i eth0 --config /etc/lippycat/config.yaml
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Node processador
# /etc/systemd/system/lippycat-processor.service
[Unit]
Description=lippycat Processor Node
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/lc process \
--listen 0.0.0.0:55555 \
--tls-cert /etc/lippycat/certs/server.crt \
--tls-key /etc/lippycat/certs/server.key \
--per-call-pcap --per-call-pcap-dir /var/capture/calls \
--filter-file /etc/lippycat/filters.yaml
Restart=always
RestartSec=5
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Node Hunter
# /etc/systemd/system/lippycat-hunter.service
[Unit]
Description=lippycat Hunter Node
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/lc hunt voip -i eth0 \
--processor processor.internal:55555 \
--tls-ca /etc/lippycat/certs/ca.crt
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Activació i inici
sudo systemctl daemon-reload
sudo systemctl enable lippycat-processor
sudo systemctl start lippycat-processor
sudo systemctl status lippycat-processor
Comprovacions de l’estat
Transport d’esdeveniments normalitzats
Confirmeu la negociació del mode d’esdeveniments als registres dels nodes, genereu una transacció DNS o HTTP coneguda i localitzeu-la al registre estructurat del processador i a la cronologia d’esdeveniments de la TUI. Configureu alertes per a l’esgotament de l’spool del productor o del WAL del processador, els lots rebutjats, les omissions per compatibilitat i els buits en la seqüència d’esdeveniments. Verifiqueu per separat el PCAP local del Tap quan calgui evidència dels paquets.
La versió 1 de la subscripció TUI comença en un límit de dades en directe i mai no reprodueix un interval de desconnexió. Després d’una interrupció, és normal que hi hagi un buit en reconnectar. És diferent de l’expulsió local, en què l’anell limitat de la TUI elimina una fila antiga que ja havia arribat. La pèrdua durant el transport afecta la completesa de les dades; l’expulsió només afecta la finestra de visualització.
En les actualitzacions graduals, actualitzeu els processadors abans que els productors d’esdeveniments i manteniu el mode de paquets com a base de compatibilitat. Activeu el mecanisme alternatiu només després de comprovar-ne l’impacte en l’amplada de banda i la privadesa. Manteniu desactivades les opcions d’inclusió de camps sensibles i metadades de fitxers tret que siguin necessàries, i protegiu els spools d’esdeveniments, els WAL, els registres i el transport de la TUI com a evidències de captura.
Emmagatzematge i recuperació de l’spool d’esdeveniments
El reenviament fiable d’esdeveniments emmagatzema els lots no confirmats en un directori spool exclusiu. No compartiu mai aquest directori entre processos ni n’editeu els fitxers mentre el procés propietari estigui en execució. El límit de 4 MiB de càrrega útil codificada continua actiu quan es desactiva el límit total de bytes lògics.
El límit configurat i l’estat pendent descriuen els bytes lògics que esperen confirmació. L’ús físic del disc pot ser més alt mentre els fitxers confirmats o expulsats esperen que s’eliminin, de manera que cal supervisar per separat l’espai lliure del sistema de fitxers. La neteja es torna a intentar en iniciar i durant les actualitzacions posteriors de l’spool; els registres retirats no es tornen a enviar.
Si l’emmagatzematge no pot conservar un esdeveniment i la cobertura exacta de la seva pèrdua, el reenviament s’atura en lloc d’informar d’una transmissió correcta. Un error que deixi incerta la durabilitat també bloqueja el reenviament i els canvis de l’spool. Atureu el node afectat i torneu a obrir el mateix directori per recuperar-ne l’últim estat complet. En cas d’errors de propietat, corrupció o recuperació, conserveu tot el directori, corregiu la causa indicada i reinicieu. Aparteu-lo només quan accepteu explícitament que tots els esdeveniments pendents es perdin.
Abans d’una actualització que canviï l’empremta de la política d’anàlisi d’esdeveniments, buideu els registres pendents de l’spool en mode d’esdeveniments amb la versió anterior i la seva configuració original. Atureu les captures noves, deixeu que es confirmin els lots pendents i comproveu que el recompte pendent arriba a zero abans d’aturar el procés antic. Els registres pendents incompatibles bloquegen intencionadament l’inici amb la política nova; l’aplicació no els descarta ni els reinterpreta silenciosament. Si l’inici informa d’una discrepància de política, conserveu el directori i torneu-lo a obrir amb la versió i configuració anteriors per completar la transmissió.
Comprovació ràpida de l’estat
Comproveu si el servei està en execució:
systemctl is-active lippycat-processor
Comproveu si el processador funciona correctament:
lc show status -P localhost:55555 --tls-ca ca.crt
Comproveu quins Hunters estan connectats:
lc list hunters -P localhost:55555 --tls-ca ca.crt
Script de comprovació diària de l’estat
#!/bin/bash
# daily-health-check.sh
echo "=== lippycat Health Check — $(date) ==="
# Service status
echo "1. Service Status:"
systemctl is-active lippycat-processor
systemctl is-active lippycat-hunter
# Resource usage
echo -e "\n2. Resource Usage:"
ps aux | grep "[l]c " | head -5
# Disk space for PCAP files
echo -e "\n3. PCAP Storage:"
df -h /var/capture/ 2>/dev/null || echo "PCAP directory not configured"
# Processor status (distributed deployments)
echo -e "\n4. Processor Status:"
lc show status -P localhost:55555 --tls-ca /etc/lippycat/certs/ca.crt 2>&1
# Recent errors in logs
echo -e "\n5. Recent Errors (last 24h):"
journalctl -u 'lippycat*' --since "24 hours ago" --priority=err --no-pager -q
echo -e "\n=== Health Check Complete ==="
Supervisió de les connexions dels Hunters
Observeu el nombre de Hunters en temps real:
watch -n 5 'lc show status -P localhost:55555 --tls-ca ca.crt | \
jq "{total: .total_hunters, healthy: .healthy_hunters}"'
Utilitzeu aquest script per generar alertes quan faltin Hunters:
#!/bin/bash
expected=3
actual=$(lc show status -P localhost:55555 --tls-ca ca.crt 2>/dev/null | \
jq -r '.healthy_hunters')
if [ "$actual" -lt "$expected" ]; then
echo "ALERT: Only $actual/$expected hunters connected"
exit 1
fi
Gestió de registres
lippycat utilitza registres estructurats a stdout/stderr. Quan s’executa sota systemd, els registres van al journal.
Visualització de registres
Seguiu els registres en directe:
journalctl -u lippycat-processor -f
Mostreu els registres de l’última hora:
journalctl -u lippycat-processor --since "1 hour ago"
Mostreu només els errors:
journalctl -u lippycat-processor --priority=err
Mostreu els registres de tots els serveis lippycat:
journalctl -u 'lippycat*' --since today
Rotació de registres
Si es registren dades en fitxers en lloc del journal:
# /etc/logrotate.d/lippycat
/var/log/lippycat/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 root root
}
Anàlisi de registres
#!/bin/bash
# Quick error summary from journal
echo "Error Summary (last 24h):"
journalctl -u 'lippycat*' --since "24 hours ago" --priority=err --no-pager | \
awk '{for(i=5;i<=NF;i++) printf "%s ", $i; print ""}' | \
sort | uniq -c | sort -nr | head -10
Resposta a incidents
Ús elevat de memòria
Gravetat: crítica; pot provocar una terminació per OOM
-
Comproveu l’ús actual:
ps aux | grep "[l]c " top -p $(pgrep -f "lc.*process") -
Canvieu al mode optimitzat per a memòria:
sudo systemctl stop lippycat-processor # Edit config: tcp_performance_mode: "memory" sudo systemctl start lippycat-processor -
Reinicieu d’emergència si la memòria supera els límits:
sudo systemctl restart lippycat-processor
Servei aturat
-
Comproveu l’estat i els registres recents:
sudo systemctl status lippycat-processor journalctl -u lippycat-processor --lines=50 -
Intenteu reiniciar:
sudo systemctl restart lippycat-processor sleep 5 sudo systemctl status lippycat-processor -
Si el reinici falla, proveu una configuració mínima:
sudo systemctl stop lippycat-processor lc process --listen :55555 --insecure # Minimal, no PCAP, no TLS
Desconnexions de Hunters
Els Hunters es reconnecten automàticament amb espera exponencial (vegeu el Capítol 7: Resiliència). Si els Hunters continuen desconnectats:
-
Comproveu l’estat del servei Hunter al node perifèric:
ssh edge-node systemctl status lippycat-hunter -
Verifiqueu la connectivitat de xarxa:
ssh edge-node nc -zv processor.internal 55555 -
Comproveu si hi ha problemes amb els certificats TLS:
journalctl -u lippycat-hunter --since "1 hour ago" | grep -i tls
Recollida de dades de diagnòstic
#!/bin/bash
# collect-diagnostics.sh
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DIAG_DIR="/tmp/lippycat_diag_$TIMESTAMP"
mkdir -p "$DIAG_DIR"
echo "Collecting diagnostics..."
# System info
uname -a > "$DIAG_DIR/system.txt"
cat /etc/os-release >> "$DIAG_DIR/system.txt"
# Service status
systemctl status 'lippycat*' > "$DIAG_DIR/services.txt" 2>&1
# Process info
ps aux | grep "[l]c " > "$DIAG_DIR/processes.txt"
free -h > "$DIAG_DIR/memory.txt"
df -h > "$DIAG_DIR/disk.txt"
# Network
ip addr show > "$DIAG_DIR/interfaces.txt"
ss -tlnp | grep 55555 > "$DIAG_DIR/listeners.txt"
# Processor status (if running)
lc show status -P localhost:55555 --tls-ca /etc/lippycat/certs/ca.crt \
> "$DIAG_DIR/processor_status.json" 2>&1
lc show topology -P localhost:55555 --tls-ca /etc/lippycat/certs/ca.crt \
> "$DIAG_DIR/topology.json" 2>&1
# Recent logs
journalctl -u 'lippycat*' --since "2 hours ago" > "$DIAG_DIR/logs.txt"
# Configuration (sanitize if needed)
lc show config > "$DIAG_DIR/config.json" 2>&1
# Archive
tar -czf "/tmp/lippycat_diag_$TIMESTAMP.tar.gz" -C /tmp "lippycat_diag_$TIMESTAMP"
rm -rf "$DIAG_DIR"
echo "Saved: /tmp/lippycat_diag_$TIMESTAMP.tar.gz"
Manteniment
Gestió de l’emmagatzematge PCAP
Els fitxers PCAP s’acumulen ràpidament en producció. Configureu una neteja automatitzada:
#!/bin/bash
# pcap-cleanup.sh — run from cron
PCAP_DIR="/var/capture"
RETENTION_DAYS=30
# Remove old PCAP files
find "$PCAP_DIR" -name "*.pcap" -mtime +$RETENTION_DAYS -delete
find "$PCAP_DIR" -name "*.pcap.gz" -mtime +$RETENTION_DAYS -delete
# Remove empty directories
find "$PCAP_DIR" -type d -empty -delete
# Report disk usage
echo "PCAP storage: $(du -sh "$PCAP_DIR" | cut -f1)"
Afegiu-ho a cron:
# Daily PCAP cleanup at 3 AM
0 3 * * * /opt/scripts/pcap-cleanup.sh >> /var/log/pcap-cleanup.log 2>&1
Planificació de capacitat
Estimació de l’ús de disc
| Tipus de trànsit | Taxa aproximada |
|---|---|
| VoIP (PCAP per trucada) | ~1 GB per cada 1.000 trucades |
| Captura general (PCAP unificat) | Depèn de la velocitat de l’enllaç i del filtre BPF |
| PCAP amb rotació automàtica | Limitat per --auto-rotate-max-size |
Estimació dels recursos del processador
| Mètrica | Regla orientativa |
|---|---|
| Memòria per Hunter | ~5-10 MB |
| Memòria per subscriptor TUI | ~2-5 MB |
| Màxim de Hunters (per defecte) | 100 |
| Paquets per Hunter en moments de màxima càrrega | ~10.000/s |
Escaleu horitzontalment amb diversos processadors si un de sol no pot gestionar la càrrega (vegeu el Capítol 6: Topologia amb diversos processadors).
Llista de comprovació de seguretat
Executeu-la mensualment:
- El binari té les capacitats mínimes (
getcap /usr/local/bin/lc) - El fitxer de configuració té permisos restrictius (
ls -la /etc/lippycat/config.yaml) - Els certificats TLS no han caducat (
openssl x509 -enddate -noout -in cert.crt) -
LIPPYCAT_PRODUCTION=trueestà definit (bloqueja--insecure) - No hi ha Hunters no autoritzats connectats (
lc list hunters -P ...) - Els directoris PCAP tenen els permisos adequats
- Les regles del tallafoc restringeixen el port 55555 als amfitrions autoritzats
Actualització
- Descarregueu o compileu la versió nova
- Atureu el servei:
sudo systemctl stop lippycat-processor - Substituïu el binari:
sudo cp lc /usr/local/bin/ - Restaureu les capacitats:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/lc - Inicieu el servei:
sudo systemctl start lippycat-processor - Verifiqueu:
lc show status -P localhost:55555 --tls-ca ca.crt
Els Hunters es reconnectaran automàticament després que el processador es reiniciï.
Nivells d’escalat
| Nivell | Desencadenant | Acció |
|---|---|---|
| 1 — Automàtic | El servei es reinicia tot sol | Superviseu si es repeteixen patrons |
| 2 — Operador | El servei no es reinicia, recursos esgotats | Seguiu els procediments de resposta a incidents anteriors |
| 3 — Enginyeria | Fallades persistents, errors desconeguts | Recolliu diagnòstics i escaleu el problema |
Seguretat
Lippycat captura i transporta trànsit de xarxa sensible: credencials SIP, fluxos de mitjans RTP, adreces IP internes i dades potencialment regulades. Aquest capítol descriu els controls de seguretat disponibles per protegir aquestes dades durant la transmissió, l’emmagatzematge i als logs. Pressuposa que teniu un desplegament distribuït operatiu, tal com es descriu a la Part III, i que el prepareu per a producció.
TLS per al mode distribuït
Totes les connexions gRPC de l’arquitectura distribuïda —de Hunter a processador, de processador a processador i de TUI a processador— requereixen TLS per defecte. Sense TLS, els paquets capturats viatgen en text pla entre nodes.
Modes de seguretat
Lippycat admet tres modes TLS:
| Mode | Autenticació | Cas d’ús |
|---|---|---|
| TLS de servidor | El processador acredita la seva identitat davant dels clients | Xifrar el trànsit i verificar la identitat del processador |
| TLS mutu (mTLS) | Totes dues parts acrediten la seva identitat | Desplegaments de producció (recomanat) |
| Insegur | Cap | Només per a proves locals |
Requisits de certificats segons el tipus de node
Cada tipus de node necessita certificats diferents segons el mode TLS:
| Node | TLS del servidor | TLS mutu |
|---|---|---|
| Processador | --tls-cert, --tls-key | --tls-cert, --tls-key, --tls-ca, --tls-client-auth |
| Hunter | --tls-ca | --tls-cert, --tls-key, --tls-ca |
| Tap | --tls-cert, --tls-key (per servir la TUI) | Igual que el processador (serveix clients TUI) |
TUI (watch remote) | --tls-ca | --tls-cert, --tls-key, --tls-ca |
Generació de certificats amb OpenSSL
Les versions modernes de Go requereixen noms alternatius del subjecte (SAN) en tots els certificats. Els certificats que només utilitzen el nom comú (CN) es rebutgen. El procediment següent genera una CA, un certificat de servidor per al processador i un certificat de client per als Hunters.
Pas 1: creeu una autoritat de certificació
mkdir -p /etc/lippycat/certs && cd /etc/lippycat/certs
Genereu la clau de la CA i el certificat autosignat:
openssl req -x509 -newkey rsa:4096 -days 3650 -nodes \
-keyout ca-key.pem -out ca-cert.pem \
-subj "/C=US/ST=State/L=City/O=YourOrg/CN=Lippycat CA"
Pas 2: genereu el certificat del processador (servidor)
Genereu la clau privada:
openssl genrsa -out server-key.pem 4096
Creeu la sol·licitud de signatura del certificat:
openssl req -new -key server-key.pem -out server-req.pem \
-subj "/CN=processor.example.com"
Creeu el fitxer d’extensions; els SAN són obligatoris:
cat > server-ext.conf <<EOF
subjectAltName = DNS:processor.example.com,DNS:localhost,IP:127.0.0.1
extendedKeyUsage = serverAuth
EOF
Signeu el certificat amb la CA:
openssl x509 -req -in server-req.pem -days 365 \
-CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
-out server-cert.pem -extfile server-ext.conf
Substituïu processor.example.com pel nom de host o l’adreça IP que els Hunters utilitzaran per connectar-se. Afegiu diversos SAN si el processador és accessible amb diversos noms:
subjectAltName = DNS:processor.example.com,DNS:processor,IP:10.0.1.100,IP:127.0.0.1
Pas 3: genereu un certificat de Hunter (client)
Per a mTLS, cada Hunter necessita el seu propi certificat:
openssl genrsa -out hunter01-key.pem 4096
openssl req -new -key hunter01-key.pem -out hunter01-req.pem \
-subj "/CN=hunter-01.example.com"
cat > client-ext.conf <<EOF
extendedKeyUsage = clientAuth
EOF
openssl x509 -req -in hunter01-req.pem -days 365 \
-CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
-out hunter01-cert.pem -extfile client-ext.conf
Pas 4: establiu els permisos i feu la neteja
chmod 600 *-key.pem
chmod 644 *-cert.pem
rm -f *.conf *-req.pem
Inici dels nodes amb TLS
Un cop disponibles els certificats, inicieu el desplegament distribuït:
Inicieu el processador amb TLS del servidor:
lc process --listen 0.0.0.0:55555 \
--tls-cert /etc/lippycat/certs/server-cert.pem \
--tls-key /etc/lippycat/certs/server-key.pem
Inicieu el Hunter i verifiqueu la identitat del processador:
sudo lc hunt voip -i eth0 \
--processor processor.example.com:55555 \
--tls-ca /etc/lippycat/certs/ca-cert.pem
Per a producció amb mTLS (descrit a la secció següent), afegiu les opcions d’autenticació del client.
TLS mutu (mTLS)
El TLS del servidor xifra el canal i permet als clients verificar el processador, però qualsevol client pot connectar-s’hi. El TLS mutu afegeix la verificació inversa: el processador verifica la identitat del Hunter mitjançant certificats de client. Aquesta és la configuració recomanada per a producció.
Model de confiança
flowchart TB
CA["Internal CA<br/>(ca-cert.pem)"]
CA -->|signs| SC["Server Cert<br/>(processor)"]
CA -->|signs| HC1["Client Cert<br/>(hunter-01)"]
CA -->|signs| HC2["Client Cert<br/>(hunter-02)"]
CA -->|signs| TC["Client Cert<br/>(TUI client)"]
subgraph Processor
SC
CAcopy1["CA cert (for verifying clients)"]
end
subgraph Hunters
HC1
HC2
CAcopy2["CA cert (for verifying server)"]
end
subgraph "TUI Clients"
TC
CAcopy3["CA cert (for verifying server)"]
end
Tots els certificats estan signats per la mateixa CA. Cada node confia en qualsevol certificat signat per aquesta CA. Per revocar un Hunter, deixeu d’emetre-li certificats i reinicieu el processador: el Hunter revocat ja no pot presentar un certificat de client vàlid.
Activació de mTLS
Inicieu el processador i exigiu certificats de client:
lc process --listen 0.0.0.0:55555 \
--tls-cert /etc/lippycat/certs/server-cert.pem \
--tls-key /etc/lippycat/certs/server-key.pem \
--tls-client-auth \
--tls-ca /etc/lippycat/certs/ca-cert.pem
Inicieu un Hunter que presenti un certificat de client:
sudo lc hunt voip -i eth0 \
--processor processor.example.com:55555 \
--tls-cert /etc/lippycat/certs/hunter01-cert.pem \
--tls-key /etc/lippycat/certs/hunter01-key.pem \
--tls-ca /etc/lippycat/certs/ca-cert.pem
Connecteu un client TUI que també presenti un certificat de client:
lc watch remote -P processor.example.com:55555 \
--tls-cert /etc/lippycat/certs/tui-cert.pem \
--tls-key /etc/lippycat/certs/tui-key.pem \
--tls-ca /etc/lippycat/certs/ca-cert.pem
Fitxer de configuració
Per als desplegaments de producció, deseu els paràmetres TLS al fitxer de configuració en lloc de la línia d’ordres. Així, els camins de les claus no apareixen a les llistes de processos ni a l’historial de l’intèrpret d’ordres:
# /etc/lippycat/config.yaml — processor
processor:
listen_addr: "0.0.0.0:55555"
tls:
cert_file: "/etc/lippycat/certs/server-cert.pem"
key_file: "/etc/lippycat/certs/server-key.pem"
ca_file: "/etc/lippycat/certs/ca-cert.pem"
client_auth: true
# /etc/lippycat/config.yaml — hunter
hunter:
processor_addr: "processor.example.com:55555"
tls:
cert_file: "/etc/lippycat/certs/hunter01-cert.pem"
key_file: "/etc/lippycat/certs/hunter01-key.pem"
ca_file: "/etc/lippycat/certs/ca-cert.pem"
CA comercials
Si el processador utilitza un certificat d’una CA coneguda (Let’s Encrypt, DigiCert, etc.), els Hunters no necessiten --tls-ca: el magatzem de confiança del sistema ja inclou la CA emissora:
sudo lc hunt voip -i eth0 --processor processor.example.com:55555
Això simplifica el desplegament dels Hunters, però no proporciona autenticació del client. Combineu-ho amb mTLS si necessiteu restringir quins Hunters poden connectar-se.
Cicle de vida dels certificats
Supervisió de la caducitat
Comproveu les dates de validesa dels certificats i configureu-ne la supervisió automatitzada:
Comproveu les dates d’un certificat:
openssl x509 -in /etc/lippycat/certs/server-cert.pem -noout -dates
Verifiqueu que hi hagi SAN, tal com exigeix Go:
openssl x509 -in /etc/lippycat/certs/server-cert.pem -noout -text \
| grep -A1 "Subject Alternative Name"
Afegiu una tasca cron o una comprovació de supervisió per avisar abans que caduquin els certificats:
# /etc/cron.daily/check-lippycat-certs
#!/bin/bash
CERT="/etc/lippycat/certs/server-cert.pem"
DAYS_LEFT=$(( ($(date -d "$(openssl x509 -in "$CERT" -noout -enddate \
| cut -d= -f2)" +%s) - $(date +%s)) / 86400 ))
if [ "$DAYS_LEFT" -lt 30 ]; then
echo "lippycat server certificate expires in $DAYS_LEFT days" | \
mail -s "Certificate Expiry Warning" ops@example.com
fi
Rotació dels certificats
Per rotar els certificats sense interrompre les connexions:
- Genereu un certificat nou signat per la mateixa CA.
- Actualitzeu el fitxer de configuració amb els camins nous.
- Recarregueu el servei de manera controlada:
Genereu la clau de substitució:
openssl genrsa -out server-key-new.pem 4096
Creeu-ne la sol·licitud de signatura:
openssl req -new -key server-key-new.pem -out server-req-new.pem \
-subj "/CN=processor.example.com"
Signeu el certificat de substitució:
openssl x509 -req -in server-req-new.pem -days 365 \
-CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
-out server-cert-new.pem -extfile server-ext.conf
Col·loqueu el certificat nou al seu lloc:
mv server-cert-new.pem server-cert.pem
mv server-key-new.pem server-key.pem
Recarregueu el servei:
systemctl reload lippycat-processor
Verifiqueu el certificat de substitució:
openssl s_client -connect processor:55555 -showcerts </dev/null 2>/dev/null \
| openssl x509 -noout -dates
Els Hunters es reconnectaran automàticament amb el nou certificat del servidor, sempre que estigui signat per la mateixa CA.
Revocació d’un certificat
Actualment, Lippycat no implementa comprovacions CRL ni OCSP. Per revocar un certificat compromès:
- Retireu el certificat compromès del node.
- Reinicieu el processador per desconnectar el Hunter afectat.
- Genereu un certificat nou per al node de substitució.
- Si la clau de la CA s’ha compromès, regenereu tota la CA i torneu a emetre tots els certificats.
Mode de producció
Establir la variable d’entorn LIPPYCAT_PRODUCTION bloqueja el funcionament insegur:
export LIPPYCAT_PRODUCTION=true
Amb aquesta variable establerta, qualsevol intent d’utilitzar --insecure es rebutja en iniciar-se:
FATAL: --insecure flag is not allowed in production mode (LIPPYCAT_PRODUCTION=true)
Això evita que els operadors desactivin TLS accidentalment en producció. Establiu-la al fitxer d’unitat systemd de cada node:
# /etc/systemd/system/lippycat-processor.service
[Service]
Environment="LIPPYCAT_PRODUCTION=true"
ExecStart=/usr/local/bin/lc process --listen :55555 --config /etc/lippycat/config.yaml
Sense --insecure i sense certificats TLS, els nodes es neguen a iniciar-se: no hi ha cap retorn silenciós al text pla.
Mode insegur
Per al desenvolupament i les proves locals, --insecure desactiva TLS completament. Totes dues parts de la connexió han d’utilitzar aquesta opció:
lc process --listen :55555 --insecure
sudo lc hunt voip -i eth0 --processor localhost:55555 --insecure
En iniciar-se, es mostra un avís destacat:
═══════════════════════════════════════════════════════════════
SECURITY WARNING: TLS ENCRYPTION DISABLED
Packet data will be transmitted in CLEARTEXT
This mode should ONLY be used in trusted networks
TLS is enabled by default — remove --insecure for production
═══════════════════════════════════════════════════════════════
Rendiment de TLS
TLS afegeix una sobrecàrrega mínima en maquinari modern amb suport AES-NI:
| Mètrica | Impacte |
|---|---|
| CPU | ~2-5% de sobrecàrrega |
| Capacitat de transmissió | 95-98% de la capacitat de transmissió en text pla |
| Latència | +1-5 ms per a la negociació inicial, <1 ms per paquet |
| Memòria | ~50 KB per connexió per al seu estat de sessió |
No hi ha cap motiu de rendiment per desactivar TLS.
Autenticació amb clau d’API
Els processadors i els nodes Tap poden exigir claus d’API per a les API gRPC de gestió i streaming. Aquesta és una capa d’autenticació alternativa per a desplegaments on distribuir certificats de client és poc pràctic, tot i que cal continuar utilitzant TLS per protegir la clau durant la transmissió.
Activeu l’autenticació amb clau d’API amb --api-key-auth i definiu les claus al fitxer de configuració:
security:
api_keys:
enabled: true
keys:
- name: "ops-tui"
key: "lc_live_generated_secret"
role: "viewer"
description: "Read-only remote TUI access"
Els clients envien la clau com a metadades gRPC amb el nom x-api-key. En mode de producció, lippycat exigeix mTLS o autenticació amb clau d’API quan el TLS mutu no està activat.
Desxifrat del trànsit TLS capturat
Les seccions anteriors descrivien TLS per a les connexions gRPC del mateix lippycat. Aquesta secció tracta un altre cas d’ús: desxifrar el trànsit xifrat amb TLS que lippycat ha capturat: HTTPS, SMTPS, IMAPS i altres protocols encapsulats en TLS que circulen per la xarxa supervisada.
Com funciona
El desxifrat de TLS requereix claus de sessió exportades per l’aplicació client o servidor mitjançant el mecanisme SSLKEYLOGFILE. Aquestes claus es desen en el format NSS Key Log Format, un estàndard de facto admès per Wireshark, navegadors i moltes aplicacions de servidor.
Com que el TLS modern utilitza secret perfecte cap endavant (Diffie-Hellman efímer), les claus s’han de capturar durant l’execució, en la negociació TLS. No és possible desxifrar posteriorment només amb la clau privada del servidor.
Suport de les aplicacions
La majoria d’aplicacions modernes admeten el registre de claus:
| Categoria | Aplicació | Mecanisme |
|---|---|---|
| Servidors web | Apache 2.4.49+, Caddy v2.6+, nginx Plus R33+ | Variable d’entorn o directiva SSLKEYLOGFILE |
| Navegadors | Firefox, Chrome/Chromium | Variable d’entorn SSLKEYLOGFILE |
| Eines CLI | curl, wget, OpenSSL s_client | Variable d’entorn SSLKEYLOGFILE |
| Llenguatges | Go (tls.Config.KeyLogWriter), Python, Node.js | API nativa o variable d’entorn |
Ús de la CLI
Indiqueu a lippycat un fitxer de registre de claus generat per l’aplicació de destinació:
Per a una captura en directe independent:
sudo lc sniff http -i eth0 --tls-keylog /tmp/sslkeys.log
Per a una captura en directe en mode Tap:
sudo lc tap http -i eth0 --tls-keylog /tmp/sslkeys.log
Per injectar claus en temps real mitjançant una canonada amb nom, creeu la canonada:
mkfifo /tmp/sslkeys.pipe
Inicieu Tap amb la canonada:
sudo lc tap http -i eth0 --tls-keylog-pipe /tmp/sslkeys.pipe &
Inicieu l’aplicació de destinació amb la mateixa canonada:
SSLKEYLOGFILE=/tmp/sslkeys.pipe ./myserver
Transmissió distribuïda de claus
En mode distribuït, els Hunters transmeten automàticament les claus de sessió TLS al processador juntament amb els paquets capturats:
flowchart LR
subgraph Hunter
HK["--tls-keylog /tmp/keys.log"]
end
subgraph Processor
PW["Writes paired files:<br/>session.pcap + session.keys"]
end
Hunter -->|"gRPC (TLS-encrypted)<br/>packets + session keys"| Processor
Feu la captura amb el registre de claus al Hunter:
sudo lc hunt http -i eth0 \
--processor central:55555 \
--tls-keylog /tmp/sslkeys.log \
--tls-ca ca.crt
Al processador, deseu les claus juntament amb els PCAP:
lc process --listen :55555 \
--tls-keylog-dir /var/capture/keys \
--tls-cert server.crt --tls-key server.key
Anàlisi fora de línia
Torneu a analitzar les captures desades amb el registre de claus associat:
Per a l’anàlisi amb la CLI:
lc sniff http -r /var/capture/session.pcap --tls-keylog /var/capture/keys/session.keys
Per a l’anàlisi amb la TUI:
lc watch file /var/capture/session.pcap --tls-keylog /var/capture/keys/session.keys
Integració amb Wireshark
Els fitxers de registre de claus de Lippycat són plenament compatibles amb Wireshark:
- Obriu el fitxer PCAP a Wireshark.
- Aneu a Edit > Preferences > Protocols > TLS.
- Establiu (Pre)-Master-Secret log filename al fitxer de registre de claus.
- Feu clic a Apply: ara el contingut desxifrat és visible.
Per a captures distribuïdes, el processador escriu fitxers associats que podeu passar directament a Wireshark:
/var/capture/session.pcap # Encrypted traffic
/var/capture/keys/session.keys # Session keys
Limitacions
- Cal un registre de claus: el secret perfecte cap endavant impedeix desxifrar sense claus de sessió.
- No es pot desxifrar només amb una clau privada: l’intercanvi de claus RSA (no efímer) és rar i obsolet.
- El moment és important: les claus han d’arribar abans o poc després de la negociació TLS.
- Accés a la mateixa màquina: el node que captura ha de poder llegir el fitxer de registre de claus.
Protecció dels fitxers de registre de claus
Els fitxers de registre de claus contenen secrets de sessió que poden desxifrar tot el trànsit capturat associat. Tracteu-los amb la mateixa cura que les claus privades:
chmod 600 /var/capture/keys/*.keys
chown lippycat:lippycat /var/capture/keys/
En mode distribuït, les claus estan protegides durant la transmissió pel canal TLS gRPC entre Hunter i processador.
Funcions de protecció de dades
A més del xifrat del transport, lippycat inclou diverses funcions per protegir les dades sensibles emmagatzemades i als logs.
Depuració de Call-ID
Els Call-ID de SIP sovint contenen identificadors d’usuari, noms de domini o tokens de sessió. Escriure’ls als fitxers de log pot provocar vulneracions de privadesa. La depuració de Call-ID utilitza hash SHA-256 per generar identificadors coherents però anonimitzats:
Original: john.doe@company.com-session-12345
Sanitized: john.d...a1b2c3d4
La forma depurada és determinista: el mateix Call-ID genera sempre el mateix hash, de manera que encara podeu correlacionar entrades de log entre components.
# /etc/lippycat/config.yaml
voip:
security:
sanitize_call_ids: true
call_id_hash_length: 8 # Hash prefix length (4-16 bytes)
call_id_max_log_length: 16 # Call-IDs longer than this are sanitized
Activeu-ho en tots els entorns. L’impacte en el rendiment és negligible (<1 microsegon per Call-ID).
Xifrat de PCAP
Els fitxers PCAP contenen totes les dades útils dels paquets: credencials SIP, mitjans RTP i dades d’autenticació. Lippycat pot xifrar els fitxers PCAP emmagatzemats amb AES-256-GCM i derivació de claus PBKDF2.
voip:
security:
enable_pcap_encryption: true
encryption:
enabled: true
key_file: "/etc/lippycat/keys/pcap.key"
algorithm: "aes-256-gcm"
pbkdf2_iterations: 100000 # Minimum 10,000; 100,000+ recommended
Si el fitxer de clau no existeix, lippycat el genera automàticament amb permisos 0600. Per a producció, genereu i gestioneu la clau manualment:
Genereu una clau de xifrat de 256 bits:
openssl rand -out /etc/lippycat/keys/pcap.key 32
chmod 600 /etc/lippycat/keys/pcap.key
chown lippycat:lippycat /etc/lippycat/keys/pcap.key
Rotació de claus: atureu lippycat, canvieu el nom de la clau antiga i reinicieu-lo. Es genera una clau nova automàticament. Conserveu la clau antiga si necessiteu desxifrar fitxers escrits anteriorment.
Rendiment: AES-256-GCM afegeix aproximadament un 5-10% de sobrecàrrega de CPU i ~1-2% de sobrecàrrega d’emmagatzematge (nonce i etiqueta d’autenticació per bloc). L’acceleració AES-NI de maquinari ho redueix considerablement.
Permisos dels fitxers PCAP
Tots els fitxers PCAP es creen amb permisos 0600 (només el propietari pot llegir i escriure). Això s’aplica als PCAP unificats, als PCAP per trucada i als PCAP amb rotació automàtica. No cal configurar-ho: és el comportament per defecte.
Prepareu el directori de sortida amb restriccions equivalents:
sudo mkdir -p /var/lib/lippycat/pcaps
sudo chmod 700 /var/lib/lippycat/pcaps
sudo chown lippycat:lippycat /var/lib/lippycat/pcaps
Fins i tot amb el xifrat PCAP activat, els permisos dels fitxers proporcionen defensa en profunditat perquè impedeixen l’accés no autoritzat als fitxers xifrats.
Validació dels límits de Content-Length
Els missatges SIP inclouen una capçalera Content-Length. Sense validació, un missatge maliciós o malformat que especifiqui un valor enorme pot esgotar la memòria. Lippycat valida els valors de Content-Length durant l’anàlisi dels missatges TCP SIP amb diverses capes de protecció:
- Longitud de cadena limitada a 10 caràcters (evita el desbordament d’enters durant l’anàlisi)
- Valor màxim configurable (1 MB per defecte)
- Mida màxima total del missatge configurable (2 MB per defecte)
voip:
security:
max_content_length: 1048576 # 1 MB — reasonable for production
max_message_size: 2097152 # 2 MB — reasonable for production
Per als entorns d’alta seguretat, reduïu aquests límits:
voip:
security:
max_content_length: 65536 # 64 KB
max_message_size: 131072 # 128 KB
Les infraccions es registren com a avisos amb el valor causant i la font, de manera que podeu detectar intents d’escaneig o atac.
Seguretat de les interfícies virtuals
Tal com es descriu al Capítol 4, lippycat pot crear interfícies virtuals TAP/TUN per transmetre paquets filtrats a eines posteriors com Wireshark o Snort. Això requereix privilegis elevats.
Configuració amb privilegis mínims
L’enfocament recomanat utilitza les capacitats de fitxer de Linux per concedir només la capacitat CAP_NET_ADMIN:
Concediu la capacitat mínima necessària:
sudo setcap cap_net_admin+ep /usr/local/bin/lc
Verifiqueu la capacitat:
getcap /usr/local/bin/lc
La sortida esperada és /usr/local/bin/lc = cap_net_admin+ep.
Ara el comandament es pot executar sense sudo:
lc sniff voip -i eth0 --virtual-interface
Renúncia als privilegis
Quan és inevitable executar-se com a root, lippycat pot passar a un usuari sense privilegis després de crear la interfície:
sudo lc sniff voip -i eth0 \
--virtual-interface \
--vif-drop-privileges lippycat
El procés crea la interfície com a root i després passa a l’UID/GID de l’usuari lippycat. El bucle d’injecció de paquets s’executa sense privilegis.
Aïllament amb espais de noms de xarxa
Per a desplegaments de producció amb requisits de seguretat estrictes, executeu la interfície virtual en un espai de noms de xarxa aïllat:
Creeu l’espai de noms:
sudo ip netns add lippycat-isolated
Executeu amb aïllament de l’espai de noms:
sudo lc sniff voip -i eth0 \
--virtual-interface \
--vif-netns lippycat-isolated
Només les eines de l’espai de noms poden veure la interfície:
sudo ip netns exec lippycat-isolated wireshark -i lc0
La interfície és invisible per a la pila de xarxa del host, cosa que impedeix captures no autoritzades.
Desplegament en contenidors
Per a Docker o Kubernetes, concediu CAP_NET_ADMIN sense executar tot el contenidor com a root:
Per a Docker:
docker run --cap-add=NET_ADMIN lippycat:latest
# Kubernetes
securityContext:
capabilities:
add:
- NET_ADMIN
runAsNonRoot: true
runAsUser: 1000
Llista de comprovació de seguretat
Abans de posar un desplegament en producció, verifiqueu els punts següents:
Transport:
- TLS activat en totes les connexions gRPC (sense opcions
--insecure) -
LIPPYCAT_PRODUCTION=trueestablert als fitxers d’unitat systemd - mTLS activat amb
--tls-client-authal processador - Els certificats inclouen SAN (no només CN)
- Supervisió de la caducitat dels certificats preparada
Dades emmagatzemades:
- Els directoris de sortida PCAP tenen permisos
0700 - Xifrat PCAP activat per als desplegaments sensibles
- Clau de xifrat desada en un sistema de fitxers segur amb permisos
0600 - Fitxers de registre de claus (
--tls-keylog) protegits amb permisos0600
Aplicació:
- Depuració de Call-ID activada a la configuració
- Límits de Content-Length configurats adequadament
- Les interfícies virtuals utilitzen capacitats de fitxer (no root)
- Les claus privades no s’han incorporat al control de versions
Operacions:
- Els fitxers de configuració tenen permisos
0600(contenen camins de claus) - Procediment de rotació de certificats documentat i provat
- Accés als fitxers de registre de claus auditat
Notes sobre compliment normatiu
Aquestes funcions de seguretat donen suport als marcs habituals de compliment normatiu:
| Requisit | Funcions pertinents |
|---|---|
| RGPD: xifrat de dades personals | Transport TLS, xifrat PCAP, depuració de Call-ID |
| HIPAA: mesures de protecció de PHI | Transport TLS, xifrat PCAP, permisos de fitxer |
| PCI DSS: requisit 4 (xifrat durant la transmissió) | TLS/mTLS per a totes les connexions gRPC |
| SOX: controls d’integritat de les dades | Xifrat autenticat GCM, mTLS |
| NIST 800-53: SC-8 (confidencialitat de la transmissió) | Xifrat de transport TLS |
Resolució de problemes
“certificate relies on legacy Common Name field, use SANs instead”
El certificat es va generar sense noms alternatius del subjecte. Torneu-lo a generar amb una extensió subjectAltName, tal com es mostra a Generació de certificats amb OpenSSL.
Verifiqueu que un certificat existent contingui SAN:
openssl x509 -in server-cert.pem -noout -text | grep -A1 "Subject Alternative Name"
“TLS is disabled but –insecure flag not set”
No s’han proporcionat certificats TLS i no s’ha establert --insecure. Proporcioneu certificats o permeteu explícitament el mode insegur per a les proves.
“No client certificate provided”
El processador exigeix mTLS (--tls-client-auth), però el Hunter no ha presentat cap certificat de client. Afegiu --tls-cert i --tls-key al Hunter.
“Failed to verify certificate”
La validació del certificat ha fallat. Causes habituals:
Comproveu si el certificat ha caducat:
openssl x509 -in cert.pem -noout -enddate
Comproveu si el nom de host coincideix amb els SAN:
openssl x509 -in cert.pem -noout -text | grep -A2 "Subject Alternative Name"
Verifiqueu la cadena de certificats:
openssl verify -CAfile ca-cert.pem server-cert.pem
El desxifrat TLS no funciona
- Verifiqueu que el fitxer de registre de claus existeixi i contingui entrades.
- Comproveu que les claus es van capturar durant la negociació TLS (les claus no es poden generar posteriorment).
- En mode distribuït, confirmeu que el Hunter tingui
--tls-keylogestablert i que el processador tingui--tls-keylog-dirconfigurat. - Per a Wireshark, assegureu-vos que el format de registre de claus comenci amb
CLIENT_RANDOMoCLIENT_HANDSHAKE_TRAFFIC_SECRET.
Optimització del rendiment
lippycat inclou valors per defecte raonables, però els desplegaments en producció sovint es beneficien d’ajustos. Aquest capítol presenta les opcions de rendiment disponibles: comença pels perfils de rendiment TCP (la millora més senzilla) i continua amb l’acceleració GPU i els algorismes de cerca de patrons. Cada apartat es basa en els conceptes de captura i distribució de les parts II i III.
Perfils de rendiment TCP
Els perfils de rendiment TCP són conjunts de paràmetres preajustats que configuren entre 17 i 19 opcions internes amb un sol indicador. Controlen el comportament del reassemblatge TCP, l’assignació de memòria, les estratègies de memòria intermèdia i els fils d’E/S. Si no teniu requisits específics, triar el perfil adequat és l’optimització individual amb més impacte.
Triar un perfil
Establiu el perfil amb --tcp-performance-mode en les ordres que fan reassemblatge local de SIP sobre TCP. sniff voip utilitza balanced, throughput, latency i memory; tap voip utilitza minimal, balanced, high_performance i low_latency.
sudo lc sniff voip -i eth0 --tcp-performance-mode balanced
Per a tap voip, els quatre perfils corresponen a situacions d’ús diferents:
| Mínim | Equilibrat | Alt rendiment | Baixa latència | |
|---|---|---|---|---|
| Límit de memòria | 25 MB | 100 MB | 500 MB | 200 MB |
| Màxim de memòries intermèdies | 500 | 5.000 | 20.000 | 2.000 |
| Mida del lot | 8 | 32 | 64 | 1 |
| Fils d’E/S | 1 | NumCPU | NumCPU x 2 | NumCPU |
| Estratègia de memòria intermèdia | Fixa | Adaptativa | Circular | Fixa |
| Contrapressió | Sí | Sí | No | No |
| Ajust automàtic | No | Sí | Sí | No |
Mínim — Per a dispositius encastats (Raspberry Pi), entorns de prova o desplegaments amb menys de 10 trucades simultànies. Utilitza memòries intermèdies de mida fixa i un sol fil d’E/S per mantenir-se per sota de 25 MB de RAM. La contrapressió està activada per evitar l’esgotament de la memòria.
Equilibrat (per defecte) — L’opció adequada per a la majoria de desplegaments en producció amb entre 10 i 100 trucades simultànies i entre 2 i 8 GB de RAM disponible. La mida adaptativa de les memòries intermèdies i l’ajust automàtic permeten adaptar-se als patrons de trànsit durant l’execució.
Alt rendiment — Desplegaments en centres de dades amb entre 100 i 1.000 trucades simultànies o més. Les memòries intermèdies circulars, el doble de fils d’E/S i la contrapressió desactivada maximitzen el cabal a costa d’un consum de memòria superior (fins a 500 MB). Els lots més grans augmenten lleugerament la latència per paquet.
Baixa latència — Anàlisi en temps real, detecció de frau o supervisió de la qualitat de les trucades on importa processar en menys d’un segon. Una mida de lot d’1 significa que cada paquet es processa immediatament. L’ajust automàtic està desactivat per mantenir un comportament previsible.
Sobreescriure paràmetres individuals
Els perfils estableixen una configuració de base. Podeu sobreescriure qualsevol paràmetre individual:
Utilitzeu el perfil equilibrat amb més memòries intermèdies per a una xarxa amb ràfegues de trànsit:
sudo lc sniff voip -i eth0 \
--tcp-performance-mode balanced \
--max-tcp-buffers 10000
Utilitzeu el perfil d’alt rendiment amb la contrapressió reactivada per seguretat:
sudo lc sniff voip -i eth0 \
--tcp-performance-mode throughput \
--enable-backpressure
Utilitzeu el perfil de memòria amb un temps d’espera del flux més llarg per a diàlegs SIP lents:
sudo lc sniff voip -i eth0 \
--tcp-performance-mode memory \
--tcp-stream-timeout 300s
Els mateixos paràmetres funcionen en fitxers de configuració YAML:
voip:
tcp_performance_mode: "balanced"
max_tcp_buffers: 10000
Triar un perfil per a nodes distribuïts
En un desplegament distribuït (capítol 6), els nodes Hunter i els processadors tenen necessitats d’ajust diferents:
- Els nodes Hunter utilitzen ajustos del temps d’espera d’inactivitat de SIP TCP i filtres gestionats pel processador, però no ofereixen
--tcp-performance-mode. - Els processadors reben paquets ja reassemblats per gRPC, de manera que el perfil TCP afecta principalment qualsevol captura local que pugui fer el processador (rellevant en mode Tap, capítol 9).
- Els nodes Tap combinen tots dos rols. Adapteu el perfil al volum de trànsit local.
Fragments de reassemblatge TCP en mode Tap
tap voip utilitza un fragment de reassemblatge TCP per defecte. Això conserva el comportament d’un únic reassemblador i també és la configuració de retorn. En sistemes on els perfils mostren que el reassemblador és el coll d’ampolla, les connexions TCP independents es poden repartir entre nuclis:
sudo lc tap voip -i eth0 --tcp-reassembly-shards 4 --insecure
Totes dues direccions i tots els paquets d’una connexió s’encaminen al mateix fragment, de manera que l’ordre per flux no canvia. El límit global de pàgines en memòria intermèdia es divideix entre els fragments en lloc de multiplicar-se, i el límit per connexió no canvia. La telemetria informa de la suma de discontinuïtats de reassemblatge i d’alliberaments per retenció limitada de tots els fragments. Cada fragment afegeix un reassemblador i un conjunt de fluxos; compareu, per tant, paquets/s, CPU, memòria dinàmica, assignacions, discontinuïtats i tots els comptadors de descart de captura i flux amb 1, 2, 4 i 8 fragments i una combinació representativa de fluxos. Ajusteu processor.detection_workers juntament amb el nombre de fragments; els fragments addicionals no ajuden si massa pocs treballadors els alimenten. Torneu a --tcp-reassembly-shards 1 si empitjoren l’ús de recursos o la telemetria d’integritat.
Prioritat de captura SIP i els seus límits
La memòria intermèdia de captura proporciona a la senyalització SIP reconeguda una via prioritària amb mida independent. En mode automàtic (sip_buffer_size: 0 o --sip-buffer-size 0), la capacitat de paquets coincideix amb la de la memòria intermèdia de captura ordinària. Un valor positiu és una sobreescriptura explícita: els valors més grans donen marge per a ràfegues limitades i consumeixen més memòria, mentre que els més petits redueixen la memòria i permeten degradar la prioritat abans. Per a SIP sobre TCP, el reconeixement manté estat: després d’observar una línia inicial SIP creïble, els segments posteriors de capçalera i cos en totes dues direccions de la connexió utilitzen la via prioritària. El classificador de fluxos conserva com a màxim 65.536 entrades, manté com a màxim 1 KiB de possible prefix de línia inicial per direcció, fa caducar les entrades inactives al cap de dos minuts i les elimina amb TCP FIN o RST.
Aquesta protecció només comença després d’un inici SIP recognoscible. Quan la captura s’incorpora a una connexió TCP ja establerta, o mentre una línia inicial encara està dividida entre segments incomplets, aquests paquets utilitzen la via ordinària. Per tant, es poden descartar en sobrecàrrega abans que el flux adquireixi prioritat. Un inici complet recognoscible posterior encara pot donar prioritat a la connexió.
La via prioritària és limitada i no garanteix absència de pèrdues. Quan és plena, un paquet SIP reconegut passa a la via ordinària. Si totes dues vies són plenes, el paquet es rebutja i es compta com a descart SIP de la memòria intermèdia de captura; el desbordament de la via ordinària es compta separadament. Aquests comptadors distingeixen quina via ha perdut el paquet, però per si sols no identifiquen una causa a la xarxa anterior o al nucli. Si augmenten els descarts SIP, reduïu el trànsit ofert amb un filtre BPF, augmenteu la capacitat de servei posterior o investigueu les altres etapes identificades de pèrdua de captura i processament abans d’atribuir una causa arrel.
sip_priority_classified és el nombre inclusiu de paquets reconeguts i encaminats per la via de prioritat SIP. Inclou els paquets acceptats per aquesta via, els comptats per capture_buffer_sip_demotions després de passar a la via ordinària i els comptats per capture_buffer_sip_drops després que totes dues vies d’entrada els rebutgin. Les degradacions indiquen un servei de prioritat deteriorat; només els descarts SIP finals contribueixen als totals de pèrdua de paquets.
Capacitat i retenció del detector
El detector de protocols té per defecte 100.000 contextos de flux actius i 100.000 resultats en memòria cau. Configureu els límits de manera independent:
detector:
max_flows: 100000
max_cache_entries: 100000
Quan arriba una clau nova a una estructura plena, el detector expulsa un lot amb el 10% de les entrades més antigues (almenys una) i després admet la clau. Aquesta histèresi evita el cost d’expulsar en cada inserció posterior. Els fluxos expulsats són els de darrera activitat més antiga; les entrades de cau expulsades són les que caduquen abans. La pressió de capacitat és, per tant, un senyal de retenció, no una prova que s’hagin descartat paquets.
Reduir detector.max_flows disminueix la memòria i la durada d’una pausa individual d’expulsió, però conserva l’historial de protocols de menys fluxos. Amb un conjunt de treball superior al límit, augmenta la reclassificació i un flux de llarga durada poc actiu pot perdre l’estat. Un límit més alt millora la retenció i redueix la freqüència d’expulsió a costa de memòria i lots del 10% més grans. detector.max_cache_entries té el mateix compromís entre memòria i reclassificació. Els valors zero o negatius desactiven el límit corresponent i només s’han d’utilitzar amb un altre límit de memòria fiable.
Ajusteu-ho amb trànsit representatiu d’alta cardinalitat i canvieu un sol límit cada vegada. Una bona configuració estabilitza la memòria resident sense pressió recurrent en cada senyal de vida ni empitjorament de la pèrdua de captura.
Criteris d’acceptació
L’evidència per a una versió de producció ha d’incloure proves de rendiment sostingut al límit per a fluxos i cau amb 1.000, 10.000 i 100.000 entrades, i una prova amb treballadors del detector concurrents. Entre esdeveniments de lot, la inserció en règim estable no ha de créixer linealment amb el límit. Amb el valor per defecte de 100.000 entrades, un lot d’expulsió s’ha de completar en 100 ms en cada classe de maquinari de producció compatible. Aquest és el pressupost de latència de la memòria intermèdia de paquets que correspon al temps d’espera de lot per defecte de Hunter/Tap.
Registreu el cabal mitjà, la latència de cua de les insercions i la latència dels lots d’expulsió. El resultat de 100 ms de temps real és evidència de versió vinculada a l’amfitrió, la cadena d’eines, la compilació, el nombre de treballadors i les dades de prova; no és un llindar de CI portable. La CI ha de comprovar, en canvi, l’escalabilitat amb la cardinalitat i el comportament de les assignacions.
Telemetria de capacitat
La telemetria del detector apareix sota HunterStats.detector en cada senyal de vida; Tap utilitza els mateixos camps per a la font local:
| Camps | Semàntica |
|---|---|
flow_entries, cache_entries | Indicadors actuals |
flow_evictions, cache_evictions | Expulsions acumulades per capacitat |
flow_expired_removals, cache_expired_removals | Eliminacions acumulades per TTL |
flow_pressure_episodes, cache_pressure_episodes | Esdeveniments acumulats de lots d’expulsió |
flow_last_eviction_duration_ns, cache_last_eviction_duration_ns | Instantànies de la durada del darrer lot |
flow_last_eviction_batch_size, cache_last_eviction_batch_size | Instantànies de la mida del darrer lot |
Els comptadors són monòtons durant la vida d’un detector i es reinicien quan s’inicia un detector nou o un procés de captura nou. Els senyals de vida són instantànies; no sumeu, doncs, un comptador entre informes successius. Calculeu diferències no negatives per font i tracteu un valor inferior com un reinici. Per a una visió del conjunt de nodes, sumeu els darrers indicadors per font i les diferències dels comptadors per font durant el mateix interval. Tingueu en compte les fonts que s’incorporen o surten de l’agregat i manteniu separats els valors de flux i de cau.
La darrera durada d’expulsió i la darrera mida de lot descriuen l’esdeveniment completat més recent i substitueixen els valors anteriors. No sumeu aquests camps del darrer esdeveniment ni en calculeu taxes. Conserveu mostres externament si són importants la mitjana, el màxim o la latència de cua.
Observeu la tendència de flow_last_eviction_duration_ns mentre els indicadors d’entrades es mantenen a prop del límit. Amb el límit per defecte de 100.000 fluxos, els lots milloren el cabal i el treball total sota bloqueig, però els episodis individuals d’expulsió de fluxos observats han mantingut el bloqueig exclusiu durant 27–44 ms, davant d’uns 7 ms abans de l’agrupació en lots. Reduïu detector.max_flows quan aquesta pausa sigui massa llarga per a la càrrega; tornar a l’expulsió amb recorregut complet del mapa en cada inserció restitueix la regressió de cabal. Correlacioneu la pressió del detector amb l’ocupació de la memòria intermèdia de paquets i els comptadors de descart identificats.
Acceleració GPU
L’acceleració GPU agilitza la cerca de coincidències dels filtres d’aplicació en el costat de captura sobre valors ja extrets pels analitzadors de protocols. No analitza SIP ni extreu Call-IDs; aquestes operacions continuen a la CPU.
Selecció del motor
lippycat comprova els motors disponibles per ordre de prioritat i selecciona el millor:
flowchart LR
Auto["--gpu-backend auto"] --> CUDA{CUDA\navailable?}
CUDA -->|Yes| UseCUDA[Use CUDA]
CUDA -->|No| SIMD["Use CPU SIMD\n(always available)"]
Seleccioneu un motor explícitament o deixeu que el triï la detecció automàtica:
Detecteu automàticament el motor (recomanat):
sudo lc sniff voip -i eth0 --gpu-backend auto
Forceu CUDA:
sudo lc sniff voip -i eth0 --gpu-backend cuda
Forceu CPU SIMD:
sudo lc sniff voip -i eth0 --gpu-backend cpu-simd
Desactiveu completament l’acceleració:
sudo lc sniff voip -i eth0 --gpu-backend disabled
Per a sniff voip, hunt i tap, aquests indicadors GPU només es registren en compilacions CUDA. watch live ofereix els seus propis indicadors GPU en compilacions estàndard.
Requisits dels motors
| Motor | Maquinari | Programari | Estat |
|---|---|---|---|
| CUDA | GPU NVIDIA, Compute 6.0+ (Pascal o posterior) | CUDA Toolkit 11.0+, nvidia-driver 470+ | Compileu amb -tags cuda |
| CPU SIMD | Qualsevol CPU x86_64 | Cap (integrat) | Sempre disponible |
El motor CPU SIMD utilitza instruccions AVX2 quan estan disponibles i recorre a SSE4.2 en cas contrari. No requereix maquinari ni controladors especials i ofereix bon rendiment en CPU modernes.
El valor opencl continua acceptant-se per compatibilitat de configuració, però el motor OpenCL no està implementat. La detecció automàtica l’omet, i una selecció explícita recorre a la cerca de coincidències per CPU després que falli la inicialització.
Resultats de les proves de rendiment
Proves de rendiment mesurades en un Intel i9-13900HX amb 64 paquets per lot:
| Operació | Capacitat de transmissió | Latència per paquet |
|---|---|---|
| Cerca de patrons (lot GPU) | 29,7 Kpkts/s | 525 ns |
| Cerca de patrons (CPU SIMD) | 29,9 Kpkts/s | 530 ns |
| El rendiment de CPU SIMD és comparable al processament per lots GPU amb taxes de paquets moderades. Tracteu aquestes microproves de cerca de patrons com a xifres comparatives, no com a cabal d’anàlisi SIP d’extrem a extrem. |
Ajust de la mida del lot
La mida del lot controla el compromís entre cabal i latència:
Per a monitoratge en temps real de baixa latència:
--gpu-batch-size 256
Per a un ús general equilibrat en producció:
--gpu-batch-size 1024
Per al cabal màxim en captures de gran volum:
--gpu-batch-size 4096
Els lots més grans amortitzen el cost per lot però afegeixen latència (els paquets esperen fins que el lot s’omple o venç un temps d’espera). Per a la supervisió VoIP on importa la visibilitat en temps real, manteniu-vos entre 256 i 1024. Per a l’anàlisi massiva de PCAP o la captura perifèrica d’alt cabal, utilitzeu entre 2048 i 4096.
Configuració YAML
gpu:
enabled: true
backend: "auto"
device_id: 0
max_batch_size: 1024
pinned_memory: true
stream_count: 4
Algorismes de cerca de patrons
Quan filtreu trànsit amb conjunts grans de noms d’usuari SIP, números de telèfon o altres identificadors, l’elecció de l’algorisme de cerca de patrons té un gran impacte en el rendiment.
Opcions d’algorisme
Establiu l’algorisme amb --pattern-algorithm:
| Algorisme | Complexitat temporal | Ideal per a |
|---|---|---|
auto (per defecte) | Adaptativa | Ús general: selecciona l’algorisme òptim durant l’execució |
linear | O(n x m) | Conjunts petits de patrons (menys de 100 patrons) |
aho-corasick | O(n + m + z) | Conjunts grans de patrons (100 patrons o més) |
On n és la longitud de l’entrada, m és la longitud total dels patrons i z és el nombre de coincidències.
En mode auto, lippycat passa a Aho-Corasick quan el nombre de patrons arriba a 100. Per sota d’aquest llindar, el recorregut lineal evita el cost de construir l’autòmat.
Rendiment a escala
La diferència esdevé molt marcada quan augmenta el nombre de patrons:
| Nombre de patrons | Recorregut lineal | Aho-Corasick | Acceleració |
|---|---|---|---|
| 10 | 1,2 us | 0,8 us | 1,5x |
| 100 | 12 us | 0,9 us | 13x |
| 1.000 | 120 us | 1,0 us | 120x |
| 10.000 | 1,2 ms | 1,1 us | ~1.100x |
| 100.000 | 12 ms | 1,3 us | ~9.200x |
El temps de cerca de coincidències d’Aho-Corasick es manté gairebé constant independentment del nombre de patrons perquè tots es compilen en un autòmat finit que processa cada byte d’entrada exactament una vegada.
Configuració
Utilitzeu la selecció automàtica en la majoria de desplegaments:
sudo lc sniff voip -i eth0 --pattern-algorithm auto
Forceu Aho-Corasick per a llistes grans de filtres:
sudo lc hunt voip --processor central:55555 \
--pattern-algorithm aho-corasick \
--pattern-buffer-mb 128
Utilitzeu un recorregut lineal per a uns quants patrons:
sudo lc sniff voip -i eth0 --pattern-algorithm linear
En YAML:
voip:
pattern_algorithm: "auto"
pattern_buffer_mb: 64
L’ús de memòria d’Aho-Corasick és modest: 100.000 patrons de 20 caràcters de mitjana consumeixen menys de 100 MB per a l’autòmat complet. Per a càrregues d’intercepció legal amb desenes de milers d’objectius (capítol 17), Aho-Corasick és l’única opció viable.
Filtres BPF
Els filtres BPF (Berkeley Packet Filter) s’executen en l’espai del nucli i descarten paquets no desitjats abans que arribin a lippycat. És la forma més eficient de filtratge perquè els paquets rebutjats mai no travessen el límit entre el nucli i l’espai d’usuari.
Captureu només trànsit SIP:
sudo lc sniff voip -i eth0 -f "port 5060"
Captureu SIP i un interval de ports RTP:
sudo lc hunt voip --processor central:55555 \
-i eth0 -f "port 5060 or portrange 10000-20000"
Captureu trànsit d’un amfitrió específic:
sudo lc sniff voip -i eth0 -f "host 192.168.1.100 and port 5060"
En desplegaments VoIP, les restriccions explícites de ports SIP i RTP són la manera més segura de reduir la càrrega de l’espai d’usuari sense descartar SIP sobre TCP:
sudo lc hunt voip --processor central:55555 \
-i eth0 --sip-port 5060 --rtp-port-range 10000-20000
Consulteu l’apèndix C: referència de filtres BPF per a la sintaxi completa dels filtres.
Escalabilitat distribuïda
Els desplegaments distribuïts (capítol 6) introdueixen dimensions d’ajust addicionals: els paràmetres de lot controlen l’eficiència de gRPC, el filtratge VoIP a la perifèria redueix l’amplada de banda i les topologies jeràrquiques reparteixen la càrrega entre nivells.
Paràmetres de lot dels nodes Hunter
Els nodes Hunter agrupen els paquets en lots abans d’enviar-los al processador per gRPC. Ajusteu --batch-size i --batch-timeout segons el compromís entre latència i cabal que necessiteu:
Per a supervisió de baixa latència amb poques trucades:
sudo lc hunt voip --processor central:55555 \
--batch-size 16 --batch-timeout 50
Per a la configuració equilibrada per defecte en producció:
sudo lc hunt voip --processor central:55555 \
--batch-size 64 --batch-timeout 100
Per a captura massiva d’alt cabal:
sudo lc hunt voip --processor central:55555 \
--batch-size 256 --batch-timeout 500
Els lots més grans redueixen el cost de gRPC per paquet, però augmenten el temps màxim que un paquet espera abans de transmetre’s (el temps d’espera del lot, en mil·lisegons).
Filtratge a la perifèria
Una de les millores de rendiment més grans en mode distribuït és el filtratge a la perifèria. Quan els nodes Hunter utilitzen subordres específiques de VoIP i filtratge accelerat per GPU, poden reduir més d’un 90% el volum de trànsit transmès al processador:
Creeu el filtre perifèric:
lc set filter -P central:55555 --tls-ca ca.crt \
--type sip_user --pattern alicent
Inicieu el node Hunter amb filtratge perifèric i acceleració GPU:
sudo lc hunt voip --processor central:55555 \
--sip-port 5060 \
--rtp-port-range 10000-20000
El processador envia el filtre d’usuari SIP alicent al node Hunter. Aquest manté les trucades en memòria intermèdia a la perifèria i només transmet les que coincideixen, de manera que el processador rep una fracció del trànsit brut.
Capacitat del processador
Els processadors supervisen la càrrega interna (profunditat de la cua d’escriptura PCAP, treball pendent cap a l’amunt) i senyalitzen control de flux als nodes Hunter quan estan sobrecarregats:
| Utilització de la cua | Senyal de control de flux | Comportament del node Hunter |
|---|---|---|
| < 30% | CONTINUE | Enviament normal |
| 30-70% | SLOW | Reduir la taxa de lots |
| 70-90% | PAUSE | Aturar l’enviament |
| < 30% (després de PAUSE) | RESUME | Reprendre l’enviament |
Si veieu senyals SLOW o PAUSE als registres del processador (capítol 12), el processador s’està convertint en un coll d’ampolla. Opcions:
- Afegiu més processadors i repartiu-hi els nodes Hunter.
- Activeu el filtratge perifèric per reduir el volum d’entrada.
- Utilitzeu el mode jeràrquic: els processadors regionals agreguen dades dels nodes Hunter locals i després les transmeten a un processador central.
Topologies jeràrquiques
Per a desplegaments a gran escala (50 nodes Hunter o més), una jerarquia de dos nivells evita sobrecarregar un únic processador:
50 hunters --> 5 regional processors --> 1 central processor
Cada processador regional gestiona 10 nodes Hunter i aplica anàlisi de protocols abans de transmetre resums cap a l’amunt. Això redueix la càrrega del processador central en un ordre de magnitud. Consulteu el capítol 6 per configurar la topologia.
Ajust específic de l’entorn
Els diferents entorns de desplegament requereixen combinacions diferents de les tècniques anteriors. Aquí teniu configuracions provades per a situacions habituals.
Sistemes encastats (Raspberry Pi, SBC ARM)
sudo lc sniff voip -i eth0 \
--tcp-performance-mode memory \
--memory-optimization
Preveieu entre 10 i 50 trucades simultànies. El perfil memory manté unes memòries intermèdies TCP conservadores. Activeu --memory-optimization per recuperar-les de manera agressiva.
Màquines virtuals
sudo lc sniff voip -i eth0 \
--tcp-performance-mode balanced \
--max-tcp-buffers 5000
Ajusteu els límits de memòria intermèdia TCP segons la RAM assignada a la màquina virtual.
Servidors físics
sudo lc sniff voip -i eth0 \
--tcp-performance-mode throughput \
--max-tcp-buffers 20000
En maquinari dedicat amb 8 GB de RAM o més i una CPU moderna, utilitzeu el perfil throughput. Si teniu una GPU NVIDIA i heu compilat amb -tags cuda, afegiu --gpu-backend auto perquè la selecció CUDA o SIMD triï el millor motor. Per a interfícies de 10GbE o més, distribuïu la captura entre nodes Hunter addicionals.
Kubernetes / contenidors
# Pod resource limits
resources:
limits:
memory: "4Gi"
cpu: "4"
requests:
memory: "2Gi"
cpu: "2"
lc sniff voip -i eth0 \
--tcp-performance-mode balanced \
--max-tcp-buffers 5000
Adapteu el perfil TCP al límit de memòria del contenidor: els 100 MB del perfil balanced encaixen còmodament en un contenidor de 2 GB. L’accés directe a la GPU des dels contenidors és possible però complex.
Node Hunter distribuït a la perifèria amb recursos limitats
Per a nodes Hunter desplegats en dispositius perifèrics petits que transmeten a un processador central:
sudo lc hunt voip --processor central:55555 \
--batch-size 32 --batch-timeout 200 \
--sip-port 5060 --rtp-port-range 10000-20000 \
--tls-ca ca.crt
Les restriccions de ports SIP/RTP redueixen la càrrega de captura sense descartar SIP TCP. Els lots petits mantenen l’ús de memòria previsible. Si utilitzeu una compilació CUDA, afegiu --enable-voip-filter --gpu-backend cpu-simd per accelerar la cerca de coincidències perifèrica sense maquinari GPU.
Anàlisi del perfil de memòria
Quan feu ajustos, és útil observar l’ús real de memòria. Activeu pprof per utilitzar l’analitzador de memòria integrat de Go:
sudo lc tap voip -i eth0 --debug-listen 127.0.0.1:6060
En un altre terminal, captureu un perfil de memòria dinàmica:
go tool pprof http://localhost:6060/debug/pprof/heap
L’indicador --debug-listen està disponible a tap, process i hunt, i accepta adreces de bucle local per defecte. Per exposar pprof en una altra adreça, afegiu --debug-allow-non-loopback. Els desplegaments existents poden continuar utilitzant LC_PPROF_ADDR=127.0.0.1:6060 si s’omet l’indicador.
Per a comprovacions ràpides sense pprof:
Observeu l’ús de memòria al llarg del temps:
watch -n 10 'ps -o rss,vsz,comm -p $(pgrep -f "lc (sniff|hunt|process|tap)")'
Si la memòria creix contínuament, comproveu si hi ha:
- Un temps d’espera de flux TCP massa alt (no s’alliberen les memòries intermèdies obsoletes)
- Un nombre de memòries intermèdies massa alt per a la RAM disponible
- Absència de l’indicador
--memory-optimizationen sistemes amb recursos limitats
Referència ràpida
| Objectiu | Què cal ajustar |
|---|---|
| Reduir l’ús de memòria | --tcp-performance-mode minimal, --memory-optimization, --max-tcp-buffers |
| Augmentar el cabal | --tcp-performance-mode throughput per a sniff voip, --tcp-performance-mode high_performance per a tap voip |
| Reduir la latència | --tcp-performance-mode latency per a sniff voip, --tcp-performance-mode low_latency per a tap voip |
| Escalar entre segments | Distribuir nodes Hunter, filtrar a la perifèria, utilitzar processadors jeràrquics |
| Gestionar llistes grans de filtres | --pattern-algorithm aho-corasick, --pattern-buffer-mb 128 |
| Capturar a 10GbE o més | ampliar amb nodes Hunter addicionals |
Anàlisi detallada dels protocols
Els analitzadors de protocols de lippycat extreuen metadades estructurades i admeten filtratge adaptat al protocol. Aquests capítols cobreixen el comportament de cada analitzador, els camps de metadades i investigacions pràctiques:
- VoIP: anàlisi de SIP i RTP: senyalització, fluxos multimèdia, qualitat de trucades i PCAP per trucada.
- Anàlisi de DNS: correlació de consultes, metadades i detecció de túnels.
- Inspecció de TLS: negociacions, certificats i empremtes.
- Anàlisi d’HTTP: peticions, respostes i captura del cos.
- Anàlisi de protocols de correu electrònic: SMTP, IMAP i POP3.
- Captura RADIUS i POI: autenticació, comptabilització i operacions POI autoritzades.
Per veure les subordres i opcions de protocol, consulteu Captura CLI amb lc sniff. Els exemples utilitzen jq; consulteu Treballar amb la sortida JSON per veure convencions de sortida compartides, canalització i fluxos de reproducció.
VoIP: anàlisi de SIP i RTP
L’anàlisi VoIP és el mode de protocol més madur de lippycat. Segueix els diàlegs de senyalització SIP, correlaciona els fluxos de mitjans RTP amb les sessions SIP que els controlen i admet l’extracció de PCAP per trucada per a l’anàlisi fora de línia.
Flux de senyalització SIP
SIP (Session Initiation Protocol) utilitza un model de petició/resposta per establir, modificar i acabar trucades de veu i vídeo. lippycat segueix tot el cicle de vida del diàleg. Una trucada reeixida típica segueix aquesta seqüència:
sequenceDiagram
participant Caller
participant Callee
Caller->>Callee: INVITE (SDP offer)
Callee-->>Caller: 100 Trying
Callee-->>Caller: 180 Ringing
Callee-->>Caller: 200 OK (SDP answer)
Caller->>Callee: ACK
Note over Caller,Callee: RTP media (bidirectional)
Caller->>Callee: RTP audio stream
Callee->>Caller: RTP audio stream
Callee->>Caller: BYE
Caller-->>Callee: 200 OK
lippycat analitza cada missatge SIP i n’extreu:
| Camp | Descripció | Camí JSON |
|---|---|---|
| Call-ID | Identificador únic del diàleg | .VoIPData.CallID |
| Mètode | Mètode de petició SIP | .VoIPData.Method |
| Estat | Codi de resposta (p. ex., 200) | .VoIPData.Status |
| From / To | Extrems URI SIP | .VoIPData.From, .VoIPData.To |
| From-Tag / To-Tag | Etiquetes de correlació del diàleg | .VoIPData.FromTag, .VoIPData.ToTag |
| Usuari | Nom d’usuari extret de l’URI | .VoIPData.User |
| Content-Type | Tipus del cos (p. ex., application/sdp) | .VoIPData.ContentType |
Mètodes SIP que lippycat reconeix: INVITE, ACK, BYE, CANCEL, REGISTER, OPTIONS, PRACK, UPDATE, INFO, REFER, SUBSCRIBE, NOTIFY, MESSAGE, PUBLISH.
Captura de trànsit SIP
La captura VoIP bàsica mostra tot el trànsit SIP i RTP d’una interfície:
sudo lc sniff voip -i eth0
Filtreu per usuari SIP per centrar-vos en extrems concrets:
Per a un sol usuari:
sudo lc sniff voip -i eth0 -u alicent
Per a diversos usuaris:
sudo lc sniff voip -i eth0 -u "alicent,robb"
Per a una coincidència de sufix amb comodí (tots els números acabats en 456789):
sudo lc sniff voip -i eth0 -u "*456789"
Extraieu informació d’establiment de trucada amb jq:
Per mostrar totes les peticions INVITE amb qui truca i qui rep la trucada:
sudo lc sniff voip -i eth0 2>/dev/null | \
jq -r 'select(.VoIPData.Method == "INVITE") |
[.Timestamp, .VoIPData.From, .VoIPData.To, .VoIPData.CallID] |
@tsv'
Per seguir les transicions d’estat d’una trucada amb un Call-ID concret:
sudo lc sniff voip -i eth0 2>/dev/null | \
jq -r 'select(.VoIPData.CallID == "abc123@pbx.local") |
[.Timestamp, .VoIPData.Method // ("Response " + (.VoIPData.Status|tostring))] |
@tsv'
Transport SIP: UDP i TCP
SIP funciona tant sobre UDP com sobre TCP. UDP és més habitual per a la senyalització, però TCP s’utilitza per a missatges grans (p. ex., SIP amb SDP que supera l’MTU) i és necessari per a SIP xifrat amb TLS (SIPS).
Per defecte, lippycat captura tant el trànsit SIP UDP com TCP. SIP TCP requereix reassemblatge del flux, cosa que afegeix sobrecàrrega de CPU. En xarxes amb molt trànsit TCP que no és SIP, podeu ometre completament el processament TCP:
El mode només UDP genera un filtre BPF optimitzat que exclou TCP:
sudo lc sniff voip -i eth0 -U -S 5060
Quan cal SIP TCP, trieu un perfil de rendiment per ajustar els paràmetres de reassemblatge (vegeu Captura CLI amb lc sniff):
sudo lc sniff voip -i eth0 -M throughput
Fluxos de mitjans RTP i SRTP
Un cop establert un diàleg SIP, els mitjans circulen com a paquets RTP (Real-time Transport Protocol). lippycat detecta els fluxos RTP identificant paquets dins dels intervals de ports configurats (per defecte: 10000-32768) que coincideixen amb l’estructura de la capçalera RTP.
Cada paquet RTP conté metadades que lippycat extreu:
| Camp | Descripció | Camí JSON |
|---|---|---|
| SSRC | Identificador de la font de sincronització | .VoIPData.SSRC |
| Número de seqüència | Ordenació dels paquets | .VoIPData.SequenceNum |
| Marca temporal | Temporització dels mitjans | .VoIPData.Timestamp |
| Tipus de dades útils | Identificador del còdec | .VoIPData.PayloadType |
| Còdec | Nom del còdec (de l’SDP) | .VoIPData.Codec |
lippycat correlaciona els fluxos RTP amb el diàleg SIP que els controla mitjançant el Call-ID. Quan els paquets RTP arriben abans de l’INVITE SIP corresponent (fet que passa quan la captura comença a mitja trucada), lippycat crea un registre de trucada sintètic i el fusiona quan apareix la senyalització SIP.
Supervisió dels fluxos RTP:
Per mostrar els fluxos RTP actius amb SSRC i còdec:
sudo lc sniff voip -i eth0 2>/dev/null | \
jq -r 'select(.VoIPData.IsRTP) |
[.SrcIP, .DstIP, .VoIPData.SSRC, .VoIPData.Codec, .VoIPData.SequenceNum] |
@tsv'
Per detectar salts en la seqüència RTP (possible pèrdua de paquets):
sudo lc sniff voip -i eth0 2>/dev/null | \
jq -r 'select(.VoIPData.IsRTP) |
[.VoIPData.SSRC, .VoIPData.SequenceNum] | @tsv' | \
awk -F'\t' '{
if (prev[$1] != "" && $2 != (prev[$1]+1) % 65536)
print "Gap: SSRC="$1, "expected="(prev[$1]+1)%65536, "got="$2;
prev[$1] = $2
}'
Intervals de ports RTP personalitzats:
Si la vostra centraleta utilitza ports RTP no estàndard, especifiqueu explícitament l’interval:
sudo lc sniff voip -i eth0 -R 8000-9000
sudo lc sniff voip -i eth0 -R "8000-9000,40000-50000"
Mètriques de qualitat de les trucades
Els números de seqüència i les marques temporals RTP permeten analitzar la qualitat de les trucades. Tot i que lippycat captura les metadades RTP en brut, podeu obtenir mètriques estàndard de qualitat a partir de la sortida JSON:
Pèrdua de paquets: es detecta pels salts en el número de seqüència RTP. El número de seqüència és un comptador de 16 bits que augmenta una unitat per paquet i torna a zero després de 65535.
Jitter: variació en el temps d’arribada entre paquets. Calculeu-lo comparant l’interval d’arribada esperat (basat en marques temporals RTP) amb els temps d’arribada reals.
MOS (Mean Opinion Score): estimació de la qualitat de veu entre 1,0 (dolenta) i 5,0 (excel·lent). MOS es deriva del factor R, que té en compte el còdec, la pèrdua de paquets, el jitter i el retard. Un MOS superior a 4,0 es considera de bona qualitat.
Exemple: calculeu el percentatge de pèrdua de paquets per SSRC d’un fitxer PCAP:
El comandament següent analitza una gravació per SSRC. El comentari dins del programa awk forma part del programa i es conserva:
lc sniff voip -r call-recording.pcap 2>/dev/null | \
jq -r 'select(.VoIPData.IsRTP) |
[.VoIPData.SSRC, .VoIPData.SequenceNum] | @tsv' | \
awk -F'\t' '
{ count[$1]++; seq[$1] = $2 }
END {
for (ssrc in count) {
# Expected = max_seq - min_seq + 1 (approximate)
loss = 1 - (count[ssrc] / (count[ssrc] + 0.001))
printf "SSRC=%s packets=%d\n", ssrc, count[ssrc]
}
}'
Per supervisar la qualitat de les trucades en producció, exporteu les dades RTP a un sistema de supervisió dedicat o utilitzeu la vista de trucades en temps real de la TUI (vegeu Captura interactiva amb lc watch).
Flux de treball PCAP per trucada
L’escriptura PCAP per trucada crea fitxers de captura separats per a cada trucada VoIP, cosa que facilita arxivar, reproduir o compartir gravacions de trucades individuals.
La funció PCAP per trucada està disponible als nodes processadors i Tap. Crea dos fitxers per trucada:
20250123_143022_abc123_sip.pcap # SIP signaling packets
20250123_143022_abc123_rtp.pcap # RTP media packets
Captura independent amb PCAP per trucada (mode Tap):
sudo lc tap voip -i eth0 \
--per-call-pcap \
--per-call-pcap-dir /var/voip/calls \
--per-call-pcap-pattern "{timestamp}_{callid}.pcap" \
--insecure
Captura distribuïda amb PCAP per trucada (processador):
lc process --listen :55555 \
--per-call-pcap \
--per-call-pcap-dir /var/capture/calls \
--pcap-command 'gzip %pcap%' \
--tls-cert server.crt --tls-key server.key
El hook --pcap-command s’executa quan es tanca cada fitxer PCAP i permet comprimir, pujar o arxivar automàticament. El hook --voip-command s’executa quan acaba tota una trucada (tots dos fitxers SIP i RTP estan finalitzats):
lc process --listen :55555 \
--per-call-pcap --per-call-pcap-dir /var/capture/calls \
--pcap-command 'gzip %pcap%' \
--voip-command '/opt/scripts/process-call.sh %callid% %dirname%' \
--tls-cert server.crt --tls-key server.key
Marcadors dels patrons de noms de fitxer: {callid}, {from}, {to}, {timestamp}.
El període de gràcia PCAP (--pcap-grace-period, 5 segons per defecte) controla quant espera lippycat després de l’últim paquet abans de tancar els fitxers PCAP d’una trucada. Això té en compte els paquets RTP que arriben tard i les retransmissions.
Per a la configuració completa del PCAP per trucada, vegeu Agregació central amb lc process i Mode independent amb lc tap.
Flux de dades VoIP
Entendre com circulen els paquets per l’analitzador VoIP ajuda a resoldre problemes i ajustar el rendiment:
flowchart LR
A[Network Interface] --> B[gopacket]
B --> C{Protocol Detection}
C -->|UDP| D[SIP Parser]
C -->|UDP| E[RTP Detector]
C -->|TCP| F[TCP Reassembly]
F --> D
D --> G[VoIP Packet Processor]
E --> G
G --> H{GPU Available?}
H -->|Yes| I[GPU Acceleration]
H -->|No| J[CPU Processing]
I --> K[Filter & Display]
J --> K
Els paquets SIP UDP s’analitzen directament. Els paquets SIP TCP passen primer pel motor de reassemblatge (configurat amb --tcp-performance-mode). Els paquets RTP es detecten per l’estructura de la capçalera dins de l’interval de ports configurat. El processador de paquets VoIP correlaciona els fluxos RTP amb els diàlegs SIP mitjançant el Call-ID. L’acceleració GPU, quan està disponible, descarrega la cerca de patrons per al filtratge d’usuaris SIP.
Captura selectiva de mitjans amb eBPF
hunt voip --rtp-ebpf i tap voip --rtp-ebpf poden rebutjar mitjans no relacionats abans que libpcap els transmeti per descodificar-los en l’espai d’usuari. Aquesta via Linux activada explícitament manté el lector libpcap i actualitza els mapes d’un filtre de socket persistent quan canvien les trucades seleccionades. No reinicia la captura per l’activitat de trucades. L’assignació existent en l’espai d’usuari, l’atribució de filtres, la caducitat i les comprovacions de sortida continuen sent autoritatives.
Els mitjans seleccionats per trucada es capturen només després de la selecció i la publicació dels extrems. Les metadades SDP validades i limitades es poden conservar abans de la selecció; no es conserva l’historial RTP. Els filtres IP/CIDR independents i la política configurada sense filtres continuen aplicant-se.
L’aprenentatge compartit d’SDP conserva les seccions de mitjans independents vàlides abans i després d’una secció invàlida, només amb extrems IP/port numèrics exactes. No fa inferències a partir de DNS, candidats ICE ni intervals d’adreces. S’admeten els perfils RTP i UDP/TLS/RTP per a àudio, vídeo i altres tipus de mitjans. RTCP utilitza per defecte el port següent; un port/adreça RTCP explícit substitueix aquest valor, mentre que RTCP mux utilitza un extrem compartit. El port RTP 65535 requereix a=rtcp-mux, a=rtcp-mux-only o un port/adreça a=rtcp: explícit vàlid: el port següent implícit seria 65536, fora de l’interval UDP. Sense una d’aquestes declaracions, l’analitzador rebutja conservadorament tota la secció. Les dades invàlides de mitjans, connexió o RTCP invaliden la secció afectada sense reutilitzar l’adreça d’una secció anterior. Les dades invàlides de connexió de sessió impedeixen heretar extrems; encara es pot utilitzar una adreça posterior vàlida a nivell de mitjans. Els ports zero, els mitjans inactius i les adreces de pausa no especificades no aporten extrems nous. Els extrems acceptats prèviament es conserven fins a la neteja autoritativa del cicle de vida de la trucada. En arribar a la capacitat, només es conserven els primers extrems únics en l’ordre del trànsit dins del límit configurat i la derivació queda incompleta. La derivació incompleta d’una trucada seleccionada aplica la política de fallada d’admissió configurada i bloqueja la recuperació de l’aplicació del filtre fins que el context de senyalització afectat es repari, se substitueixi vàlidament o es retiri. Una resposta completa de l’altra part no resol per si sola una oferta incompleta. L’SDP en mètodes SIP no relacionats no resol la incertesa de negociació. Rebutjar una oferta posterior conserva la incertesa del seu predecessor fins que una negociació reeixida n’estableixi la substitució.
La recuperació d’admissió admet la seqüència d’oferta diferida formada per un INVITE observat sense cos, una resposta provisional fiable inicial amb etiqueta (per exemple, 183) que conté l’oferta SDP amb capçaleres Require: 100rel i RSeq vàlides, i una resposta SDP completa en el PRACK corresponent. La prova requereix la mateixa branca de diàleg i el mateix cicle de vida de la trucada seleccionada: el número de resposta RAck de PRACK ha de coincidir amb RSeq i el número/mètode CSeq que referencia ha de coincidir amb el CSeq INVITE de la resposta provisional. El CSeq propi de PRACK i la branca Via identifiquen la seva transacció separada. L’oferta sola, una resposta final o ACK sense cos i l’SDP de PRACK no relacionat no poden resoldre la resposta que falta. Les proves absents, contradictòries, caducades sense correspondència o perdudes per capacitat continuen sent incertes; encara es poden promoure extrems segurs independentment. Altres contextos no resolts, promocions d’extrems fallides o escriptures de control també impedeixen la recuperació. Els enllaços conservats estan limitats i no apareixen als logs d’estat ni d’avisos.
La recuperació conserva enllaços fiables limitats d’oferta/resposta per iniciador de petició i branca de diàleg. La resposta fiable inicial ha de tenir RSeq entre 1 i 2^31-1; les respostes fiables vàlides posteriors continuen requerint enllaç exacte i confirmació. Els enllaços sense correspondència caduquen amb pending_ttl. Un cop validada la resposta, el seu context limitat del cicle de vida actual sobreviu a aquesta caducitat fins a la substitució o retirada aplicable. Un rebuig amb correspondència exacta del PRACK restaura la incertesa.
L’oferta provisional fiable requereix la resposta en PRACK, tal com defineix RFC 3262, secció 5. L’SDP en ACK després d’un PRACK sense cos no substitueix aquesta prova d’admissió que falta; l’intercanvi continua sent incert. L’associació SDP ordinària del processador és un comportament separat i encara pot associar extrems d’ACK. Un UPDATE primerenc no pot respondre una oferta provisional fiable pendent. Els UPDATE primerencs i els de diàleg establert tenen restriccions d’oferta/resposta diferents, tal com descriu RFC 3311, secció 5.1.
Després que una resposta final INVITE reeixida observada estableixi el diàleg, un re-INVITE complet confirmat o un UPDATE de diàleg establert de qualsevol participant pot substituir la incertesa de negociació aplicable en aquell mateix diàleg i trucada activa. Això inclou capçaleres de transacció contradictòries, PRACK defectuós, ofertes diferides no resoltes i SDP parcial. La vigència es comprova en l’espai de seqüència de l’iniciador de la reparació; els números CSeq de qui truca i de qui rep la trucada no es comparen mai entre si. Una petició sola, una resposta parcial o rebutjada, capçaleres de substitució contradictòries, un intercanvi obsolet o un altre diàleg no poden establir la recuperació. Els contextos independents no resolts, la pèrdua de proves de cicle de vida/recursos, les promocions d’extrems fallides i les escriptures de control encara impedeixen restaurar l’aplicació del filtre.
En mode enforce, l’assignació obsoleta d’extrems basada només en incertesa continua disponible durant la gràcia de mitjans finals del rol. Els extrems necessaris per a un intercanvi històric vàlid, la reparació completa o una obligació independent continuen protegits; les observacions parcials o contradictòries no esdevenen historial vàlid només perquè s’hagin conservat. Una negociació vàlida que recupera un extrem cancel·la només la retirada pendent d’aquell extrem. La neteja torna a comprovar el cicle de vida exacte i els requisits independents actuals; un callback obsolet no pot eliminar l’assignació d’un cicle de vida reutilitzat. L’acabament autoritatiu de la trucada deixa la neteja final per al període de gràcia d’acabament. Les noves ofertes vàlides i la pausa/represa conserven l’assignació històrica del registre. La recuperació shadow actualitza proves i diagnòstics tot conservant l’assignació d’extrems en l’espai d’usuari. L’estat de retirada utilitza els límits existents configurats de metadades i per propietari.
Tap utilitza el valor efectiu de --pcap-grace-period tant per a la retirada d’extrems com per a l’acabament de trucades; els valors no positius es normalitzen al valor existent per defecte de cinc segons abans de construir l’encaminament. Hunter utilitza el seu PCAPGracePeriod configurat amb el mateix valor alternatiu de cinc segons; no té cap opció --pcap-grace-period. Un pont d’admissió directe de baix nivell pot utilitzar intencionadament zero per a una retirada immediata; aquest comportament de biblioteca no canvia els valors d’inici per defecte dels rols.
La gràcia protegeix l’atribució durant la seva finestra, inclosa una parella obsoleta amb un extrem compartit per una altra trucada. Un cop caduca, encara s’aplica l’alternativa existent de resolució unilateral: els paquets arbitràriament tardans es poden resoldre mitjançant el propietari restant d’un extrem compartit. Els marcadors d’alliberament que suprimeixen aquesta alternativa són un reforç secundari i no s’implementen en aquest canvi.
L’analitzador SIP combina les línies Require repetides i conserva l’últim valor de les capçaleres úniques CSeq, RSeq i RAck per als consumidors generals. L’admissió accepta duplicats vàlids idèntics després de comparar-ne el significat: els camps numèrics ignoren els zeros inicials, es normalitzen els espais en blanc i els mètodes SIP es comparen distingint majúscules i minúscules. Un únic RSeq o RAck malformat invalida el seu enllaç fiable sense fer incert un intercanvi ordinari d’oferta/resposta altrament vàlid. Un grup repetit que contingui qualsevol valor malformat continua sent contradictori, incloses les barreges vàlid/malformat i les repeticions invàlides idèntiques. Un CSeq contradictori conserva només proves mínimes/màximes vàlides limitades per al seu iniciador; els conflictes de mètode i els límits malformats o no disponibles continuen sent explícitament incerts. Una substitució completa, correcta i confirmada ha de superar la marca d’incertesa aplicable. Encara es poden aprendre extrems SDP segurs de trucades seleccionades dins dels límits configurats, sense autoritzar sortides ni aportar proves. La política de fallada open/closed i totes les restriccions explícites de captura/espai d’usuari continuen vigents.
L’analitzador conserva l’interval validat CSeqMin/CSeqMax perquè les proves descriguin amb precisió cada ocurrència vàlida, independentment de l’últim valor de capçalera exposat als consumidors generals. Actualment, la recuperació utilitza només CSeqMax com a límit de vigència; CSeqMin es conserva per al contracte de proves de l’analitzador i la validació de l’interval, no com a segon llindar de recuperació.
Les proves pendents, la procedència dels extrems i la neteja diferida estan vinculades als cicles de vida autoritatius de les trucades. Les proves vinculades explícitament a una sessió/generació antiga es rebutgen fins i tot després que caduqui l’historial de reproducció. La retirada registra proteccions exactes limitades de seqüència dels iniciadors anteriors per posar en quarantena identitats de trànsit reutilitzades durant replay_window (per defecte 2m), mesurat des de la retirada amb el rellotge monòton del pont en lloc de les marques temporals dels paquets. Una retirada posterior de la mateixa identitat renova la finestra; les observacions de reproducció no l’allarguen. Els conflictes malformats sense límits utilitzables bloquegen aquell iniciador; la pèrdua d’identitat/límits bloqueja el Call-ID reutilitzat dins de la finestra.
L’historial de reproducció té un conjunt separat només d’entrades exactes compartit entre dominis d’observació: replay_guard_capacity (per defecte 10000) i replay_guard_bytes (per defecte 2097152), amb 128 bytes comptabilitzats per entrada. S’apliquen tots dos límits; l’historial no consumeix capacitat de derivació seleccionada activa. Les proteccions no caducades no s’expulsen mai per admetre entrades noves. El manteniment de caducitat del worker existent recorre el mapa exacte, amb el treball limitat per la capacitat configurada. El tancament allibera els recursos comptabilitzats. No hi ha cap magatzem probabilístic de desbordament.
Si no es pot registrar una protecció de retirada, totes les proves d’aquell domini d’observació són conservadores fins a l’última retirada no registrable més replay_window. Aquesta alternativa conserva les proteccions exactes existents i segueix la política open/closed configurada; no deixa el pont permanentment inutilitzable. La sobrecàrrega sostinguda pot allargar l’interval. Un cop caduca, les trucades ja actives concilien les proves restants i les incerteses independents en lloc de declarar-se conegudes a cegues. Quan la pressió de reproducció ha descartat observacions, la recuperació requereix una nova petició completa i una resposta corresponent observades després del descart; una resposta en memòria cau anterior a la pressió no pot substituir proves absents. Retirar una trucada amb aquestes proves absents registra una protecció de Call-ID bloquejat durant la finestra. Els avisos agregats es limiten a l’interval de reintent i no inclouen identitats del trànsit.
El valor per defecte de dos minuts és un marge d’enginyeria respecte de l’horitzó habitual de transacció SIP de 32 segons, 64 vegades T1 amb T1 de 500 ms, descrit a RFC 3261, secció 17.1.1.2, i del pending_ttl existent de 30 segons. No limita tots els diàlegs SIP, el reassemblatge TCP, les cues de captura, l’emmagatzematge temporal dels Hunters ni els retards de transmissió. Configureu la finestra segons els retards coneguts del desplegament. Un cop caduca, les identitats de trànsit idèntiques no vinculades no poden distingir un intercanvi nou d’una captura antiga o d’un missatge retardat; les reproduccions arbitràries queden fora d’aquesta garantia de protecció finita.
Les proves de diàlegs primerencs es conserven separadament per a cada branca limitada. La confirmació observada resol el diàleg guanyador; l’assignació exclusiva dels diàlegs perdedors segueix la gràcia de mitjans finals, mentre es mantenen els requisits compartits i independents. Diverses branques reeixides continuen sent conservadores. Tant una oferta INVITE amb la seva resposta fiable com una oferta diferida amb la seva resposta PRACK poden conservar l’SDP canònic acceptat mentre es repeteix SDP idèntic en una resposta provisional fiable posterior. Cada resposta provisional nova requereix el seu propi RSeq següent vàlid i el RAck/PRACK corresponent en el mateix cicle de vida i diàleg primerenc. Les retransmissions amb el mateix RSeq no generen una nova obligació de confirmació. L’SDP modificat continua sent conservador i només afegeix extrems fins a una reparació vàlida; un 200 final que repeteixi la resposta canònica no pot eludir un PRACK pendent. Els bytes SDP iguals per si sols no poden validar proves RSeq, RAck, de diàleg o de cicle de vida no relacionades.
rtp_ebpf.scopes[].uncertainty informa per domini de unknown_calls actives úniques i de comptadors de motius superposats: conflicting_headers, faulty_prack, partial_sdp, delayed_offer, fork_ambiguity i evidence_loss. Una trucada pot tenir diversos motius; no sumeu els comptadors de motius per obtenir un total de trucades. identical_duplicates i conflicting_duplicates són comptadors acumulatius de missatges amb un grup de capçalera única repetit, comptats separadament per CSeq, RSeq i RAck. Tres o més línies repetides en un grup compten una vegada, no una per línia; aquests comptadors no compten les trucades actualment desconegudes. Els duplicats vàlids idèntics per si sols no creen incertesa.
malformed_rseq i malformed_rack compten separadament els missatges analitzats que contenen almenys una ocurrència malformada d’aquell tipus de capçalera, una vegada per tipus i missatge, incloses les retransmissions. Un grup de duplicats mixt o invàlid incrementa tant el comptador del tipus malformat com conflicting_duplicates; una capçalera única malformada no incrementa el comptador de duplicats. Aquests comptadors d’ocurrències són independents dels totals de trucades actives desconegudes i es poden superposar.
replay_guards i replay_guard_bytes informen de l’ús d’historial exacte per domini; replay_guard_capacity i replay_guard_byte_limit són límits del conjunt compartit, no quotes multiplicades pel nombre de dominis. replay_window_ns informa de la finestra efectiva configurada. replay_unrecorded compta acumulativament els intents fallits d’inserció de proteccions i replay_degraded_ns és l’interval conservador restant de tot el domini, zero quan és inactiu. Les trucades actives afectades per aquell interval també apareixen als totals únics de trucades desconegudes i als comptadors superposats evidence_loss. Aquests camps no requereixen identitats ni etiquetes dinàmiques; les versions antigues els ometen.
degraded_since_unix_ns identifica l’inici de la degradació actual i degraded_duration_ns la seva durada transcorreguda, inclosos els estats degraded-closed i control-failed. Una conciliació completa reeixida restableix tots dos; open_duration_ns continua sent el temps acumulatiu d’obertura confirmada i té un significat diferent. El JSON d’estat CLI exposa aquests camps addicionals. La vista Nodes mostra diagnòstics agregats d’admissió per al Hunter o processador/Tap seleccionat tant en disposició de taula com de graf. En aquests diagnòstics no apareixen adreces d’extrems, identitats de trucada ni errors bruts de l’analitzador/backend. Els nodes antics ometen els camps nous i els clients antics els ignoren.
Aquesta semàntica compartida dels extrems també s’aplica amb eBPF desactivat; obrir l’admissió del nucli no inventa mai atribució en l’espai d’usuari.
El pressupost d’extrems del rastrejador inclou RTP, RTCP separat i claus de diagnòstic antigues basades només en ports. Les claus de diagnòstic no poden autoritzar mitjans, però poden ocupar espai necessari per a extrems exactes posteriors durant canvis de mitjans. Aquest pressupost compartit és anterior a la correcció posterior. Sense admissió, el rastrejador ordinari té un valor de biblioteca per defecte de 64 extrems per trucada i el processador VoIP local de 32; la connexió actual dels comandaments no ofereix cap paràmetre de límit d’extrems per a l’operador. Els paràmetres de recursos d’admissió no augmenten aquests límits ordinaris del registre. Tingueu en compte l’RTCP separat i les claus de diagnòstic en interpretar els avisos de limitació de recursos. L’expulsió o retirada del rastrejador acaba la selecció heretada del Hunter encara que quedi un buffer temporal; les coincidències obsoletes en buffer no autoritzen sortides. Si el conjunt de tokens de propietaris seleccionats es desborda, la recuperació requereix un registre autoritatiu buit, inclosa la retirada de trucades no seleccionades, o una captura reiniciada explícitament després de corregir les condicions de capacitat.
Els avisos SDP informen durant el manteniment de comptadors agregats depurats de casos parcials, fallits, limitats per recursos i suprimits, com a màxim una vegada per interval de 30 segons, més un resum final pendent en aturar-se. S’apliquen els paràmetres normals del logger. No necessiten eBPF ni sortida de logs estructurats. Sniff/Hunter utilitzen informes de buffer, Tap utilitza el seu processador local i el processament distribuït informa de missatges SIP complets per la seva pròpia via. El tractament de paquets no espera l’E/S de logs.
Amb --rtp-ebpf, no necessiteu --rtp-port-range: els extrems RTP i RTCP s’aprenen de l’SDP de la trucada seleccionada, inclosos els extrems fora de l’interval generat per defecte 10000–32768. Utilitzeu --sip-port per limitar la captura de senyalització als vostres ports SIP; és opcional i ometre’l conserva la descoberta en ports arbitraris. Per exemple:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--rtp-ebpf --sip-port 5060 --tls-ca ca.crt
Si establiu explícitament --rtp-port-range, continua sent una restricció de captura: s’exclouen els extrems de mitjans apresos fora d’aquell interval. Un --filter explícit també continua vigent i ha de permetre la senyalització i els mitjans que voleu capturar.
Els ports SIP explícits també limiten la descoberta UDP sense mitjans: un datagrama sense una capçalera RTP/RTCP reconeguda amb confiança s’exclou fora d’aquells ports de senyalització, fins i tot en un port explícit d’interval de mitjans. El BPF ordinari basat en ports amb admissió desactivada pot admetre aquest datagrama. Els modes shadow i degraded-open conserven aquesta limitació explícita.
Amb --rtp-ebpf, inclòs el mode shadow, els selectors IP/CIDR de Hunt i Tap admeten mitjans elegibles independentment dels extrems de trucades seleccionades. No eludeixen mai els predicats explícits de paquets ni les comprovacions de sortida en l’espai d’usuari. Amb eBPF desactivat, Tap encamina els filtres IP/CIDR mitjançant BPF clàssic. En configuracions mixtes de filtres IP i identitat SIP, un paquet RTP coincident per IP es pot capturar però rebutjar en l’espai d’usuari perquè no està associat a una trucada seleccionada. Per tant, desactivar l’admissió no conserva aquesta sortida de filtres mixtos per als mitjans no associats. Les configuracions Tap realment només IP no tenen cap filtre d’identitat SIP que exigeixi aquesta associació. La selecció de mitjans IP/CIDR del Hunter continua sent independent amb eBPF activat o desactivat.
--rtp-ebpf-mode=shadow registra decisions limitades tot conservant la recepció dinàmica de mitjans. Les fallades d’actualització en execució provoquen per defecte admissió àmplia dins del domini afectat, conservant les restriccions explícites de captura; --rtp-ebpf-failure-policy=closed conserva les entrades vàlides instal·lades sense obrir. Una escriptura fallida de control de mode s’informa separadament. L’aplicació del filtre només es reprèn després de conciliar completament l’estat actual. Una fallada d’inici no activa mai silenciosament shadow ni una captura àmplia.
--rtp-ebpf-shadow-sample-every (per defecte 1) utilitza mostreig determinista compartit per les decisions del nucli, l’observació de captura i l’atribució verificada; YAML utilitza rtp_ebpf.shadow_sample_every sota els paràmetres VoIP del rol. Per a trames completes de fins a 256 bytes, la regla inclou el domini, la longitud completa i tots els bytes de la trama. Un N positiu selecciona aproximadament una de cada N identitats; 1 inclou totes les identitats elegibles. Les còpies idèntiques comparteixen l’elegibilitat i es compta cada còpia elegible. Els hash trien mostres; els bytes exactes estableixen la identitat. Les observacions no mostrejades no ocupen entrades de correlació. Aquest paràmetre sol no activa l’admissió.
Avís de dimensionament shadow: els valors per defecte conserven només 1024 identitats de trames elegibles diferents, mostregen cada identitat (N=1) i mantenen les entrades durant uns 60–61 segons. Això deixa poc espai per a trànsit de fons elegible diferent. Dividir 1024 per aquesta finestra de retenció dona aproximadament 17 identitats elegibles diferents per segon abans de reservar marge per a ràfegues. És un càlcul teòric de dimensionament de l’emmagatzematge, no una taxa de paquets admesa, un rendiment mesurat ni un llindar d’acceptació. Una identitat és una trama completa, de manera que modificar números de seqüència o dades útils crea identitats noves fins i tot dins del mateix flux.
shadow_evidence_capacity limita les identitats de trames completes elegibles diferents. Les entrades de correlació caduquen estrictament després del doble de pending_ttl, en el següent manteniment de retry_interval. El dimensionament aproximat és el nombre d’identitats elegibles diferents per segon multiplicat per aquella finestra, amb marge per a ràfegues; la finestra per defecte és d’uns 60–61 segons. pending_ttl també controla les metadades SIP pendents, de manera que reduir-lo canvia el comportament de promoció. L’historial de propietaris retirats dura més de tres TTL i continua limitat per la capacitat de propietaris. L’historial separat de mostres utilitza el mateix paràmetre de capacitat de proves, compta ocurrències i pot sobreescriure encara que la taula d’identitats tingui espai.
Quan augmenta el volum d’identitats elegibles, considereu augmentar l’interval de mostreig abans d’augmentar la capacitat. El mostreig redueix tant les identitats conservades com el treball dels hooks mentre compta cada còpia de cada identitat elegible. Una capacitat més gran conserva més proves, però augmenta la memòria i el treball de manteniment: el manteniment recorre les entrades mantenint el mutex de correlació i les observacions elegibles concurrents utilitzen TryLock. No obtenir el bloqueig implica una pèrdua real de proves i pot impedir la classificació; una capacitat més gran per si sola no garanteix proves completes.
L’emmagatzematge creix separadament per a la taula de correlació de trames completes, l’historial de mostres de diagnòstic, l’historial de propietaris i l’anell del nucli. La taula d’identitats conté els bytes exactes de les trames i l’estat de correlació; l’historial de mostres conté ocurrències limitades i pot sobreescriure independentment; l’historial de propietaris està limitat per la seva capacitat; l’emmagatzematge de l’anell del nucli està limitat separadament. El mostreig canvia quines observacions entren en aquestes vies però no n’augmenta les capacitats configurades. No s’hi implica cap estimació fixa de memòria per entrada ni garantia de durada del recorregut.
La classificació requereix proves úniques de trama completa, observació de captura, atribució verificada al cicle de vida seleccionat i generació històrica de publicació. Les trames de més de 256 bytes, les proves truncades o duplicades, les mostres tardanes, l’absència de propietari, les diferències de configuració i les revisions d’extrems modificades continuen sent incompletes. El desbordament elegible real o la pressió de bloqueig invaliden afirmacions d’unicitat no demostrades, potencialment també sobre altres proves pendents. La pèrdua persistent pot impedir classificacions útils. L’estat no exposa continguts de paquets ni identitats de trucades. La pèrdua de l’anell del nucli, la sobreescriptura de mostres conservades, les mostres malformades, els errors de recollida i la correlació incompleta tenen comptadors separats. Els rebutjos classificats són observacions mostrejades, mai comptadors exactes de rebuig de tot el trànsit ni proves de paritat.
Els diagnòstics de mitjans absents distingeixen la derivació d’extrems desconeguda dels mitjans intencionadament inactius. Una revisió acceptada d’extrem o completesa restableix l’expectativa, de manera que un paquet de mitjans anterior no pot ocultar un canvi posterior de mitjans. Els avisos per propietari estan limitats en nombre i freqüència i només identifiquen una referència numèrica transitòria del propietari. No amplien mai l’admissió automàticament.
Per defecte, totes les interfícies comparteixen un domini d’observació. Els paràmetres de domini explícits separen trànsit local superposat i han d’agrupar la senyalització i els mitjans relacionats. S’admet Ethernet; la captura cooked any i els predicats VLAN explícits es rebutgen. Els fragments, les cadenes complexes d’extensions i l’encapsulació admesa poden passar per una via de compatibilitat comptabilitzada, cosa que redueix la selectivitat. Els paquets desconeguts i els diagnòstics de mitjans absents no obren cap domini.
La senyalització TCP reassemblada de Tap utilitza la interfície i la marca temporal de captura de l’últim byte que contribueix al missatge. Les interfícies del mateix domini d’observació comparteixen l’emmarcament, inclosos els segments en cua, però cada missatge sintetitzat conserva la font real que hi contribueix. Les interfícies de dominis separats no completen mai les trames de les altres. Les trucades senyalitzades per TCP comparteixen la mateixa comptabilització de capacitat que les senyalitzades per UDP. Les respostes terminals de diàleg només completen després del tractament pel processador (o d’un descart explícit d’injecció), conservant la gràcia de mitjans finals i la neteja específica del cicle de vida. Amb l’admissió desactivada, els límits de trucades no positius conserven el valor antic per defecte; els pressupostos positius configurats continuen aplicant-se.
L’admissió de sockets requereix sockets Linux AF_PACKET, SO_ATTACH_BPF, crides BPF activades, els tipus de mapa necessaris i helpers d’anell. Els anells es van introduir a Linux 5.8; això és un mínim funcional, no una versió mínima del nucli verificada universalment. La configuració del nucli, el comportament del verificador, la política de distribució i les restriccions dels contenidors encara poden rebutjar l’inici. Els sockets de paquets requereixen CAP_NET_RAW; les operacions privilegiades d’objectes BPF requereixen CAP_BPF o l’alternativa antiga CAP_SYS_ADMIN. CAP_NET_ADMIN no és un requisit general del carregador de filtres de socket; la configuració de captura pot requerir permisos independentment. Abans de Linux 5.11, la memòria BPF habitualment compta contra RLIMIT_MEMLOCK; els nuclis més nous poden utilitzar comptabilització de memòria per cgroup. L’aplicació no augmenta automàticament el límit de memòria bloquejada. Vegeu el carregador BPF de Linux, la documentació dels anells i les indicacions de comptabilització de memòria.
Els gestors activats utilitzen el mode immediat i retiren les dades de socket/anell conservades abans de l’activació; els paquets posteriors no es comparen amb un límit permanent del rellotge del sistema. El buidatge d’inici és limitat i permet pèrdua de paquets. Els enllaços no admesos, els predicats VLAN explícits, l’ús fora de línia, la retirada de packet-mmap no admesa i els errors de càrrega, associació o buidatge fan fallar l’inici explícitament.
Vegeu la referència de configuració per a tots els límits de recursos. docs/VOIP_EBPF_ADMISSION.md del repositori proporciona detalls de plataforma, privilegis, diagnòstic i verificació; el pla d’implementació registra l’estat actual d’integració. libpcap continua sent una dependència cgo i cgo no desactiva la concurrència de goroutines.
Anàlisi de DNS
L’analitzador DNS correlaciona les consultes amb les seves respostes i mesura la latència de resolució.
Correlació de consulta/resposta
lippycat associa les consultes DNS amb les seves respostes utilitzant l’identificador de transacció (un identificador de 16 bits a la capçalera DNS). Quan es correlaciona una resposta, el camp QueryResponseTimeMs mostra el temps d’anada i tornada en mil·lisegons.
sequenceDiagram
participant Client
participant Resolver
Client->>Resolver: Query (TxID: 0xA1B2, A record for example.com)
Resolver-->>Client: Response (TxID: 0xA1B2, 93.184.216.34, TTL=3600)
Note right of Client: RTT measured
Iniciar la captura DNS:
sudo lc sniff dns -i eth0
Filtrar per domini:
Per a un domini exacte:
sudo lc sniff dns -i eth0 --domain example.com
Per a coincidències amb comodins:
sudo lc sniff dns -i eth0 --domain "*.example.com"
Carregar patrons de domini d’un fitxer per al monitoratge massiu:
sudo lc sniff dns -i eth0 --domains-file watchlist.txt
Camps de metadades DNS
Cada paquet DNS inclou metadades estructurades:
| Camp | Descripció | Camí JSON |
|---|---|---|
| Identificador de transacció | Correlacionador de consulta/resposta | .DNSData.TransactionID |
| Nom de consulta | Domini consultat | .DNSData.QueryName |
| Tipus de consulta | Tipus de registre (A, AAAA, MX, etc.) | .DNSData.QueryType |
| Codi de resposta | NOERROR, NXDOMAIN, SERVFAIL, etc. | .DNSData.ResponseCode |
| Respostes | Matriu de registres de resposta | .DNSData.Answers[] |
| RTT | Latència de consulta a resposta (ms) | .DNSData.QueryResponseTimeMs |
| Puntuació de túnel | Probabilitat de túnel DNS (0,0–1,0) | .DNSData.TunnelingScore |
Investigacions DNS habituals
Trobar resolucions DNS lentes:
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.IsResponse and .DNSData.QueryResponseTimeMs > 100) |
[.Timestamp, .DNSData.QueryName, (.DNSData.QueryResponseTimeMs|tostring) + "ms"] |
@tsv'
Supervisar respostes NXDOMAIN (dominis inexistents):
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.ResponseCode == "NXDOMAIN") |
[.Timestamp, .SrcIP, .DNSData.QueryName] | @tsv'
Seguir tipus de registre concrets:
Per a consultes de registres MX (descobriment de servidors de correu):
sudo lc sniff dns -i eth0 2>/dev/null | \
jq -r 'select(.DNSData.QueryType == "MX") |
[.Timestamp, .DNSData.QueryName, (.DNSData.Answers[]?.Data // "pending")] |
@tsv'
Per a registres TXT, que sovint s’utilitzen per a SPF, DKIM i verificació de dominis:
sudo lc sniff dns -i eth0 2>/dev/null | \
jq 'select(.DNSData.QueryType == "TXT")'
Detecció de túnels DNS
lippycat inclou detecció de túnels DNS basada en entropia. Els túnels codifiquen dades en consultes DNS, generant noms de domini amb una entropia (aleatorietat) inusualment alta. L’analitzador puntua cada consulta de 0,0 (normal) a 1,0 (molt sospitosa):
Marcar possibles túnels DNS:
sudo lc sniff dns -i eth0 --detect-tunneling 2>/dev/null | \
jq -r 'select(.DNSData.TunnelingScore > 0.7) |
[.Timestamp, .SrcIP, .DNSData.QueryName,
"score=" + (.DNSData.TunnelingScore|tostring)] | @tsv'
Les consultes d’alta entropia (subdominis llargs i aparentment aleatoris) combinades amb un gran volum de consultes a un sol domini són indicadors forts de túnels DNS o exfiltració de dades.
Inspecció de TLS
L’analitzador TLS inspecciona missatges de negociació sense desxifrar el trànsit. Extreu metadades de connexió dels missatges ClientHello i ServerHello, incloent-hi SNI, conjunts de xifratge i empremtes TLS.
Anàlisi de negociacions TLS
sequenceDiagram
participant Client
participant Server
Client->>Server: ClientHello (SNI, cipher suites, extensions)
Note right of Client: JA3 fingerprint computed
Server-->>Client: ServerHello (selected cipher, extensions)
Note right of Server: JA3S fingerprint computed
Server-->>Client: Certificate (server certificate chain)
Server-->>Client: ServerHelloDone
Client->>Server: ClientKeyExchange
Client->>Server: ChangeCipherSpec
Client->>Server: Finished
Server-->>Client: ChangeCipherSpec
Server-->>Client: Finished
Note over Client,Server: Encrypted application data
lippycat captura i analitza els missatges de negociació no xifrats a l’inici de cada connexió TLS.
Iniciar la captura TLS:
sudo lc sniff tls -i eth0
Filtrar per Server Name Indication (SNI):
Per a un domini concret:
sudo lc sniff tls -i eth0 --sni example.com
Per a un comodí:
sudo lc sniff tls -i eth0 --sni "*.example.com"
Per a filtratge massiu des d’un fitxer:
sudo lc sniff tls -i eth0 --sni-file domains.txt
Empremtes JA3 i JA3S
JA3 crea una empremta d’un client TLS calculant el hash dels camps següents del missatge ClientHello:
TLS Version | Cipher Suites | Extensions | Elliptic Curves | EC Point Formats
Aquests camps es concatenen i se’n calcula el hash MD5 per produir una empremta de 32 caràcters. Com que les diferents aplicacions construeixen el ClientHello de manera diferent (ordres diferents dels conjunts de xifratge, extensions diferents), l’empremta JA3 identifica el programari client independentment de l’adreça IP.
JA3S aplica el mateix concepte a ServerHello, generant l’empremta de la resposta del servidor (versió TLS, conjunt de xifratge seleccionat i extensions).
lippycat calcula totes dues automàticament:
| Camp | Descripció | Camí JSON |
|---|---|---|
| Cadena JA3 | Entrada en brut de l’empremta | .TLSData.JA3String |
| Empremta JA3 | Hash MD5 | .TLSData.JA3Fingerprint |
| Cadena JA3S | Entrada en brut de l’empremta del servidor | .TLSData.JA3SString |
| Empremta JA3S | Hash MD5 | .TLSData.JA3SFingerprint |
| Empremta JA4 | Format modern d’empremta | .TLSData.JA4Fingerprint |
Nota de compatibilitat JA4: les compilacions que inclouen la correcció de conformitat amb l’estàndard utilitzen SHA-256 (truncat a 12 caràcters hexadecimals) i la transformació del primer/últim caràcter ALPN requerida per JA4. Les empremtes produïdes per compilacions antigues de lippycat utilitzaven un valor MD5 truncat no estàndard i també poden codificar ALPN de manera diferent. Substituïu les empremtes JA4 emmagatzemades i els filtres
tls_ja4per valors generats per una implementació JA4 conforme. lippycat no compara silenciosament tots dos formats. No s’emet cap avís de compatibilitat en temps d’execució perquè els valors heretats i estàndard tenen la mateixa sintaxi i no es poden distingir de manera fiable.
Filtrar per una empremta coneguda:
Capturar trànsit que coincideixi amb una empremta JA3 coneguda de programari maliciós:
sudo lc sniff tls -i eth0 --ja3 "e7d705a3286e19ea42f587b344ee6865"
Carregar diverses empremtes d’un fitxer d’intel·ligència d’amenaces:
sudo lc sniff tls -i eth0 --ja3-file known-bad-ja3.txt
Crear un inventari d’empremtes:
Llistar empremtes JA3 úniques amb SNI:
sudo lc sniff tls -i eth0 2>/dev/null | \
jq -r 'select(.TLSData.HandshakeType == "ClientHello") |
[.SrcIP, .TLSData.SNI, .TLSData.JA3Fingerprint] | @tsv' | \
sort -u
Camps de metadades TLS
| Camp | Descripció | Camí JSON |
|---|---|---|
| Tipus de negociació | ClientHello, ServerHello, Certificate | .TLSData.HandshakeType |
| Versió TLS | Versió negociada (p. ex., “TLS 1.3”) | .TLSData.Version |
| SNI | Server Name Indication | .TLSData.SNI |
| Conjunts de xifratge | Conjunts de xifratge oferts (ClientHello) | .TLSData.CipherSuites |
| Xifrat seleccionat | Conjunt de xifratge escollit (ServerHello) | .TLSData.SelectedCipher |
| Protocols ALPN | Protocols d’aplicació (p. ex., h2, http/1.1) | .TLSData.ALPNProtocols |
| Temps de negociació | Latència de ClientHello a ServerHello (ms) | .TLSData.HandshakeTimeMs |
| Puntuació de risc | Avaluació del risc de seguretat (0,0–1,0) | .TLSData.RiskScore |
Investigacions TLS habituals
Detectar versions TLS febles:
sudo lc sniff tls -i eth0 2>/dev/null | \
jq -r 'select(.TLSData.Version == "TLS 1.0" or .TLSData.Version == "TLS 1.1") |
[.Timestamp, .SrcIP, .DstIP, .TLSData.SNI, .TLSData.Version] | @tsv'
Correlacionar ClientHello amb ServerHello:
lippycat correlaciona parelles de negociació quan --track-connections està activat (per defecte). Les parelles correlacionades inclouen la latència de negociació:
sudo lc sniff tls -i eth0 2>/dev/null | \
jq -r 'select(.TLSData.CorrelatedPeer) |
[.Timestamp, .TLSData.SNI, (.TLSData.HandshakeTimeMs|tostring) + "ms"] |
@tsv'
Connexions d’alt risc:
sudo lc sniff tls -i eth0 2>/dev/null | \
jq -r 'select(.TLSData.RiskScore > 0.5) |
[.Timestamp, .SrcIP, .TLSData.SNI, .TLSData.Version,
"risk=" + (.TLSData.RiskScore|tostring)] | @tsv'
Anàlisi d’HTTP
L’analitzador HTTP reconstrueix parelles de petició/resposta dels fluxos TCP i mesura la latència de resposta.
Correlació de petició/resposta
lippycat segueix les converses HTTP correlacionant peticions amb les seves respostes a la mateixa connexió TCP. Quan la correlació té èxit, el camp RequestResponseTimeMs mostra el temps de resposta del servidor.
Iniciar la captura HTTP:
sudo lc sniff http -i eth0
Filtrar per amfitrió, camí, mètode o codi d’estat:
Filtrar per amfitrió:
sudo lc sniff http -i eth0 --host "*.example.com"
Filtrar per patró de camí:
sudo lc sniff http -i eth0 --path "/api/*"
Capturar només peticions POST i PUT:
sudo lc sniff http -i eth0 --method "POST,PUT"
Capturar només respostes d’error:
sudo lc sniff http -i eth0 --status "4xx,5xx"
Combinar filtres:
sudo lc sniff http -i eth0 --host api.example.com --method POST --status "5xx"
Camps de metadades HTTP
| Camp | Descripció | Camí JSON |
|---|---|---|
| Mètode | GET, POST, PUT, DELETE, etc. | .HTTPData.Method |
| Camí | Camí URL | .HTTPData.Path |
| Host | Capçalera Host | .HTTPData.Host |
| Codi d’estat | Estat de resposta | .HTTPData.StatusCode |
| Content-Type | Tipus de contingut de la resposta | .HTTPData.ContentType |
| User-Agent | Identificador del client | .HTTPData.UserAgent |
| Temps de resposta | Latència de petició a resposta (ms) | .HTTPData.RequestResponseTimeMs |
Investigacions HTTP habituals
Trobar respostes API lentes:
sudo lc sniff http -i eth0 2>/dev/null | \
jq -r 'select(.HTTPData.Type == "response" and .HTTPData.RequestResponseTimeMs > 500) |
[.Timestamp, .HTTPData.Host, .HTTPData.Path,
(.HTTPData.StatusCode|tostring),
(.HTTPData.RequestResponseTimeMs|tostring) + "ms"] | @tsv'
Supervisar taxes d’error:
sudo lc sniff http -i eth0 2>/dev/null | \
jq -r 'select(.HTTPData.Type == "response") |
(.HTTPData.StatusCode|tostring|.[0:1]) + "xx"' | \
sort | uniq -c | sort -rn
Anàlisi del tipus de contingut:
sudo lc sniff http -i eth0 2>/dev/null | \
jq -r 'select(.HTTPData.ContentType != null and .HTTPData.ContentType != "") |
.HTTPData.ContentType' | \
sort | uniq -c | sort -rn
Desxifratge HTTPS
Per al trànsit HTTPS, lippycat pot desxifrar dades d’aplicació si proporcioneu un fitxer de registre de claus TLS (SSLKEYLOGFILE):
sudo lc sniff http -i eth0 --tls-keylog /tmp/sslkeys.log
Això requereix que l’aplicació exporti les claus de sessió. Consulteu Seguretat per obtenir detalls sobre la configuració del desxifratge TLS.
Captura del cos
Per defecte, no es captura el contingut del cos HTTP. Activeu-la per inspeccionar el contingut:
sudo lc sniff http -i eth0 --capture-body --max-body-size 65536
Per comparar paraules clau en moltes peticions, utilitzeu el comparador massiu Aho-Corasick:
sudo lc sniff http -i eth0 --capture-body --keywords-file suspicious-terms.txt
Anàlisi de protocols de correu electrònic
L’analitzador de correu admet SMTP, IMAP i POP3 amb seguiment de sessions i correlació de transaccions.
Anàlisi de SMTP
La captura SMTP segueix la transacció del sobre: EHLO, MAIL FROM, RCPT TO, DATA i respostes del servidor. lippycat detecta la negociació STARTTLS i els intents d’autenticació.
sequenceDiagram
participant Client
participant Server
Server-->>Client: 220 mail.example.com ESMTP
Client->>Server: EHLO client.local
Server-->>Client: 250-STARTTLS
Client->>Server: STARTTLS
Server-->>Client: 220 Ready
Note over Client,Server: TLS handshake
Client->>Server: EHLO client.local
Client->>Server: AUTH LOGIN
Server-->>Client: 235 Authenticated
Client->>Server: MAIL FROM:<alice@example.com>
Server-->>Client: 250 OK
Client->>Server: RCPT TO:<bob@example.com>
Server-->>Client: 250 OK
Client->>Server: DATA
Server-->>Client: 354 Start mail input
Client->>Server: (message body)
Client->>Server: .
Server-->>Client: 250 OK
Iniciar la captura de correu electrònic:
Per a tots els protocols de correu:
sudo lc sniff email -i eth0
Només per a SMTP:
sudo lc sniff email -i eth0 --protocol smtp
Filtrar per adreça:
sudo lc sniff email -i eth0 --address alice@example.com
Filtrar específicament per remitent:
sudo lc sniff email -i eth0 --sender alice@example.com
Filtrar específicament per destinatari:
sudo lc sniff email -i eth0 --recipient bob@example.com
Camps de metadades de correu electrònic
| Camp | Descripció | Camí JSON |
|---|---|---|
| Protocol | SMTP, IMAP o POP3 | .EmailData.Protocol |
| MAIL FROM | Adreça del remitent | .EmailData.MailFrom |
| RCPT TO | Adreces dels destinataris | .EmailData.RcptTo |
| Assumpte | Assumpte del missatge | .EmailData.Subject |
| Ordre | Ordre SMTP/IMAP/POP3 actual | .EmailData.Command |
| Codi de resposta | Codi de resposta del servidor | .EmailData.ResponseCode |
| STARTTLS ofert | El servidor admet STARTTLS | .EmailData.STARTTLSOffered |
| Mètode d’autenticació | Tipus d’autenticació utilitzat | .EmailData.AuthMethod |
| Identificador de sessió | Identificador de correlació | .EmailData.SessionID |
IMAP i POP3
La captura IMAP i POP3 segueix les operacions de la bústia:
Només per a IMAP:
sudo lc sniff email -i eth0 --protocol imap
Per a ports personalitzats:
sudo lc sniff email -i eth0 --imap-port "143,993" --pop3-port "110,995"
Els camps específics d’IMAP inclouen l’etiqueta d’ordre, la bústia seleccionada, els UID dels missatges i els indicadors. Els camps POP3 inclouen números i mides de missatge.
Investigacions de correu habituals
Detectar sessions SMTP no xifrades:
sudo lc sniff email -i eth0 --protocol smtp 2>/dev/null | \
jq -r 'select(.EmailData.Command == "EHLO" and
.EmailData.STARTTLSOffered == false) |
[.Timestamp, .SrcIP, .DstIP, "No STARTTLS"] | @tsv'
Supervisar intents d’autenticació:
sudo lc sniff email -i eth0 2>/dev/null | \
jq -r 'select(.EmailData.AuthMethod != null and .EmailData.AuthMethod != "") |
[.Timestamp, .SrcIP, .EmailData.Protocol, .EmailData.AuthMethod,
.EmailData.AuthUser] | @tsv'
Seguir el flux de correu:
sudo lc sniff email -i eth0 --protocol smtp 2>/dev/null | \
jq -r 'select(.EmailData.Command == "MAIL" or .EmailData.Command == "RCPT") |
[.Timestamp, .EmailData.MailFrom // "", (.EmailData.RcptTo | join(","))] |
@tsv'
Captura RADIUS i operacions POI de Tap
lc sniff radius, lc hunt radius i lc tap radius comparteixen descodificació UDP, predicats ordinaris exactes, perfils de captura i associació limitada de peticions. La captura ordinària no requereix ni una compilació LI ni una tasca X1 activada. lc process continua sent neutral respecte del protocol; utilitzeu els comandaments existents lc watch live, watch file i watch remote per veure les metadades RADIUS.
Les vies RADIUS de Tap local i Hunt/Process autenticades directament han superat verificacions sintètiques de versió, incloses les instantànies de filtres, l’aïllament d’àmbit en reconnectar, les sortides ordinàries i la paritat X2 descodificada. Actualitzeu tant el Hunter com el processador per obtenir instantànies de filtres autoritatives. Els relés conserven el trànsit ordinari però no transmeten l’autoritat de l’origen de captura per a X2. La verificació de línies conegudes en producció i l’acceptació del MDF receptor continuen pendents; les dades de prova del repositori són sintètiques.
Topologia de captura i àmbit admès
Emmiralleu l’enllaç UDP visible de BRAS/BNG a AAA en una interfície POI dedicada:
flowchart TB
BNG["BRAS/BNG"] <--> RADIUS["UDP RADIUS link"] <--> AAA["AAA server"]
RADIUS -->|"mirror"| POI["Dedicated tap POI"]
POI -->|"X2/TLS"| MDF["MDF"]
ADMF["ADMF"] -->|"X1/mTLS"| POI
Observeu tant la direcció de petició com la de resposta en la mateixa font de captura aïllada. Els valors per defecte inclouen UDP 1812 i 1813; els ports configurats s’afegeixen a aquests valors. S’admeten IPv4 i IPv6 Access-Request (1), Access-Accept (2), Access-Reject (3), Accounting-Request (4), Accounting-Response (5) i Access-Challenge (11). No s’admeten TCP, RadSec/TLS, DTLS, trànsit intern xifrat, CoA, Disconnect ni altres codis de missatge. No s’accepta ni es necessita cap secret compartit. Tots els fragments IPv4 i totes les capçaleres Fragment d’IPv6, inclosos els fragments atòmics, s’exclouen de l’anàlisi i l’atribució RADIUS. Les sortides genèriques de paquets poden conservar fragments si el BPF de captura els admet; un BPF només de ports no ho pot garantir.
L’àmbit de l’operador i la revisió del perfil descriuen una frontera d’unicitat establerta per l’administrador. Els noms d’interfície, els extrems IP, els atributs NAS i els filtres BPF no demostren aïllament d’operadors. Una font de proxy s’ha d’aïllar en aquella frontera; rebutgeu la selecció de línies en una font mixta amb valors concrets de línia no únics. Els extrems client/servidor de transport continuen separats dels camps NAS transportats pel paquet. Reiniciar o reobrir la captura inicia una època nova; les proves antigues no poden travessar aquest buit.
L’associació de respostes és observacional, no una verificació de l’autenticador. Sense secret, ni el Response Authenticator ni l’Identifier de vuit bits demostren pertinença. L’herència única requereix exactament una petició compatible observada en el mateix àmbit i tupla de captura. Les peticions competidores, l’estat caducat i la pèrdua de capacitat suprimeixen l’herència. Una challenge no autoritza l’intercanvi següent i l’autenticació no autoritza l’accounting posterior sense identitat. Les respostes observades abans de les seves peticions no s’emmagatzemen temporalment ni s’autoritzen retroactivament.
Confiança distribuïda i sincronització dels filtres
Per a RADIUS X2, connecteu el Hunter directament amb TLS mutu. El SAN del certificat de client verificat ha de coincidir amb el seu ID de Hunter; aquest ID també ha de coincidir amb l’origen de l’observació. TLS només de servidor i el transport insegur admeten captura ordinària però no autoritzen X2. Els processadors ascendents conserven els bytes originals, l’àmbit de captura i les proves d’atribució, però un certificat de relé només demostra la identitat del relé. Lliureu X2 al POI connectat directament; l’autorització d’origen de relé no forma part d’aquesta versió.
Els Hunters actualitzats demanen una instantània de filtres autoritativa en subscriure’s. El processador captura la política actual i connecta el flux d’actualitzacions atòmicament; el Hunter substitueix tota la seva política de registre abans d’aplicar les actualitzacions en directe posteriors. Les instantànies buides eliminen els filtres suprimits. Una actualització perduda per una cua plena tanca aquella subscripció perquè la reconnexió pugui obtenir la política actual.
Les versions antigues conserven el seu protocol d’actualització existent. Un Hunter actualitzat tracta les actualitzacions ADD antigues com a substitucions, però un processador antic no pot comunicar eliminacions durant buits de registre com a instantània autoritativa. Actualitzeu tots dos extrems per obtenir les garanties de la versió RADIUS distribuïda; les versions antigues sense capacitat RADIUS no poden rebre filtres RADIUS. Els paquets bruts antics continuen disponibles per a les sortides ordinàries i no poden autoritzar X2 sense proves actuals validades.
L’associació de peticions continua sent local a un Hunter, una interfície i una època de captura. Recrear l’estat de captura/transmissió inicia una època nova, mentre les observacions ja en cua conserven el seu àmbit original. Una petició perduda en el transport encara pot tenir una resposta autoritzada a partir de proves úniques del costat de captura, subjecta a l’admissió actual de tasques del processador; una petició mai observada en la captura no pot fer-ho.
Captura ordinària
Descodifiqueu una gravació fora de línia; no cal cap compilació LI ni tasca:
lc sniff radius -r radius.pcap --format text
Observeu un User-Name complet exacte, inclosos el realm i les majúscules/minúscules:
sudo lc sniff radius -i mirror0 --radius-username 'alice@example.test'
Captureu ports addicionals de servei i escriviu el flux opcional d’observació:
sudo lc tap radius -i mirror0 --insecure --radius-port 1645,1646 \
--log-dir ./logs --log-streams radius
Utilitzeu captura distribuïda ordinària; X2 requereix addicionalment un origen autenticat:
sudo lc hunt radius -i mirror0 --processor processor.example:55555 \
--tls-ca ca.crt --radius-username 'alice@example.test'
Els predicats ordinaris són conjuntius: tots els criteris de nom d’usuari, MAC, AVP i línia resolta proporcionats han de coincidir amb el mateix missatge completament validat, o el predicat complet de petició ha de continuar vigent per a una resposta associada de manera única. Aquesta conjunció pertany a la política del comandament ordinari. A Tap i Hunt, grups dinàmics de filtres/tasques configurats independentment també poden seleccionar trànsit; la selecció és la unió de grups complets coincidents. Per tant, un grup dinàmic pot transmetre trànsit fora del predicat del comandament ordinari. Els grups no combinen mai criteris parcials i les coincidències ordinàries no autoritzen LI.
Paquets diferents no aporten mai criteris parcials. Els atributs repetits poden satisfer criteris separats sense concatenació. La coincidència del nom d’usuari és exacta sobre bytes UTF-8 i distingeix majúscules/minúscules: sense retallar, comodins, eliminació de realm ni normalització Unicode. Els objectius de text requereixen entre 1 i 253 bytes UTF-8.
Per a sniff radius, els logs estructurats s’executen després de la selecció ordinària i comparteixen la mateixa observació, àmbit i associació de captura que les sortides CLI/de paquets. Les coincidències ordinàries rebutjades no generen registres estructurats; les peticions competidores encara arriben al correlacionador abans de la selecció i la validació només es compta una vegada.
L’escriptura PCAP, la transmissió ascendent, els subscriptors Watch, la sortida d’interfície virtual, els logs estructurats i el lliurament LI mantenen activació i cues pròpies. Activar X2 no activa fitxers de paquets ni logs; activar --log-dir no autoritza LI. RADIUS no utilitza fitxers VoIP per trucada. El text, JSON i logs habituals oculten credencials, autenticadors i atributs no autoritzats; les sortides PCAP i X2 explícites conserven els bytes originals validats segons els seus contractes de sortida.
Opcions i configuració compartides
Els tres comandaments de protocol utilitzen les mateixes claus YAML radius.*. Els noms d’entorn són LIPPYCAT_RADIUS_ seguit de la clau en majúscules. Les opcions prevalen sobre l’entorn, l’entorn sobre YAML i YAML sobre els valors per defecte. Per exemple, --radius-transaction-timeout 20s, radius.transaction_timeout: 20s i LIPPYCAT_RADIUS_TRANSACTION_TIMEOUT=20s seleccionen el mateix paràmetre.
| Opció | Clau YAML sota radius | Valor per defecte / admès |
|---|---|---|
--radius-port | ports | Ports UDP addicionals, 1–65535; 1812/1813 sempre inclosos |
--radius-username | username | Buit; User-Name complet exacte |
--radius-mac | mac | Buit; sis octets en majúscules separats per guions |
--radius-attribute | attribute | AVP hexadecimal complet repetible |
--radius-mac-profile | mac_profile | Buit; seleccioneu explícitament calling-station-id-uppercase-hyphen-v1 per a MAC |
--radius-line-profile | line_profile | Buit; nas-port-id o agent-circuit-id |
--radius-line-id | line_id | Buit; valor concret d’atribut, mai una clau d’inventari |
--radius-operator-scope | operator_scope | local; cal una frontera explícita de desplegament per seleccionar objectius per àmbit |
--radius-profile-revision | profile_revision | unconfigured; cal una revisió explícita per seleccionar objectius per àmbit |
--radius-protocol-scope | protocol_scope | auth-accounting-udp, l’únic àmbit admès |
--radius-transaction-timeout | transaction_timeout | 30s; 1–300 segons des de la primera petició |
--radius-quiet-guard | quiet_guard | 30s; no pot ser més curt que el cicle de vida de la petició |
--radius-cleanup-interval | cleanup_interval | 1s; la caducitat també es comprova síncronament |
--radius-max-candidates | max_candidates | 65536; 1–1048576 instàncies de petició |
--radius-max-per-key | max_per_key | 4; 1–16 candidats per tupla |
--radius-max-suppression-keys | max_suppression_keys | 65536; 1–1048576 claus de protecció |
--radius-candidate-bytes | candidate_bytes | 67108864; 1–1024 MiB, proporcionats en bytes |
--radius-total-bytes | total_bytes | 100663296; 2–2048 MiB, superior al pressupost de candidats |
Els intervals invàlids i les combinacions incompatibles de perfil/objectiu fan fallar la configuració; els límits no s’ajusten silenciosament. Les retransmissions no allarguen el cicle de vida de la petició. Les pèrdues de capacitat conserven proteccions de silenci; si l’estat de protecció necessari no hi cap, l’herència s’atura globalment fins que transcorri tot un període de silenci. La coincidència directa i les sortides seleccionades independentment continuen disponibles.
radius:
ports: [1645, 1646]
protocol_scope: auth-accounting-udp
username: alice@example.test
mac_profile: calling-station-id-uppercase-hyphen-v1
mac: 02-00-00-00-00-01
line_profile: nas-port-id
line_id: line-a
operator_scope: operator-a/nas-a
profile_revision: v1
transaction_timeout: 30s
quiet_guard: 30s
max_candidates: 65536
max_per_key: 4
candidate_bytes: 67108864
total_bytes: 100663296
NatParas, assignacions de línies i objectius X1
Els valors administratius NatParas s’han de resoldre abans de configurar X1. lippycat no consulta l’inventari d’abonats ni infereix relacions entre comptes i línies.
| Entrada administrativa | Criteri X1 | Exemple |
|---|---|---|
userName que és una NAI vàlida ja normalitzada en NFC | nai | alice@example.test |
Altres userName, inclosos bytes opacs | radiusAttribute amb AVP User-Name (tipus 1) | 0114616C696365406578616D706C652E74657374 |
lineID resolt a NAS-Port-Id | radiusAttribute amb AVP de tipus 87 | 57086C696E652D61 (line-a) |
lineID resolt a Agent-Circuit-Id | radiusAttribute amb VSA de fabricant 3561/tipus 1 | 1A1100000DE9010B636972637569742D61 (circuit-a) |
| MAC de l’abonat segons la convenció de captura seleccionada | macAddress | X1 02:00:00:00:00:01; capturat 02-00-00-00-00-01 |
nas-port-id i agent-circuit-id seleccionen atributs concrets alternatius; no són un OR automàtic. --radius-line-id line-a amb nas-port-id crea el predicat complet de tipus 87 dins de l’àmbit/revisió proporcionat explícitament. L’inventari ascendent ha de proporcionar un valor concret i la seva frontera d’unicitat. El mateix line-a pot existir en dos operadors, de manera que no es pot tractar com a globalment únic. L’activació en producció requereix registres de l’operador per al NAS emissor, bytes exactes del valor, convenció MAC i àmbit, verificats amb una captura no sensible d’una línia coneguda. Les dades de prova operator-a/operator-b del repositori reutilitzen intencionadament valors de línia i no estableixen un acord d’assignació en producció.
Els AVP complets inclouen octets de tipus i longitud. Hex accepta majúscules o minúscules amb només espais XML inicials/finals i serialitza en majúscules. Els objectius User-Name i NAS-Port-Id contenen 1–253 bytes de valor. Els objectius Agent-Circuit-Id contenen 1–63 bytes i exactament un subatribut de fabricant; l’ID de fabricant és 00000DE9. Rebutgeu longituds incorrectes, espais interns, 0x, separadors, valors buits, AVP concatenats, subatributs VSA addicionals d’objectiu, altres fabricants/tipus, perfils de línia no resolts i absència d’àmbit. Els atributs vàlids repetits/agrupats capturats continuen permetent coincidències independents; la codificació d’objectius no reescriu els bytes dels paquets.
La interpretació de MAC de captura utilitza només l’atribut 31, Calling-Station-Id, amb la convenció explícita de majúscules i guions. Els valors capturats amb minúscules, dos punts, punts, sufixos o farciment no produeixen cap identitat MAC. Les adreces Ethernet i NAS no són mai alternatives de MAC d’abonat. La NAI X1 no coincideix amb SIP; SIP necessita sipUri. Tots els criteris de tasca es combinen amb AND dins d’una mateixa tasca i àmbit; els criteris mixtos RADIUS/SIP/IP, OR/negats i els criteris d’àmbit NAS no admesos es rebutgen en conjunt.
Vegeu el contracte d’identitat per a les regles binàries exactes i la guia de desplegament LI per al comportament d’activació, modificació, reinici i admissió de la generació actual.
Configuració de POI Tap i MDF
Compileu amb make tap-li o make build-li per obtenir opcions X1/X2. Els comandaments RADIUS ordinaris continuen disponibles en compilacions sense LI. Configureu un àmbit de captura dedicat, TLS mutu per a X1 i el lliurament MDF, un ProcessorID únic estable i estat LI durable abans de crear una tasca X2Only i una destinació explícitament habilitada per a X2. L’extrem MDF es configura mitjançant l’administració de destinacions X1; no és un objectiu de captura ordinari.
Les vinculacions exclusives de LI són compartides per tap i process:
| Opció | Clau YAML | Valor per defecte |
|---|---|---|
--li-radius-operator-scope | li.radius.operator_scope | Buit; cal un àmbit explícit per a tasques RADIUS |
--li-radius-profile-revision | li.radius.profile_revision | Buit; cal una revisió explícita |
--li-radius-origin-node | li.radius.origin_node | Buit; restricció opcional d’origen |
--li-radius-source | li.radius.source | Buit; restricció opcional d’interfície/font |
--li-radius-mac-profile | li.radius.mac_profile | Buit; cal un perfil admès explícit per als objectius MAC |
--li-radius-transaction-timeout | li.radius.transaction_timeout | 30s; 1s–5m, ha de coincidir amb el cicle de vida de captura |
--li-radius-correlation-state-file | li.radius.correlation_state_file | Buit; utilitza el camí de l’assignador fixat a l’estat LI xifrat |
Aquestes claus utilitzen variables d’entorn LIPPYCAT_LI_RADIUS_*, com ara LIPPYCAT_LI_RADIUS_OPERATOR_SCOPE. Els paràmetres de captura radius.operator_scope i radius.profile_revision han de coincidir amb la vinculació explícita del desplegament LI. Configureu el perfil MAC LI per als objectius MAC X1; el perfil ordinari no activa LI implícitament. El directori pare de l’estat durable ha d’existir prèviament. Provisioneu claus independents de filtres i estat administratiu i després inicialitzeu o migreu totes dues instantànies xifrades abans d’iniciar el node; vegeu la configuració d’emmagatzematge LI. La inicialització administrativa fixa el seu camí més .radius-correlation; la migració conserva el camí original de l’assignador. Un camí personalitzat d’assignador en execució ha de coincidir amb aquesta fixació. Moure la instantània administrativa no restableix ni mou l’assignador separat sense xifrar. --li-radius-transaction-timeout ha de ser igual a --radius-transaction-timeout a tap radius; els desplegaments de processador han de configurar el mateix cicle de vida que el desplegament de captura Hunter. Una diferència en Tap local rebutja l’inici.
sudo lc tap radius -i mirror0 --id poi-a \
--tls-cert server.crt --tls-key server.key --tls-ca capture-ca.crt \
--radius-operator-scope operator-a/nas-a --radius-profile-revision v1 \
--li-enabled --filter-file /var/lib/lippycat/poi-a-filters.enc \
--filter-store-key-id filters-1 --filter-store-key-file /etc/lippycat/filters.key \
--li-state-file /var/lib/lippycat/poi-a-li.enc \
--li-state-key-id state-1 --li-state-key-file /etc/lippycat/li-state.key \
--li-radius-operator-scope operator-a/nas-a --li-radius-profile-revision v1 \
--li-radius-origin-node poi-a-local --li-radius-source mirror0 \
--li-radius-mac-profile calling-station-id-uppercase-hyphen-v1 \
--li-x1-listen :8443 \
--li-x1-tls-cert x1.crt --li-x1-tls-key x1.key --li-x1-tls-ca admf-ca.crt \
--li-delivery-tls-cert delivery.crt --li-delivery-tls-key delivery.key \
--li-delivery-tls-ca mdf-ca.crt
L’origen de captura del Tap local és l’ID de processador més -local, de manera que aquest exemple vincula l’origen poi-a-local. La identitat X2 NFID/IPID continua sent poi-a.
Això inicia el POI configurat; configureu l’objectiu per àmbit i la destinació X2 mitjançant X1 abans que es pugui fer el lliurament. Les opcions existents --log-dir, PCAP i interfície virtual es poden activar independentment. Les peticions RADIUS X3 i combinades X2/X3 es rebutgen. El mapa de correlació continua limitat a 65.536 entrades i 16 MiB; una fallada d’assignació rebutja X2 en lloc de generar ID incoherents.
Les dades útils X2 en brut utilitzen el format 11 i exactament el missatge RADIUS declarat, sense Ethernet/IP/UDP ni farciment final. Payload Direction és Unknown. El Correlation ID de vuit bytes no zero representa un intercanvi observat, no una sessió d’abonat ni l’Identifier RADIUS. Les retransmissions i les respostes associades de manera única el reutilitzen dins del cicle de vida conservat de la petició; les coincidències directes òrfenes reben ID per observació. Es pot lliurar cada datagrama coincident capturat, inclosos duplicats d’emmirallament. No es garanteix un lliurament durable exactament una vegada.
L’acord amb el MDF receptor ha d’incloure el format 11, la direcció Unknown, el cicle de vida de l’intercanvi, la correlació de vuit bytes, els duplicats i el tractament d’orfes. Les proves sintètiques de receptor són proves locals; la interoperabilitat externa i l’acceptació de l’operador continuen pendents. Utilitzeu ProcessorID separats per a codificadors independents, conserveu l’emmagatzematge de correlació en reiniciar i canvieu la identitat si es restableix l’emmagatzematge. Les fallades d’emmagatzematge/codificació suprimeixen X2 mentre les sortides ordinàries continuen. Vegeu lliurament X2 RADIUS en brut per a la propietat de l’estat i el contracte d’observació per a l’associació.
Comptadors operatius
Els missatges INFO estructurats exposen instantànies limitades de comptadors. RADIUS capture counters pertany al runtime de captura per època; s’emet amb el primer trànsit, aproximadament cada minut mentre continua el trànsit i en aturar-se o en una frontera d’època. La revalidació posterior de bytes no incrementa els comptadors d’origen.
| Camps | Responsable i unitat |
|---|---|
valid, malformed, fragmented, unsupported | Entrada: observacions intentades, un resultat de validació per intent |
requests, matched_requests | Correlacionador/comparador de captura: observacions de peticions, incloses les retransmissions; les coincidències compten coincidències directes completes ordinàries/de tasca |
correlated_responses, unmatched_responses, ambiguous_responses | Correlacionador: observacions de respostes classificades com a úniques, absents o ambigües |
expired_responses, incompatible_responses, capacity_suppressed_responses | Correlacionador: observacions de respostes excloses de l’herència única pel motiu indicat |
stale_references | Correlacionador: referències heretades de propietaris rebutjades perquè ja no són vigents |
state_exhaustion | Correlacionador: esdeveniments de pèrdua d’estat, no recomptes de paquets |
RADIUS X2 counters pertany al processador autoritatiu durant el seu cicle de vida. stale_generations compta fallades de permisos temporals de generació de callbacks; allocation_errors i encoding_errors compten intents fallits d’assignació/codificació. encoded compta PDU codificades; queue_accepted i queue_errors compten resultats d’enviament a la cua X2; skipped compta productes no enviats. L’acceptació en cua no prova el lliurament TLS. Les estadístiques compartides de lliurament LI comptabilitzen el lliurament a destinacions i els intents de reintent i fallada entre protocols; no les interpreteu com a totals de paquets només RADIUS ni les sumeu amb observacions de captura. El gestor LI informa separadament de radius_stale_references a les seves estadístiques d’aturada, comptant referències de propietaris de tasques rebutjades en l’admissió. Vegeu supervisió del lliurament LI per a les estadístiques de lliurament existents.
Un comptador creixent de missatges malformats significa que les entrades intentades no han superat la validació estructural; les respostes ambigües/caducades/suprimides per capacitat no tenen propietari heretat. L’esgotament d’estat creixent indica associació incompleta malgrat la continuïtat de la coincidència directa. S’espera que el rebuig de referències obsoletes després de canvis de tasca elimini assignacions obsoletes. Els descarts de les cues de sortida mesuren la pèrdua de la destinació independentment de la salut de la descodificació i l’associació. Els comptadors no exposen ID de compte, línia o tasca com a etiquetes.
Registres estructurats de protocols
lippycat pot escriure metadades normalitzades de protocols al costat de les sortides de paquets, PCAP, TUI, interfície virtual i LI. Els fitxers utilitzen noms de flux i semàntica de camps familiars de Zeek, però no substitueixen el seu ecosistema d’analitzadors i scripts. En particular, una captura filtrada o iniciada tard produeix observacions útils de límit inferior en lloc de mesuraments complets de connexió.
Activació dels registres
El registre està desactivat per defecte. Proporcionar --log-dir l’activa per a process, tap i sniff; el directori es crea si cal.
Per a un processador terminal en un desplegament distribuït:
lc process --listen :55555 --log-dir /var/log/lippycat
Per a captura local amb JSONL i fluxos seleccionats:
sudo lc tap dns -i eth0 --insecure \
--log-dir /var/log/lippycat --log-format json --log-streams conn,dns
Per a captura CLI fora de línia o en viu, amb la sortida estàndard de paquets sense canvis:
lc sniff http -r capture.pcap --log-dir ./logs --log-streams conn,http,files
Les opcions compartides són:
| Opció | Valor per defecte | Significat |
|---|---|---|
--event-queue-size | 20000 | Capacitat de la cua d’esdeveniments normalitzats |
--event-drop-policy | drop_new | Política de desbordament de la cua d’esdeveniments normalitzats |
--log-dir | sense establir | Directori de sortida; establir-lo activa el registre |
--log-format | tsv | tsv o json |
--log-streams | set fluxos per defecte | Fluxos activats separats per comes |
--log-rotate-interval | 1h | Temps entre rotacions; 0 desactiva la rotació periòdica |
--log-queue-size | 10000 | Capacitat de cua per a cada flux |
--log-post-rotate-command | sense establir | Ordre d’intèrpret executada després de la rotació; %log% és el camí rotat amb cometes segures |
--log-include-http-headers | false | Preservar mapes arbitraris de capçaleres HTTP en esdeveniments normalitzats; les columnes fixes del registre no canvien |
--log-include-email-body-preview | false | Permetre previsualitzacions capturades del cos del correu per a l’anàlisi de fitxers; potencialment sensibles |
--extract-files | false | Escriure contingut limitat de fitxers HTTP/SMTP al disc |
--extract-files-dir | sense establir | Directori d’extracció; obligatori quan l’extracció està activada |
--extract-files-max-size | 10 MiB | Màxim de bytes analitzats o extrets per fitxer |
--extract-files-total-size | 100 MiB | Màxim de bytes extrets durant la vida del procés |
--log-emit-stage | terminal | Només process/tap: terminal, all o none |
Les claus YAML equivalents són events.queue_size, events.drop_policy, logs.dir, logs.format, logs.streams, logs.rotate_interval, logs.queue_size, logs.emit_stage, logs.post_rotate_command, logs.include_http_headers, logs.include_email_body_preview, i files.extract, files.extract_dir, files.max_size i files.total_size.
events:
queue_size: 20000
drop_policy: drop_new
logs:
dir: /var/log/lippycat
format: tsv
streams: [conn, dns, ssl, http, smtp, files, radius]
rotate_interval: 1h
queue_size: 10000
emit_stage: terminal
post_rotate_command: "gzip %log%"
include_http_headers: false
include_email_body_preview: false
files:
extract: false
extract_dir: /var/lib/lippycat/files
max_size: 10485760
total_size: 104857600
En una jerarquia de processadors, terminal evita fitxers duplicats escrivint només en un node que no reenvia cap amunt. Utilitzeu all deliberadament per registrar en cada etapa activada, o none per suprimir la sortida de fitxers.
Codificacions de sortida
TSV és el valor per defecte. Escriu capçaleres Zeek (#separator, #set_separator, #empty_field, #unset_field, #path, #open, #fields i #types) i un peu #close. Els temps són segons Unix amb sis decimals, els intervals són segons, els booleans són T/F, i els vectors/conjunts se separen per comes. - significa sense establir, (empty) significa present però buit, i els bytes de control s’escapen com \xHH.
JSON és JSON Lines: un objecte per fila. Utilitza els mateixos noms de camp, incloent-hi claus com id.orig_h; els booleans, números i matrius tenen tipus JSON natius. Els valors sense establir són null, mentre que els valors presents buits són "" o []. Els fitxers JSON continuen utilitzant noms compatibles amb Zeek com dns.log.
Fluxos i camps
Tot l’ordre i els tipus de camps següents estan fixats per internal/pkg/logschema. uid és un identificador de connexió d’estil Zeek generat per lippycat. community_id és Community ID v1 per a unions entre eines, i node_id identifica la font de captura original, no necessàriament el processador que escriu el fitxer. Els valors no disponibles queden sense establir.
conn.log
Un resum de cicle de vida per flux observat (caducitat, expulsió o aturada ordenada).
| Camps | Tipus Zeek |
|---|---|
ts, uid | time, string |
id.orig_h, id.orig_p, id.resp_h, id.resp_p | addr, port, addr, port |
proto, service, duration | enum, string, interval |
orig_bytes, resp_bytes | count, count |
conn_state, local_orig, local_resp, missed_bytes, history | string, bool, bool, count, string |
orig_pkts, orig_ip_bytes, resp_pkts, resp_ip_bytes | count, count, count, count |
community_id, node_id, capture_scope, partial | string, string, enum, bool |
L’orientació d’iniciador/responent segueix el SYN TCP quan és visible i, si no, el primer paquet observat. Els valors de bytes i paquets són recomptes observats. service és el protocol d’aplicació detectat; conn_state i history resumeixen el comportament TCP visible; els booleans d’adreça local poden quedar sense establir quan es desconeix la localitat.
capture_scope=full significa que la font pretenia observar tot el flux de la interfície. filtered significa que un filtre BPF, de protocol, d’objectiu o distribuït ha restringit la captura. Això no demostra una transmissió sense pèrdues. partial=true significa que la connexió va començar abans de l’observació, no es va veure un SYN TCP, només es va veure una direcció, se sap que es van descartar paquets o el còmput és incomplet d’una altra manera. Tracteu tots els comptadors i la durada de les files parcials com límits inferiors. Un àmbit full encara pot ser parcial.
dns.log
Una observació de transacció DNS. trans_id és l’identificador de transacció DNS; rtt és el temps de resposta correlacionat. La classe/tipus de consulta i el codi de resposta apareixen com valors numèrics i descriptius. AA, TC, RD, RA i Z són indicadors de la capçalera DNS; answers i TTLs són vectors de resposta; rejected marca una transacció rebutjada.
| Camps | Tipus Zeek |
|---|---|
ts, uid, id.orig_h, id.orig_p, id.resp_h, id.resp_p, proto | time, string, addr, port, addr, port, enum |
trans_id, rtt, query | count, interval, string |
qclass, qclass_name, qtype, qtype_name | count, string, count, string |
rcode, rcode_name, AA, TC, RD, RA, Z | count, string, bool, bool, bool, bool, count |
answers, TTLs, rejected | vector[string], vector[interval], bool |
community_id, node_id | string, string |
ssl.log
Una observació de negociació TLS. Inclou version, cipher, curve negociats, SNI server_name, estat de represa/alerta/ALPN, estat d’establiment, identificadors i identitats dels fitxers de certificat, resultat de validació i empremtes JA3/JA3S/JA4. Les empremtes són extensions habituals de lippycat, no camps bàsics de Zeek.
| Camps | Tipus Zeek |
|---|---|
ts, uid, id.orig_h, id.orig_p, id.resp_h, id.resp_p | time, string, addr, port, addr, port |
version, cipher, curve, server_name | string, string, string, string |
resumed, last_alert, next_protocol, established | bool, string, string, bool |
cert_chain_fuids, client_cert_chain_fuids | vector[string], vector[string] |
subject, issuer, client_subject, client_issuer, validation_status | string, string, string, string, string |
ja3, ja3s, ja4, community_id, node_id | string, string, string, string, string |
http.log
Una observació de transacció HTTP. trans_depth ordena les transaccions d’una connexió. Les columnes de petició/resposta descriuen mètode, autoritat i URI, capçaleres estàndard seleccionades, versió, longituds observades del cos, estat de resposta i resposta informativa. tags i proxied contenen anotacions de l’analitzador/proxy; els vectors de fitxers s’uneixen a files.log. password no es recull per defecte.
| Camps | Tipus Zeek |
|---|---|
ts, uid, id.orig_h, id.orig_p, id.resp_h, id.resp_p | time, string, addr, port, addr, port |
trans_depth, method, host, uri, referrer, version | count, string, string, string, string, string |
user_agent, origin, request_body_len, response_body_len | string, string, count, count |
status_code, status_msg, info_code, info_msg | count, string, count, string |
tags, username, password, proxied | set[enum], string, string, vector[string] |
orig_fuids, orig_filenames, orig_mime_types | vector[string], vector[string], vector[string] |
resp_fuids, resp_filenames, resp_mime_types | vector[string], vector[string], vector[string] |
community_id, node_id | string, string |
smtp.log
Una observació de transacció SMTP. Registra la profunditat de transacció, HELO i remitent/destinataris del sobre, capçaleres de missatge seleccionades i salts d’encaminament, última resposta del servidor, estat TLS, identificadors de fitxers adjunts i classificació de correu web. No registra el cos del missatge.
| Camps | Tipus Zeek |
|---|---|
ts, uid, id.orig_h, id.orig_p, id.resp_h, id.resp_p | time, string, addr, port, addr, port |
trans_depth, helo, mailfrom, rcptto | count, string, string, set[string] |
date, from, to, cc, reply_to | string, string, set[string], set[string], string |
msg_id, in_reply_to, subject, x_originating_ip | string, string, string, addr |
first_received, second_received, last_reply, path | string, string, string, vector[string] |
user_agent, tls, fuids, is_webmail | string, bool, vector[string], bool |
community_id, node_id | string, string |
files.log
Una observació limitada d’entitat HTTP o adjunt SMTP. fuid és l’identificador del fitxer; source indica el protocol que el transporta; depth i parent_fuid descriuen la imbricació; analyzers descriu el processament. Les columnes de mida i pèrdua indiquen bytes observats, declarats, absents i de desbordament. Els hashes cobreixen els bytes recuperats; hash_complete només és cert quan se sap que aquests bytes representen tota l’entitat descodificada. Un valor fals significa que els hashes identifiquen un prefix observat i no s’han de comparar com hashes de fitxers sencers. extracted només s’estableix quan l’extracció explícita té èxit.
| Camps | Tipus Zeek |
|---|---|
ts, fuid, uid, source, depth, analyzers | time, string, string, string, count, set[string] |
mime_type, filename, duration, local_orig, is_orig | string, string, interval, bool, bool |
seen_bytes, total_bytes, missing_bytes, overflow_bytes, timedout | count, count, count, count, bool |
parent_fuid, md5, sha1, sha256, hash_complete, extracted | string, string, string, string, bool, string |
community_id, node_id | string, string |
Rotació i operacions
Transport remot d’esdeveniments i retenció TUI
Els nodes Hunter i Tap poden reenviar registres normalitzats amb --forward-mode=events. El receptor obté esdeveniments, no els paquets originals: no estan disponibles l’escriptura PCAP superior, la injecció en interfícies virtuals ni l’anàlisi que necessita bytes de paquets. Un node Tap pot retenir PCAP local mentre reenvia esdeveniments quan calen totes dues coses.
El transport d’esdeveniments negocia compatibilitat d’API i semàntica. El reenviament de paquets és el valor per defecte compatible amb versions antigues; --event-fallback-to-packets permet un recurs explícit i registrat. El mode fiable utilitza spool limitat del productor i WAL d’entrada del processador, mentre que el mode només en memòria no resisteix caigudes.
La versió 1 de la subscripció d’esdeveniments TUI és només en viu i no ofereix reproducció. El recompte de pèrdua de transport representa buits o omissions abans de la visualització. El recompte separat d’expulsió local representa esdeveniments rebuts que han sortit de l’anell TUI limitat per antiguitat i no indica pèrdua de transport.
Cada flux activat té una cua limitada no bloquejant i un únic escriptor. Una cua d’esdeveniments o de flux plena descarta treball nou i incrementa comptadors; els avisos periòdics resumeixen els descarts. El control de flux del processador considera la pressió sostinguda de les cues d’esdeveniments i registres, incloent-hi cada cua de sortida del distribuïdor, però cap configuració de registre pot garantir sortida sense pèrdues. events.drop_policy accepta actualment drop_new; les polítiques no admeses fallen durant la inicialització.
L’anàlisi de fitxers HTTP i SMTP requereix bytes del cos a l’analitzador de captura. En un desplegament distribuït, inicieu l’ordre de protocol pertinent del node Hunter amb --capture-body i un --max-body-size adequat; el processador no pot recuperar posteriorment cossos que el node Hunter ha omès. L’anàlisi MIME SMTP també està condicionada per privadesa amb --log-include-email-body-preview. Les capçaleres HTTP i les previsualitzacions del cos del correu continuen desactivades llevat que s’estableixin les opcions d’activació respectives.
Els fitxers actius s’anomenen conn.log, dns.log, etc. A l’interval configurat, es tanca i reanomena un fitxer actiu, per exemple a conn-2026-08-22-14-30-00.log, i després s’obre un fitxer actiu nou en el registre següent. L’aturada ordenada amb SIGINT/SIGTERM buida les cues, escriu els registres pendents i els peus TSV. SIGKILL, una caiguda o un sistema de fitxers ple no ho poden fer.
L’ordre posterior a la rotació s’executa de manera asíncrona mitjançant /bin/sh; cada marcador %log% se substitueix per un camí amb cometes per a l’intèrpret d’ordres. Per exemple:
lc process --log-dir /var/log/lippycat \
--log-post-rotate-command 'gzip %log%'
L’ordre té exactament els mateixos privilegis que el procés lippycat. Utilitzeu una ordre fixa controlada per l’administrador, eviteu secrets als arguments i superviseu els registres d’error de les accions. La retenció i la gestió de l’espai de disc continuen sent responsabilitat de l’operador.
Exemples d’entrada a SIEM
Per a JSONL, apunteu un agent a /var/log/lippycat/*.log, analitzeu un objecte JSON per línia i utilitzeu el nom del fitxer com conjunt de dades. Exemple de font/transformació Vector:
[sources.lippycat]
type = "file"
include = ["/var/log/lippycat/*.log"]
read_from = "beginning"
[transforms.lippycat_json]
type = "remap"
inputs = ["lippycat"]
source = '''
. = parse_json!(.message)
'''
Per a TSV, utilitzeu una entrada/analitzador que entengui les capçaleres Zeek i els fitxers rotats. El mòdul Zeek de Filebeat o una cadena Vector/Fluent Bit compatible amb Zeek són adequats; no tracteu les línies de capçalera com dades. Preserveu uid, community_id i node_id com cadenes exactes. Com que uid és local a un cicle de vida de flux observat, community_id és la clau preferida d’unió entre productes; incloeu el temps i node_id en resoldre col·lisions o connexions repetides.
Privadesa i seguretat
Els registres estructurats poden contenir dades personals: adreces IP, noms DNS, SNI, URL, adreces i assumptes de correu, agents d’usuari, noms de fitxer, identitats de certificat i identificadors estables de flux. Les cadenes de consulta i els camins poden contenir credencials o tokens. Restringiu els permisos del directori, xifreu l’emmagatzematge i el transport, definiu una política de retenció i recolliu només els fluxos justificats per la finalitat del monitoratge.
Els valors per defecte conservadors mantenen el registre i l’extracció desactivats, ometen capçaleres HTTP arbitràries, limiten tota l’anàlisi/extracció de fitxers i mai no posen càrregues útils de paquets, cossos HTTP/correu, RTP/contingut multimèdia ni bytes extrets a les files de registre de metadades. Activar l’extracció de fitxers crea fitxers de contingut separats i requereix controls d’accés proporcionalment més estrictes. Les opcions de fitxers estructurats no autoritzen el lliurament LI; les metadades LI continuen condicionades independentment per compilació, execució, tasca activa, objectiu i perfil de lliurament.
Observacions RADIUS
lc sniff radius -r radius.pcap --log-dir ./logs --log-streams radius selecciona el flux addicional d’observacions RADIUS de versió 1. Cada missatge vàlid seleccionat té el seu propi registre; els atributs utilitzen instàncies hexadecimals ordenades incloses en una llista permesa. La subordre específica sniff radius aplica la selecció ordinària abans d’escriure registres i comparteix la mateixa observació/àmbit amb les sortides CLI i de paquets, sense recomptes duplicats de validació. Les credencials, els autenticadors, les proves de tasca i els atributs desconeguts s’ometen dels registres habituals. PCAP i X2 mantenen els seus contractes separats de sortida de bytes. Consulteu Operacions RADIUS per veure selecció, àmbit, estat i comptadors.
DHCP, NTP i inventaris locals
La selecció per defecte continua sent conn,dns,ssl,http,smtp,files,radius. Quatre fluxos addicionals són opcionals: dhcp, ntp, known_hosts i known_services. Seleccioneu-los amb --log-streams; no calen subordres de protocol noves. Les observacions DHCP/NTP tipades també estan disponibles per als subscriptors d’esdeveniments i la TUI quan el registre de fitxers està desactivat.
lc sniff -r network.pcap --log-dir ./logs --log-streams dhcp,ntp
sudo lc tap -i eth0 --insecure --inventory \
--inventory-local-cidrs 192.0.2.0/24,2001:db8::/32 \
--log-dir ./logs --log-streams dhcp,ntp,known_hosts,known_services
Registres de missatge i associació
DHCP i NTP escriuen un registre per missatge acceptat, incloent-hi retransmissions del protocol. A diferència de l’agregació de transaccions/sessions de Zeek, una resposta afegeix un registre nou i mai no reescriu ni consumeix una petició. El sobre conserva els extrems UDP observats, l’UID del flux, Community ID, l’àmbit de captura i la font. Els identificadors d’associació proporcionen un context d’intercanvi separat i limitat; els reintents de transport conserven la identitat original de transmissió i es dedupliquen a l’entrada.
DHCP cobreix els tipus de missatge DHCPv4 1–8, incloent-hi decline, release i inform. DHCPv6 i BOOTP pur s’exclouen d’aquest registre; la detecció BOOTP continua disponible. Els registres mantenen separades les adreces next-server i server-identifier. Els identificadors de maquinari/client utilitzen sortida hexadecimal, sense assumir mai que són text imprimible. Les opcions absents queden sense establir; una concessió present de valor zero continua sent zero. Les opcions repetides i les àrees d’opcions sobrecarregades es validen dins de lectors limitats. Els missatges malformats acceptats mostren partial i, per a entrada incompleta, truncated; no es registren bytes d’opcions desconegudes o de fabricant.
L’associació DHCP separa autoritat/època/font de captura, identitat de client, identificador de transacció, context de retransmissor i distincions de servidor. Mai no uneix clients utilitzant només l’identificador de transacció ni fabrica un únic UID de flux entre difusions i canvis d’adreça. La caducitat o expulsió de l’associació no suprimeix el missatge actual. No es promet un historial complet de concessions.
NTP cobreix els modes de missatge de temps 1–5. S’exclouen modes de control/privats, anàlisi NTS, autenticació, conclusions de qualitat del rellotge i càlculs de desplaçament del rellotge del client. Els valors de poll/precision i retard arrel amb signe conserven el signe; la dispersió arrel i les marques de temps 32.32 en brut conserven els valors exactes de la xarxa. Les marques de temps en brut són cadenes hexadecimals. Les marques zero no estan disponibles; les conversions no zero utilitzen l’era més pròxima al temps de captura. Els identificadors de referència continuen sent quatre bytes en brut perquè la interpretació depèn de la versió i l’estrat.
L’associació client/servidor NTP requereix àmbits coincidents, extrems invertits i la marca de temps de petició retornada. Les marques de temps duplicades són ambigües. Els missatges sense coincidència, de difusió i simètrics continuen generant registres. Tots dos protocols utilitzen els estats d’associació request, unique, missing, ambiguous, expired, capacity_suppressed i not_applicable; aquests estats mai no afirmen autenticació.
Proves i política d’inventari
Els esdeveniments d’inventari estan activats per defecte per a tots els amfitrions i serveis unicast observats que compleixin els requisits. Desactiveu-los amb --inventory=false, o restringiu opcionalment els subjectes amb IPv4/IPv6 --inventory-local-cidrs. Els CIDR no restringeixen la captura de paquets. Només els CIDR configurats explícitament classifiquen els extrems de connexió com locals; una llista buida no marca totes les adreces observades com locals, i l’espai privat no és implícitament local. S’exclouen subjectes no especificats, multicast i de difusió. Els fluxos de registre d’inventari continuen sent opcionals i requereixen una política local compatible o fonts d’esdeveniments compatibles que produeixin inventari. Configureu els nodes Hunter pel seu camí normal de configuració; els processadors no els distribueixen aquesta política.
L’activació de l’inventari és una política d’anàlisi, no una petició de sortida. sniff sense consumidors no crea cap entorn opcional d’esdeveniments; els registres estructurats, una sortida explícita d’esdeveniments o l’extracció de fitxers sol·licitada l’activen. La descodificació ordinària de protocols, la selecció i la sortida de paquets continuen disponibles sense aquest entorn. Les altres topologies conserven els seus propis consumidors d’esdeveniments i cicle de vida. L’equivalent YAML de --inventory=false és events.inventory.enabled: false. Els CIDR delimiten els subjectes d’inventari, no la captura de paquets ni el cost de l’anàlisi de connexions i protocols.
Els amfitrions coneguts requereixen una negociació TCP completa observada o totes dues direccions UDP. Els serveis coneguts requereixen addicionalment un responent orientat de manera fiable, el seu port i un protocol sustentat per anàlisi real. Un SYN aïllat, una adreça de destinació, una oferta DHCP, una pista de port o una etiqueta de protocol en cau són insuficients. Els registres de servei UDP requereixen un intercanvi DNS, NTP o DHCP admissible descodificat i associat correctament. S’ometen responents ambigus i conjectures de servei de client de difusió/retransmissor. Els valors de prova són tcp_handshake, udp_bidirectional, dns_exchange, ntp_exchange i dhcp_exchange.
Els esdeveniments d’inventari s’emeten tan aviat com estan disponibles les proves de paquets necessàries, sense esperar la caducitat de la connexió. Els resums ordinaris de connexió conserven el comportament existent de caducitat, expulsió, EOF, reinicialització o tancament. En mode remot de paquets, la TUI deriva localment esdeveniments d’inventari dels paquets rebuts; utilitzeu la vista All i filtreu per known per trobar-los. La connexió que compleix els requisits proporciona el sobre; el camp separat host és el subjecte. La captura parcial continua visible. L’entrada d’esdeveniments i els retransmissors jeràrquics reenvien els esdeveniments d’inventari derivats a la font sense derivar-ne una segona còpia.
La deduplicació d’amfitrions inclou àmbit i adreça; les claus de servei també inclouen port del responent, transport i protocol. L’àmbit separa nodes d’origen, èpoques de productor/captura i interfícies o entrades fora de línia. S’emet la primera observació que compleix els requisits dins de la finestra de retenció; la caducitat o expulsió permet una reemissió posterior. És un inventari limitat d’observacions, no una identitat permanent d’actius. Els límits d’entrades i bytes comptabilitzats s’apliquen globalment i per àmbit.
Les marques de progrés del temps de captura mai no retrocedeixen, incloent-hi la reproducció fora de línia; l’entrada tardana no pot reactivar estat caducat. La reinicialització esborra l’estat d’associació/deduplicació, i EOF/tancament buiden els resums de connexió. La identitat fora de línia inclou la política efectiva i la revisió d’anàlisi; els canvis de política en viu requereixen un límit de sessió del productor. Els CIDR invàlids i els límits d’estat o temps d’espera zero/negatius fallen la validació. L’inventari desactivat no reté estat d’inventari. La pressió d’associació, la pèrdua d’esdeveniments i l’expulsió de l’anell TUI tenen comptadors diferents. Consulteu les opcions compartides i les opcions d’ordres.
Privadesa i compatibilitat
Els identificadors DHCP de maquinari/client, el nom d’amfitrió i el domini requereixen tant una petició del subscriptor de camps sensibles com permís del servidor mitjançant --event-allow-sensitive-fields. Els detalls de subjecte/servei d’inventari utilitzen la mateixa política: s’ometen esdeveniments d’inventari no autoritzats amb còmput explícit de pèrdua per política. La projecció no modifica els esdeveniments compartits ni desactiva la correlació interna. Les metadades de capçalera NTP no requereixen cap activació addicional de camps sensibles. Els registres locals seleccionats explícitament inclouen aquests camps sensibles; restringiu l’accés als fitxers, l’emmagatzematge i la retenció.
Els quatre tipus amplien la versió 1 de l’API d’esdeveniments sense renumerar tipus existents ni canviar el perfil semàntic. Els tipus admesos són diferents dels requisits dels consumidors configurats. Els interlocutors antics poden continuar les càrregues existents quan els tipus nous són opcionals, amb informes explícits de pèrdua de compatibilitat per omissions. Els fluxos obligatoris no disponibles rebutgen la negociació o utilitzen un recurs a paquets configurat explícitament; mai no tenen èxit silenciosament amb sortida absent. Les regles existents de confirmació de spool/WAL i preservació de camps desconeguts continuen aplicant-se.
Intercepció legal
lippycat implementa interfícies d’intercepció legal (LI) segons els estàndards ETSI, que permeten interceptar comunicacions amb autorització quan es desplega dins d’una infraestructura d’intercepció legal. Aquest capítol tracta l’arquitectura, el desplegament i el funcionament de les capacitats LI per als operadors que necessiten integrar lippycat amb sistemes ADMF (Administration Function) i MDF (Mediation/Delivery Function).
Important. La intercepció legal està subjecta a requisits legals estrictes en totes les jurisdiccions. Desplegar capacitats LI sense l’autorització legal adequada és il·legal. Assegureu-vos que la vostra organització disposi del marc legal, els processos de supervisió i els controls d’auditoria necessaris abans d’activar funcions LI.
Visió general de les interfícies ETSI
lippycat implementa tres interfícies ETSI definides a TS 103 221-1 i TS 103 221-2:
| Interfície | Finalitat | Protocol | Especificació |
|---|---|---|---|
| X1 | Administració (d’ADMF a NE) | XML/HTTPS | TS 103 221-1 |
| X2 | Lliurament IRI (metadades de senyalització) | TLV binari/TLS | TS 103 221-2 |
| X3 | Lliurament CC (contingut de la comunicació) | TLV binari/TLS | TS 103 221-2 |
La interfície X1 transporta comandaments administratius: l’ADMF envia peticions d’activació, modificació i desactivació de tasques al processador (que actua com a Network Element). La interfície X2 lliura Intercept Related Information (IRI), inclosos els esdeveniments de senyalització SIP. La interfície X3 lliura Content of Communication (CC): les dades útils reals dels mitjans, com l’àudio RTP.
Arquitectura
El diagrama següent mostra com interactuen l’ADMF, el processador lippycat i el MDF:
flowchart TB
ADMF["ADMF<br/>(Administration)"]
subgraph NE["lippycat Processor"]
X1["X1 Server :8443"]
LIM["LI Manager"]
ENC["X2/X3 Encoder"]
DC["Delivery Client"]
X1 <--> LIM
LIM --> ENC --> DC
end
subgraph Hunters["Hunter Nodes"]
H1["Hunter 1"]
H2["Hunter 2"]
end
MDF["MDF<br/>(Mediation/Delivery)"]
ADMF <-->|"X1 (HTTPS/mTLS)"| X1
LIM -->|"filters"| Hunters
H1 -->|"matched packets"| LIM
H2 -->|"matched packets"| LIM
DC -->|"X2 IRI (TLS)"| MDF
DC -->|"X3 CC (TLS)"| MDF
El flux funciona de la manera següent:
- L’ADMF envia una tasca d’intercepció al processador mitjançant la interfície X1 (o el processador consulta les tasques existents a l’ADMF en iniciar-se: vegeu Sincronització de l’estat ADMF).
- El gestor LI tradueix els identificadors d’objectiu de la tasca a filtres de captura i els transmet als Hunters connectats.
- Els Hunters comparen els paquets amb aquells filtres a la vora de la xarxa i transmeten el trànsit coincident al processador.
- El processador codifica la senyalització SIP coincident i les metadades de protocol activades i autoritzades com a PDU X2 IRI i els mitjans RTP com a PDU X3 CC.
- El client de lliurament envia les PDU codificades als extrems MDF designats mitjançant TLS.
Requisits de compilació
El suport LI es controla amb l’etiqueta de compilació li. Les compilacions estàndard exclouen tot el codi LI mitjançant eliminació de codi mort: els binaris sense LI no contenen tipus, gestors ni vies de configuració LI.
Compileu el processador amb suport LI:
make processor-li
Compileu el conjunt complet amb suport LI:
make build-li
Compileu Tap amb suport LI per a captura independent i lliurament LI:
make tap-li
Verifiqueu que les compilacions sense LI no continguin codi LI:
make verify-no-li
Els Hunters no necessiten suport LI. Fan filtratge a la vora de la xarxa amb la mateixa infraestructura de filtres tant si els filtres provenen de tasques LI com de configuració manual. Només el processador (o Tap en mode independent) necessita l’etiqueta de compilació li perquè allotja el servidor X1 i el client de lliurament X2/X3.
Configuració i desplegament
Activació de LI
LI s’activa amb l’opció --li-enabled al processador o Tap. L’adreça d’escolta X1, el certificat del servidor, la clau del servidor i la CA de client ADMF són obligatoris; una configuració TLS X1 incompleta fa fallar l’inici. També calen certificats de lliurament per a la comunicació MDF.
Inicialitzeu o migreu un magatzem xifrat de filtres gestionats abans d’activar LI. La persistència administrativa, quan està configurada, també requereix una instantània xifrada inicialitzada amb la seva pròpia clau independent de 32 bytes en brut. L’estat en text pla no es carrega mai en execució. Seguiu la guia de configuració i migració d’emmagatzematge amb el node aturat. L’exemple següent pressuposa que aquestes instantànies ja existeixen. --li-state-file buit desactiva la persistència administrativa quan la reproducció no la requereix.
lc process --listen :55555 \
--tls-cert server.crt --tls-key server.key \
--li-enabled \
--filter-file /var/lib/lippycat/filters.enc \
--filter-store-key-id filters-1 --filter-store-key-file /etc/lippycat/keys/filters.key \
--li-state-file /var/lib/lippycat/li-state.enc \
--li-state-key-id state-1 --li-state-key-file /etc/lippycat/keys/li-state.key \
--li-x1-listen :8443 \
--li-x1-tls-cert /etc/lippycat/li/x1-server.crt \
--li-x1-tls-key /etc/lippycat/li/x1-server.key \
--li-x1-tls-ca /etc/lippycat/li/admf-ca.crt \
--li-admf-endpoint https://admf.example.com:8443 \
--li-admf-tls-cert /etc/lippycat/li/x1-client.crt \
--li-admf-tls-key /etc/lippycat/li/x1-client.key \
--li-admf-tls-ca /etc/lippycat/li/admf-ca.crt \
--li-delivery-tls-cert /etc/lippycat/li/delivery.crt \
--li-delivery-tls-key /etc/lippycat/li/delivery.key \
--li-delivery-tls-ca /etc/lippycat/li/mdf-ca.crt
La mateixa configuració es pot expressar en YAML. Aquest és l’enfocament recomanat per a desplegaments de producció:
# /etc/lippycat/config.yaml
processor:
listen_addr: ":55555"
tls:
enabled: true
cert_file: "/etc/lippycat/certs/server.crt"
key_file: "/etc/lippycat/certs/server.key"
filter_file: "/var/lib/lippycat/filters.enc"
filter_store:
mode: auto
key_id: "filters-1"
key_file: "/etc/lippycat/keys/filters.key"
li:
enabled: true
state_file: "/var/lib/lippycat/li-state.enc"
state_key_id: "state-1"
state_key_file: "/etc/lippycat/keys/li-state.key"
# X1 server — receives task requests from ADMF
x1_listen_addr: ":8443"
x1_tls_cert: "/etc/lippycat/li/x1-server.crt"
x1_tls_key: "/etc/lippycat/li/x1-server.key"
x1_tls_ca: "/etc/lippycat/li/admf-ca.crt"
# X1 client — sends notifications to ADMF and queries state
admf_endpoint: "https://admf.example.com:8443"
admf_tls_cert: "/etc/lippycat/li/x1-client.crt"
admf_tls_key: "/etc/lippycat/li/x1-client.key"
admf_tls_ca: "/etc/lippycat/li/admf-ca.crt"
admf_keepalive: "30s"
# ADMF state synchronization
admf_sync_on_startup: true # Query ADMF for state on startup
admf_sync_timeout: "30s" # Timeout for startup sync
admf_reconcile_interval: "5m" # Periodic reconciliation (0 = disabled)
# X2/X3 delivery — sends intercept data to MDF
delivery_tls_cert: "/etc/lippycat/li/delivery.crt"
delivery_tls_key: "/etc/lippycat/li/delivery.key"
delivery_tls_ca: "/etc/lippycat/li/mdf-ca.crt"
delivery_tls_pinned_cert:
- "sha256:A1B2C3D4E5F6..." # Optional: pin MDF certificates
Configuració de certificats LI
Les interfícies LI requereixen TLS mutu (mTLS) en totes les connexions. Això significa que el processador ha de presentar un certificat de client en connectar-se a l’ADMF i el MDF i ha de verificar els certificats presentats per aquells sistemes. Hi intervenen tres cadenes de certificats separades:
flowchart TB
subgraph chains["Certificate Chains"]
direction TB
subgraph admf_chain["ADMF Chain"]
ADMF_CA["ADMF CA"]
ADMF_Cert["ADMF Client Cert"]
ADMF_CA --> ADMF_Cert
end
subgraph li_chain["LI CA Chain (your organization)"]
LI_CA["LI CA"]
X1Srv["X1 Server Cert<br/>(processor)"]
X1Cli["X1 Client Cert<br/>(notifications → ADMF)"]
Deliv["Delivery Cert<br/>(X2/X3 → MDF)"]
LI_CA --> X1Srv
LI_CA --> X1Cli
LI_CA --> Deliv
end
subgraph mdf_chain["MDF Chain"]
MDF_CA["MDF CA"]
MDF_Cert["MDF Server Cert"]
MDF_CA --> MDF_Cert
end
end
Els certificats necessaris al costat del processador són:
| Certificat | Opció | Finalitat |
|---|---|---|
| Certificat de servidor X1 + clau | --li-x1-tls-cert, --li-x1-tls-key | Servir l’extrem HTTPS X1 |
| CA d’ADMF | --li-x1-tls-ca | Verificar els certificats de client ADMF |
| Certificat de client X1 + clau | --li-admf-tls-cert, --li-admf-tls-key | Autenticar-se davant d’ADMF per a notificacions |
| CA del servidor ADMF | --li-admf-tls-ca | Verificar el certificat del servidor ADMF |
| Certificat de lliurament + clau | --li-delivery-tls-cert, --li-delivery-tls-key | Autenticar-se davant del MDF per al lliurament X2/X3 |
| CA del MDF | --li-delivery-tls-ca | Verificar els certificats dels servidors MDF |
Tots els certificats han d’utilitzar claus RSA 2048+ o ECDSA P-256+ amb hash SHA-256 o més fort. El servidor X1 requereix TLS 1.3 i una CA de client ADMF de confiança; no s’inicia si falta l’adreça d’escolta, el certificat, la clau o la CA de client. Les interfícies sortints X1 i X2/X3 requereixen TLS 1.2 o posterior.
Per als conceptes generals TLS i la generació de certificats, consulteu el Capítol 13: seguretat. La diferència principal per a LI és mantenir cadenes CA separades per a l’ADMF, els certificats LI de la vostra organització i el MDF: habitualment els operen entitats diferents.
Permisos de fitxer. Només el propietari del procés ha de poder llegir les claus privades:
chmod 600 /etc/lippycat/li/*.key
chmod 644 /etc/lippycat/li/*.crt
chmod 700 /etc/lippycat/li/
chown root:root /etc/lippycat/li/*
Fixació de certificats. Per a més garanties en la via de lliurament X2/X3, podeu fixar el certificat del servidor MDF mitjançant la seva empremta SHA-256:
Obteniu l’empremta:
openssl x509 -in mdf-server.crt -noout -fingerprint -sha256 | \
sed 's/://g' | cut -d= -f2
Configureu la fixació amb l’empremta obtinguda:
--li-delivery-tls-pinned-cert sha256:A1B2C3D4E5F6...
Quan la fixació està configurada, el client de lliurament rebutja qualsevol certificat MDF que no coincideixi amb una empremta fixada, encara que el certificat sigui altrament vàlid sota la CA configurada.
Interfície d’administració X1
La interfície X1 és el pla de control entre l’ADMF i el processador. L’ADMF la utilitza per gestionar tasques d’intercepció i destinacions de lliurament; el processador la utilitza per retornar notificacions d’estat a l’ADMF.
Operacions admeses
| Operació | Direcció | Descripció |
|---|---|---|
| Ping | D’ADMF a NE | Comprovació de salut |
| CreateDestination | D’ADMF a NE | Registrar un extrem MDF per al lliurament |
| ModifyDestination | D’ADMF a NE | Actualitzar un extrem MDF |
| RemoveDestination | D’ADMF a NE | Eliminar un extrem MDF |
| ActivateTask | D’ADMF a NE | Iniciar una tasca d’intercepció |
| ModifyTask | D’ADMF a NE | Actualitzar objectius de tasca, destinacions o tipus de lliurament |
| DeactivateTask | D’ADMF a NE | Aturar una tasca d’intercepció |
| GetTaskDetails | D’ADMF a NE | Consultar l’estat actual de la tasca |
| GetAllDetails | De NE a ADMF | Consultar totes les tasques, destinacions i l’estat de NE |
| GetAllTaskDetails | De NE a ADMF | Consultar tots els detalls de tasques |
Totes les peticions utilitzen codificació XML segons ETSI TS 103 221-1. Per exemple, una petició ActivateTask inclou l’identificador de tasca (XID), els identificadors d’objectiu, els ID de destinació i el tipus de lliurament:
<activateTaskRequest>
<x1RequestMessage>
<admfIdentifier>ADMF-001</admfIdentifier>
<x1TransactionId>550e8400-e29b-41d4-a716-446655440000</x1TransactionId>
<messageTimestamp>2025-12-27T10:30:00Z</messageTimestamp>
<version>v1.13.1</version>
</x1RequestMessage>
<taskDetails>
<xId>a1b2c3d4-e5f6-7890-abcd-ef1234567890</xId>
<targetIdentifiers>
<targetIdentifier>
<sipUri>sip:alicent@example.com</sipUri>
</targetIdentifier>
</targetIdentifiers>
<listOfDIDs>
<dId>d1e2f3g4-h5i6-7890-jklm-nop123456789</dId>
</listOfDIDs>
<deliveryType>X2andX3</deliveryType>
<implicitDeactivationAllowed>true</implicitDeactivationAllowed>
</taskDetails>
</activateTaskRequest>
Cicle de vida de les tasques
Les tasques passen pels estats següents:
| Estat | Descripció |
|---|---|
| Pendent | Tasca rebuda però encara no s’ha arribat a StartTime |
| Activa | Interceptant activament el trànsit coincident |
| Suspesa | Pausada temporalment per l’ADMF |
| Desactivada | Aturada explícitament amb DeactivateTask o per caducitat implícita |
| Fallida | Un error fatal ha impedit continuar la intercepció |
GetTaskDetails informa del valor de provisió definit per l’esquema awaitingProvisioning per a tasques pendents, failed per a tasques fallides i complete per a tasques actives, suspeses i desactivades. X1 no emet cap extensió d’estat de tasca específica de fabricant.
Quan implicitDeactivationAllowed està establert a true, el processador desactiva automàticament la tasca quan arriba a EndTime i notifica l’ADMF. Quan està establert a false, només una petició explícita DeactivateTask o un error fatal pot acabar la tasca.
Les tasques es poden modificar mentre estan actives. Els camps següents es poden modificar amb ModifyTask:
- Identificadors d’objectiu (afegeix o elimina criteris de filtre)
- ID de destinació (canvia els extrems de lliurament)
- Tipus de lliurament (canvia entre X2Only, X3Only, X2andX3)
- Hora d’acabament
- Paràmetre de desactivació implícita
XID i StartTime no es poden modificar després de l’activació.
Reintent idempotent i reactivació explícita
Repetir un ActivateTask equivalent mentre una tasca està activa o pendent és un reintent idempotent. No reinstal·la filtres, no avança la generació d’activació ni canvia el límit d’inici programat.
Una tasca desactivada es conserva temporalment com a marca de baixa i no es pot reprendre automàticament. Un ActivateTask explícit i autenticat només la pot reactivar quan la identitat d’intercepció protegida no ha canviat: han de coincidir l’XID, el tipus de lliurament i el conjunt canònic de parelles tipus/valor d’objectiu. L’ordre dels objectius i els duplicats exactes són irrellevants. La nova petició pot substituir els ID de destinació, les hores d’inici i acabament de mediació i les opcions de cicle de vida, subjecta a la validació actual normal. Les tasques suspeses i fallides continuen sense poder utilitzar aquesta operació.
Configureu totes les destinacions de substitució abans de reactivar i verifiqueu que cadascuna admeti el tipus de lliurament demanat. En cas d’èxit, el processador conserva l’antiga desactivació a l’historial d’auditoria, avança la generació d’activació i instal·la només els filtres nous. En cas de fallada de validació o instal·lació, la marca de baixa continua sense aplicar filtres i sense canvis. Si es perd la resposta, utilitzeu GetTaskDetails abans de reintentar: una petició idèntica activa/pendent es pot repetir amb seguretat; un resultat deactivated requereix una altra activació explícita després de corregir l’error subjacent.
Tipus de lliurament
Cada tasca especifica quina informació s’ha de lliurar:
| Tipus | X2 (IRI) | X3 (CC) | Cas d’ús |
|---|---|---|---|
| X2Only | Sí | No | Només metadades de senyalització (registres de trucades, esdeveniments de registre) |
| X3Only | No | Sí | Només contingut (fluxos de mitjans) |
| X2andX3 | Sí | Sí | Senyalització i contingut (intercepció completa) |
Notificacions ADMF
El processador envia notificacions a l’ADMF per informar de l’estat operatiu:
| Notificació | Desencadenant |
|---|---|
| Startup | Processador iniciat amb LI activat |
| Shutdown | El processador s’atura de manera controlada |
| KeepAlive | Senyal periòdic de vida (interval configurable) |
| TaskProgress | Actualitzacions del progrés d’activació de tasques |
| ErrorReport | Errors d’execució de tasques |
| DeliveryNotification | Problemes de lliurament X2/X3 al MDF |
| ImplicitDeactivation | La tasca ha caducat automàticament per EndTime |
Configureu l’interval keepalive amb --li-admf-keepalive:
Envieu un keepalive cada 30 segons:
--li-admf-keepalive 30s
Desactiveu els keepalive:
--li-admf-keepalive 0
Sincronització de l’estat ADMF
Quan lippycat es reinicia, es perd tot l’estat de tasques i destinacions en memòria. Per recuperar-lo sense esperar que l’ADMF torni a enviar cada tasca individualment, el processador consulta l’estat actual a l’ADMF en iniciar-se amb l’operació estàndard GetAllDetails definida a ETSI TS 103 221-1.
La sincronització d’inici està activada per defecte. Després d’enviar la notificació d’inici, el processador crida GetAllDetails a l’ADMF, que retorna totes les tasques i destinacions assignades a aquest element de xarxa. El processador registra cada destinació i activa cada tasca, recreant automàticament tot l’estat de filtres i lliurament.
sequenceDiagram
participant P as Processor
participant A as ADMF
P->>A: ReportNEIssue (Startup)
P->>A: GetAllDetailsRequest
A-->>P: GetAllDetailsResponse<br/>(tasks + destinations + NE status)
Note over P: Register destinations
Note over P: Activate tasks & push filters
P->>P: Normal operation resumes
La sincronització està dissenyada per gestionar les limitacions de manera controlada:
- ADMF inaccessible: la sincronització esgota el temps d’espera (30 segons per defecte) i el processador continua l’inici. L’ADMF pot enviar tasques més tard amb
ActivateTask. - L’ADMF no admet GetAllDetails: algunes implementacions mínimes d’ADMF només admeten enviar estat. Quan l’ADMF retorna un error
UnsupportedOperation, el processador registra un avís i continua normalment. - Fallades de tasques individuals: si una tasca o destinació concreta no s’activa (per exemple, per un tipus d’objectiu no admès), s’omet amb un avís i es processen els elements restants.
Opcions de configuració:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--li-admf-sync-on-startup | bool | true | Consultar l’estat a l’ADMF en iniciar-se |
--li-admf-sync-timeout | duration | 30s | Temps d’espera de la petició de sincronització d’inici |
--li-admf-reconcile-interval | duration | 5m | Interval de conciliació periòdica ADMF (0 = desactivat) |
Per desactivar la sincronització d’inici (per exemple, en entorns on l’ADMF sempre envia l’estat):
--li-admf-sync-on-startup=false
La conciliació periòdica protegeix contra desviacions de configuració durant execucions llargues i està activada per defecte (5m). El processador consulta periòdicament l’ADMF i concilia el seu estat local amb la resposta:
- S’activen les tasques presents a l’ADMF però absents localment.
- Es desactiven les tasques presents localment però absents a l’ADMF i se n’eliminen els filtres. Un
DeactivateTaskque no arribés mai deixaria una intercepció en execució sense autorització ni caducitat.
El desmantellament és deliberadament conservador, perquè eliminar erròniament una ordre vigent és tan greu com recollir massa dades. No s’elimina res quan:
- la petició ADMF falla (una interrupció no arriba mai a la via de desmantellament);
- alguna tasca de la resposta no es pot analitzar, perquè llavors la visió és incompleta;
- la resposta conté zero tasques mentre hi ha tasques actives localment: el procediment de recuperació ADMF respon així mentre reconstrueix les seves taules, de manera que eliminar l’última tasca requereix un
DeactivateTaskexplícit.
Una tasca també ha de ser absent en dues consultes consecutives abans d’eliminar-la (ReconcileOrphanPolls), cosa que comporta un interval de recollida excessiva i evita anomalies d’una sola consulta. Cada desactivació automàtica es registra a nivell WARN amb l’XID.
La mateixa conciliació s’executa durant la sincronització d’inici, on actua sobre la primera resposta: els filtres es persisteixen al disc i es recarreguen abans que existeixi el registre, de manera que un filtre obsolet es reactivaria a cada reinici. Els filtres que no pertanyen a LI no es modifiquen mai.
Concilieu cada cinc minuts (valor per defecte):
--li-admf-reconcile-interval 5m
Desactiveu la conciliació perquè les desviacions no es corregeixin mai:
--li-admf-reconcile-interval 0
Configuració YAML:
processor:
li:
admf_sync_on_startup: true
admf_sync_timeout: "30s"
admf_reconcile_interval: "5m" # 0 disables; drift is then never corrected
Codis d’error X1
Quan el processador no pot satisfer una petició X1, retorna un error estructurat:
| Codi | Nom | Descripció |
|---|---|---|
| 100 | GenericError | Error general de processament; la identitat de reactivació conservada és diferent |
| 101 | RequestSyntaxError | XML invàlid a la petició |
| 300 | XIDAlreadyExists | Una tasca amb aquest XID ja està activa |
| 301 | XIDNotFound | No s’ha trobat cap tasca per a l’XID indicat |
| 302 | DIDAlreadyExists | Ja hi ha una destinació registrada amb aquest DID |
| 303 | DIDNotFound | No s’ha trobat cap destinació per al DID indicat |
| 400 | DeliveryNotPossible | No es pot accedir al MDF per al lliurament |
| 401 | TargetNotSupported | Tipus d’identificador d’objectiu no admès |
| 402 | DeliveryTypeNotSupported | El tipus de lliurament demanat no està disponible |
Quan la reactivació canvia un objectiu protegit o el tipus de lliurament, el codi 100 té la descripció estable retained task's interception identity differs seguida de l’XID. Això és intencionadament diferent del codi 300: el codi 300 continua significant una definició contradictòria per a un XID actiu o pendent. Els operadors han d’investigar una diferència d’identitat amb codi 100 en lloc de canviar l’objectiu d’intercepció sota l’XID conservat.
Lliurament X2/X3
Les dades interceptades es lliuren als extrems MDF amb codificació TLV binària (Type-Length-Value) segons ETSI TS 103 221-2.
Lliurament X2 IRI
X2 lliura esdeveniments IRI derivats de SIP, metadades de protocol activades i missatges RADIUS en brut. El lliurament requereix una tasca autoritzadora vigent i una destinació X2 activada; s’apliquen requisits d’autorització específics del protocol.
Esdeveniments IRI derivats de SIP
Les PDU X2 transporten metadades de senyalització derivades de missatges SIP:
| Esdeveniment IRI | Desencadenant SIP | Descripció |
|---|---|---|
| SessionBegin | INVITE | S’ha iniciat una trucada |
| SessionAnswer | 200 OK en resposta a INVITE | S’ha respost la trucada |
| SessionEnd | BYE | S’ha acabat la trucada |
| SessionAttempt | CANCEL, 4xx, 5xx, 6xx | Ha fallat un intent de trucada |
| Registration | REGISTER | Usuari registrat a la xarxa |
| RegistrationEnd | REGISTER (Expires: 0) | Usuari donat de baixa |
Cada PDU X2 derivada de SIP inclou atributs estructurats: marca temporal, IP i port d’origen/destinació, Call-ID SIP, capçaleres From/To i un número de correlació que enllaça esdeveniments relacionats dins de la mateixa sessió.
Missatges RADIUS (format 11)
La captura ordinària sniff radius, hunt radius i tap radius no requereix una compilació LI ni una tasca X1. En una compilació LI, el lliurament X2 en brut amb format 11 és una sortida autoritzada separada i requereix una tasca X2Only vigent amb un àmbit que coincideixi amb el desplegament de captura. Vegeu Captura RADIUS i POI per a assignacions NatParas, aïllament d’àmbit, estat de correlació i configuració MDF.
RADIUS utilitza un codificador dedicat de format 11. Les seves dades útils contenen el missatge RADIUS original validat sense encapsulació Ethernet/IP/UDP ni farciment final. Payload Direction és Unknown i el Correlation ID de vuit bytes identifica un intercanvi observat, no una sessió d’abonat. Aquesta sortida en brut és separada de l’IRI derivat de SIP i de les metadades normalitzades de protocol.
S’admeten desplegaments Tap independents i Hunt/Process directes. En transmetre paquets RADIUS directament del Hunter al processador, utilitzeu TLS mutu i actualitzeu tots dos per admetre identitat autoritativa de l’origen de captura i instantànies de filtres. No s’admet autorització X2 d’origen de relé. Abans del desplegament en producció, verifiqueu les assignacions d’objectiu amb una línia d’abonat coneguda a la xarxa de l’operador i acordeu les convencions de format 11, direcció, correlació, duplicats i tractament d’orfes amb el MDF receptor.
Contingut X3 CC
Les PDU X3 transporten contingut de comunicació; X3 no és un transport de logs estructurats:
| Tipus de contingut | Descripció |
|---|---|
| Dades útils RTP | Paquets de mitjans de veu o vídeo |
| DTMF | Senyals del teclat telefònic |
Les PDU X3 inclouen atributs específics d’RTP (SSRC, número de seqüència, marca temporal, tipus de dades útils) i un ID de flux que es correlaciona amb els esdeveniments de sessió X2.
Atribució de trucades amb tancament segur
La selecció X3 basada en identitat només s’hereta després que la resolució exacta dels extrems RTP demostri una única trucada activa. Els extrems compartits o desconeguts no escullen un guanyador per recència ni combinen filtres de totes les trucades candidates. La coincidència d’identitat se suprimeix. Els objectius directes d’adreça IP i CIDR encara coincideixen amb els extrems dels paquets, de manera que continuen sent vàlids encara que la pertinença de la trucada sigui ambigua.
La finalització tanca tant la via X3 com la sortida per trucada. Les entrades en buffer de la generació de trucada finalitzada es descarten i la codificació o el lliurament posteriors es rebutgen. Els Call-ID tancats es conserven una hora per defecte en un registre limitat de 100.000 marques de baixa. La reutilització després de la caducitat crea una generació nova; el contingut antic en buffer no hi pot passar.
Rendiment del lliurament
El subsistema de lliurament utilitza cues asíncrones amb control de contrapressió per gestionar una alta capacitat de transmissió:
| Mètrica | Valor |
|---|---|
| Capacitat de codificació X2 | ~500.000 PDU/s (~2 us per PDU) |
| Capacitat de codificació X3 | ~1 milió de PDU/s (~1 us per PDU) |
| Capacitat de lliurament (una destinació) | ~100.000 PDU/s |
| Capacitat de lliurament (diverses destinacions) | ~50.000 PDU/s per destinació |
El lliurament utilitza un conjunt de connexions reutilitzables, un distribuïdor ordenat per destinació MDF, lots (per defecte: 100 PDU per lot) i una cua limitada per destinació (per defecte: 10.000 elements). Les PDU continuen en cua mentre una destinació es reconnecta i s’envien en ordre FIFO després de la recuperació. Si una interrupció sostinguda omple una cua, es descarta la PDU més antiga i es registra a les estadístiques de lliurament de la destinació. Els reintents proporcionen lliurament almenys una vegada; per tant, una escriptura TCP amb resultat incert pot produir un duplicat al MDF.
La distribució a diverses destinacions MDF segueix el principi de tancament segur però no és atòmica entre destinacions. La primera destinació accepta amb les admissions existents de tasca i trucada del paquet; cada destinació posterior les torna a comprovar. Si la tasca o trucada es finalitza durant la distribució, un MDF anterior pot rebre la PDU mentre els posteriors la rebutgen. El rebuig es compta a la telemetria aplicable de supressió o descart del buffer. Els desplegaments que requereixen lliurament atòmic entre MDF han de coordinar-lo fora de lippycat i conciliar les estadístiques de seqüència i descart de cada destinació.
Integració de filtres
Quan l’ADMF activa una tasca, el gestor LI tradueix els identificadors d’objectiu al sistema intern de filtres de lippycat. S’utilitza la mateixa infraestructura de filtres optimitzada descrita als capítols anteriors sobre Hunters (Capítol 7) i processadors (Capítol 8).
Assignació d’objectius a filtres
| Tipus d’objectiu LI | Element X1 | Exemple | Sistema de filtres | Algorisme |
|---|---|---|---|---|
| URI SIP | <sipUri> | sip:alicent@example.com | FILTER_SIP_URI | Coincidència de patrons Aho-Corasick |
| URI TEL | <telUri> | tel:+15551234567 | FILTER_PHONE_NUMBER | Filtre Bloom + coincidència de sufixos |
| Número E.164 | <e164Number> | +15551234567 | FILTER_PHONE_NUMBER | Filtre Bloom + coincidència de sufixos |
| Adreça IPv4 | <ipv4Address> | 192.168.1.100 | FILTER_IP_ADDRESS | Mapa hash, cerca O(1) |
| CIDR IPv4 | <ipv4Cidr> | 10.0.0.0/8 | FILTER_IP_ADDRESS | Arbre radix, cerca O(prefix) |
| Adreça IPv6 | <ipv6Address> | 2001:db8::1 | FILTER_IP_ADDRESS | Mapa hash, cerca O(1) |
| CIDR IPv6 | <ipv6Cidr> | 2001:db8::/32 | FILTER_IP_ADDRESS | Arbre radix, cerca O(prefix) |
| NAI | <nai> | user@realm.example.com | FILTER_SIP_URI | Coincidència de patrons Aho-Corasick |
Flux de filtres
La via completa des de l’activació de la tasca fins al lliurament de PDU és:
flowchart TD
A["ADMF activates task via X1"] --> B["LI Manager creates filters<br/>for each target identifier"]
B --> C["Filters pushed to hunters<br/>via gRPC management stream"]
C --> D["Hunters match packets<br/>using optimized filter engines"]
D --> E["Matched packets forwarded<br/>to processor with filter IDs"]
E --> F["LI Manager correlates<br/>filter ID → XID"]
F --> G{"Authorized output?"}
G -->|SIP signaling| H["X2 Encoder<br/>(IRI PDU)"]
G -->|Normalized protocol metadata| H
G -->|RTP media| I["X3 Encoder<br/>(CC PDU)"]
H --> J["Delivery Client → MDF"]
I --> J
Cada filtre creat pel gestor LI rep un ID intern amb el format li-{xid_prefix}-{index} (per exemple, li-a1b2c3d4-0). Quan arriben al processador paquets coincidents amb aquests filtres, el gestor LI busca l’XID corresponent i encamina l’IRI SIP, les metadades normalitzades de protocol activades i el contingut de comunicació per les vies de lliurament adequades.
Quan es desactiva una tasca, els filtres associats s’eliminen de tots els Hunters i la coincidència s’atura immediatament.
Consideracions de configuració i manteniment
Aïllament de xarxa
La infraestructura LI s’ha de desplegar en una xarxa de gestió dedicada, separada del trànsit de producció i de la supervisió habitual. L’extrem X1 (port 8443 per defecte) i les connexions de lliurament X2/X3 no han de ser accessibles des de segments generals de xarxa. Utilitzeu regles de tallafoc per restringir l’accés només a adreces ADMF i MDF autoritzades.
Rotació de certificats
Els certificats LI han de tenir períodes de validesa curts (un any o menys) i s’han de rotar abans de caducar. Superviseu la caducitat dels certificats com a part de les operacions habituals:
Comproveu si un certificat caduca en els pròxims 30 dies:
openssl x509 -in /etc/lippycat/li/x1-server.crt -noout -checkend 2592000
Per rotar els certificats:
- Genereu certificats nous (o obteniu-los de la PKI de la vostra organització).
- Actualitzeu la configuració del processador per referenciar els fitxers de certificat nous.
- Reinicieu el processador de manera controlada. Les tasques actives es restauren automàticament: el processador envia una notificació d’aturada i, en reiniciar-se, consulta l’ADMF amb
GetAllDetailsper restaurar tot l’estat de tasques i destinacions (vegeu Sincronització de l’estat ADMF). - Verifiqueu la connectivitat amb l’ADMF i el MDF després de reiniciar.
Per als entorns de producció, considereu utilitzar un mòdul de seguretat de maquinari (HSM) per emmagatzemar claus privades i un sistema automatitzat de gestió del cicle de vida dels certificats.
Registre d’auditoria
Totes les operacions LI es registren als logs estructurats del processador. Els camps principals dels logs d’esdeveniments LI inclouen:
| Camp | Descripció |
|---|---|
xid | Identificador de tasca |
did | Identificador de destinació |
filter_id | Identificador intern de filtre |
packets_matched | Nombre de paquets coincidents |
Aquests logs s’han de transmetre a un sistema segur de gestió de logs que evidenciï manipulacions, com a part dels requisits d’auditoria LI de la vostra organització.
Mode independent amb Tap
Per als desplegaments que no necessiten una topologia separada de Hunter i processador, el node tap es pot compilar amb suport LI:
make tap-li
En aquesta configuració, el node Tap captura paquets localment i lliura PDU X2/X3 directament al MDF sense sobrecàrrega gRPC. Això és útil per a desplegaments d’una sola interfície o entorns de laboratori. Totes les opcions de configuració LI funcionen de la mateixa manera al node Tap.
Resolució de problemes
El servidor X1 no s’inicia
Si el servidor HTTPS X1 no s’inicia:
- Verifiqueu que el processador s’hagi compilat amb
-tags li(utilitzeumake processor-liomake build-li). - Comproveu que els certificats TLS siguin vàlids i no hagin caducat.
- Confirmeu que el certificat de CA coincideixi amb els certificats de client ADMF.
- Assegureu-vos que el port d’escolta (8443 per defecte) no estigui ja en ús.
Fallades de lliurament X2/X3
Si les PDU no arriben al MDF:
- Confirmeu que la destinació MDF s’hagi registrat mitjançant una petició
CreateDestinationa X1. - Verifiqueu la connectivitat de xarxa amb l’extrem MDF.
- Comproveu que el certificat de client de lliurament estigui signat per una CA de confiança per al MDF.
- Superviseu la profunditat de la cua de lliurament: una cua plena indica que el MDF no pot seguir el ritme o és inaccessible.
Atribució RTP i senyals del cicle de vida
Tracteu l’augment dels comptadors de mitjans ambiguous/unknown, identity_inheritance_suppressed, inherited_provenance_rejected, x3_finalized_or_stale_suppressed, x3_buffered_discarded i d’expulsió per capacitat de marques de baixa de cicle de vida com a senyals de seguretat. L’ambigüitat sol indicar extrems de mitjans compartits o visibilitat SDP incompleta. Els rebutjos de generacions finalitzades/obsoletes solen indicar lots tardans, retard de reordenació o reutilització de Call-ID. Els avisos estructurats tenen freqüència limitada i només exposen identificadors depurats o amb hash; compareu diferències de comptadors per mesurar el volum.
Les tasques no coincideixen amb el trànsit
Si una tasca activa no genera dades d’intercepció:
- Verifiqueu que l’estat de la tasca sigui
Active(utilitzeuGetTaskDetailsamb X1). - Comproveu que el format de l’objectiu coincideixi exactament amb el trànsit (per exemple, una URI SIP completa
sip:user@domainen lloc de només la part d’usuari). - Confirmeu que s’hagin transmès els filtres als Hunters (comproveu els logs del processador per als esdeveniments de transmissió de filtres).
- Verifiqueu que els Hunters rebin trànsit coincident amb els identificadors d’objectiu.
Registre de depuració
Activeu logs de nivell debug per a diagnòstics LI detallats:
LOG_LEVEL=debug lc process --li-enabled ...
Per verificar manualment la connectivitat TLS amb els extrems X1 o de lliurament:
Proveu el servidor X1:
openssl s_client -connect localhost:8443 \
-cert x1-client.crt -key x1-client.key \
-CAfile li-ca.crt
Proveu el lliurament al MDF:
openssl s_client -connect mdf.example.com:443 \
-cert delivery.crt -key delivery.key \
-CAfile mdf-ca.crt
Lliurament limitat i recuperació després d’un reinici
El processador i Tap admeten límits independents de bytes codificats X2/X3 amb --li-delivery-x2-queue-bytes i --li-delivery-x3-queue-bytes. Tant els límits de bytes com de PDU s’apliquen per destinació i interfície, incloses les escriptures reservades. L’opció --li-delivery-memory-budget-bytes reserva capacitat entre destinacions i requereix límits explícits de bytes. Dimensioneu els pressupostos com els bytes codificats màxims per segon multiplicats per la durada de la interrupció, amb marge i capacitat de PDU suficient. L’amplada de banda de recuperació ha de superar el trànsit en directe. Les altres necessitats de memòria del processador requereixen dimensionament separat.
--li-delivery-x3-max-age=5m fa caducar X3 cinc minuts després de l’admissió local, incloses la reordenació i els reintents, fins i tot sense connexió. Per defecte no hi ha caducitat. X2 no hereta l’edat X3. Completar una escriptura local no demostra la recepció remota.
La persistència X2 xifrada s’activa explícitament amb --li-delivery-x2-spool-dir, un --li-delivery-x2-spool-max-bytes positiu i --li-delivery-x2-spool-key-file amb una clau AES privada de 32 bytes en brut. X3 només resideix en memòria si no es configura el seu diari independent. L’èxit d’inserció en cua és admissió, no una confirmació de durabilitat; una caiguda pot perdre registres encara no sincronitzats. Els diaris plens rebutgen productes nous tot conservant els registres persistits.
X2 recuperat es reté per defecte i requereix conciliació explícita d’identitat i autorització mitjançant l’API del pla de control que l’integra abans de reproduir-lo. Reutilitzar un XID o un UUID de destinació no autoritza registres antics. La CLI accepta un manifest de reproducció privat explícit després de la conciliació d’inici ADMF. --li-delivery-x2-spool-replay-policy=purge elimina explícitament els registres recuperats; manteniu el valor per defecte hold si no teniu intenció de descartar-los. lc show status informa de pressupostos de bytes, bytes en cua i en curs, productes caducats, bytes descartats etiquetats per motiu i comptadors de diari pendents, persistits i retinguts. Els desplegaments existents conserven els límits anteriors fins que es configuren opcions noves.
X3 persistent requereix --li-delivery-x3-spool-dir, un --li-delivery-x3-spool-max-bytes explícit positiu, una clau privada independent de 32 bytes en brut seleccionada amb --li-delivery-x3-spool-key-id i --li-delivery-x3-spool-key-file i un --li-delivery-x3-max-age positiu. També calen estat administratiu xifrat i conciliació d’inici ADMF. Cada magatzem utilitza la seva pròpia capacitat limitada; configureu els pressupostos de memòria i disc per a tots dos magatzems i les entrades contínues.
L’acabament normal d’una trucada tanca la captura nova per a aquella instància de trucada i conserva els pendents durables elegibles. La retirada de la tasca, la substitució de destinació i la revocació explícita bloquegen el lliurament històric. Les dates límit d’admissió originals no es reinicien mai en acabar la trucada ni en reiniciar el procés. Un procés aturat no pot eliminar fitxers caducats; l’inici comprova la caducitat abans de l’elegibilitat de reproducció.
X3 recuperat utilitza per defecte --li-delivery-x3-spool-replay-policy=hold; purge el descarta de manera durable. Exporteu les identitats retingudes amb --li-delivery-x3-spool-export-manifest, reviseu-les i proporcioneu una aprovació exacta de versió 2 amb --li-delivery-x3-spool-replay-manifest. L’aprovació requereix una activació de tasca i una destinació actualment conciliades i sense canvis, instàncies coincidents d’estat i diari, la data límit original i la identitat del contingut. La reproducció envia els bytes codificats i els números de seqüència originals. Una escriptura local reeixida no demostra la recepció pel MDF, de manera que una escriptura interrompuda pot provocar un lliurament duplicat. Vegeu el procediment de lliurament històric per a detalls de conciliació, aprovació i recuperació.
lc show status exposa comptadors independents de diaris X2 i X3, bytes assignats, límits, comptadors de caducitat/revocació i codis fixos d’error d’emmagatzematge. La incertesa de confirmació d’emmagatzematge i la incertesa d’escriptura de transport són resultats diferents.
Hi ha límits independents de PDU amb --li-delivery-x2-queue-size i --li-delivery-x3-queue-size; cadascun té zero per defecte i hereta el límit antic --li-delivery-queue-size. physical_queue_bytes compta una vegada les dades útils codificades compartides, mentre que queue_bytes compta cada còpia de destinació.
Resolució de problemes
Quan alguna cosa falla durant una captura, cal obtenir respostes ràpidament. Aquest capítol organitza els problemes habituals per categories, totes amb la mateixa estructura: què observeu (símptoma), per què passa (causa) i què podeu fer-hi (solució). S’inclouen ordres de diagnòstic per confirmar la causa arrel abans d’aplicar una correcció.
Si encara no heu llegit el Capítol 12: Guia d’operacions, comenceu-hi per trobar comprovacions d’estat i scripts de supervisió. Aquest capítol aprofundeix en modes de fallada específics.
Problemes de captura
Aquests problemes afecten tots els modes de captura: sniff, hunt i tap.
Permís denegat
Símptoma: lippycat es tanca immediatament amb operation not permitted o permission denied.
Causa: la captura de paquets en directe requereix les capacitats Linux CAP_NET_RAW i CAP_NET_ADMIN. Sense aquestes capacitats, el nucli denega l’accés a la interfície de xarxa.
Solució:
Executeu-lo amb sudo:
sudo lc sniff voip -i eth0
O atorgueu capacitats al binari perquè es pugui executar sense root:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/local/bin/lc
Comproveu que les capacitats estan definides:
getcap /usr/local/bin/lc
Sortida esperada: /usr/local/bin/lc cap_net_admin,cap_net_raw=eip.
Després de definir les capacitats, qualsevol usuari que no sigui root pot executar captures. Cal tornar a aplicar setcap després de reinstal·lar o actualitzar el binari.
Atribució de les pèrdues de captura per etapa
Els comptadors de pèrdues són acumulatius dins d’una sessió de captura i es reinicien quan es reinicia aquella font de captura. Classifiqueu la primera etapa local amb un valor diferent de zero abans d’atribuir una causa arrel:
- les pèrdues del nucli/interfície es produeixen abans que lippycat rebi un paquet;
- les pèrdues del búfer de captura ordinari identifiquen pèrdues al canal ordinari;
- les degradacions SIP identifiquen pressió al canal prioritari quan el paquet s’ha conservat al canal ordinari i, per tant, no són pèrdues de paquets;
- les pèrdues del búfer de captura SIP identifiquen paquets SIP rebutjats per tots dos canals d’entrada;
- les pèrdues del canal de lots es produeixen en lliurar els paquets capturats al processament o al reenviament;
- els buits TCP normals/per pressió de pàgines i els de buidatge explícit compten bytes de seqüència TCP absents, però es continuen atribuint per separat;
- les pèrdues de fragments/bytes després del reassemblatge indiquen que la cua del flux SIP s’ha saturat;
- els comptadors de discontinuïtat i recuperació de l’analitzador descriuen la recuperació de l’emmarcament; i
- el mostreig de visualització o les pèrdues de la cua afecten la visibilitat dels detalls dels paquets, no l’entrada.
El comptador agregat compatible de paquets descartats és la suma de les etapes locals de pèrdua de paquets amb nom. No deduïu una fallada externa de la font de captura només perquè falti espai de seqüència TCP: comproveu primer totes les etapes mesurades localment. Els valors dels lots i dels senyals de vida són instantànies acumulatives i no s’han de sumar entre informes.
Quan aparegui pressió al búfer de captura, compareu les longituds dels canals ordinari, SIP i de sortida amb les seves capacitats. Un canal SIP ple amb degradacions però sense pèrdues SIP normalment requereix més marge de prioritat SIP. Un canal de sortida persistentment ple indica que el processament posterior no el buida prou ràpidament. Ampliar una cua finita pot absorbir una ràfega limitada, però la sobrecàrrega sostinguda requereix més cabal de processament/reenviament o un filtre de captura més restringit.
Interfície no trobada
Símptoma: lippycat informa de no such device o no es reconeix el nom de la interfície.
Causa: el nom de la interfície no coincideix amb cap dispositiu de xarxa actiu. Això passa sovint després d’un canvi de nom (p. ex., eth0 passa a ser enp3s0) o quan encara no s’ha creat una interfície virtual.
Diagnòstic:
Llisteu totes les interfícies amb el seu estat actual:
ip link show
O utilitzeu el llistat integrat de lippycat:
lc list interfaces
Solució:
Utilitzeu el nom correcte de la interfície del llistat anterior. Si no sabeu quina interfície transporta el trànsit que voleu, captureu a totes les interfícies:
sudo lc sniff voip --interface any
La pseudointerfície any captura de totes les interfícies actives simultàniament. És útil per al diagnòstic, però pot augmentar la càrrega de CPU en producció: canvieu a una interfície concreta quan hàgiu identificat la correcta.
No es capturen paquets
Símptoma: lippycat s’inicia sense errors però mostra zero paquets.
Causa: hi ha diverses possibilitats:
- Interfície incorrecta: el trànsit passa per una interfície diferent de la seleccionada.
- Filtre BPF massa restrictiu: l’expressió del filtre exclou el trànsit que espereu.
- Regles del tallafoc: iptables o nftables descarta paquets abans que arribin a la capa de captura.
- Cal mode promiscu: el trànsit no s’adreça a aquest amfitrió i la interfície no està en mode promiscu.
Diagnòstic:
Confirmeu amb tcpdump que hi ha trànsit a la interfície:
sudo tcpdump -i eth0 -c 10 -n
Si captureu VoIP, comproveu específicament el trànsit SIP:
sudo tcpdump -i eth0 -n port 5060
Comproveu les regles del tallafoc:
sudo iptables -L -n -v
Per a nftables:
sudo nft list ruleset
Solució:
-
Si
tcpdumpveu trànsit però lippycat no, comproveu el filtre BPF. Comenceu sense filtre i afegiu restriccions gradualment. -
Activeu el mode promiscu si captureu trànsit no adreçat a aquest amfitrió:
sudo lc sniff -i eth0 --promisc -
Si un tallafoc descarta paquets, afegiu una excepció per a la interfície de captura o situeu el punt de captura abans de les regles del tallafoc (p. ex., amb un dispositiu TAP o un port de rèplica).
Problemes amb fitxers PCAP
Símptoma: els fitxers PCAP no es creen, són buits o semblen corruptes.
Causa: espai de disc esgotat, permisos del directori incorrectes o el procés s’ha terminat abans de finalitzar el fitxer.
Diagnòstic:
Comproveu l’espai de disc:
df -h /var/capture/
Comproveu els permisos del directori:
ls -la /var/capture/
Verifiqueu la integritat del fitxer amb capinfos (eines de Wireshark):
capinfos capture.pcap
Solució:
- Assegureu-vos que el directori de sortida existeix i que l’usuari que executa lippycat hi pot escriure.
- Per a PCAP per trucada en mode VoIP, comproveu que el directori
--per-call-pcap-dirté prou espai. Cada trucada genera un fitxer independent; un desplegament amb milers de trucades simultànies pot consumir disc ràpidament. - Si un fitxer PCAP sembla truncat, és probable que el procés de captura s’hagi bloquejat o s’hagi terminat amb
SIGKILL. UtilitzeuSIGTERMoSIGINT(Ctrl+C) per a una aturada ordenada que buidi i tanqui tots els fitxers PCAP oberts. - Per als fitxers PCAP amb rotació automàtica, comproveu que la configuració de rotació no crea fitxers més ràpidament del que el disc pot gestionar.
Problemes de reassemblatge TCP
Els problemes de reassemblatge TCP afecten principalment la captura SIP sobre TCP. Consulteu el Capítol 4 per saber com funcionen els modes de rendiment TCP.
No es capturen missatges SIP TCP
Símptoma: zero fluxos TCP actius. No es detecten trucades SIP tot i que hi ha trànsit SIP TCP a la xarxa.
Causa: la captura pot no veure trànsit TCP al port 5060, o la configuració d’interfície/filtre l’exclou.
Diagnòstic:
Verifiqueu que el trànsit SIP TCP arriba a la interfície:
sudo tcpdump -i eth0 -n port 5060 and tcp -c 5
Executeu lippycat amb registres de depuració per seguir el processament:
LOG_LEVEL=debug sudo lc sniff voip -i eth0 --tcp-performance-mode latency 2> debug.log
Cerqueu missatges relacionats amb TCP:
grep -i "tcp\|sip\|stream" debug.log
Solució:
Si tcpdump mostra trànsit SIP TCP:
- Assegureu-vos que el filtre BPF i la configuració de
--sip-portinclouen el port SIP TCP. - Proveu
--interface anyper descartar la selecció d’interfície. - Comproveu que cap filtre BPF exclou TCP.
Si tcpdump no mostra trànsit:
- SIP pot utilitzar un port no estàndard. Comproveu la configuració de la centraleta.
- Un tallafoc pot bloquejar el port 5060. Comproveu
iptables -L -n.
Es creen fluxos però no es detecta SIP
Símptoma: els fluxos TCP apareixen a les mètriques però no s’extreuen Call-IDs. Els búfers s’acumulen sense buidar-se.
Causa: els missatges SIP estan fragmentats entre segments TCP i no es reassemblen correctament, o tenen un format no estàndard.
Diagnòstic:
LOG_LEVEL=debug sudo lc sniff voip -i eth0 --tcp-performance-mode latency 2> debug.log
Després, cerqueu al registre errors de fragmentació, reassemblatge, content-length o missatges mal formats:
grep -i "fragment\|reassembl\|content-length\|malform" debug.log
Solució:
-
Augmenteu el temps d’espera del flux per donar més temps als missatges fragmentats per completar-se:
voip: tcp_stream_timeout: 120s -
Canvieu al mode
latencyper accelerar el processament de cada segment:sudo lc sniff voip -i eth0 --tcp-performance-mode latency -
Verifiqueu el format dels missatges SIP amb una captura de paquets. Comproveu que les capçaleres
Content-Lengthcoincideixen amb la mida real del cos. Un buit en el reassemblatge o un cos truncat fa que l’analitzador del flux descarti la trama incompleta i cerqui més endavant una línia d’inici SIP creïble; unContent-Lengthben emmarcat però prohibit continua sent un rebuig estricte de la política.
Comptadors de recuperació de l’analitzador SIP
Una pèrdua TCP, un buidatge forçat del reassemblatge o una cua de flux posterior al reassemblatge plena poden deixar l’analitzador a mig camí d’una capçalera o cos SIP. El flux es rearma en aquella discontinuïtat i fa una cerca limitada de la següent línia d’inici creïble d’una petició o resposta SIP. La recuperació està limitada intencionadament a 16 KiB per cerca i a 64 KiB acumulats sense un missatge SIP complet. Analitzar un missatge complet reinicia el marge acumulat; el trànsit que supera el límit es descarta en lloc de consumir CPU o memòria sense límit.
Premeu B a la TUI per inspeccionar la notificació de diagnòstic SIP TCP i el registre de depuració. Llegiu els comptadors en aquest ordre:
reassembly_normal_*atribueix els buits alliberats durant el reassemblatge normal/per pressió de pàgines;reassembly_explicit_flush_*atribueix els buits exposats per un buidatge explícit;post_reassembly_dropped_chunksipost_reassembly_dropped_bytesidentifiquen pèrdues a la cua limitada del flux;parser_framing_discontinuitiescompta els rearmaments de l’analitzador quan l’emmarcament ja no és fiable; istream_recovery_successesistream_recovery_failuresindiquen si la cerca limitada ha trobat un límit SIP vàlid posterior.
Una recuperació correcta significa que s’han analitzat missatges SIP posteriors; no restaura el missatge danyat ni els bytes que hi falten. L’augment de les fallades de recuperació normalment indica que la pèrdua ha persistit més enllà del límit de cerca, que la captura ha començat a mig flux sense cap límit SIP posterior o que el flux no és SIP. Correlacioneu els comptadors de l’analitzador amb les etapes de pèrdua anteriors abans de canviar les hipòtesis de l’analitzador.
La recuperació no relaxa mai la política de seguretat de mida del cos SIP. Els valors Content-Length negatius, mal formats, desbordats, contradictoris o superiors al límit en missatges que, altrament, estan correctament emmarcats amb CRLF es rebutgen, en lloc de saltar-los per cercar un missatge posterior. Corregiu o filtreu l’emissor responsable; no interpreteu aquests rebutjos estrictes com una recuperació ordinària de pèrdues.
Ús elevat de memòria durant la captura TCP
Símptoma: l’ús de memòria creix contínuament. El sistema deixa de respondre o el mecanisme OOM termina el procés.
Causa: els fluxos TCP de llarga durada o abandonats acumulen búfers. És habitual en entorns amb moltes connexions de curta durada que no es tanquen correctament (sense FIN/RST).
Diagnòstic:
Superviseu l’ús de memòria:
watch -n 2 'ps -o pid,rss,vsz,comm -p $(pgrep lc)'
Solució:
Canvieu al mode optimitzat per a memòria i establiu límits explícits:
voip:
tcp_performance_mode: "memory"
memory_optimization: true
tcp_memory_limit: 52428800 # 50 MB cap
max_tcp_buffers: 1000
tcp_buffer_max_age: 120s
tcp_cleanup_interval: 30s
Per a entorns amb una càrrega molt variable, utilitzeu emmagatzematge en búfer adaptatiu:
voip:
tcp_buffer_strategy: "adaptive"
Ús elevat de CPU durant la captura TCP
Símptoma: l’ús de CPU satura un o diversos nuclis. Comencen les pèrdues de paquets.
Causa: massa goroutines simultànies processen fluxos TCP, o la mida dels lots és massa petita i provoca una sobrecàrrega excessiva per paquet.
Solució:
Reduïu la concurrència de les goroutines i activeu la contrapressió:
voip:
max_goroutines: 500
enable_backpressure: true
Per a entorns de volum elevat, canvieu al mode de cabal amb lots més grans:
voip:
tcp_performance_mode: "throughput"
tcp_batch_size: 64
Pèrdues de paquets i trucades absents
Símptoma: augmenta la mètrica de fluxos descartats. A la sortida falten trucades conegudes.
Causa: el processament no pot seguir la taxa d’arribada. Els búfers de les cues es desborden.
Solució:
Augmenteu la capacitat de la cua i el cabal de processament:
voip:
stream_queue_buffer: 1000
tcp_performance_mode: "throughput"
max_goroutines: 2000
tcp_buffer_strategy: "ring"
Si les pèrdues persisteixen, considereu traslladar la càrrega a un desplegament distribuït amb Hunters dedicats (Capítol 7) per repartir el processament entre màquines.
Codis d’error TCP
| Codi | Significat | Acció |
|---|---|---|
| TCP-001 | Ha fallat la creació del flux | Reduïu max_goroutines o augmenteu el valor del sistema ulimit -n |
| TCP-002 | Desbordament del búfer | Activeu memory_optimization, reduïu max_tcp_buffers |
| TCP-003 | Temps d’espera del reassemblatge exhaurit | Augmenteu tcp_stream_timeout |
| TCP-004 | Format SIP no vàlid | Inspeccioneu el trànsit amb tcpdump; comproveu si hi ha missatges mal formats |
| TCP-005 | Esgotament dels recursos | Reinicieu amb tcp_performance_mode: memory |
Connectivitat distribuïda
Aquests problemes afecten la comunicació entre Hunter i processador i entre processadors. Consulteu el Capítol 6 per obtenir una visió general de l’arquitectura distribuïda.
Fallada de la negociació TLS
Símptoma: el Hunter no es pot connectar i mostra transport: authentication handshake failed o certificate verify failed.
Causa: problemes amb els certificats TLS. Els més habituals són:
- Certificat caducat: el període de validesa del certificat ha expirat.
- CA incorrecta:
--tls-cadel Hunter no coincideix amb la CA que ha signat el certificat del processador. - SAN absents: el certificat del processador no conté cap Subject Alternative Name que coincideixi amb l’adreça a la qual es connecta el Hunter.
- Discrepància de nom d’amfitrió: el Hunter es connecta per IP però el certificat només conté noms DNS (o a l’inrevés).
Diagnòstic:
Comproveu la caducitat del certificat i els SAN:
openssl x509 -in server.crt -noout -dates -ext subjectAltName
Proveu la connexió TLS manualment:
openssl s_client -connect processor.example.com:55555 -CAfile ca.crt
Comproveu si la CA coincideix:
openssl verify -CAfile ca.crt server.crt
Solució:
Si els certificats han caducat, regenereu-los. Consulteu el Capítol 13: Seguretat per veure els procediments de generació de certificats.
Si falten SAN, regenereu el certificat del servidor amb les entrades correctes. El SAN ha d’incloure tots els noms o IP que els Hunters utilitzen per connectar-se:
Exemple: fitxer d’extensions del certificat amb SAN:
cat > server-ext.conf <<EOF
subjectAltName = DNS:processor.example.com,DNS:processor,IP:10.0.1.50,IP:127.0.0.1
extendedKeyUsage = serverAuth
EOF
Si hi ha una discrepància de nom d’amfitrió, regenereu el certificat amb els SAN correctes o canvieu l’adreça --processor del Hunter perquè coincideixi amb el contingut del certificat.
Rebuig de TLS mutu (mTLS)
Símptoma: el Hunter es connecta però es desconnecta immediatament. Els registres del processador mostren client certificate required o bad certificate.
Causa: el processador està configurat per a TLS mutu (--tls-client-auth amb --tls-ca), però el Hunter no ha proporcionat cap certificat de client o el certificat de client no està signat per la CA esperada.
Solució:
Proporcioneu certificats de client al Hunter:
sudo lc hunt voip -i eth0 \
--processor processor:55555 \
--tls-cert hunter.crt \
--tls-key hunter.key \
--tls-ca ca.crt
Assegureu-vos que el certificat del Hunter està signat per la CA especificada a --tls-ca del processador.
El Hunter no pot arribar al processador
Símptoma: el Hunter informa de connection refused o context deadline exceeded.
Causa: problema de connectivitat de xarxa: el processador no escolta, un tallafoc bloqueja el port o falla la resolució DNS.
Diagnòstic:
Proveu la connectivitat bàsica:
nc -zv processor.example.com 55555
Comproveu la resolució DNS:
dig processor.example.com
Comproveu si el processador escolta:
ss -tlnp | grep 55555
Solució:
- Verifiqueu que el processador està en execució i escolta a l’adreça i port esperats.
- Comproveu les regles del tallafoc a totes dues bandes. El port gRPC per defecte és 55555.
- Si utilitzeu Docker o Kubernetes, verifiqueu les assignacions de ports i el descobriment de serveis.
El Hunter s’atura (control de flux)
Símptoma: el Hunter està connectat però deixa d’enviar paquets. Els registres mostren canvis de l’estat del control de flux a PAUSE o SLOW.
Causa: el processador està sobrecarregat. El control de flux funciona com està previst: el processador indica als Hunters que redueixin el ritme o facin una pausa quan les cues internes s’omplen. Els desencadenants habituals són escriptures PCAP lentes (coll d’ampolla d’E/S de disc) o acumulació de dades cap al processador ascendent.
Diagnòstic:
Comproveu l’estat del processador:
lc show status -P processor:55555 --tls-ca ca.crt
Comproveu l’E/S de disc al processador:
iostat -x 1 5
Comproveu la profunditat de la cua d’escriptura PCAP als registres del processador:
journalctl -u lippycat-processor --since "10 minutes ago" | grep -i "queue\|flow"
Solució:
Estats del control de flux i els seus llindars:
| Estat | Utilització de la cua | Comportament del node Hunter |
|---|---|---|
| CONTINUE | < 30% | Enviament normal |
| SLOW | 30% - 70% | Taxa de lots reduïda |
| PAUSE | 70% - 90% | Aturar l’enviament i desar en buffers locals |
| RESUME | Baixa del 30% | Reprèn l’enviament normal |
Per resoldre-ho:
- Coll d’ampolla de disc: moveu la sortida PCAP a un emmagatzematge més ràpid (SSD, tmpfs per a captures temporals).
- Coll d’ampolla de processament: escaleu horitzontalment afegint nodes processadors en una topologia jeràrquica (vegeu el Capítol 6).
- Pic temporal: espereu; el control de flux es reprendrà automàticament quan es buidi la cua.
Nota: la lentitud dels clients TUI no provoca control de flux als Hunters. Cada subscriptor TUI té un búfer independent i els clients lents es gestionen amb descarts selectius de paquets al canal del subscriptor. Consulteu el Capítol 8 per veure l’arquitectura del control de flux.
Reconnexió després d’una partició de xarxa
Símptoma: després d’una interrupció de xarxa, els Hunters no es reconnecten o es reconnecten però perden paquets durant la interrupció.
Causa: els Hunters es reconnecten automàticament amb espera exponencial (objectiu < 100 ms per a una reconnexió ràpida). Els paquets que arriben durant la desconnexió es perden tret que s’hagi activat l’emmagatzematge en búfer al disc.
Solució:
Activeu l’emmagatzematge en búfer al disc als Hunters per superar les interrupcions de xarxa:
sudo lc hunt voip -i eth0 \
--processor processor:55555 \
--disk-buffer \
--tls-ca ca.crt
Amb l’emmagatzematge en búfer al disc, el Hunter escriu en un búfer local de desbordament quan el processador és inaccessible i el buida després de la reconnexió.
Si els Hunters no es reconnecten en absolut, comproveu si s’han produït canvis persistents de DNS o encaminament durant la interrupció.
Resolució de problemes de GPU
L’acceleració GPU és opcional. El motor SIMD de CPU està sempre disponible i ofereix aproximadament 30.000 paquets/segon per a la cerca de patrons. Consulteu el Capítol 14: Optimització del rendiment per seleccionar el motor GPU.
Compatibilitat dels motors
| Plataforma | CUDA | OpenCL | SIMD (CPU) |
|---|---|---|---|
| GPU NVIDIA | Sí (millor opció) | Sí | Alternativa |
| GPU AMD | No | Sí (millor opció) | Alternativa |
| GPU Intel | No | Sí | Alternativa |
| Només CPU | No | No | Sempre funciona |
lippycat recorre automàticament a SIMD si no hi ha cap motor GPU disponible. No necessiteu una GPU per executar lippycat.
“No CUDA-capable device is detected”
Símptoma: lippycat compilat amb CUDA informa que no hi ha cap GPU disponible, especialment en portàtils amb gràfics híbrids (Intel + NVIDIA).
Causa: en portàtils NVIDIA Optimus, la gestió d’energia en temps d’execució del nucli pot apagar la GPU dedicada. La GPU existeix però no està inicialitzada.
Diagnòstic:
Comproveu si els mòduls NVIDIA del nucli estan carregats:
lsmod | grep nvidia
Comproveu si existeixen els nodes de dispositiu:
ls -l /dev/nvidia*
Comproveu la visibilitat del dispositiu PCI:
lspci | grep -i nvidia
Comproveu l’estat de la GPU (si nvidia-smi està disponible):
nvidia-smi
Solució (ràpida, sense reinici):
Forceu l’activació de la GPU mitjançant sysfs:
echo on | sudo tee /sys/bus/pci/devices/0000:01:00.0/power/control
Inicieu el dimoni de persistència NVIDIA:
sudo nvidia-persistenced --verbose
Activeu el mode de càlcul:
sudo nvidia-smi -pm 1
Substituïu 0000:01:00.0 per l’adreça PCI de la vostra GPU obtinguda amb lspci.
Solució (permanent, requereix reinici):
Desactiveu la gestió dinàmica d’energia. Creeu /etc/modprobe.d/nvidia-power.conf:
options nvidia NVreg_DynamicPowerManagement=0x00
Després regenereu initramfs i reinicieu:
Arch Linux / Manjaro:
sudo mkinitcpio -P
Debian / Ubuntu:
sudo update-initramfs -u
sudo reboot
Es detecta la GPU NVIDIA però CUDA falla
Símptoma: nvidia-smi mostra la GPU, però el motor CUDA de lippycat continua fallant.
Causa: pot estar carregat el controlador de codi obert nouveau en lloc del controlador propietari NVIDIA, o la versió del conjunt d’eines CUDA és incompatible.
Diagnòstic:
Comproveu si nouveau està carregat (entra en conflicte amb nvidia):
lsmod | grep nouveau
Comproveu l’entorn CUDA:
echo $CUDA_VISIBLE_DEVICES
Solució:
Si nouveau està carregat, bloquegeu-lo:
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
Reconstruïu initramfs a Arch Linux o Manjaro:
sudo mkinitcpio -P
A Debian o Ubuntu, utilitzeu sudo update-initramfs -u. Després reinicieu:
sudo reboot
Definiu les variables d’entorn CUDA:
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export CUDA_VISIBLE_DEVICES=0
Afegiu-les al perfil del vostre intèrpret d’ordres perquè siguin persistents.
Motor OpenCL no disponible
Símptoma: hi ha una GPU AMD o Intel però no es detecta el motor OpenCL.
Causa: les biblioteques d’execució OpenCL no estan instal·lades.
Solució:
Instal·leu l’entorn d’execució OpenCL adequat per a la vostra GPU:
AMD (ROCr):
sudo apt install rocm-opencl-runtime
A Arch Linux:
sudo pacman -S rocm-opencl-runtime
Intel:
sudo apt install intel-opencl-icd
A Arch Linux:
sudo pacman -S intel-compute-runtime
Verifiqueu-ho amb:
clinfo | head -20
Recurs a SIMD com a alternativa
Símptoma: s’esperava un motor GPU però lippycat utilitza SIMD de CPU.
Causa: el motor GPU no s’ha pogut inicialitzar i lippycat ha recorregut silenciosament a l’alternativa. És el comportament normal: SIMD és una alternativa fiable.
Diagnòstic:
Executeu-lo amb registres de depuració per veure la selecció del motor:
LOG_LEVEL=debug sudo lc sniff voip -i eth0 --gpu-backend auto 2>&1 | grep -i "gpu\|cuda\|opencl\|simd\|backend"
Solució:
Si necessiteu acceleració GPU, corregiu el problema subjacent de la GPU seguint les seccions anteriors. Si el rendiment SIMD és suficient (30K paquets/segon en cerca de patrons), no cal fer res. Per forçar explícitament un motor i veure l’error:
sudo lc sniff voip -i eth0 --gpu-backend cuda
Això fallarà amb un error descriptiu en lloc de recórrer silenciosament a l’alternativa.
Problemes específics de VoIP
La captura VoIP implica correlacionar la senyalització SIP amb els fluxos multimèdia RTP. Aquests problemes són específics dels modes sniff voip, hunt voip i tap voip. Consulteu el Capítol 4 per conèixer els fonaments de la captura VoIP.
Falten coincidències d’identitat LI en alguns paquets RTP
Si la intercepció directa per IP/CIDR funciona però una tasca LI basada en identitat omet RTP, comproveu els comptadors de resolució multimèdia i de supressió d’herència. Un punt final exacte que pertany a diverses trucades actives és ambigu; un punt final que no pertany a cap és desconegut. Tots dos resultats suprimeixen deliberadament l’herència d’identitat i preserven les coincidències directes IP/CIDR a nivell de paquet. Captureu tot l’intercanvi SIP/SDP i els dos trams multimèdia, i comproveu la reutilització dels punts finals NAT/SBC. No ho compenseu mai triant la trucada més nova o combinant tots els possibles propietaris.
Si augmenten x3_finalized_or_stale_suppressed o x3_buffered_discarded, ha arribat contingut o ha quedat emmagatzemat al búfer després de finalitzar la generació de la trucada. Comproveu la latència dels lots ascendents i la pressió de reordenació. Les marques de trucada tancada duren una hora per defecte i estan limitades a 100.000; l’augment de les expulsions per capacitat implica que la protecció pot durar menys sota pressió. Els avisos amb freqüència limitada contenen identificadors depurats o amb hash, de manera que cal utilitzar les diferències dels comptadors, i no el nombre d’avisos, per quantificar la situació.
Fluxos RTP absents
Símptoma: es detecten trucades SIP (INVITE, 200 OK visibles) però no es capturen paquets RTP. Els fitxers PCAP per trucada només contenen senyalització.
Causa:
- Filtre BPF massa restrictiu: el filtre captura SIP però exclou l’interval de ports RTP.
- RTP en ports inesperats: la negociació SDP especifica ports fora de l’interval esperat.
- Mode només UDP no activat: RTP utilitza UDP però la captura processa innecessàriament la sobrecàrrega TCP.
Diagnòstic:
Comproveu quins ports negocia SDP (mireu les línies m=):
sudo tcpdump -i eth0 -n -A port 5060 | grep "m=audio"
Comproveu si hi ha trànsit RTP en aquests ports:
sudo tcpdump -i eth0 -n udp portrange 10000-20000 -c 10
Solució:
Assegureu-vos que l’interval de ports RTP inclou els ports que utilitza la vostra centraleta:
sudo lc sniff voip -i eth0 --rtp-port-range 10000-20000
Si heu aplicat un filtre BPF personalitzat amb -f, verifiqueu que no exclou trànsit UDP a l’interval de ports RTP. En cas de dubte, elimineu el filtre BPF i deixeu que la detecció de protocols de lippycat gestioni el filtratge.
Àudio unidireccional (RTP només en una direcció)
Símptoma: el PCAP per trucada mostra paquets RTP en una sola direcció. L’altra direcció falta completament.
Causa:
- Travessa de NAT: un punt final es troba darrere de NAT i els seus paquets RTP tenen una IP d’origen diferent de l’anunciada a SDP. lippycat correlaciona RTP per parells IP:port de SDP; si NAT reescriu l’origen, la correlació falla.
- Encaminament asimètric: RTP circula per camins de xarxa diferents i el trànsit de retorn no passa pel punt de captura.
- Interfície incorrecta: l’RTP sortint utilitza una interfície diferent de la que s’està capturant.
Diagnòstic:
Compareu les línies SDP c= (connexió) amb les IP d’origen reals dels paquets:
Examineu les línies de connexió SDP:
sudo tcpdump -i eth0 -n -A port 5060 | grep "c=IN"
Compareu-les amb les IP d’origen reals d’RTP:
sudo tcpdump -i eth0 -n udp portrange 10000-20000 | head -20
Si SDP indica c=IN IP4 10.0.1.100 però l’RTP real prové de 203.0.113.50, hi intervé NAT.
Solució:
- Captureu amb
--interface anyper cobrir totes les interfícies. - Si el problema és NAT, captureu en un punt de la xarxa on totes dues direccions siguin visibles (p. ex., al mateix SBC o passarel·la multimèdia, o en un port de rèplica que vegi tots dos trams).
- En entorns amb NAT complex, considereu desplegar Hunters a totes dues bandes del límit NAT i agregar les dades en un processador.
No es detecta SIP sobre TCP
Símptoma: no es detecten les trucades SIP que utilitzen transport TCP, però SIP UDP funciona correctament.
Causa: SIP TCP requereix reassemblatge. Si un filtre BPF exclou TCP o només s’admeten ports SIP UDP, no es pot detectar SIP TCP. Altrament, el motor de reassemblatge TCP ha de funcionar correctament.
Solució:
-
Assegureu-vos que el filtre BPF i la configuració de
--sip-portinclouen el trànsit SIP TCP. -
Seleccioneu un mode de rendiment TCP adequat:
sudo lc sniff voip -i eth0 --tcp-performance-mode balanced -
Si el problema persisteix, consulteu la secció anterior Problemes de reassemblatge TCP.
Pèrdues de paquets amb un volum elevat de trucades
Símptoma: en entorns amb centenars de trucades simultànies, algunes trucades falten o són incompletes.
Causa: la cadena de processament de paquets no pot seguir la taxa d’arribada. Això es manifesta en desbordaments del búfer circular del nucli (es descarten paquets abans que lippycat els vegi) o saturació de les cues internes.
Diagnòstic:
Comproveu les estadístiques de pèrdues del nucli:
cat /proc/net/dev | grep eth0
Cerqueu desbordaments del búfer circular als registres del sistema:
dmesg | grep -i "drop\|overflow"
Solució:
-
Restringiu la captura als ports SIP i RTP coneguts perquè el nucli descarti el trànsit no relacionat:
sudo lc sniff voip -i eth0 --sip-port 5060 --rtp-port-range 10000-20000 -
En compilacions CUDA, activeu l’acceleració GPU per a la detecció de protocols:
sudo lc sniff voip -i eth0 --gpu-backend auto -
Per a un volum elevat sostingut, canvieu a una arquitectura distribuïda amb Hunters dedicats:
# Hunter handles capture and filtering sudo lc hunt voip -i eth0 --processor central:55555 --sip-port 5060 --tls-ca ca.crt # Processor handles analysis and PCAP writing lc process --listen :55555 --per-call-pcap --per-call-pcap-dir /var/capture/calls \ --tls-cert server.crt --tls-key server.key -
Augmenteu la mida del búfer circular del nucli per a la interfície de captura:
sudo ethtool -G eth0 rx 4096
Problemes de configuració
La configuració no té efecte
Símptoma: els canvis al fitxer de configuració no modifiquen el comportament de lippycat. Es continuen utilitzant els valors per defecte.
Causa: lippycat carrega la configuració en iniciar-se des d’un conjunt específic de camins. Si el fitxer és a la ubicació incorrecta, té errors de sintaxi YAML o s’ha modificat després de l’inici, els canvis no s’aplicaran.
Diagnòstic:
Comproveu quin fitxer de configuració s’està carregant:
lc show config
Valideu la sintaxi YAML:
python3 -c "import yaml; yaml.safe_load(open('config.yaml'))"
Solució:
-
Col·loqueu el fitxer de configuració en una de les ubicacions esperades (en ordre de prioritat):
$HOME/.config/lippycat/config.yaml$HOME/.config/lippycat.yaml$HOME/.lippycat.yaml
-
O especifiqueu-lo explícitament:
sudo lc sniff voip --config /etc/lippycat/config.yaml -
Reinicieu lippycat després de qualsevol canvi de configuració. La configuració es llegeix una sola vegada en iniciar.
Eines de diagnòstic
Registre de depuració
Activeu els registres detallats per a qualsevol ordre de lippycat:
LOG_LEVEL=debug sudo lc sniff voip -i eth0 2> debug.log
Filtreu la sortida dels registres per subsistemes concrets:
Problemes de reassemblatge TCP:
grep -i "tcp\|stream\|reassembl" debug.log
Anàlisi de SIP:
grep -i "sip\|invite\|call.id" debug.log
gRPC / connectivitat distribuïda:
grep -i "grpc\|connect\|tls\|handshake" debug.log
Selecció del motor GPU:
grep -i "gpu\|cuda\|opencl\|simd" debug.log
Supervisió dels recursos del sistema
Superviseu l’ús de recursos de lippycat:
watch -n 2 'ps -o pid,rss,vsz,%cpu,%mem,comm -p $(pgrep lc)'
Superviseu les estadístiques de la interfície de xarxa (pèrdues, errors):
watch -n 1 'ip -s link show eth0'
Superviseu l’E/S de disc (rellevant per a l’escriptura PCAP):
iostat -x 1
Superviseu els descriptors de fitxer oberts:
ls /proc/$(pgrep -f "lc ")/fd | wc -l
Diagnòstic de desplegaments distribuïts
Visió general de l’estat del processador:
lc show status -P processor:55555 --tls-ca ca.crt
Llisteu els Hunters connectats:
lc list hunters -P processor:55555 --tls-ca ca.crt
Mostreu la topologia de xarxa:
lc show topology -P processor:55555 --tls-ca ca.crt
Comproveu els filtres actius:
lc show filter -P processor:55555 --tls-ca ca.crt
Script de comprovació de l’estat
Un script bàsic de comprovació de l’estat per a la supervisió automatitzada:
#!/bin/bash
# lippycat-health-check.sh
PROC_NAME="lc"
# Check if lippycat is running
if ! pgrep -f "$PROC_NAME" > /dev/null; then
echo "CRITICAL: lippycat not running"
exit 2
fi
PID=$(pgrep -f "$PROC_NAME" | head -1)
# Check memory usage (threshold: 500 MB)
MEM_KB=$(ps -o rss= -p "$PID" | tr -d ' ')
MEM_MB=$((MEM_KB / 1024))
if [ "$MEM_MB" -gt 500 ]; then
echo "WARNING: High memory usage: ${MEM_MB} MB"
exit 1
fi
# Check CPU usage (threshold: 80%)
CPU=$(ps -o pcpu= -p "$PID" | tr -d ' ' | cut -d. -f1)
if [ "$CPU" -gt 80 ]; then
echo "WARNING: High CPU usage: ${CPU}%"
exit 1
fi
echo "OK: lippycat healthy (Memory: ${MEM_MB} MB, CPU: ${CPU}%)"
exit 0
Referència ràpida
Apèndix A: referència d’ordres
Aquest apèndix ofereix una referència completa de totes les ordres, subordres i indicadors de la CLI de lippycat. Per a tutorials i exemples d’ús, consulteu els capítols corresponents del manual.
Consell: executeu
lc <command> --helpper obtenir la informació més actualitzada dels indicadors de qualsevol ordre.
Arbre d’ordres
lc
├── sniff Capture packets (CLI output)
│ ├── voip VoIP-specific capture
│ ├── dns DNS-specific capture
│ ├── tls TLS-specific capture
│ ├── http HTTP-specific capture
│ ├── email Email-specific capture
│ └── radius RADIUS UDP capture
├── tap Standalone capture + processor
│ ├── voip VoIP standalone capture
│ ├── dns DNS standalone capture
│ ├── tls TLS standalone capture
│ ├── http HTTP standalone capture
│ ├── email Email standalone capture
│ └── radius RADIUS standalone capture
├── hunt Distributed edge capture
│ ├── voip VoIP hunter
│ ├── dns DNS hunter
│ ├── tls TLS hunter
│ ├── http HTTP hunter
│ ├── email Email hunter
│ └── radius RADIUS hunter
├── process Central aggregation node
├── watch Interactive TUI
│ ├── live Live capture TUI
│ ├── file PCAP file analysis TUI
│ └── remote Remote node monitoring TUI
├── list List resources
│ ├── interfaces List network interfaces
│ ├── hunters List connected hunters
│ └── filters List active filters
├── show Display diagnostics
│ ├── status Processor status
│ ├── hunter Specific hunter details
│ ├── topology Distributed topology
│ ├── filter Filter details
│ └── config Local configuration
├── set Configure resources
│ └── filter Create/update a filter
├── rm Remove resources
│ └── filter Remove a filter
├── migrate Offline encrypted store initialization/migration
│ ├── filter-store Managed filters (all/cli/processor/tap builds)
│ └── li-state Administrative state (LI builds only)
└── completion Shell completions
├── bash
├── zsh
├── fish
└── powershell
Indicadors globals
Aquests indicadors s’apliquen a totes les ordres.
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--config | -c | string | $HOME/.config/lippycat/config.yaml | Camí del fitxer de configuració |
--help | -h | Ajuda de l’ordre | ||
--version | -v | Mostra informació de versió |
Grups d’indicadors compartits
Diversos grups d’indicadors apareixen en múltiples ordres. Aquí es documenten una sola vegada i es referencien pel nom en cada apartat d’ordre.
Indicadors de captura
Utilitzats per sniff, hunt i tap per configurar la captura de paquets.
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--interface | -i | string | any | Interfície de xarxa on capturar |
--filter | -f | string | Expressió de filtre BPF (consulteu l’apèndix C) | |
--promisc / --promiscuous | -p | bool | false | Activa el mode promiscu |
--pcap-buffer-size | int | 16777216 | Mida en bytes de la memòria intermèdia PCAP del nucli (16 MB) |
Indicadors de client TLS
Utilitzats per les ordres que es connecten a un processador remot com a client.
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-ca | string | Fitxer de certificat CA per verificar el servidor | |
--tls-cert | string | Fitxer de certificat del client (per a mTLS) | |
--tls-key | string | Fitxer de clau privada del client (per a mTLS) | |
--tls-skip-verify | bool | false | Omet la verificació del certificat del servidor |
--tls-server-name | string | Sobreescriu el nom del servidor per a la verificació TLS | |
--insecure | bool | false | Desactiva TLS (bloquejat quan LIPPYCAT_PRODUCTION=true) |
Indicadors de servidor TLS
Utilitzats per process i tap per servir gRPC amb TLS.
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-cert | string | Fitxer de certificat del servidor | |
--tls-key | string | Fitxer de clau privada del servidor | |
--tls-ca | string | Certificat CA per verificar el client (mTLS) | |
--tls-client-auth | bool | false | Exigeix certificats de client (mTLS) |
TLS està activat per defecte a process i tap, tret que s’estableixi --insecure. Proporcioneu --tls-cert i --tls-key per servir amb xifratge.
Indicadors d’emmagatzematge gestionat
Aquests indicadors s’apliquen a process i a tots els protocols de tap. Les opcions de clau contenen referències a fitxers privats amb exactament 32 bytes en brut.
| Opció | Valor per defecte | Descripció |
|---|---|---|
--filter-file | Depèn del mode | Camí explícit de la instantània; per defecte, ~/.config/lippycat/filters.yaml o filters.enc. |
--filter-store-mode | auto | auto, yaml o encrypted; auto selecciona xifratge quan LI està activada. LI rebutja YAML explícit. |
--filter-store-key-id | Buit | ID de la clau activa de filtres; obligatori en mode xifrat. |
--filter-store-key-file | Buit | Fitxer de la clau activa de filtres; obligatori en mode xifrat. |
--filter-store-read-key | Buit | Clau anterior de filtres id=path, repetible, amb un màxim de quatre. |
--li-state-file | Buit | Només en compilacions LI; camí de la instantània administrativa xifrada, o desactivat si és buit. |
--li-state-key-id | Buit | ID de la clau administrativa activa; obligatori amb un fitxer d’estat. |
--li-state-key-file | Buit | Fitxer independent de la clau administrativa. |
--li-state-read-key | Buit | Clau administrativa anterior id=path, repetible, amb un màxim de quatre. |
--li-delivery-x3-spool-dir | Buit | Diari X3 xifrat independent; requereix estat xifrat i reconciliació ADMF a l’inici. |
--li-delivery-x3-spool-max-bytes | 0 | Pressupost positiu obligatori de disc assignat quan la persistència X3 està activada. |
--li-delivery-x3-spool-key-id | Buit | ID de la clau activa del diari X3. |
--li-delivery-x3-spool-key-file | Buit | Clau X3 independent i privada de 32 bytes en brut. |
--li-delivery-x3-spool-read-key | Buit | Clau X3 anterior id=path, repetible, amb un màxim de quatre. |
--li-delivery-x3-max-age | 0 | Retenció des de l’admissió original; ha de ser positiva per a X3 persistent. |
--li-delivery-x3-spool-export-manifest | Buit | Exporta les identitats X3 exactes retingudes a un fitxer privat. |
--li-delivery-x3-spool-replay-policy | hold | Política d’X3 recuperat: hold per a autorització o purge per a descart durador. |
--li-delivery-x3-spool-replay-manifest | Buit | Sol·licita reproducció històrica exacta després de la reconciliació ADMF actual. |
Les instantànies xifrades ja han d’estar inicialitzades o s’han de migrar explícitament amb el node aturat. lc migrate filter-store --init --destination PATH --key-id ID --key-file PATH crea un magatzem buit. El YAML existent requereix --source-format yaml --source PATH en lloc de --init. Les compilacions LI ofereixen lc migrate li-state amb les mateixes opcions d’inicialització i --source-format json per a l’estat antic. La conversió al mateix camí requereix --in-place; la recuperació després d’una interrupció utilitza l’ordre idèntica amb --resume. Consulteu la referència de migració fora de línia per a la preservació de l’origen i la gestió de l’assignador RADIUS.
Per a la rotació de claus d’instantànies en Linux, seleccioneu --source-format encrypted, proporcioneu els antics --source-key-id/--source-key-file actius i els nous --key-id/--key-file de sortida. Les referències anteriors --read-key pertanyen aleshores a l’origen. L’origen i la destinació han de compartir un directori pare privat; la rotació al mateix camí requereix --in-place. --max-working-bytes limita l’espai de treball assignat a la rotació (per defecte 134217728). La rotació LI preserva l’ancoratge opcional de l’assignador i rebutja --radius-state-file. Utilitzeu l’ordre idèntica amb --resume després d’una interrupció; actualitzeu personalment la configuració d’execució un cop completada correctament.
Opcions de connexió
Utilitzats per list filters, show, set filter i rm filter per connectar-se a un processador.
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Adreça del processador (host:port) | |
--insecure | bool | false | Desactiva TLS |
A més dels indicadors de client TLS anteriors.
Indicadors GPU
Utilitzats per les compilacions CUDA de sniff voip, hunt i tap per al filtratge accelerat per GPU. En compilacions sense CUDA aquests indicadors no es registren, excepte a watch live, que té els seus propis indicadors GPU locals.
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--gpu-backend | -g | string | auto | Motor GPU: auto, cuda, opencl, cpu-simd, disabled |
--gpu-batch-size | int | variable | Paquets per lot GPU (per defecte 1024 per a sniff, 100 per a hunt) | |
--gpu-enable | bool | true | Activa l’acceleració GPU (sniff voip, només compilacions CUDA) | |
--gpu-max-memory | string | Assignació màxima de memòria GPU | ||
--enable-voip-filter | bool | false | Activa el filtratge VoIP accelerat per GPU al node Hunter/Tap (només compilacions CUDA) |
Indicadors d’interfície virtual
Utilitzats per sniff, process i tap per a la sortida a una interfície de xarxa virtual.
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--virtual-interface | -V | bool | false | Activa la sortida a la interfície virtual |
--vif-name | string | lc0 | Nom de la interfície virtual | |
--vif-type | string | tap | Tipus d’interfície: tap o tun | |
--vif-buffer-size | int | 65536 | Mida en bytes de la memòria intermèdia d’escriptura | |
--vif-drop-privileges | string | Redueix els privilegis a aquest usuari després de crear la interfície | ||
--vif-netns | string | Espai de noms de xarxa de destinació | ||
--vif-replay-timing | bool | false | Reprodueix amb la temporització original dels paquets (només sniff) | |
--vif-startup-delay | duration | 3s | Retard abans d’escriure per permetre que s’hi connectin consumidors (només sniff) |
Indicadors de sortida PCAP
Utilitzats per tap i process per escriure els paquets capturats al disc.
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--write-file | string | Escriu tots els paquets en un únic fitxer PCAP | |
--per-call-pcap | bool | false | Escriu fitxers PCAP per trucada (VoIP) |
--per-call-pcap-dir | string | ./pcaps | Directori de fitxers PCAP per trucada |
--per-call-pcap-pattern | string | Patró de noms de fitxer per als PCAP per trucada | |
--auto-rotate-pcap | bool | false | Activa fitxers PCAP amb rotació automàtica |
--auto-rotate-pcap-dir | string | Directori de fitxers PCAP amb rotació | |
--auto-rotate-pcap-pattern | string | Patró de noms de fitxer per als PCAP amb rotació | |
--auto-rotate-max-size | string | Mida màxima del fitxer abans de la rotació | |
--auto-rotate-idle-timeout | duration | Tanca el fitxer després d’un període d’inactivitat | |
--pcap-command | string | Ordre que s’executa sobre els fitxers PCAP completats (marcador %pcap%) | |
--voip-command | string | Ordre que s’executa sobre les trucades VoIP completades (marcadors %callid%, %dirname%) | |
--command-concurrency | int | 10 | Màxim d’execucions simultànies d’ordres |
--command-timeout | duration | 30s | Temps d’espera per executar l’ordre |
Indicadors de registres de protocols estructurats
Utilitzats per sniff, process i tap. El registre roman desactivat fins que s’estableix --log-dir. Consulteu registres de protocols estructurats per als esquemes de flux, la semàntica de completesa, la rotació i les orientacions de privadesa.
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--event-queue-size | int | 20000 | Capacitat de la cua d’esdeveniments de protocol normalitzats |
--event-drop-policy | string | drop_new | Política de desbordament d’esdeveniments normalitzats |
--log-dir | string | Directori de fitxers de registre estructurats; activa el registre | |
--log-format | string | tsv | Format de sortida: tsv o json (JSONL) |
--log-streams | strings | conn,dns,ssl,http,smtp,files,radius | Fluxos activats |
--log-include-http-headers | bool | false | Preserva els mapes complets de capçaleres HTTP en els esdeveniments normalitzats |
--log-include-email-body-preview | bool | false | Permet previsualitzacions sensibles del cos de correus per a l’anàlisi de fitxers |
--log-rotate-interval | duration | 1h | Interval de rotació periòdica; 0 la desactiva |
--log-queue-size | int | 10000 | Capacitat de cua de cada flux de sortida |
--log-post-rotate-command | string | Ordre després de la rotació; %log% és el camí rotat | |
--log-emit-stage | string | terminal | Només process/tap: terminal, all o none |
--extract-files | bool | false | Extreu fitxers HTTP i SMTP amb límits |
--extract-files-dir | string | Directori de sortida obligatori quan l’extracció està activada | |
--extract-files-max-size | int64 | 10485760 | Màxim de bytes analitzats o extrets per fitxer |
--extract-files-total-size | int64 | 104857600 | Límit de bytes extrets durant la vida del procés |
Indicadors d’observació de xarxa
Aquests indicadors compartits configuren l’anàlisi a sniff, hunt, process, tap i watch; no activen el registre en fitxers. L’inventari està activat per defecte per a tots els amfitrions i serveis unicast observats elegibles. Utilitzeu --inventory-local-cidrs com a filtre opcional dels subjectes, o desactiveu l’inventari amb --inventory=false. Les claus YAML corresponents i les regles de validació es mostren a configuració d’observació de xarxa.
| Opció | Valor per defecte | Significat |
|---|---|---|
--inventory | true | Produeix observacions d’amfitrions i serveis coneguts |
--inventory-local-cidrs | sense establir | Filtre opcional de subjectes IPv4/IPv6 |
--inventory-max-entries | 16384 | Límit global d’entrades d’inventari |
--inventory-max-bytes | 8388608 | Límit global de bytes comptabilitzats d’inventari |
--inventory-scope-max-entries | 4096 | Límit d’entrades d’inventari per àmbit |
--inventory-scope-max-bytes | 2097152 | Límit de bytes comptabilitzats d’inventari per àmbit |
--inventory-retention | 24h | Finestra de deduplicació en temps de captura |
--dhcp-association-max-entries | 4096 | Límit d’entrades d’associació DHCP |
--dhcp-association-max-bytes | 4194304 | Límit de bytes comptabilitzats d’associació DHCP |
--dhcp-association-timeout | 2m | Temps d’espera d’associació DHCP segons el temps de captura |
--ntp-association-max-entries | 4096 | Límit d’entrades d’associació NTP |
--ntp-association-max-bytes | 4194304 | Límit de bytes comptabilitzats d’associació NTP |
--ntp-association-timeout | 30s | Temps d’espera d’associació NTP segons el temps de captura |
Indicadors LI
Utilitzats per process i tap. Requereixen l’etiqueta de compilació li (make processor-li, make tap-li o make build-li). Quan s’estableix --li-enabled, l’adreça d’escolta X1, el certificat del servidor, la clau del servidor i la CA del client ADMF són obligatoris; una configuració TLS X1 incompleta impedeix l’inici.
Consulteu el capítol 14: intercepció legal per obtenir més informació.
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--li-enabled | bool | false | Activa el suport d’intercepció legal |
--li-x1-listen | string | Adreça d’escolta HTTPS X1 (ADMF) | |
--li-x1-tls-cert | string | Certificat TLS del servidor X1 | |
--li-x1-tls-key | string | Clau privada TLS del servidor X1 | |
--li-x1-tls-ca | string | Obligatori quan LI està activada. Certificat CA utilitzat per verificar certificats de client ADMF | |
--li-delivery-tls-cert | string | Certificat del client de lliurament X2/X3 | |
--li-delivery-tls-key | string | Clau privada del client de lliurament X2/X3 | |
--li-delivery-tls-ca | string | Certificat CA de lliurament X2/X3 (verificació MDF) | |
--li-delivery-queue-size | int | 10000 | Màxim de PDU X2/X3 en cua per destinació |
--li-delivery-send-timeout | duration | 5s | Temps d’espera de cada escriptura de lliurament |
--li-delivery-reconnect-initial-backoff | duration | 500ms | Espera progressiva inicial de reconnexió MDF |
--li-delivery-reconnect-max-backoff | duration | 5s | Espera progressiva màxima de reconnexió MDF |
--li-delivery-keepalive-idle | duration | 15s | Temps d’inactivitat abans dels sondejos TCP keepalive |
--li-delivery-keepalive-interval | duration | 5s | Interval de sondeig TCP keepalive |
--li-delivery-keepalive-count | int | 3 | Sondejos fallits abans de desconnectar |
--li-delivery-shutdown-timeout | duration | 10s | Temps màxim de buidatge de la cua LI durant l’aturada |
--li-admf-endpoint | string | URL de l’extrem HTTPS ADMF | |
--li-admf-tls-cert | string | Certificat del client per a la connexió ADMF | |
--li-admf-tls-key | string | Clau privada del client per a la connexió ADMF | |
--li-admf-tls-ca | string | Certificat CA per verificar el servidor ADMF | |
--li-admf-keepalive | duration | 30s | Interval keepalive ADMF (0 = desactivat) |
--li-admf-sync-on-startup | bool | true | Consultar l’estat a l’ADMF en iniciar-se |
--li-admf-sync-timeout | duration | 30s | Temps d’espera de sincronització d’estat a l’inici |
--li-admf-reconcile-interval | duration | 5m | Interval de conciliació periòdica ADMF (0 = desactivat) |
Ordres
lc sniff
Captura i mostra paquets d’una interfície de xarxa o d’un fitxer PCAP. La sortida s’escriu a stdout en el format especificat.
lc sniff [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--interface | -i | string | any | Interfície de xarxa on capturar |
--filter | -f | string | Expressió de filtre BPF | |
--promiscuous | -p | bool | false | Activa el mode promiscu |
--read-file | -r | string | Llegeix paquets d’un fitxer PCAP | |
--write-file | -w | string | Escriu paquets en un fitxer PCAP | |
--format | string | json | Format de sortida: json o text | |
--quiet | -q | bool | false | Suprimeix la sortida que no correspon a paquets |
A més dels indicadors d’interfície virtual i dels indicadors de registres de protocols estructurats.
Consulteu el capítol 4: captura CLI amb lc sniff.
lc sniff voip
Captura específica de VoIP amb anàlisi SIP/RTP, seguiment de trucades i acceleració GPU opcional.
lc sniff voip [flags]
Hereta tots els indicadors de lc sniff i afegeix:
Filtratge VoIP
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--sip-user | string | Filtra per usuari SIP | ||
--sip-port | -S | string | Ports de senyalització SIP, separats per comes | |
--rtp-port-range | -R | string | Interval de ports RTP (p. ex., 10000-20000) |
--udp-only encara existeix per compatibilitat amb versions anteriors, però està ocult i obsolet en els modes VoIP perquè pot perdre trànsit SIP TCP. Preferiu --sip-port i --rtp-port-range per restringir el BPF.
Rendiment TCP
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tcp-performance-mode | string | balanced | Mode TCP: balanced, throughput, latency, memory |
--tcp-max-goroutines | int | 0 | Llindar orientatiu d’avís de goroutines de flux (0 = utilitza el valor per defecte); no rebutja fluxos |
--tcp-* | Diversos indicadors d’ajust del reassemblatge TCP |
Acceleració GPU
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--gpu-backend | -g | string | auto | Motor GPU: auto, cuda, opencl, cpu-simd, disabled |
--gpu-batch-size | int | 1024 | Paquets per lot GPU | |
--gpu-enable | bool | true | Activa l’acceleració GPU | |
--gpu-max-memory | string | Assignació màxima de memòria GPU |
Sortida PCAP
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--pcap-grace-period | duration | 5s | Període de gràcia abans de tancar fitxers PCAP de trucada després del final de la trucada |
Consulteu el capítol 4: captura CLI amb lc sniff i el capítol 13: optimització del rendiment.
lc sniff dns
Captura específica de DNS amb filtratge de dominis i detecció de túnels.
lc sniff dns [flags]
Hereta tots els indicadors de lc sniff i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--dns-port | string | 53 | Ports DNS que se supervisen |
--domain | string | Filtra per nom de domini | |
--domains-file | string | Fitxer que conté dominis (un per línia) | |
--detect-tunneling | bool | true | Activa la detecció de túnels DNS |
--track-queries | bool | true | Segueix parelles de consulta/resposta |
--udp-only | bool | false | Captura només UDP |
lc sniff tls
Captura específica de TLS amb filtratge SNI i empremtes JA3/JA4.
lc sniff tls [flags]
Hereta tots els indicadors de lc sniff i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-port | string | 443 | Ports TLS que se supervisen |
--sni | string | Filtra per SNI (Server Name Indication) | |
--sni-file | string | Fitxer que conté valors SNI | |
--ja3 | string | Filtra per empremta JA3 | |
--ja3-file | string | Fitxer que conté empremtes JA3 | |
--ja3s | string | Filtra per empremta JA3S (servidor) | |
--ja3s-file | string | Fitxer que conté empremtes JA3S | |
--ja4 | string | Filtrar per empremta JA4 | |
--ja4-file | string | Fitxer que conté empremtes JA4 | |
--track-connections | bool | true | Segueix l’estat de la connexió TLS |
lc sniff http
Captura específica d’HTTP amb filtratge de capçaleres i contingut.
lc sniff http [flags]
Hereta tots els indicadors de lc sniff i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--http-port | string | 80,8080,8000,3000,8888 | Ports HTTP que se supervisen |
--host | string | Filtra per capçalera Host | |
--hosts-file | string | Fitxer que conté noms d’amfitrió | |
--path | string | Filtra per camí d’URL | |
--paths-file | string | Fitxer que conté camins d’URL | |
--method | string | Filtra per mètode HTTP | |
--status | string | Filtra per codi d’estat de resposta | |
--user-agent | string | Filtra per capçalera User-Agent | |
--user-agents-file | string | Fitxer que conté patrons User-Agent | |
--content-type | string | Filtra per capçalera Content-Type | |
--content-types-file | string | Fitxer que conté valors Content-Type | |
--keywords-file | string | Fitxer que conté filtres de paraules clau del cos | |
--capture-body | bool | false | Captura el cos de la petició/resposta HTTP |
--max-body-size | int | 65536 | Mida màxima del cos que es captura (bytes) |
--track-requests | bool | true | Segueix parelles de petició/resposta |
--tls-keylog | string | Fitxer de registre de claus TLS per desxifrar HTTPS | |
--tls-keylog-pipe | string | Canonada amb nom per al registre de claus TLS |
lc sniff email
Captura de protocols de correu amb filtratge d’adreces i assumptes. Compatible amb SMTP, POP3 i IMAP.
lc sniff email [flags]
Hereta tots els indicadors de lc sniff i afegeix:
Configuració de ports
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--smtp-port | string | 25,587,465 | Ports SMTP |
--pop3-port | string | 110,995 | Ports POP3 |
--imap-port | string | 143,993 | Ports IMAP |
--protocol | string | all | Filtre de protocol: all, smtp, pop3, imap |
Filtratge d’adreces
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--sender | string | Filtra per adreça del remitent | |
--senders-file | string | Fitxer que conté adreces de remitents | |
--recipient | string | Filtra per adreça del destinatari | |
--recipients-file | string | Fitxer que conté adreces de destinataris | |
--address | string | Filtra per qualsevol adreça (remitent o destinatari) | |
--addresses-file | string | Fitxer que conté adreces |
Filtratge de contingut
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--subject | string | Filtra per assumpte | |
--subjects-file | string | Fitxer que conté assumptes | |
--command | string | Filtra per ordre SMTP | |
--mailbox | string | Filtra per bústia IMAP | |
--capture-body | bool | false | Captura el cos del missatge |
--max-body-size | int | 65536 | Mida màxima del cos que es captura (bytes) |
--keywords-file | string | Fitxer que conté filtres de paraules clau del cos | |
--track-sessions | bool | true | Segueix sessions de protocol |
lc sniff radius
Captura trànsit visible d’autenticació i comptabilització RADIUS UDP amb associació limitada de peticions/respostes i criteris d’identitat exactes.
lc sniff radius [flags]
Hereta tots els indicadors de lc sniff i afegeix els indicadors RADIUS compartits. També admet -w / --write-file per a la sortida PCAP de paquets seleccionats.
lc tap
Node de captura autònom que combina les capacitats de Hunter i de processador. Captura paquets localment, executa anàlisi de protocols, ofereix una interfície TUI per gRPC i escriu fitxers PCAP, sense requerir un processador separat.
lc tap [flags]
Captura
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--interface | -i | string | any | Interfícies de xarxa on capturar |
--filter | -f | string | Expressió de filtre BPF | |
--promisc | -p | bool | false | Activa el mode promiscu |
--pcap-buffer-size | int | 16777216 | Mida de la memòria intermèdia PCAP del nucli (bytes) |
Agrupació en lots
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--buffer-size | -b | int | 10000 | Mida de la memòria intermèdia interna de paquets |
--sip-buffer-size | int | 0 | Mida de prioritat SIP; 0 coincideix automàticament amb --buffer-size | |
--batch-size | int | 100 | Paquets per lot | |
--batch-timeout | duration | 100ms | Temps màxim d’espera del lot |
Servidor
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--listen | -l | string | :55555 | Adreça d’escolta gRPC per a clients Hunter i TUI |
--id | -I | string | Identificador del node | |
--max-hunters | int | 0 | Màxim de nodes Hunter simultanis (0 = il·limitat) | |
--max-subscribers | int | 100 | Màxim de subscriptors TUI simultanis (0 = il·limitat) | |
--event-allow-sensitive-fields | bool | false | Permet peticions autoritzades de camps sensibles HTTP, SMTP i de fitxers | |
--event-allow-file-metadata | bool | false | Permet peticions autoritzades de metadades de fitxers; mai de contingut de fitxers | |
--event-ingress-profile | string | memory-only | Confirmació d’esdeveniments de nodes descendents: memory-only o reliable | |
--event-ingress-wal-dir | string | WAL d’entrada recuperable; obligatori per al perfil fiable | ||
--event-ingress-wal-max-bytes | int64 | 1073741824 | Mida màxima del WAL d’entrada d’esdeveniments | |
--event-ingress-max-batch-bytes | int | 4194304 | Mida màxima del lot d’esdeveniments acceptat | |
--insecure | bool | false | Desactiva TLS per al servidor gRPC | |
--api-key-auth | bool | false | Activa l’autenticació amb clau API | |
--debug-listen | string | Activa l’escolta pprof, només en bucle local per defecte | ||
--debug-allow-non-loopback | bool | false | Permet l’escolta pprof en adreces que no són de bucle local |
Transmissió cap a l’amunt
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Adreça del processador ascendent per a la transmissió | |
--forward-mode | string | packets | Representació cap a l’amunt: packets o events | |
--event-fallback-to-packets | bool | false | Permet explícitament recórrer a paquets si falla la negociació d’esdeveniments | |
--event-delivery-profile | string | reliable | Transmissió d’esdeveniments reliable o memory-only | |
--event-spool-dir | string | /var/tmp/lippycat-tap-event-spool | Cua persistent recuperable d’esdeveniments cap a l’amunt | |
--event-spool-max-bytes | uint | 1073741824 | Límit de bytes de la cua persistent (0 = il·limitat) | |
--event-spool-max-age | duration | 24h | Límit d’antiguitat de la cua persistent (0 = il·limitat) | |
--event-spool-exhaustion-policy | string | drop_oldest | drop_oldest o drop_new |
Detecció
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--detect | -d | bool | true | Activa la detecció de protocols |
--filter-file | string | Fitxer de definició de filtres | ||
--no-filter-policy | string | deny | Comportament quan no existeixen filtres: allow o deny |
A més dels indicadors de sortida PCAP, indicadors de servidor TLS, indicadors d’interfície virtual, indicadors GPU i indicadors de registres de protocols estructurats.
Consulteu el capítol 9: mode autònom amb lc tap.
lc tap voip
Captura autònoma específica de VoIP amb anàlisi SIP/RTP i PCAP per trucada.
lc tap voip [flags]
Hereta tots els indicadors de lc tap i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--sip-user | string | Filtra per usuari SIP | |
--sip-port | string | Restricció opcional de ports SIP, separats per comes | |
--rtp-port-range | string | Interval de ports RTP | |
--tcp-performance-mode | string | balanced | Mode TCP: minimal, balanced, high_performance, low_latency |
--tcp-reassembly-shards | int | 1 | Nombre de reassembladors TCP dividits per flux |
--tcp-max-streams | int | 0 | Límit de connexions SIP TCP actives amb memòria intermèdia (totes dues direccions per ranura; 0 = il·limitat) |
--pattern-algorithm | string | auto | Algorisme de cerca de patrons: auto, linear, aho-corasick |
--pattern-buffer-mb | int | 64 | Mida de la memòria intermèdia de patrons (MB) |
--tcp-max-streams també utilitza voip.max_streams en la configuració. Un valor positiu descarta intencionadament dades SIP dels fluxos nous o reiniciats rebutjats. Les connexions descartades encara poden ocupar entrades del conjunt de reassemblatge fins que es tanquen o es buiden. Això no limita la memòria total del procés.
lc tap dns
Captura autònoma específica de DNS amb detecció de túnels.
lc tap dns [flags]
Hereta tots els indicadors de lc tap i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--dns-port | string | 53 | Ports DNS que se supervisen |
--domain | string | Filtra per patró de domini | |
--domains-file | string | Fitxer que conté patrons de domini | |
--detect-tunneling | bool | true | Activa la detecció de túnels DNS |
--udp-only | bool | false | Captura només DNS UDP |
--tunneling-command | string | Ordre que s’executa quan es detecten túnels | |
--tunneling-threshold | float | 0.7 | Llindar de puntuació de túnels DNS |
--tunneling-debounce | duration | 5m | Temps mínim entre alertes per domini |
lc tap http
Captura autònoma específica d’HTTP.
lc tap http [flags]
Hereta tots els indicadors de lc tap i afegeix els mateixos indicadors de filtratge HTTP que lc sniff http: --http-port, --host, --path, --method, --status, --user-agent, --content-type, indicadors de fitxers de patrons, --capture-body, --max-body-size, --tls-keylog i --tls-keylog-pipe.
lc tap tls
Captura autònoma específica de TLS.
lc tap tls [flags]
Hereta tots els indicadors de lc tap i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-port | string | 443 | Ports TLS que se supervisen |
--sni | string | Filtra per patró SNI | |
--sni-file | string | Fitxer que conté patrons SNI |
lc tap email
Captura autònoma específica de correu.
lc tap email [flags]
Hereta tots els indicadors de lc tap i afegeix els mateixos indicadors de filtratge de correu que lc sniff email: indicadors de protocol i ports, filtres d’adreça/remitent/destinatari/assumpte, indicadors de fitxers de patrons, --mailbox, --command, --capture-body, --max-body-size i --keywords-file.
lc tap radius
Captura RADIUS autònoma amb sortides de processador, incloent-hi PCAP, registres estructurats i visualització TUI remota.
lc tap radius [flags]
Hereta tots els indicadors de lc tap i afegeix els indicadors RADIUS compartits. Les compilacions LI poden activar independentment el lliurament X2 autoritzat de format 11.
lc hunt
Node Hunter per a captura perifèrica distribuïda. Captura paquets i els transmet a un node processador per gRPC.
lc hunt [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador (host:port) |
--forward-mode | string | packets | Representació cap a l’amunt: packets o events | |
--event-fallback-to-packets | bool | false | Permet explícitament recórrer a paquets si falla la negociació d’esdeveniments | |
--event-delivery-profile | string | reliable | Transmissió d’esdeveniments reliable o memory-only | |
--event-spool-dir | string | /var/tmp/lippycat-event-spool | Cua persistent recuperable d’esdeveniments | |
--event-spool-max-bytes | uint | 1073741824 | Límit de bytes de la cua persistent (0 = il·limitat) | |
--event-spool-max-age | duration | 24h | Límit d’antiguitat de la cua persistent (0 = il·limitat) | |
--event-spool-exhaustion-policy | string | drop_oldest | drop_oldest o drop_new | |
--id | -I | string | Identificador del node Hunter | |
--interface | -i | string | any | Interfícies de xarxa on capturar |
--filter | -f | string | Expressió de filtre BPF | |
--promisc | -p | bool | false | Activa el mode promiscu |
--buffer-size | -b | int | 10000 | Mida de la memòria intermèdia interna de paquets |
--sip-buffer-size | int | 0 | Mida de prioritat SIP; 0 coincideix automàticament amb --buffer-size | |
--batch-size | int | 64 | Paquets per lot | |
--batch-timeout | duration | 100ms | Temps màxim d’espera del lot | |
--batch-queue-size | int | 1000 | Profunditat de la cua de lots (0 utilitza per defecte 1000) | |
--pcap-buffer-size | int | 16777216 | Mida de la memòria intermèdia PCAP del nucli (bytes) | |
--disk-buffer | bool | false | Activa la memòria intermèdia en disc per a la contrapressió | |
--disk-buffer-dir | string | Directori dels fitxers de memòria intermèdia en disc | ||
--disk-buffer-max-mb | int | 1024 | Mida màxima de la memòria intermèdia en disc (MB) | |
--enable-voip-filter | bool | false | Activa el filtratge de paquets VoIP | |
--gpu-backend | -g | string | auto | Motor GPU |
--gpu-batch-size | int | 100 | Paquets per lot GPU | |
--no-filter-policy | string | deny | Comportament quan no existeixen filtres: allow o deny | |
--debug-listen | string | Activa l’escolta pprof, només en bucle local per defecte | ||
--debug-allow-non-loopback | bool | false | Permet l’escolta pprof en adreces que no són de bucle local | |
--insecure | bool | false | Desactiva TLS |
A més dels indicadors de client TLS (--tls-ca, --tls-cert, --tls-key, --tls-skip-verify).
Consulteu el capítol 7: captura perifèrica amb lc hunt.
lc hunt voip
Node Hunter específic de VoIP amb filtratge i memòria intermèdia de trucades SIP/RTP.
lc hunt voip [flags]
Hereta tots els indicadors de lc hunt i afegeix:
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--sip-port | -S | string | Restricció opcional de ports SIP, separats per comes | |
--rtp-port-range | -R | string | Interval de ports RTP | |
--pattern-algorithm | string | auto | Cerca de patrons: auto, linear, aho-corasick | |
--pattern-buffer-mb | int | 64 | Mida de la memòria intermèdia de patrons (MB) | |
--tcp-sip-idle-timeout | duration | Temps d’espera d’inactivitat per a connexions SIP TCP | ||
--tcp-max-streams | int | 0 | Límit de connexions SIP TCP actives amb memòria intermèdia (totes dues direccions per ranura; 0 = il·limitat) |
--udp-only està ocult i obsolet per als nodes Hunter VoIP; utilitzeu --sip-port i --rtp-port-range en lloc seu.
--tcp-max-streams també utilitza voip.max_streams en la configuració. Un valor positiu descarta intencionadament dades SIP dels fluxos nous o reiniciats rebutjats. Les connexions descartades encara poden ocupar entrades del conjunt de reassemblatge fins que es tanquen o es buiden. Això no limita la memòria total del procés.
lc hunt dns
Node Hunter específic de DNS amb filtratge de dominis.
lc hunt dns [flags]
Hereta tots els indicadors de lc hunt i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--dns-port | string | 53 | Ports DNS que se supervisen |
--udp-only | bool | false | Captura només UDP |
lc hunt http
Node Hunter específic d’HTTP amb filtratge perifèric.
lc hunt http [flags]
Hereta tots els indicadors de lc hunt i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--http-port | string | 80,8080,8000,3000,8888 | Ports HTTP que se supervisen |
--host | string | Patrons d’amfitrió | |
--path | string | Patrons de camí | |
--method | string | Mètodes HTTP | |
--status | string | Codis d’estat | |
--keywords | string | Paraules clau del cos/URL | |
--capture-body | bool | false | Activar la captura del cos |
--max-body-size | int | 65536 | Mida màxima de captura del cos |
--tls-keylog | string | Fitxer de registre de claus TLS | |
--tls-keylog-pipe | string | Canonada amb nom del registre de claus TLS |
lc hunt tls
Node Hunter específic de TLS.
lc hunt tls [flags]
Hereta tots els indicadors de lc hunt i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-port | string | 443 | Ports TLS que se supervisen |
lc hunt email
Node Hunter específic de correu amb filtratge perifèric.
lc hunt email [flags]
Hereta tots els indicadors de lc hunt i afegeix:
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--protocol | string | all | Protocol de correu: smtp, imap, pop3 o all |
--smtp-port | string | 25,587,465 | Ports SMTP |
--imap-port | string | 143,993 | Ports IMAP |
--pop3-port | string | 110,995 | Ports POP3 |
--sender | string | Patrons de remitent | |
--recipient | string | Patrons de destinatari | |
--subject | string | Patrons d’assumpte | |
--mailbox | string | Patrons de bústia IMAP | |
--command | string | Patrons d’ordres IMAP/POP3 | |
--keywords | string | Paraules clau del cos/assumpte | |
--capture-body | bool | false | Activar la captura del cos |
--max-body-size | int | 65536 | Mida màxima de captura del cos |
lc hunt radius
Captura trànsit RADIUS seleccionat a la perifèria i transmet paquets i metadades validades d’observació i procedència a un processador. La visualització i els registres habituals utilitzen una projecció amb les credencials ocultades.
lc hunt radius [flags]
Hereta tots els indicadors de lc hunt i afegeix els indicadors RADIUS compartits.
lc process
Node processador per a agregació central. Rep paquets dels nodes Hunter per gRPC, fa anàlisi de protocols, escriu fitxers PCAP i serveix clients TUI.
lc process [flags]
Servidor
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--listen | -l | string | :55555 | Adreça d’escolta gRPC |
--id | -I | string | Identificador del processador | |
--max-hunters | -m | int | 100 | Màxim de nodes Hunter connectats |
--max-subscribers | int | 100 | Màxim de subscriptors TUI | |
--event-allow-sensitive-fields | bool | false | Permet peticions autoritzades de camps sensibles HTTP, SMTP i de fitxers | |
--event-allow-file-metadata | bool | false | Permet peticions autoritzades de metadades de fitxers; mai de contingut de fitxers | |
--event-ingress-profile | string | memory-only | Perfil de confirmació d’esdeveniments: memory-only o reliable | |
--event-ingress-wal-dir | string | WAL d’entrada recuperable; obligatori per al perfil fiable | ||
--event-ingress-wal-max-bytes | int64 | 1073741824 | Mida màxima del WAL d’entrada d’esdeveniments | |
--event-ingress-max-batch-bytes | int | 4194304 | Mida màxima del lot d’esdeveniments acceptat | |
--insecure | bool | false | Desactiva TLS | |
--api-key-auth | bool | false | Activa l’autenticació amb clau API | |
--debug-listen | string | Activa l’escolta pprof, només en bucle local per defecte | ||
--debug-allow-non-loopback | bool | false | Permet l’escolta pprof en adreces que no són de bucle local |
Detecció i filtratge
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--enable-detection | -d | bool | true | Activa la detecció de protocols |
--filter-file | -f | string | Fitxer de definició de filtres |
Transmissió cap a l’amunt
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Processador ascendent per a topologia jeràrquica | |
--forward-mode | string | packets | Representació cap a l’amunt: packets o events | |
--event-fallback-to-packets | bool | false | Permet explícitament recórrer a paquets si falla la negociació d’esdeveniments | |
--event-delivery-profile | string | reliable | Transmissió d’esdeveniments reliable o memory-only | |
--event-spool-dir | string | /var/tmp/lippycat-processor-event-spool | Cua persistent recuperable d’esdeveniments cap a l’amunt | |
--event-spool-max-bytes | uint | 1073741824 | Límit de bytes de la cua persistent (0 = il·limitat) | |
--event-spool-max-age | duration | 24h | Límit d’antiguitat de la cua persistent (0 = il·limitat) | |
--event-spool-exhaustion-policy | string | drop_oldest | drop_oldest o drop_new |
Estadístiques
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--stats | -s | bool | true | Activa la recollida d’estadístiques |
Registre de claus TLS
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-keylog-dir | string | Directori de fitxers de registre de claus TLS dels nodes Hunter |
A més dels indicadors de sortida PCAP, indicadors de servidor TLS, indicadors d’interfície virtual, indicadors de registres de protocols estructurats i indicadors LI.
Consulteu el capítol 8: agregació central amb lc process.
lc watch
Interfície interactiva de terminal per supervisar la captura de paquets. Per defecte utilitza el mode en viu si no s’especifica cap subordre.
lc watch [subcommand] [flags]
Indicadors persistents (heretats per totes les subordres):
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--buffer-size | int | 10000 | Mida de la memòria intermèdia de paquets de la TUI |
--max-calls | int | Màxim de trucades VoIP mostrades |
A més dels indicadors de client TLS.
Consulteu el capítol 5: captura interactiva amb lc watch.
lc watch live
Captura de paquets en viu a la TUI. Requereix privilegis elevats.
lc watch live [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--interface | -i | string | any | Interfície de xarxa on capturar |
--filter | -f | string | Expressió de filtre BPF | |
--promiscuous | -p | bool | false | Activa el mode promiscu |
--enable-gpu | bool | false | Activa l’acceleració GPU | |
--gpu-backend | string | Motor GPU | ||
--gpu-batch-size | int | Paquets per lot GPU |
lc watch file
Analitza fitxers PCAP a la TUI. Accepta un o més fitxers PCAP (visualització combinada).
lc watch file <file> [file...] [flags]
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--tls-keylog | string | Fitxer de registre de claus TLS per desxifrar |
lc watch remote
Supervisa nodes processadors remots a la TUI. Es connecta per gRPC.
lc watch remote [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Adreça del processador (host:port) per connectar-s’hi directament | |
--nodes-file | -n | string | Fitxer YAML amb la llista de nodes remots | |
--insecure | bool | false | Desactiva TLS |
Consulteu el capítol 11: supervisió TUI remota.
lc list interfaces
Mostra les interfícies de xarxa disponibles amb les adreces i l’estat.
lc list interfaces
| Opció | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
--all | bool | false | Inclou ponts, interfícies virtuals i fonts especials de captura |
--names | bool | false | Mostra un nom d’interfície per línia |
--json | bool | false | Mostra les metadades d’interfície en JSON |
--check | bool | false | Comprova l’accés de captura a les interfícies de xarxa mostrades |
La taula mostra NAME, TYPE, STATE, ADDRESSES i NOTES; les llistes llargues d’adreces continuen en línies addicionals. El bucle local, els túnels, les interfícies inactives i les interfícies de xarxa desconegudes continuen visibles; any només apareix quan pcap l’ofereix. Les interfícies de ruta per defecte continuen visibles encara que el seu tipus normalment s’ocultaria. Linux proporciona tipus basats en el sistema operatiu, estat operatiu i indicacions de ruta per defecte IPv4/IPv6 de la taula principal d’encaminament; aquestes indicacions no avaluen l’encaminament per polítiques. Els altres sistemes utilitzen les metadades disponibles i recorren a valors desconeguts quan cal.
--names no es pot combinar amb --json ni --check. El JSON conté una matriu interfaces amb name, type, state i default_route, a més dels opcionals description i addresses. Les entrades d’adreça contenen ip i un prefix_len opcional. El resultat de nivell superior també inclou hidden_count i warnings opcional.
La llista no comprova els permisos de captura. --check obre les interfícies de xarxa mostrades sense mode promiscu i les tanca sense llegir paquets. S’ometen les fonts especials de captura. Afegeix resultats CAPTURE (available, unavailable, skipped) i detalls d’error a NOTES; el JSON utilitza capture_access i capture_error opcional. Els errors d’accés per interfície no fan fallar l’ordre. Els errors d’enumeració retornen un codi diferent de zero i escriuen diagnòstics a stderr, amb un objecte d’error JSON si s’utilitza --json.
Consulteu llistar interfícies.
lc list filters
Mostra els filtres actius d’un node processador.
lc list filters [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Adreça del processador | |
--hunter | string | Filtra per ID de node Hunter |
A més dels indicadors de client TLS i --insecure.
Consulteu el capítol 10: administració CLI.
lc list hunters
Mostra els nodes Hunter connectats a un node processador.
lc list hunters [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | Adreça del processador |
A més dels indicadors de client TLS i --insecure.
Consulteu el capítol 10: administració CLI.
lc show status
Mostra l’estat del node processador.
lc show status [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
A més dels indicadors de client TLS i --insecure.
lc show hunter
Mostra els detalls d’un node Hunter específic.
lc show hunter [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
--id | string | obligatori | ID del node Hunter que es mostra |
A més dels indicadors de client TLS i --insecure.
lc show topology
Mostra la topologia distribuïda (nodes Hunter, processadors, connexions).
lc show topology [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
A més dels indicadors de client TLS i --insecure.
lc show filter
Mostra els detalls d’un filtre específic.
lc show filter [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
--id | string | ID del filtre que es mostra |
A més dels indicadors de client TLS i --insecure.
lc show config
Mostra la configuració local actual (resolta a partir del fitxer de configuració, l’entorn i els valors per defecte).
lc show config
Sense indicadors addicionals.
lc set filter
Crea o actualitza un filtre en un node processador.
lc set filter [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
--id | string | ID del filtre (generat automàticament si s’omet) | ||
--type | -t | string | Tipus de filtre | |
--pattern | string | Patró del filtre | ||
--description | string | Descripció llegible per persones | ||
--enabled | bool | true | Activa el filtre | |
--hunters | strings | ID dels nodes Hunter de destinació | ||
--file | -f | string | Fitxer YAML per a filtres per lots o filtres RADIUS estructurats | |
--revision | uint64 | 1 | Revisió del filtre RADIUS | |
--radius-mac-profile | string | Perfil d’interpretació de MAC de subscriptor | ||
--radius-operator-scope | string | Àmbit del desplegament de l’operador/NAS | ||
--radius-profile-revision | string | Revisió del perfil de desplegament | ||
--radius-origin-node | string | Restringeix l’àmbit RADIUS a un node d’origen | ||
--radius-source | string | Restringeix l’àmbit RADIUS a una font de captura |
A més dels indicadors de client TLS i --insecure.
Consulteu el capítol 10: administració CLI.
lc rm filter
Elimina un filtre d’un node processador.
lc rm filter [flags]
| Opció | Forma curta | Tipus | Valor per defecte | Descripció |
|---|---|---|---|---|
--processor | -P | string | obligatori | Adreça del processador |
--id | string | ID del filtre que s’elimina | ||
--file | -f | string | Carrega ID de filtres des d’un fitxer |
A més dels indicadors de client TLS i --insecure.
lc completion
Genera scripts de compleció de l’intèrpret d’ordres.
lc completion [bash|zsh|fish|powershell]
Sense indicadors addicionals. Escriu l’script de compleció a stdout; carregueu-lo a la configuració de l’intèrpret d’ordres.
Exemples:
Bash:
lc completion bash > ~/.local/share/bash-completion/completions/lc
Zsh:
lc completion zsh > "${fpath[1]}/_lc"
Fish:
lc completion fish > ~/.config/fish/completions/lc.fish
PowerShell:
lc completion powershell > lc.ps1
Variables d’entorn
| Variable | Descripció |
|---|---|
LIPPYCAT_PRODUCTION | Establiu-lo a true per exigir TLS en totes les connexions gRPC. Bloqueja l’indicador --insecure. |
SSLKEYLOGFILE | Camí del fitxer de registre de claus TLS per desxifrar el trànsit TLS capturat. Consulteu el capítol 12: seguretat. |
Codis de sortida
| Codi | Significat |
|---|---|
0 | Èxit |
1 | Error general (fallada d’execució, connexió rebutjada, etc.) |
2 | Error d’ús (indicadors invàlids, arguments obligatoris absents) |
Opcions de captura VoIP eBPF
Aquests indicadors només existeixen a lc hunt voip i lc tap voip:
--rtp-ebpf-shadow-sample-every té el valor per defecte 1 i ha de ser positiu. Mostreja aproximadament una de cada N identitats de trama amb la mateixa regla d’elegibilitat al nucli i a l’espai d’usuari; les còpies idèntiques comparteixen elegibilitat i es compta cada còpia elegible. L’opció no activa l’admissió. L’evidència incompleta o ambigua mai no demostra paritat per a tot el trànsit.
| Opció | Valor per defecte | Descripció |
|---|---|---|
--rtp-ebpf | false | Activa l’admissió de mitjans seleccionats a nivell de sòcol Linux. |
--rtp-ebpf-mode | enforce | enforce o shadow; no activa la funció. |
--rtp-ebpf-failure-policy | open | Política d’error d’actualització durant l’execució, open o closed. |
Amb --rtp-ebpf, ometeu --rtp-port-range per aprendre els extrems RTP/RTCP de l’SDP de les trucades seleccionades. --sip-port és opcional; establiu-lo per restringir la captura de senyalització (per exemple, --sip-port 5060,5080). Un interval RTP configurat explícitament encara exclou els extrems de mitjans apresos fora d’aquest interval.
Activar funcionalitat no disponible és un error d’inici. Es conserven les restriccions explícites --filter, --sip-port, --udp-only i --rtp-port-range; els intervals RTP per defecte generats no limiten els extrems seleccionats apresos. Consulteu captura VoIP i els membres de configuració.
Referència de configuració
Aquest apèndix documenta totes les claus de configuració del fitxer de configuració YAML de lippycat. Totes les claus mostrades aquí corresponen a la sortida de lc show config, que mostra la configuració activa (valors per defecte combinats amb qualsevol fitxer de configuració i sobreescriptures CLI) en format JSON.
Ubicacions del fitxer de configuració
lippycat cerca un fitxer de configuració a les ubicacions següents, per ordre de prioritat:
- Camí especificat amb l’indicador
-c/--config(prioritat màxima) $HOME/.config/lippycat/config.yaml(preferida)$HOME/.config/lippycat.yaml(estàndard XDG)$HOME/.lippycat.yaml(heretada)
S’utilitza el primer fitxer trobat. Només es carrega un fitxer de configuració.
Regles de precedència
Quan una mateixa opció s’especifica en diversos llocs, lippycat aplica aquest ordre de precedència (guanya la més alta):
- Indicadors CLI — Sempre tenen prioritat sobre la resta
- Variables d’entorn — Sobreescriuen els valors del fitxer de configuració (amb el prefix
LIPPYCAT_) - Fitxer de configuració — Valors YAML del fitxer de configuració
- Valors per defecte — Valors integrats mostrats en aquesta referència
Consultar la configuració activa
Per veure la configuració activa completa (amb totes les fonts combinades):
lc show config
Això genera JSON. Per convertir-lo mentalment en camins YAML, substituïu l’imbricament per sagnat (p. ex., el JSON {"voip": {"sip_ports": "5060"}} esdevé voip.sip_ports o, en format de fitxer YAML, voip: / sip_ports: "5060").
Variables d’entorn
Les claus de configuració es poden establir amb variables d’entorn segons el patró LIPPYCAT_<SECTION>_<KEY>. Les claus imbricades utilitzen guions baixos:
export LIPPYCAT_VOIP_SIP_PORTS="5060,5061"
export LIPPYCAT_PROCESSOR_LISTEN_ADDR=":55555"
L’opció següent exigeix xifratge TLS:
export LIPPYCAT_PRODUCTION=true
Emmagatzematge gestionat
Utilitzeu processor o tap en lloc de ROLE a continuació. Tots els protocols de Tap utilitzen les mateixes opcions. El mode de filtres se selecciona segons l’activació efectiva de LI, independentment de si el binari inclou suport LI.
| Tecla | Valor per defecte | Descripció |
|---|---|---|
ROLE.filter_file | Buit | Camí explícit de la instantània; altrament se selecciona ~/.config/lippycat/filters.yaml o filters.enc segons el mode. |
ROLE.filter_store.mode | auto | auto selecciona YAML amb LI desactivada i xifratge amb LI activada; yaml explícit amb LI activada és invàlid. |
ROLE.filter_store.key_id | Buit | ID de la clau activa de filtres; obligatori en mode xifrat. |
ROLE.filter_store.key_file | Buit | Referència a un fitxer privat de clau de 32 bytes en brut; només en mode xifrat. |
ROLE.filter_store.read_keys | [] | Fins a quatre referències anteriors id=path amb ID i material diferents. |
ROLE.li.state_file | Buit | Camí de la instantània administrativa xifrada; buit desactiva la persistència administrativa on la reproducció no l’exigeix. |
ROLE.li.state_key_id | Buit | ID de la clau administrativa activa. |
ROLE.li.state_key_file | Buit | Obligatori amb persistència d’estat; fitxer privat independent de clau de 32 bytes en brut. |
ROLE.li.state_read_keys | [] | Fins a quatre referències administratives anteriors id=path. |
ROLE.li.delivery_x2_spool_key_id | Buit | ID de la clau X2 activa; buit preserva el mode de compatibilitat existent amb només fitxer de clau. |
ROLE.li.delivery_x2_spool_legacy_key_id | Buit | ID de clau configurat explícitament per a registres antics sense ID de clau integrats. |
ROLE.li.delivery_x2_spool_read_keys | [] | Fins a quatre referències X2 anteriors id=path. |
ROLE.li.delivery_x3_spool_dir | Buit | Activa persistència X3 xifrada independent; requereix estat LI i reconciliació ADMF a l’inici. |
ROLE.li.delivery_x3_spool_max_bytes | 0 | Pressupost positiu explícit de disc assignat, incloent-hi reserves pendents i de control. |
ROLE.li.delivery_x3_spool_key_file | Buit | Clau X3 privada de 32 bytes en brut, proveïda independentment. |
ROLE.li.delivery_x3_spool_key_id | Buit | ID de la clau X3 activa. |
ROLE.li.delivery_x3_spool_read_keys | [] | Com a màxim quatre referències X3 anteriors id=path. |
ROLE.li.delivery_x3_max_age | 0 | Durada de retenció des de l’admissió original; ha de ser positiva quan la persistència X3 està activada. |
ROLE.li.delivery_x3_spool_replay_policy | hold | L’X3 recuperat roman retingut per a autorització explícita; purge el descarta de manera duradora. |
ROLE.li.delivery_x3_spool_replay_manifest | Buit | Manifest privat d’aprovació de versió 2 per a registres X3 històrics exactes. |
ROLE.li.delivery_x3_spool_export_manifest | Buit | Exportació privada d’identitats X3 retingudes per a revisió. |
Les opcions LI requereixen una compilació LI. Els magatzems xifrats activats han d’utilitzar claus proveïdes independentment, incloses les claus de lectura anteriors. L’opció existent ROLE.li.delivery_x2_spool_key_file encara fa referència a una clau X2 de 32 bytes en brut; les referències de clau no fan cap reescriptura fora de línia.
Els valors CLI sobreescriuen els valors explícits d’entorn amb prefix de rol, que sobreescriuen el YAML, inclosos els valors buits. Per exemple, LIPPYCAT_PROCESSOR_FILTER_STORE_KEY_FILE i LIPPYCAT_TAP_LI_STATE_KEY_FILE estableixen referències a fitxers. Els valors d’entorn de claus anteriors són un únic registre CSV, mentre que el YAML utilitza una llista de cadenes id=path. Els bytes de clau en brut no pertanyen a la configuració.
Atureu el node per inicialitzar o migrar instantànies xifrades; consulteu ordres d’emmagatzematge gestionat. Els magatzems xifrats absents o invàlids impedeixen l’inici. El YAML continua sent editable amb el node aturat i es carrega en reiniciar; utilitzeu les ordres de gestió per canviar els filtres d’un node en execució. Quan existeixen tots dos fitxers de filtres per defecte, trieu el mode desitjat i un camí explícit.
Opcions globals
Aquestes claus de nivell superior s’apliquen a totes les ordres.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
pcap_buffer_size | integer | 16777216 (16 MB) | Mida en bytes de la memòria intermèdia del nucli per a captura de paquets. Els valors més grans redueixen els descarts de paquets amb càrrega alta. |
sip_buffer_size | integer | 0 | Capacitat genèrica de prioritat SIP per a captura en viu. 0 coincideix automàticament amb packet_buffer_size; els valors positius la sobreescriuen. |
pcap_timeout_ms | integer | 200 | Temps d’espera en mil·lisegons de les lectures pcap. Els valors més baixos redueixen la latència; els més alts milloren l’eficiència dels lots. |
promiscuous | boolean | false | Activa el mode promiscu en les interfícies de captura. Quan és true, la interfície captura tot el trànsit del segment, no només l’adreçat a l’amfitrió. |
Capacitat del detector de protocols
Aquestes claus limiten l’estat conservat pel detector de protocols. Amb un límit positiu, inserir una clau nova quan és ple expulsa un lot amb el 10% d’entrades més antigues (amb un mínim d’una) abans d’admetre la clau. Un valor zero o inferior desactiva l’expulsió per límit.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
detector.max_flows | integer | 100000 | Màxim de contextos de flux actius. Els valors més baixos redueixen la memòria i la pausa d’expulsió, però conserven menys historial de protocols amb estat amb cardinalitat alta. |
detector.max_cache_entries | integer | 100000 | Màxim de resultats de detecció en cau. Els valors més baixos redueixen la memòria però provoquen més reclassificació quan el conjunt de treball supera el límit. |
detector.max_sip_ip_pairs | integer | 100000 | Màxim d’associacions de parelles IP SIP; els valors no positius utilitzen el valor per defecte. Expulsa l’observació SIP més antiga quan és ple. |
Consulteu optimització del rendiment per als ajustos en producció i la interpretació de telemetria.
Registres de protocols estructurats
Aquestes claus configuren els registres opcionals de protocols normalitzats de sniff, process i tap. Establir logs.dir activa la sortida a fitxers. Consulteu registres de protocols estructurats per als esquemes de flux, el comportament jeràrquic, la rotació i les orientacions de privadesa.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
events.queue_size | integer | 20000 | Capacitat de la cua d’esdeveniments de protocol normalitzats. |
events.drop_policy | string | "drop_new" | Política de desbordament d’esdeveniments normalitzats. |
logs.dir | string | "" | Directori de registres estructurats; un valor buit desactiva el registre. |
logs.format | string | "tsv" | Codificació de sortida: "tsv" o "json" (JSONL). |
logs.streams | list | [conn, dns, ssl, http, smtp, files, radius] | Fluxos de registre activats. |
logs.include_http_headers | boolean | false | Preserva els mapes complets de capçaleres HTTP en els esdeveniments normalitzats. |
logs.include_email_body_preview | boolean | false | Permet previsualitzacions potencialment sensibles del cos de correus per a l’anàlisi de fitxers. |
logs.rotate_interval | duration | "1h" | Interval de rotació periòdica; 0 desactiva la rotació periòdica. |
logs.queue_size | integer | 10000 | Capacitat de la cua de sortida de cada flux. |
logs.emit_stage | string | "terminal" | process/tap: "terminal", "all" o "none". |
logs.post_rotate_command | string | "" | Ordre després de la rotació; %log% s’expandeix al camí rotat amb citació segura. |
files.extract | boolean | false | Extreu contingut de fitxers HTTP i SMTP amb límits. |
files.extract_dir | string | "" | Directori d’extracció; obligatori quan l’extracció està activada. |
files.max_size | integer | 10485760 | Màxim de bytes analitzats o extrets per fitxer. |
files.total_size | integer | 104857600 | Màxim de bytes extrets durant la vida del procés. |
Configuració d’observació de xarxa
Aquestes opcions compartides s’apliquen a l’anàlisi de paquets de Hunter, processador/Tap, sniff, TUI local/fora de línia i client de supervisió, independentment del registre en fitxers. L’inventari està activat per defecte; una llista CIDR buida inclou tots els amfitrions i serveis unicast observats elegibles. Establiu events.inventory.enabled a false per desactivar-lo. Els CIDR configurats filtren opcionalment els subjectes de l’inventari i classifiquen els extrems de connexió com a locals; una llista buida no marca totes les adreces com a locals. Els límits per àmbit no poden superar els globals; tots els límits d’estat, finestres de retenció i temps d’espera d’associació han de ser positius.
| Tecla | Valor per defecte | Significat |
|---|---|---|
events.inventory.enabled | true | Produeix observacions d’amfitrions i serveis coneguts |
events.inventory.local_cidrs | [] | Filtre opcional de subjectes IPv4/IPv6 |
events.inventory.max_entries | 16384 | Límit global d’entrades d’inventari |
events.inventory.max_bytes | 8388608 | Límit global de bytes comptabilitzats d’inventari |
events.inventory.max_entries_per_scope | 4096 | Límit d’entrades d’inventari per àmbit |
events.inventory.max_bytes_per_scope | 2097152 | Límit de bytes comptabilitzats d’inventari per àmbit |
events.inventory.retention | 24h | Finestra de deduplicació en temps de captura |
events.dhcp.max_entries | 4096 | Límit d’entrades d’associació DHCP |
events.dhcp.max_bytes | 4194304 | Límit de bytes comptabilitzats d’associació DHCP |
events.dhcp.timeout | 2m | Temps d’espera d’associació DHCP segons el temps de captura |
events.ntp.max_entries | 4096 | Límit d’entrades d’associació NTP |
events.ntp.max_bytes | 4194304 | Límit de bytes comptabilitzats d’associació NTP |
events.ntp.timeout | 30s | Temps d’espera d’associació NTP segons el temps de captura |
Els quatre noms de flux opcionals són dhcp, ntp, known_hosts i known_services; logs.streams conserva els set fluxos per defecte existents. Consulteu DHCP, NTP i inventaris locals per a la granularitat de registre, l’evidència, la privadesa i el comportament d’estat limitat.
Configuració de captura de protocols
Aquests apartats configuren l’anàlisi específica de protocols. DNS, correu, HTTP i TLS utilitzen l’espai de noms lc sniff <protocol> mostrat a continuació; RADIUS utilitza un espai de noms compartit entre sniff radius, hunt radius i tap radius. Les opcions controlen els ports, els criteris de coincidència, la correlació i la captura opcional de contingut.
dns — Captura DNS
Utilitzat per lc sniff dns. Consulteu captura CLI amb lc sniff per a l’ús.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
dns.ports | string | "53" | Llista separada per comes de ports DNS que se supervisen. |
dns.udp_only | boolean | false | Captura només trànsit DNS UDP (omet DNS TCP). |
dns.track_queries | boolean | true | Segueix parelles de consulta/resposta DNS per correlacionar-les. |
dns.detect_tunneling | boolean | true | Activa les heurístiques de detecció de túnels DNS. |
dns.domain_pattern | string | "" | Patró d’expressió regular per filtrar per nom de domini. Buit significa tots els dominis. |
dns.domains_file | string | "" | Camí del fitxer que conté patrons de domini (un per línia). |
email — Captura de correu
Utilitzat per lc sniff email. Compatible amb els protocols SMTP, IMAP i POP3.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
email.smtp_ports | string | "25,587,465" | Ports SMTP que se supervisen. |
email.imap_ports | string | "143,993" | Ports IMAP que se supervisen. |
email.pop3_ports | string | "110,995" | Ports POP3 que se supervisen. |
email.protocol | string | "all" | Filtre de protocol: "all", "smtp", "imap" o "pop3". |
email.track_sessions | boolean | true | Segueix l’estat de sessió de correu entre paquets. |
email.capture_body | boolean | false | Captura el contingut del cos dels correus. |
email.max_body_size | integer | 65536 | Mida màxima de captura del cos en bytes. |
email.sender_pattern | string | "" | Patró d’expressió regular per filtrar per adreça del remitent. |
email.senders_file | string | "" | Camí del fitxer que conté patrons de remitent. |
email.recipient_pattern | string | "" | Patró d’expressió regular per filtrar per adreça del destinatari. |
email.recipients_file | string | "" | Camí del fitxer que conté patrons de destinatari. |
email.address_pattern | string | "" | Patró d’expressió regular per trobar coincidències en qualsevol adreça (remitent o destinatari). |
email.addresses_file | string | "" | Camí del fitxer que conté patrons d’adreça. |
email.subject_pattern | string | "" | Patró d’expressió regular per filtrar per línia d’assumpte. |
email.subjects_file | string | "" | Camí del fitxer que conté patrons d’assumpte. |
email.command_pattern | string | "" | Patró d’expressió regular per filtrar per ordre SMTP/IMAP. |
email.mailbox_pattern | string | "" | Patró d’expressió regular per filtrar per nom de bústia. |
email.keywords_file | string | "" | Camí del fitxer que conté paraules clau de contingut. |
http — Captura HTTP
Utilitzat per lc sniff http. Compatible amb HTTP/1.x amb desxifratge TLS opcional.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
http.ports | string | "80,8080,8000,3000,8888" | Ports HTTP que se supervisen. |
http.track_requests | boolean | true | Segueix parelles de petició/resposta HTTP. |
http.capture_body | boolean | false | Captura el contingut del cos HTTP. |
http.max_body_size | integer | 65536 | Mida màxima de captura del cos en bytes. |
http.methods | string | "" | Mètodes HTTP separats per comes que es filtren (p. ex., "GET,POST"). Buit significa tots. |
http.status_codes | string | "" | Codis d’estat separats per comes que es filtren (p. ex., "200,404,500"). Buit significa tots. |
http.host_pattern | string | "" | Patró d’expressió regular per filtrar per capçalera Host. |
http.hosts_file | string | "" | Camí del fitxer que conté patrons d’amfitrió. |
http.path_pattern | string | "" | Patró d’expressió regular per filtrar per camí de petició. |
http.paths_file | string | "" | Camí del fitxer que conté patrons de camí. |
http.user_agent_pattern | string | "" | Patró d’expressió regular per filtrar per capçalera User-Agent. |
http.user_agents_file | string | "" | Camí del fitxer que conté patrons User-Agent. |
http.content_type_pattern | string | "" | Patró d’expressió regular per filtrar per capçalera Content-Type. |
http.content_types_file | string | "" | Camí del fitxer que conté patrons Content-Type. |
http.keywords_file | string | "" | Camí del fitxer que conté paraules clau de contingut. |
http.tls_keylog | string | "" | Camí del fitxer de registre de claus TLS (format SSLKEYLOGFILE) per desxifrar trànsit HTTPS. |
http.tls_keylog_pipe | string | "" | Camí d’una canonada amb nom per transmetre dades de registre de claus TLS. |
tls — Captura TLS
Utilitzat per lc sniff tls. Captura negociacions TLS i extreu empremtes.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tls.ports | string | "443" | Ports TLS que se supervisen. |
tls.track_connections | boolean | true | Segueix l’estat de la connexió TLS. |
tls.sni_pattern | string | "" | Patró d’expressió regular per filtrar per SNI (Server Name Indication). |
tls.sni_file | string | "" | Camí del fitxer que conté patrons SNI. |
tls.ja3 | string | "" | Resums JA3 separats per comes amb els quals es busca coincidència. |
tls.ja3_file | string | "" | Camí del fitxer que conté resums JA3. |
tls.ja3s | string | "" | Resums JA3S (servidor) separats per comes amb els quals es busca coincidència. |
tls.ja3s_file | string | "" | Camí del fitxer que conté resums JA3S. |
tls.ja4 | string | "" | Empremtes JA4 separades per comes amb les quals es busca coincidència. |
tls.ja4_file | string | "" | Camí del fitxer que conté empremtes JA4. |
radius — Captura RADIUS
RADIUS utilitza un apartat de configuració compartit entre sniff radius, hunt radius i tap radius, en lloc de còpies amb prefix d’ordre. Consulteu la taula completa d’indicadors/claus/valors per defecte i el seu exemple YAML. Les claus d’entorn utilitzen LIPPYCAT_RADIUS_, per exemple LIPPYCAT_RADIUS_OPERATOR_SCOPE=operator-a/nas-a i LIPPYCAT_RADIUS_TRANSACTION_TIMEOUT=30s. Els ports de captura addicionals complementen UDP 1812/1813; els perfils seleccionen atributs concrets i mai no fan consultes a l’inventari.
Les opcions RADIUS exclusives de LI utilitzen l’apartat compartit li.radius i es documenten a la configuració POI.
Configuració del motor VoIP
L’apartat voip configura el motor central d’anàlisi VoIP utilitzat en totes les ordres de captura (sniff voip, hunt voip, tap voip). És l’apartat de configuració més extens i cobreix anàlisi SIP/RTP, reassemblatge TCP, acceleració GPU i gestió de connectors.
Per als detalls dels perfils de rendiment TCP, consulteu optimització del rendiment.
Configuració bàsica de VoIP
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.sip_ports | string | "" | Ports SIP separats per comes. Buit utilitza la detecció per defecte. |
voip.rtp_port_ranges | string | "" | Intervals de ports RTP (p. ex., "10000-20000"). Buit utilitza la detecció per defecte. |
voip.udp_only | boolean | false | Captura VoIP antiga només UDP. L’indicador CLI corresponent està ocult i obsolet; preferiu sip_ports i rtp_port_ranges per restringir els filtres BPF sense perdre SIP TCP. |
voip.pattern_algorithm | string | "auto" | Algorisme de cerca de patrons: "auto", "linear" o "aho-corasick". |
voip.pattern_buffer_mb | integer | 64 | Pressupost de memòria per a memòries intermèdies de cerca de patrons en MB. |
voip.max_filename_length | integer | 100 | Longitud màxima dels noms de fitxer PCAP generats. |
Gestió de trucades
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.call_expiration_time | duration | "1h0m0s" | Temps després del qual caduquen les trucades inactives. |
voip.call_id_detection_timeout | duration | "30s" | Temps d’espera per detectar l’ID de trucada a partir del paquet inicial. |
voip.janitor_cleanup_interval | duration | "30s" | Interval de neteja de trucades i recursos caducats. |
voip.max_goroutines | integer | 1000 | Llindar orientatiu d’avisos de goroutines de processament de fluxos TCP; no imposa un límit. |
voip.log_goroutine_limit_interval | duration | "30s" | Interval de registre d’avisos del llindar de goroutines. |
Reassemblatge TCP
Aquestes opcions controlen el reassemblatge de fluxos TCP per a SIP sobre TCP. tcp_performance_mode estableix valors raonables per a tots els paràmetres TCP; sobreescriviu opcions individuals només quan calgui.
voip.max_streams limita les connexions SIP TCP actives amb memòria intermèdia quan és positiu; totes dues direccions comparteixen una ranura d’admissió. El valor per defecte 0 és il·limitat. En arribar al límit, es rebutgen les connexions noves o els intents de reactivació de connexions completament inactives i es descarten les seves dades SIP. Les connexions descartades encara poden ocupar entrades del conjunt de reassemblatge fins que es tanquen o es buiden, de manera que això no limita les entrades del conjunt ni la memòria total del procés. tap voip i hunt voip rebutgen valors negatius.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.tcp_performance_mode | string | "balanced" | Perfil TCP de sniff voip: "balanced", "throughput", "latency" o "memory". tap.voip.tcp_performance_mode té noms de perfil específics de Tap. Consulteu optimització del rendiment. |
voip.max_tcp_buffers | integer | 10000 | Màxim de memòries intermèdies de flux TCP. |
voip.max_streams | integer | 0 | Màxim de connexions SIP TCP actives amb memòria intermèdia, totes dues direccions per ranura; 0 = il·limitat. Amb un límit positiu, es rebutgen les connexions noves o els intents de reactivació de connexions completament inactives. |
voip.tcp_memory_limit | integer | 104857600 (100 MB) | Límit de memòria per al reassemblatge TCP en bytes. |
voip.tcp_batch_size | integer | 32 | Nombre de segments TCP que es processen per lot. |
voip.tcp_io_threads | integer | 4 | Nombre de fils d’E/S per al processament TCP. |
voip.tcp_buffer_pool_size | integer | 1000 | Mida del conjunt de memòries intermèdies TCP. |
voip.tcp_buffer_max_age | duration | "5m0s" | Antiguitat màxima d’una memòria intermèdia TCP abans de la neteja forçada. |
voip.tcp_buffer_strategy | string | "adaptive" | Estratègia d’assignació de memòria intermèdia: "fixed", "adaptive" o "ring". |
voip.tcp_compression_level | integer | 1 | Nivell de compressió d’emmagatzematge de memòries intermèdies TCP (0=cap, 1=ràpid, 9=millor). |
voip.tcp_assembler_max_pages | integer | 100 | Màxim de pàgines del reassemblador per al reassemblatge de fluxos TCP. |
voip.tcp_stream_timeout | duration | "10m0s" | Temps d’espera de fluxos TCP inactius. |
voip.tcp_stream_max_queue_time | duration | "2m0s" | Temps màxim que un paquet pot esperar a la cua de fluxos. |
voip.tcp_sip_idle_timeout | duration | "2m0s" | Temps d’espera d’inactivitat específic de fluxos SIP TCP. |
voip.tcp_opening_timeout | duration | "5m0s" | Temps d’espera de connexions TCP en estat d’obertura. |
voip.tcp_established_timeout | duration | "30m0s" | Temps d’espera de connexions TCP establertes. |
voip.tcp_closing_timeout | duration | "5m0s" | Temps d’espera de connexions TCP en estat de tancament. |
voip.tcp_cleanup_interval | duration | "1m0s" | Interval de neteja de recursos TCP. |
voip.tcp_latency_optimization | boolean | false | Activa el processament TCP de baixa latència (augmenta l’ús de CPU). |
voip.stream_queue_buffer | integer | 500 | Mida de la memòria intermèdia de la cua de processament de fluxos TCP. |
voip.enable_state_tcp_timeouts | boolean | false | Activa temps d’espera TCP segons l’estat (diferents temps per estat de connexió). |
Control de flux
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.enable_backpressure | boolean | true | Activa la contrapressió quan el processament no segueix la taxa de captura. |
voip.enable_auto_tuning | boolean | true | Ajusta automàticament els paràmetres interns segons els patrons de trànsit. |
voip.enable_call_aware_timeout | boolean | false | Utilitza temps d’espera que tenen en compte les trucades i s’allarguen durant les trucades actives. |
voip.memory_optimization | boolean | false | Activa l’optimització agressiva de memòria (pot reduir el cabal). |
Acceleració GPU
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.gpu_enable | boolean | true | Activa l’acceleració GPU per a la cerca de patrons. Recorre a la CPU si no hi ha GPU disponible. |
voip.gpu_backend | string | "auto" | Motor GPU: "auto", "cuda", "opencl", "cpu-simd" o "disabled". |
voip.gpu_batch_size | integer | 1024 | Nombre de paquets per lot de processament GPU. |
voip.gpu_max_memory | integer | 0 | Memòria GPU màxima en bytes (0 = il·limitat). |
Mètriques i supervisió
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
voip.metrics_enabled | boolean | false | Activa la recollida de mètriques. |
voip.monitoring_enabled | boolean | false | Activa la supervisió durant l’execució. |
voip.monitoring_update_interval | duration | "30s" | Interval d’actualització de mètriques de supervisió. |
voip.enable_runtime_metrics | boolean | true | Recull mètriques del sistema d’execució de Go. |
voip.enable_system_metrics | boolean | false | Recull mètriques del sistema (CPU, memòria, disc). |
voip.tracing_enabled | boolean | false | Activa el seguiment distribuït. |
Configuració de nodes
hunter — Node Hunter
Els nodes Hunter capturen paquets a la perifèria de la xarxa i els transmeten a un processador. Consulteu captura perifèrica amb lc hunt per a l’ús.
Configuració bàsica
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.id | string | "" | Identificador del node Hunter. Es genera automàticament a partir del nom d’amfitrió si és buit. |
hunter.hunter_id | string | "" | Àlies de hunter.id. |
hunter.processor_addr | string | "" | Adreça del processador al qual connectar-se (p. ex., "processor:55555"). |
hunter.interfaces | list | ["any"] | Interfícies de xarxa on capturar. |
hunter.bpf_filter | string | "" | Expressió de filtre BPF per al filtratge de paquets al nucli. Consulteu la referència de filtres BPF. |
hunter.buffer_size | integer | 10000 | Mida de la memòria intermèdia interna de paquets (nombre de paquets). |
hunter.sip_buffer_size | integer | 0 | Capacitat de la via prioritària SIP; 0 coincideix automàticament amb hunter.buffer_size. |
hunter.batch_size | integer | 64 | Nombre de paquets per lot gRPC al processador. |
hunter.batch_timeout_ms | integer | 100 | Temps màxim d’espera en ms abans d’enviar un lot incomplet. |
hunter.batch_queue_size | integer | 0 | Mida de la cua d’enviament de lots (0 = per defecte). |
hunter.no_filter_policy | string | "deny" | Comportament quan no hi ha filtres del processador configurats: "allow" transmet tots els paquets, "deny" no en transmet cap. |
hunter.forward_mode | string | "packets" | Representació cap a l’amunt: "packets" o "events". |
hunter.events.fallback_to_packets | boolean | false | Permet explícitament recórrer a paquets quan falla la negociació d’esdeveniments. |
hunter.events.delivery_profile | string | "reliable" | Transmissió d’esdeveniments: "reliable" o "memory-only". |
hunter.events.spool.dir | string | "/var/tmp/lippycat-event-spool" | Directori de la cua persistent recuperable d’esdeveniments. |
hunter.events.spool.max_bytes | integer | 1073741824 | Límit de bytes de la cua persistent (0 = il·limitat). |
hunter.events.spool.max_age | duration | "24h" | Límit d’antiguitat de la cua persistent (0 = il·limitat). |
hunter.events.spool.exhaustion_policy | string | "drop_oldest" | "drop_oldest" o "drop_new"; s’informa de les pèrdues. |
hunter.debug_listen | string | "" | Adreça opcional d’escolta HTTP de depuració pprof. Només de bucle local tret que hunter.debug_allow_non_loopback sigui true. |
hunter.debug_allow_non_loopback | boolean | false | Permet vincular l’escolta pprof a adreces que no són de bucle local. |
TLS del node Hunter
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.tls.cert_file | string | "" | Camí del certificat TLS del client (per a mTLS). |
hunter.tls.key_file | string | "" | Camí de la clau privada TLS del client. |
hunter.tls.ca_file | string | "" | Camí del certificat CA per verificar el processador. |
hunter.tls.skip_verify | boolean | false | Omet la verificació del certificat TLS (insegur, només per a proves). |
hunter.tls.ports | string | "443" | Ports TLS per a la detecció de protocols. |
hunter.insecure | boolean | false | Desactiva TLS per a proves locals. Bloquejat quan LIPPYCAT_PRODUCTION=true. |
Filtres de protocol del node Hunter
Els nodes Hunter admeten subordres específiques de protocol (lc hunt dns, lc hunt voip, etc.) amb opcions de filtre dedicades. lc hunt radius utilitza, en canvi, les opcions RADIUS compartides, de manera que sniff, hunt i tap poden reutilitzar els mateixos criteris i política de correlació:
hunter.dns — Filtratge DNS:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.dns.ports | string | "53" | Ports DNS. |
hunter.dns.udp_only | boolean | false | Captura DNS només UDP. |
hunter.http — Filtratge HTTP:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.http.ports | string | "80,8080,8000,3000,8888" | Ports HTTP. |
hunter.http.capture_body | boolean | false | Captura el cos HTTP. |
hunter.http.max_body_size | integer | 65536 | Mida màxima del cos en bytes. |
hunter.http.host | string | "" | Patró de filtre d’amfitrió. |
hunter.http.path | string | "" | Patró de filtre de camí. |
hunter.http.method | string | "" | Filtre de mètode HTTP. |
hunter.http.status | string | "" | Filtre de codi d’estat. |
hunter.http.keywords | string | "" | Paraules clau de contingut. |
hunter.http.tls_keylog | string | "" | Camí del fitxer de registre de claus TLS. |
hunter.http.tls_keylog_pipe | string | "" | Camí de la canonada de registre de claus TLS. |
hunter.email — Filtratge de correu:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.email.smtp_ports | string | "25,587,465" | Ports SMTP. |
hunter.email.imap_ports | string | "143,993" | Ports IMAP. |
hunter.email.pop3_ports | string | "110,995" | Ports POP3. |
hunter.email.protocol | string | "all" | Filtre de protocol. |
hunter.email.capture_body | boolean | false | Captura el cos del correu. |
hunter.email.max_body_size | integer | 65536 | Mida màxima del cos. |
hunter.email.sender | string | "" | Filtre de remitent. |
hunter.email.recipient | string | "" | Filtre de destinatari. |
hunter.email.subject | string | "" | Filtre d’assumpte. |
hunter.email.mailbox | string | "" | Filtre de bústia. |
hunter.email.command | string | "" | Filtre d’ordre. |
hunter.email.keywords | string | "" | Paraules clau de contingut. |
hunter.voip — Filtratge VoIP:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.voip.sip_ports | string | "" | Ports SIP. |
hunter.voip.rtp_port_ranges | string | "" | Intervals de ports RTP. |
hunter.voip.udp_only | boolean | false | Captura VoIP només UDP. |
hunter.voip_filter — Filtratge VoIP accelerat per GPU:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.voip_filter.enabled | boolean | false | Activa el filtratge VoIP accelerat per GPU a la perifèria. |
hunter.voip_filter.gpu_backend | string | "auto" | Motor GPU per al filtratge perifèric. |
hunter.voip_filter.gpu_batch_size | integer | 100 | Mida del lot per al processament del filtre GPU. |
Memòria intermèdia en disc
Quan s’interromp la connexió amb el processador, el node Hunter pot mantenir paquets en memòria intermèdia al disc:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
hunter.disk_buffer.enabled | boolean | false | Activa la memòria intermèdia en disc per a interrupcions de xarxa. |
hunter.disk_buffer.dir | string | "/var/tmp/lippycat-buffer" | Directori dels fitxers de memòria intermèdia en disc. |
hunter.disk_buffer.max_mb | integer | 1024 | Mida màxima de la memòria intermèdia en disc en MB. |
processor — Node processador
Els nodes processadors reben paquets dels nodes Hunter, fan anàlisi, escriuen PCAP i serveixen clients TUI. Consulteu agregació central amb lc process per a l’ús.
Configuració bàsica
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.id | string | "" | Identificador del processador. Es genera automàticament a partir del nom d’amfitrió si és buit. |
processor.processor_id | string | "" | Àlies de processor.id. |
processor.listen_addr | string | ":55555" | Adreça d’escolta de connexions Hunter i TUI. |
processor.processor_addr | string | "" | Adreça d’un processador ascendent per a transmissió jeràrquica. |
processor.upstream_addr | string | "" | Àlies de processor.processor_addr. |
processor.forward_mode | string | "packets" | Representació cap a l’amunt: "packets" o "events" normalitzats. |
processor.events.fallback_to_packets | boolean | false | Permet explícitament recórrer de manera visible a paquets després de fallar la negociació d’esdeveniments. |
processor.events.delivery_profile | string | "reliable" | Transmissió d’esdeveniments cap a l’amunt: "reliable" o "memory-only". |
processor.events.spool.dir | string | "/var/tmp/lippycat-processor-event-spool" | Arrel recuperable de cues persistents d’esdeveniments cap a l’amunt per productor. |
processor.events.spool.max_bytes | integer | 1073741824 | Límit lògic de bytes de la cua persistent d’esdeveniments (0 = il·limitat). |
processor.events.spool.max_age | duration | "24h" | Antiguitat màxima dels lots d’esdeveniments retinguts (0 = il·limitat). |
processor.events.spool.exhaustion_policy | string | "drop_oldest" | Política d’esgotament de la cua persistent d’esdeveniments: "drop_oldest" o "drop_new". |
processor.max_hunters | integer | 100 | Màxim de connexions Hunter simultànies (0 = il·limitat). |
processor.max_subscribers | integer | 100 | Màxim de connexions de subscriptors TUI (0 = il·limitat). |
processor.events.allow_sensitive_fields | boolean | false | Permet que subscriptors autoritzats d’esdeveniments sol·licitin camps sensibles HTTP, SMTP i de fitxers. |
processor.events.allow_file_metadata | boolean | false | Permet que subscriptors autoritzats d’esdeveniments sol·licitin metadades de fitxers; el contingut dels fitxers mai no s’exposa. |
processor.display_stats | boolean | true | Mostra estadístiques periòdiques a stdout. |
processor.enable_detection | boolean | true | Activa la detecció de protocols en els paquets rebuts. |
processor.events.ingress.profile | string | "memory-only" | Perfil de confirmació d’esdeveniments: "memory-only" o "reliable". |
processor.events.ingress.wal_dir | string | "" | Directori WAL recuperable d’entrada d’esdeveniments; obligatori per a entrada fiable. |
processor.events.ingress.wal_max_bytes | integer | 1073741824 | Mida màxima del WAL d’entrada d’esdeveniments. |
processor.events.ingress.max_batch_bytes | integer | 4194304 | Mida màxima del lot d’esdeveniments serialitzat acceptat; mínim 4194304 per compatibilitat amb emissors persistents. |
processor.filter_file | string | "" | Camí explícit de la instantània de filtres gestionada; consulteu emmagatzematge gestionat. |
processor.write_file | string | "" | Camí de la sortida PCAP unificada (tot el trànsit en un fitxer). |
processor.command_concurrency | integer | 10 | Màxim d’execucions simultànies d’ordres associades. |
processor.command_timeout | duration | "30s" | Temps d’espera d’execució d’ordres associades. |
processor.debug_listen | string | "" | Adreça opcional d’escolta HTTP de depuració pprof. Només de bucle local tret que processor.debug_allow_non_loopback sigui true. |
processor.debug_allow_non_loopback | boolean | false | Permet vincular l’escolta pprof a adreces que no són de bucle local. |
TLS del processador
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.tls.cert_file | string | "" | Camí del certificat TLS del servidor. |
processor.tls.key_file | string | "" | Camí de la clau privada TLS del servidor. |
processor.tls.ca_file | string | "" | Camí del certificat CA per verificar clients (mTLS). |
processor.tls.client_auth | boolean | false | Exigeix certificats de client (TLS mutu). |
processor.insecure | boolean | false | Desactiva TLS per a proves locals. Bloquejat quan LIPPYCAT_PRODUCTION=true. |
TLS està activat per defecte tret que processor.insecure sigui true. Proporcioneu processor.tls.cert_file i processor.tls.key_file per servir amb xifratge.
PCAP per trucada (VoIP)
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.per_call_pcap.enabled | boolean | false | Escriu fitxers PCAP separats per trucada VoIP. |
processor.per_call_pcap.output_dir | string | "./pcaps" | Directori de fitxers PCAP per trucada. |
processor.per_call_pcap.file_pattern | string | "{timestamp}_{callid}.pcap" | Patró de nom de fitxer. Marcadors: {timestamp}, {callid}. |
processor.per_call_pcap.max_idle | duration | "10m" | Tanca els escriptors PCAP per trucada inactius després d’aquesta durada (0 desactiva el tancament per inactivitat). |
processor.per_call_pcap.max_writers | integer | 0 | Llindar flexible de pressió d’escriptors actius (0 = desactivat). Les trucades actives es preserven per sobre del llindar. |
processor.per_call_pcap.closed_call_ttl | duration | "1h" | Suprimeix el tractament duplicat de tancament de trucades completades durant aquesta durada. |
PCAP amb rotació automàtica
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.auto_rotate_pcap.enabled | boolean | false | Activa la rotació automàtica de fitxers PCAP. |
processor.auto_rotate_pcap.output_dir | string | "./auto-rotate-pcaps" | Directori de fitxers PCAP amb rotació. |
processor.auto_rotate_pcap.file_pattern | string | "{timestamp}.pcap" | Patró de nom de fitxer. Marcador: {timestamp}. |
processor.auto_rotate_pcap.max_size | string | "100M" | Mida màxima de fitxer abans de la rotació (p. ex., "100M", "1G"). |
processor.auto_rotate_pcap.idle_timeout | duration | "30s" | Temps sense paquets abans de rotar el fitxer actual. |
Accions d’ordres
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.pcap_command | string | "" | Ordre que s’executa quan es completa un fitxer PCAP per trucada. Marcador: %pcap% se substitueix pel camí del fitxer. |
processor.voip_command | string | "" | Ordre que s’executa quan acaba una trucada VoIP. Marcadors: %callid%, %dirname%. |
processor.tunneling_command | string | "" | Ordre que s’executa quan es detecten túnels DNS. |
processor.tunneling_threshold | float | 0.7 | Llindar de puntuació de túnels DNS per a processor.tunneling_command. |
processor.tunneling_debounce | duration | "5m" | Temps mínim entre execucions d’ordres de túnels DNS per domini. |
Interfície virtual
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.virtual_interface | boolean | false | Crea una interfície de xarxa virtual per reproduir paquets rebuts. |
processor.vif_type | string | "tap" | Tipus d’interfície virtual: "tap" o "tun". |
processor.vif_name | string | "lc0" | Nom de la interfície virtual. |
processor.vif_buffer_size | integer | 65536 | Mida de la memòria intermèdia de la interfície virtual. |
processor.vif_drop_privileges | string | "" | Usuari al qual reduir privilegis després de crear la interfície virtual. |
processor.vif_netns | string | "" | Espai de noms de xarxa de la interfície virtual. |
Registre de claus TLS
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.tls_keylog.output_dir | string | "" | Directori de fitxers de registre de claus TLS rebuts dels nodes Hunter. |
Intercepció legal (LI)
Aquestes opcions requereixen l’etiqueta de compilació li. Consulteu intercepció legal per a més informació. Quan processor.li.enabled és true, cal configurar l’adreça d’escolta X1, el certificat, la clau i la CA del client. El processador o Tap surt durant l’inici si en falta algun.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
processor.li.enabled | boolean | false | Activa el suport d’intercepció legal. |
processor.li.x1_listen_addr | string | ":8443" | Adreça d’escolta de la interfície X1 (ADMF). |
processor.li.x1_tls_cert | string | "" | Certificat TLS del servidor X1. |
processor.li.x1_tls_key | string | "" | Clau privada TLS del servidor X1. |
processor.li.x1_tls_ca | string | "" | Obligatori quan LI està activada. Certificat CA per verificar clients ADMF. |
processor.li.admf_endpoint | string | "" | Extrem ADMF per al registre X1. |
processor.li.admf_keepalive | duration | "30s" | Interval keepalive ADMF. |
processor.li.admf_tls_cert | string | "" | Certificat TLS per a la connexió ADMF. |
processor.li.admf_tls_key | string | "" | Clau privada TLS per a la connexió ADMF. |
processor.li.admf_tls_ca | string | "" | Certificat CA per verificar ADMF. |
processor.li.admf_sync_on_startup | boolean | true | Consulta l’estat de tasques/destinacions a ADMF a l’inici. |
processor.li.admf_sync_timeout | duration | "30s" | Temps d’espera de la petició de sincronització d’estat a l’inici. |
processor.li.admf_reconcile_interval | duration | "5m" | Interval periòdic de reconciliació ADMF (0 = desactivat). |
processor.li.delivery_tls_cert | string | "" | Certificat TLS per a connexions de lliurament X2/X3. |
processor.li.delivery_tls_key | string | "" | Clau privada TLS per al lliurament X2/X3. |
processor.li.delivery_tls_ca | string | "" | Certificat CA per verificar MDF. |
processor.li.delivery_tls_pinned_cert | list | [] | Certificats fixats per a connexions MDF. |
tap — Node Tap
Tap combina captura local amb capacitats de processador. Consulteu mode autònom amb lc tap per a l’ús. Tap comparteix moltes opcions amb hunter i processor.
Configuració bàsica
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.id | string | "" | Identificador del node Tap. |
tap.tap_id | string | "" | Àlies de tap.id. |
tap.interfaces | list | ["any"] | Interfícies de xarxa on capturar. |
tap.bpf_filter | string | "" | Expressió de filtre BPF. |
tap.buffer_size | integer | 10000 | Mida de la memòria intermèdia interna de paquets. |
tap.sip_buffer_size | integer | 0 | Capacitat de la via prioritària SIP; 0 coincideix automàticament amb tap.buffer_size. |
tap.batch_size | integer | 100 | Mida de lot de paquets per al processament intern. |
tap.batch_timeout_ms | integer | 100 | Temps d’espera de lot en mil·lisegons. |
tap.promiscuous | boolean | false | Mode promiscu de les interfícies de captura. |
tap.enable_detection | boolean | true | Activa la detecció de protocols. |
tap.filter_file | string | "" | Camí explícit de la instantània de filtres gestionada; consulteu emmagatzematge gestionat. |
tap.write_file | string | "" | Camí de la sortida PCAP unificada. |
tap.command_concurrency | integer | 10 | Màxim d’execucions simultànies d’ordres associades. |
tap.command_timeout | duration | "30s" | Temps d’espera d’ordres associades. |
tap.no_filter_policy | string | "deny" | Comportament quan no hi ha filtres configurats: "allow" captura tots els paquets coincidents, "deny" no en captura cap. |
tap.debug_listen | string | "" | Adreça opcional d’escolta HTTP de depuració pprof. Només de bucle local tret que tap.debug_allow_non_loopback sigui true. |
tap.debug_allow_non_loopback | boolean | false | Permet vincular l’escolta pprof a adreces que no són de bucle local. |
TLS i servei de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.listen_addr | string | ":55555" | Adreça d’escolta de connexions de clients Hunter i TUI. |
tap.max_hunters | integer | 0 | Màxim de connexions Hunter (0 = il·limitat). |
tap.max_subscribers | integer | 100 | Màxim de connexions de subscriptors TUI (0 = il·limitat). |
tap.events.allow_sensitive_fields | boolean | false | Permet que subscriptors autoritzats sol·licitin camps sensibles HTTP, SMTP i de fitxers. |
tap.events.allow_file_metadata | boolean | false | Permet que subscriptors autoritzats sol·licitin metadades de fitxers; el contingut dels fitxers mai no s’exposa. |
tap.events.ingress.profile | string | "memory-only" | Perfil de confirmació d’entrada d’esdeveniments de nodes descendents: "memory-only" o "reliable". |
tap.events.ingress.wal_dir | string | "" | Directori WAL recuperable d’entrada d’esdeveniments; obligatori per a entrada fiable. |
tap.events.ingress.wal_max_bytes | integer | 1073741824 | Mida màxima del WAL d’entrada d’esdeveniments. |
tap.events.ingress.max_batch_bytes | integer | 4194304 | Mida màxima del lot d’esdeveniments serialitzat acceptat; mínim 4194304 per compatibilitat amb emissors persistents. |
tap.tls.cert_file | string | "" | Certificat TLS del servidor. |
tap.tls.key_file | string | "" | Clau privada TLS del servidor. |
tap.tls.ca_file | string | "" | Certificat CA per verificar clients. |
tap.tls.client_auth | boolean | false | Exigeix certificats de client. |
tap.insecure | boolean | false | Desactiva TLS per a proves locals. Bloquejat quan LIPPYCAT_PRODUCTION=true. |
TLS està activat per defecte tret que tap.insecure sigui true. Proporcioneu tap.tls.cert_file i tap.tls.key_file per servir amb xifratge.
Transmissió de Tap cap a l’amunt
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.processor_addr | string | "" | Adreça del processador ascendent per transmetre paquets capturats. |
tap.upstream_addr | string | "" | Àlies de tap.processor_addr. |
tap.forward_mode | string | "packets" | Representació cap a l’amunt: "packets" o "events". |
tap.events.fallback_to_packets | boolean | false | Permet explícitament recórrer a paquets després de fallar la negociació d’esdeveniments. |
tap.events.delivery_profile | string | "reliable" | Transmissió d’esdeveniments cap a l’amunt: "reliable" o "memory-only". |
tap.events.spool.dir | string | "/var/tmp/lippycat-tap-event-spool" | Directori de la cua persistent recuperable d’esdeveniments cap a l’amunt. |
tap.events.spool.max_bytes | integer | 1073741824 | Límit de bytes de la cua persistent d’esdeveniments cap a l’amunt (0 = il·limitat). |
tap.events.spool.max_age | duration | "24h" | Límit d’antiguitat de la cua persistent d’esdeveniments cap a l’amunt (0 = il·limitat). |
tap.events.spool.exhaustion_policy | string | "drop_oldest" | Comportament d’esgotament de la cua persistent cap a l’amunt. |
PCAP per trucada de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.per_call_pcap.enabled | boolean | false | Escriu fitxers PCAP separats per trucada VoIP. |
tap.per_call_pcap.output_dir | string | "./pcaps" | Directori de fitxers PCAP per trucada. |
tap.per_call_pcap.file_pattern | string | "{timestamp}_{callid}.pcap" | Patró de nom de fitxer. |
tap.per_call_pcap.max_idle | duration | "10m" | Tanca els escriptors PCAP per trucada inactius després d’aquesta durada (0 desactiva el tancament per inactivitat). |
tap.per_call_pcap.max_writers | integer | 0 | Llindar flexible de pressió d’escriptors actius (0 = desactivat). Les trucades actives es preserven per sobre del llindar. |
tap.per_call_pcap.closed_call_ttl | duration | "1h" | Suprimeix el tractament duplicat de tancament de trucades completades durant aquesta durada. |
PCAP amb rotació automàtica de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.auto_rotate_pcap.enabled | boolean | false | Activa la rotació de fitxers PCAP. |
tap.auto_rotate_pcap.output_dir | string | "./auto-rotate-pcaps" | Directori de fitxers amb rotació. |
tap.auto_rotate_pcap.file_pattern | string | "{timestamp}.pcap" | Patró de nom de fitxer. |
tap.auto_rotate_pcap.max_size | string | "100M" | Mida màxima de fitxer abans de la rotació. |
tap.auto_rotate_pcap.idle_timeout | duration | "30s" | Temps d’espera d’inactivitat abans de la rotació. |
Ordres associades de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.pcap_command | string | "" | Ordre en completar un PCAP. Marcador: %pcap%. |
tap.voip_command | string | "" | Ordre en finalitzar una trucada. Marcadors: %callid%, %dirname%. |
Interfície virtual de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.virtual_interface | boolean | false | Crea una interfície de xarxa virtual. |
tap.vif_type | string | "tap" | Tipus d’interfície virtual. |
tap.vif_name | string | "lc0" | Nom de la interfície virtual. |
tap.vif_buffer_size | integer | 65536 | Mida de la memòria intermèdia de la interfície virtual. |
tap.vif_drop_privileges | string | "" | Usuari al qual reduir privilegis. |
tap.vif_netns | string | "" | Espai de noms de xarxa. |
Lliurament de metadades LI de Tap
Aquestes opcions requereixen l’etiqueta de compilació li. Tap admet la mateixa configuració de lliurament X1 i X2/X3 que el processador; aquestes claus controlen específicament les metadades normalitzades de protocols.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|
Filtres de protocol de Tap
Tap admet les mateixes subordres específiques de protocol que Hunter. Les claus de configuració reprodueixen les opcions de filtre de protocol de Hunter. lc tap radius utilitza les opcions RADIUS compartides:
tap.dns:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.dns.ports | string | "53" | Ports DNS. |
tap.dns.udp_only | boolean | false | Captura DNS només UDP. |
tap.dns.domain_pattern | string | "" | Patró de filtre de domini. |
tap.dns.domains_file | string | "" | Fitxer de patrons de domini. |
tap.dns.detect_tunneling | boolean | true | Activa la detecció de túnels DNS. |
tap.dns.tunneling_command | string | "" | Ordre que s’executa quan es detecten túnels DNS. |
tap.dns.tunneling_threshold | float | 0.7 | Llindar de puntuació de túnels DNS per executar ordres. |
tap.dns.tunneling_debounce | duration | "5m" | Temps mínim entre execucions d’ordres de túnels DNS per domini. |
tap.voip:
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.voip.sip_ports | string | "" | Ports SIP. |
tap.voip.sip_user | string | "" | Filtra per usuari SIP. |
tap.voip.sipuser | string | "" | Àlies de tap.voip.sip_user. |
tap.voip.rtp_port_ranges | string | "" | Intervals de ports RTP. |
tap.voip.udp_only | boolean | false | Captura VoIP antiga només UDP. L’indicador CLI està ocult i obsolet; preferiu tap.voip.sip_ports i tap.voip.rtp_port_ranges. |
tap.voip.tcp_performance_mode | string | "balanced" | Perfil de rendiment TCP per a VoIP de Tap. |
tap.voip.tcp_reassembly_shards | integer | 1 | Nombre de reassembladors TCP dividits per flux. Totes dues direccions d’una connexió romanen al mateix fragment. Els valors superiors a un són opcionals i s’han de sotmetre a proves de rendiment. |
tap.voip.pattern_algorithm | string | "auto" | Algorisme de cerca de patrons: "auto", "linear" o "aho-corasick". |
tap.voip.pattern_buffer_mb | integer | 64 | Memòria intermèdia de patrons en MB. |
Registre de claus TLS de Tap
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.tls_keylog.output_dir | string | "" | Directori de claus de sessió TLS rebudes de les vies de captura locals, en format de registre de claus NSS. |
Acceleració de filtres VoIP de Tap
Aquestes claus estan disponibles en compilacions CUDA.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
tap.voip_filter.enabled | boolean | false | Activa el filtratge VoIP accelerat per GPU. |
tap.voip_filter.gpu_backend | string | "auto" | Motor GPU: "auto", "cuda", "opencl" o "cpu-simd". |
tap.voip_filter.gpu_batch_size | integer | 100 | Mida del lot per al processament del filtre GPU. |
Tap també admet els apartats tap.http i tap.email amb les mateixes claus que hunter.http i hunter.email, respectivament.
Opcions específiques d’ordre
sniff — Ordre sniff
Opcions de lc sniff. Consulteu captura CLI amb lc sniff.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
sniff.format | string | "json" | Format de sortida: "json" o "text". |
sniff.quiet | boolean | false | Suprimeix la sortida que no correspon a paquets. |
sniff.virtual_interface | boolean | false | Reprodueix paquets capturats en una interfície virtual. |
sniff.vif_type | string | "tap" | Tipus d’interfície virtual. |
sniff.vif_name | string | "lc0" | Nom de la interfície virtual. |
sniff.vif_buffer_size | integer | 65536 | Mida de la memòria intermèdia de la interfície virtual. |
sniff.vif_drop_privileges | string | "" | Usuari al qual reduir privilegis. |
sniff.vif_netns | string | "" | Espai de noms de xarxa. |
sniff.vif_replay_timing | boolean | false | Manté la temporització original dels paquets durant la reproducció. |
sniff.vif_startup_delay | duration | "3s" | Retard abans d’iniciar la reproducció (permet configurar la interfície). |
watch — Configuració de watch (TUI)
Opcions de lc watch. Consulteu captura interactiva amb lc watch.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
watch.buffer_size | integer | 10000 | Capacitat de l’anell de paquets en viu/remots i dels esdeveniments retinguts; no limita la completesa dels paquets fora de línia. |
watch.offline.backing_policy | string | source | Fixada en cada obertura: descriptors originals sota control (source) o còpies privades validades (snapshot); indicador --offline-backing-policy. |
watch.offline.session_dir | string | Directori temporal del sistema operatiu | Directori pare existent i escrivible per a sessions temporals privades fora de línia; indicador --offline-session-dir. |
watch.offline.max_disk_bytes | integer | 4294967296 (4 GiB) | Pressupost positiu de disc combinat d’ordenació/conjunt de dades/consultes, incloses les sessions actuals i de substitució; indicador --offline-max-disk-bytes. |
watch.offline.cache_bytes | integer | 67108864 (64 MiB) | Pressupost positiu de cau, detalls seleccionats, precàrrega i lectures en curs; no és un límit de RSS del procés; indicador --offline-cache-bytes. |
watch.offline.max_record_bytes | integer | 8388608 (8 MiB) | Mida màxima positiva del registre de paquet codificat, no superior als pressupostos de cau o disc; indicador --offline-max-record-bytes. |
watch.offline.max_sources | integer | 64 | Fitxers d’origen simultanis fora de línia, 1–64; indicador --offline-max-sources. |
watch.max_calls | integer | 5000 | Màxim de trucades VoIP que es mantenen en memòria. |
watch.file.tls_keylog | string | "" | Fitxer de registre de claus TLS per analitzar fitxers PCAP. |
watch.tls_decryption_enabled | boolean | false | Activa el desxifratge TLS a la TUI (establert automàticament). |
watch.tls_keylog | string | "" | Camí de SSLKEYLOGFILE per al desxifratge TLS. |
watch.tls.enabled | boolean | false | Activa TLS per a connexions remotes. |
watch.tls.ca_file | string | "" | Certificat CA per verificar el servidor. |
watch.tls.cert_file | string | "" | Certificat de client per a mTLS. |
watch.tls.key_file | string | "" | Clau del client per a mTLS. |
watch.tls.skip_verify | boolean | false | Omet la verificació del certificat TLS (insegur). |
watch.tls.server_name_override | string | "" | Sobreescriu el nom del servidor per a la verificació TLS. |
watch.gpu.enabled | boolean | false | Activa l’acceleració GPU en mode TUI. |
watch.gpu.backend | string | "auto" | Motor GPU per a la TUI. |
watch.gpu.batch_size | integer | 100 | Mida del lot GPU. |
watch.nodes_highlighting | string | normal | Indicacions de canvi de Nodes remots: normal utilitza ressaltats temporals; quiet manté el text i l’estat sense ressaltats. |
watch.node_history | list | [] | Historial de nodes remots connectats anteriorment (gestionat automàticament). |
watch.filter_history | list | [] | Historial de cadenes de filtre de paquets (gestionat automàticament). |
watch.call_filter_history | list | [] | Historial de cadenes de filtre de trucades (gestionat automàticament). |
Configuració de connexió remota
remote — Connexió TUI remota
Opcions per connectar lc watch remote a un node processador o Tap. Consulteu supervisió TUI remota.
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
remote.processor | string | "" | Adreça del processador al qual connectar-se. |
remote.insecure | boolean | false | Connecta sense TLS (bloquejat quan LIPPYCAT_PRODUCTION=true). |
remote.tls.cert | string | "" | Certificat TLS del client (per a mTLS). |
remote.tls.key | string | "" | Clau privada TLS del client. |
remote.tls.ca | string | "" | Certificat CA per verificar el servidor. |
remote.tls.skip_verify | boolean | false | Omet la verificació del certificat TLS. |
Configuració de seguretat
security — Seguretat API
| Tecla | Tipus | Valor per defecte | Descripció |
|---|---|---|---|
security.api_keys.enabled | boolean | false | Activa l’autenticació amb clau API per a connexions gRPC. |
security.api_keys.keys | list | [] | Claus API configurades. Cada entrada inclou key, name, role i description opcional. Els clients envien la clau com a metadada gRPC x-api-key. |
Exemples de fitxers de configuració
Mínim: captura VoIP local
Una configuració senzilla per capturar trànsit VoIP en una sola màquina:
voip:
sip_ports: "5060"
rtp_port_ranges: "10000-20000"
Utilitzeu-la amb: sudo lc sniff voip -i eth0 o sudo lc tap voip -i eth0 --insecure
Producció: desplegament distribuït
Un node processador en un desplegament distribuït de producció amb TLS, PCAP per trucada i ordres associades:
processor:
listen_addr: ":55555"
tls:
enabled: true
cert_file: "/etc/lippycat/certs/server.crt"
key_file: "/etc/lippycat/certs/server.key"
ca_file: "/etc/lippycat/certs/ca.crt"
client_auth: true
per_call_pcap:
enabled: true
output_dir: "/var/capture/calls"
file_pattern: "{timestamp}_{callid}.pcap"
auto_rotate_pcap:
enabled: true
output_dir: "/var/capture/continuous"
max_size: "1G"
idle_timeout: "60s"
max_hunters: 50
max_subscribers: 20
filter_file: "/etc/lippycat/filters.yaml"
pcap_command: "gzip %pcap%"
voip_command: "/opt/scripts/process-call.sh %callid% %dirname%"
command_concurrency: 20
command_timeout: "60s"
Alt rendiment: node Hunter perifèric
Un node Hunter optimitzat per a captura VoIP d’alt cabal amb acceleració GPU:
hunter:
processor_addr: "processor.internal:55555"
interfaces:
- "eth0"
- "eth1"
tls:
enabled: true
ca_file: "/etc/lippycat/certs/ca.crt"
batch_size: 128
buffer_size: 50000
voip_filter:
enabled: true
gpu_backend: "cuda"
disk_buffer:
enabled: true
dir: "/var/tmp/lippycat-buffer"
max_mb: 2048
voip:
tcp_performance_mode: "throughput"
sip_ports: "5060"
rtp_port_ranges: "10000-20000"
gpu_enable: true
gpu_backend: "cuda"
gpu_batch_size: 2048
pcap_buffer_size: 67108864
promiscuous: true
Per a més informació sobre l’ajust de rendiment, consulteu optimització del rendiment. Per configurar certificats TLS, consulteu seguretat.
Admissió de mitjans VoIP eBPF
L’optimització opcional de captura Linux es configura sota hunter.voip.rtp_ebpf i tap.voip.rtp_ebpf. Només enabled: true l’activa; establir únicament mode o failure_policy no ho fa.
shadow_sample_every té el valor per defecte 1 i ha de ser positiu. Mostreja aproximadament una de cada N identitats de trama amb la mateixa regla d’elegibilitat al nucli i a l’espai d’usuari; les còpies idèntiques comparteixen elegibilitat i es compta cada còpia elegible. L’opció no activa l’admissió. Els resultats mostrejats i les categories de pèrdua d’evidència romanen separats dels recomptes exactes de tot el trànsit.
| Membre | Valor per defecte | Finalitat |
|---|---|---|
enabled | false | Activació explícita per a captura VoIP en viu. |
mode | enforce | enforce o shadow diagnòstic. |
failure_policy | open | Comportament open o closed durant l’execució, limitat a l’àmbit. |
interface_domains | {} | Correspondència d’interfície a domini; les interfícies no assignades comparteixen zero. |
endpoint_capacity | 40000 | Extrems candidats instal·lats diferents. |
owner_capacity | 10000 | Propietaris elegibles durant la vida de la trucada. |
max_endpoints_per_owner | 32 | Extrems RTP acceptats i extrems RTCP separats per propietari. |
pending_dialog_capacity | 10000 | Registres retinguts de metadades de diàlegs sense coincidència. |
pending_endpoint_capacity | 40000 | Extrems retinguts de metadades. |
pending_bytes | 8388608 | Límit de comptabilització de metadades pendents. |
pending_ttl | 30s | Caducitat de metadades pendents. |
replay_window | 2m | Finestra de protecció de proves d’identitat retirades. |
replay_guard_capacity | 10000 | Límit compartit d’entrades exactes de proves retirades entre dominis. |
replay_guard_bytes | 2097152 | Límit compartit de comptabilització de proves retirades; 128 bytes per entrada. |
expiration_batch | 256 | Treball limitat de caducitat per recorregut. |
retry_interval | 1s | Interval de reconciliació. |
shadow_evidence_capacity | 1024 | Mostres diagnòstiques retingudes. |
missing_media_interval | 30s | Interval diagnòstic de trucades seleccionades/contestades sense mitjans. |
Calen límits de recursos i durades positius. Els dominis d’interfície són inferiors a 4096. El mateix domini ha de contenir la senyalització i els mitjans relacionats. Les restriccions explícites de captura continuen efectives durant l’admissió shadow i open en execució. Aquestes opcions no preserven l’RTP anterior a la coincidència. Consulteu captura selectiva de mitjans VoIP per al comportament i l’estat d’implementació.
Referència de filtres BPF
Les expressions BPF (Berkeley Packet Filter) indiquen al nucli quins paquets ha de transmetre a lippycat i quins ha de descartar. El filtratge es fa abans que els paquets arribin a l’espai d’usuari, de manera que un filtre BPF ben triat és la manera individual més efectiva de reduir la càrrega de CPU i evitar descarts de paquets en enllaços ocupats. lippycat utilitza la sintaxi BPF estàndard de libpcap, el mateix llenguatge que accepten tcpdump, tshark i Wireshark, mitjançant l’indicador --filter / -f en totes les ordres de captura (sniff, hunt, tap).
Referència ràpida de sintaxi BPF
Una expressió BPF es construeix amb primitives unides per operadors.
Primitives
Una primitiva consisteix en un qualificador opcional seguit d’un valor:
| Qualificador | Significat | Exemple |
|---|---|---|
host | Coincidència amb una adreça IP | host 10.0.1.5 |
net | Coincidència amb una subxarxa (CIDR) | net 10.0.1.0/24 |
port | Coincidència amb un número de port | port 5060 |
portrange | Coincidència amb un interval de ports | portrange 10000-32768 |
proto | Coincidència amb un número de protocol | proto 17 (UDP) |
Qualificadors de direcció
Els qualificadors de direcció restringeixen les coincidències a l’origen o la destinació:
| Qualificador | Significat | Exemple |
|---|---|---|
src | Només origen | src host 10.0.1.5 |
dst | Només destinació | dst port 443 |
src or dst | Qualsevol dels dos (per defecte) | host 10.0.1.5 |
src and dst | Tots dos | src and dst net 10.0.0.0/8 |
Qualificadors de protocol
| Qualificador | Descripció |
|---|---|
tcp | Segments TCP |
udp | Datagrames UDP |
icmp | Missatges ICMP |
icmp6 | Missatges ICMPv6 |
arp | Paquets ARP |
ip | Paquets IPv4 |
ip6 | Paquets IPv6 |
ether | Trames Ethernet |
vlan | Trames amb etiqueta VLAN (802.1Q) |
Operadors
| Operador | Àlies | Significat |
|---|---|---|
and | && | Totes dues condicions han de coincidir |
or | || | Una de les dues condicions ha de coincidir |
not | ! | Nega una condició |
() | — | Agrupa subexpressions |
Expressions bàsiques
Una sola primitiva:
udp port 5060
Combinades amb and:
host 10.0.1.5 and udp port 5060
Combinades amb or:
tcp port 80 or tcp port 443
Negació:
not host 10.0.1.254
Subexpressions agrupades:
host 10.0.1.5 and (tcp port 80 or tcp port 443)
Cometes de l’intèrpret d’ordres: poseu sempre el filtre entre cometes dobles quan el passeu a
-fperquè l’intèrpret no interpreti els parèntesis ni els caràcters especials:sudo lc sniff -i eth0 -f "host 10.0.1.5 and (tcp port 80 or tcp port 443)"
Patrons habituals de filtre
Captura VoIP
El trànsit VoIP consisteix en senyalització SIP (normalment al port UDP 5060) i fluxos de mitjans RTP (en ports UDP de numeració alta). Capturar tots dos requereix un filtre que cobreixi el port de senyalització i l’interval de mitjans esperat.
Només senyalització SIP:
sudo lc sniff voip -i eth0 -f "udp port 5060"
SIP + RTP (interval habitual de ports de mitjans):
sudo lc sniff voip -i eth0 -f "udp port 5060 or udp portrange 10000-32768"
SIP en un port no estàndard:
sudo lc sniff voip -i eth0 -f "udp port 5080"
SIP d’una centraleta PBX específica:
sudo lc sniff voip -i eth0 -f "host 10.0.1.100 and udp port 5060"
Múltiples ports SIP (disjunció):
sudo lc sniff voip -i eth0 -f "udp port 5060 or udp port 5061 or udp port 5080"
L’indicador de conveniència --sip-port genera filtres de ports optimitzats sense BPF manual:
Equivalent al filtre multiport anterior, però més clar:
sudo lc sniff voip -i eth0 --sip-port 5060,5061,5080
Per a VoIP, preferiu restriccions explícites de ports SIP i RTP. Això restringeix el trànsit al nucli i encara permet SIP sobre TCP:
sudo lc sniff voip -i eth0 --sip-port 5060 --rtp-port-range 10000-20000
L’antic indicador VoIP --udp-only encara s’accepta per compatibilitat, però està ocult i obsolet perquè pot perdre trànsit SIP TCP.
Anàlisi de DNS
DNS estàndard (port 53):
sudo lc sniff dns -i eth0 -f "udp port 53"
Inclou mDNS:
sudo lc sniff dns -i eth0 -f "udp port 53 or udp port 5353"
Respostes d’un resolutor específic:
sudo lc sniff dns -i eth0 -f "src host 8.8.8.8 and udp port 53"
DNS sobre TCP (transferències de zona, respostes grans):
sudo lc sniff dns -i eth0 -f "port 53"
O utilitzeu l’indicador de conveniència:
sudo lc sniff dns -i eth0 --dns-port 53,5353
TLS / HTTPS
Només HTTPS:
sudo lc sniff tls -i eth0 -f "tcp port 443"
Múltiples serveis TLS:
sudo lc sniff tls -i eth0 -f "tcp port 443 or tcp port 8443 or tcp port 993"
Negociacions TLS amb un servidor específic:
sudo lc sniff tls -i eth0 -f "dst host 10.0.1.50 and tcp port 443"
O bé:
sudo lc sniff tls -i eth0 --tls-port 443,8443,993
HTTP
Ports HTTP estàndard:
sudo lc sniff http -i eth0 -f "tcp port 80 or tcp port 8080"
HTTP amb un servidor de desenvolupament:
sudo lc sniff http -i eth0 -f "dst host 10.0.1.10 and tcp port 3000"
O bé:
sudo lc sniff http -i eth0 --http-port 80,8080,3000
Anàlisi de xarxa
Tot el trànsit d’una subxarxa:
sudo lc sniff -i eth0 -f "net 10.0.1.0/24"
Trànsit entre dos amfitrions:
sudo lc sniff -i eth0 -f "host 10.0.1.1 and host 10.0.1.2"
Exclou trànsit de gestió:
sudo lc sniff -i eth0 -f "not host 10.0.1.254"
Exclou SSH (útil quan es captura per SSH):
sudo lc sniff -i eth0 -f "not tcp port 22"
Adreça MAC específica:
sudo lc sniff -i eth0 -f "ether host aa:bb:cc:dd:ee:ff"
Trànsit SIP amb etiqueta VLAN:
sudo lc sniff voip -i eth0 -f "vlan and udp port 5060"
Només trànsit IPv6:
sudo lc sniff -i eth0 -f "ip6"
ICMP (ping, traceroute):
sudo lc sniff -i eth0 -f "icmp"
Peticions ARP:
sudo lc sniff -i eth0 -f "arp"
Captura distribuïda
En desplegaments distribuïts, els filtres BPF s’apliquen als nodes Hunter de la perifèria. Això redueix el volum de trànsit transmès al processador per gRPC.
Node Hunter amb filtre BPF:
sudo lc hunt --processor processor:55555 -i eth0 \
-f "net 10.0.1.0/24 and udp port 5060" \
--tls-ca ca.crt
Node Hunter VoIP amb indicadors de conveniència:
sudo lc hunt voip --processor processor:55555 -i eth0 \
--sip-port 5060 --rtp-port-range 10000-20000 \
--tls-ca ca.crt
Node Tap amb filtre:
sudo lc tap voip -i eth0 \
-f "udp port 5060 or udp portrange 10000-32768" \
--insecure
Indicadors de conveniència de lippycat
lippycat proporciona indicadors que coneixen els protocols i generen filtres BPF optimitzats. Aquests indicadors gestionen casos límit, com les llistes de ports, i es combinen de manera clara amb qualsevol filtre manual -f que proporcioneu.
| Opció | BPF equivalent | Disponible a |
|---|---|---|
--sip-port 5060,5080 | Restricció de ports SIP per a TCP i UDP | sniff voip, hunt voip, tap voip |
--rtp-port-range 10000-20000 | Restricció de l’interval de ports RTP | sniff voip, hunt voip, tap voip |
--udp-only | Afegeix udp al filtre | sniff dns, hunt dns, tap dns; indicador antic ocult en modes VoIP |
--dns-port 53,5353 | udp port 53 or udp port 5353 | sniff dns, hunt dns, tap dns |
--radius-port 1812,1813,1912 | Ports UDP indicats i candidats UDP IPv6 per a validació RADIUS a l’espai d’usuari | sniff radius, hunt radius, tap radius |
--http-port 80,8080 | tcp port 80 or tcp port 8080 | sniff http, tap http |
--tls-port 443,8443 | tcp port 443 or tcp port 8443 | sniff tls, tap tls |
Combinar indicadors de conveniència amb filtres manuals
Els indicadors de conveniència i els filtres -f es combinen amb lògica and. Això permet utilitzar un indicador de conveniència per seleccionar ports i un filtre manual per limitar amfitrions o subxarxes:
SIP als ports 5060/5080, però només d’una subxarxa específica:
sudo lc sniff voip -i eth0 --sip-port 5060,5080 -f "net 10.0.1.0/24"
DNS al port estàndard, excloent un amfitrió molt actiu:
sudo lc sniff dns -i eth0 --dns-port 53 -f "not host 10.0.1.100"
VoIP d’una centraleta PBX específica, restringit a ports SIP/RTP coneguts:
sudo lc sniff voip -i eth0 --sip-port 5060 --rtp-port-range 10000-20000 -f "host 10.0.1.50"
Implicacions de rendiment
Els filtres BPF s’executen al nucli com a codi de bytes compilat. El nucli descarta els paquets que no coincideixen abans de copiar-los a l’espai d’usuari i estalvia tant cicles de CPU com amplada de banda de memòria. En enllaços d’alta velocitat, la diferència entre una captura àmplia i un filtre BPF específic pot determinar si lippycat segueix la taxa de l’enllaç o descarta paquets.
Complexitat i cost del filtre
Els filtres simples de port es compilen en unes poques instruccions BPF i afegeixen un cost negligible. Cada clàusula or addicional afegeix algunes instruccions, però continua sent ràpida: el nucli avalua el codi de bytes en un bucle estret sense cost de crides al sistema. A la pràctica, el cost de copiar paquets a l’espai d’usuari sempre supera àmpliament el del filtre; per això, els filtres més específics gairebé sempre són més ràpids globalment, encara que continguin més clàusules.
Poques instruccions BPF: molt ràpid:
-f "udp port 5060"
Més instruccions, encara ràpid, però captura moltes menys dades:
-f "udp port 5060 or udp portrange 10000-32768"
Sense filtre, cada paquet arriba a l’espai d’usuari, cosa que fa d’aquesta l’opció més lenta.
Utilitzeu portrange en lloc de llistes de ports
Quan filtreu un interval contigu de ports, portrange és més eficient que llistar ports individuals:
Eficient: una sola comprovació d’interval:
-f "udp portrange 10000-32768"
Menys eficient: milers de comparacions individuals de ports:
-f "udp port 10000 or udp port 10001 or udp port 10002 or ..."
Interacció amb altres opcions de rendiment
El filtratge BPF funciona conjuntament amb altres funcions de rendiment de lippycat:
-
--pcap-buffer-size— Estableix la memòria intermèdia de captura del nucli (en bytes). Una memòria més gran absorbeix les ràfegues de trànsit que superen la taxa de processament. El filtratge BPF redueix la taxa d’ompliment d’aquesta memòria i permet mides més petites. Consulteu optimització del rendiment per a orientacions de dimensionament. -
Acceleració GPU — Els motors GPU processen paquets que ja han passat el filtre BPF. Un filtre BPF més restringit significa que entren menys paquets a la cadena GPU, cosa que deixa recursos GPU per a l’anàlisi de protocols rellevant.
-
Perfils de rendiment TCP — Els filtres BPF que restringeixen ports SIP i RTP redueixen el treball a l’espai d’usuari abans del reassemblatge TCP. Per a captures només DNS,
--udp-onlyencara pot excloure DNS TCP quan no calen transferències de zona ni respostes DNS TCP grans.
Consells i paranys
Cometes de l’intèrpret d’ordres
Les expressions BPF sovint contenen parèntesis i operadors lògics que l’intèrpret d’ordres interpreta. Poseu sempre la cadena de filtre entre cometes:
Correcte: l’intèrpret passa la cadena completa a lippycat:
sudo lc sniff -i eth0 -f "host 10.0.1.5 and (port 80 or port 443)"
Incorrecte: l’intèrpret intenta executar “(port” com un subintèrpret:
sudo lc sniff -i eth0 -f host 10.0.1.5 and (port 80 or port 443)
Trànsit amb etiqueta VLAN
Les primitives BPF estàndard no troben coincidències dins de capçaleres VLAN (802.1Q). Si la xarxa utilitza VLAN, anteposeu el qualificador vlan:
Troba coincidències SIP en trames amb etiqueta VLAN:
-f "vlan and udp port 5060"
Sense ‘vlan’, els paquets SIP amb etiqueta VLAN són invisibles al filtre:
-f "udp port 5060"
IPv6
Els paquets IPv6 requereixen el qualificador ip6. host sol només coincideix amb IPv4:
Només IPv4:
-f "host 10.0.1.5"
Només IPv6:
-f "ip6 host 2001:db8::1"
Tots dos:
-f "host 10.0.1.5 or ip6 host 2001:db8::1"
Paquets fragmentats
Els paquets fragmentats a nivell IP plantegen un repte als filtres basats en ports. Només el primer fragment porta la capçalera TCP/UDP amb els números de port; els fragments posteriors no tenen aquesta informació i no coincideixen amb filtres basats en ports. En xarxes modernes amb Path MTU Discovery, la fragmentació és rara, però si sospiteu que es perden fragments:
Captureu tots els fragments d’un amfitrió (independentment del port):
-f "host 10.0.1.5"
Provar filtres amb tcpdump
Abans de desplegar un filtre en producció, proveu-lo amb tcpdump -d per inspeccionar el codi de bytes BPF compilat o amb tcpdump -c 10 per verificar que coincideix amb el trànsit esperat:
Mostra les instruccions BPF compilades (no cal capturar):
tcpdump -d "udp port 5060 or udp portrange 10000-32768"
Captura 10 paquets coincidents per verificar:
sudo tcpdump -i eth0 -c 10 "udp port 5060"
Difusió i multidifusió
Per excloure soroll de difusió o multidifusió d’una captura:
Exclou difusió:
-f "not ether broadcast"
Exclou multidifusió:
-f "not ether multicast"
Exclou totes dues:
-f "not ether broadcast and not ether multicast"
Longitud màxima del filtre
libpcap imposa un límit de longitud del programa BPF (normalment 4096 instruccions en Linux). Els filtres extremament complexos amb centenars de clàusules de port poden superar aquest límit. Si hi arribeu, consolideu les llistes de ports en expressions portrange o utilitzeu els indicadors de conveniència de lippycat, que generen filtres optimitzats.
Lectures addicionals
- Sintaxi de filtres tcpdump (pàgina de manual pcap-filter) — la referència autoritzada de sintaxi d’expressions BPF
- Optimització del rendiment — ajust del rendiment de captura amb perfils TCP i acceleració GPU
- Arquitectura distribuïda — com encaixen els filtres BPF en desplegaments Hunter/processador
Referència de tipus de filtre
Aquest apèndix documenta tots els tipus de filtre compatibles amb lippycat. Els filtres controlen quin trànsit capturen els nodes Hunter i transmeten als processadors. Utilitzeu lc set filter i lc list filters per a tots els tipus. La TUI pot editar tipus de filtre simples i mostrar filtres RADIUS, però els canvis de RADIUS estructurat continuen sent exclusius de CLI/YAML.
Tipus de filtre
| Categoria | Tipus | Descripció | Patró d’exemple |
|---|---|---|---|
| VoIP | sip_user | Usuari/extensió SIP (glob) | alicent@example.com |
sip_uri | URI SIP (glob) | sip:*@example.com | |
phone_number | Número de telèfon (prefix/sufix) | *456789 | |
call_id | Call-ID de SIP | abc123@host | |
codec | Còdec RTP | PCMU | |
imsi | IMSI de capçaleres SIP | 262011234567890 | |
imei | IMEI de paràmetres SIP Contact | 35399405123456 | |
| DNS | dns_domain | Nom de domini (glob) | *.example.com |
| TLS | tls_sni | Nom d’amfitrió SNI (glob) | *.example.com |
tls_ja3 | Empremta JA3 de client | e7d705a3286e19ea42f587b344ee6865 | |
tls_ja3s | Empremta JA3S de servidor | eb1d94daa7e0344597e756a1fb6e7054 | |
tls_ja4 | Empremta JA4 | t13d1516h2_8daaf6152771_... | |
| HTTP | http_host | Capçalera Host (glob) | *.example.com |
http_url | Camí d’URL (glob) | /api/v1/* | |
| Correu electrònic | email_address | Remitent/destinatari (glob) | *@suspicious.com |
email_subject | Línia d’assumpte (glob) | *confidential* | |
| RADIUS | radius_username | User-Name UTF-8 complet (exacte) | alice@example.test |
radius_mac | Calling-Station-Id amb un perfil MAC explícit | 02-00-00-00-00-01 | |
radius_attribute | AVP compatible complet codificat en hexadecimal | 57086c696e652d61 | |
radius_compound | Conjunció amb àmbit configurada en YAML | Consulteu el YAML següent | |
| Universal | ip_address | Adreça IP o CIDR | 192.168.1.0/24 |
bpf | Expressió BPF en brut | port 5060 |
Filtres RADIUS
Els filtres RADIUS són exactes i no es basen en comodins. La coincidència de User-Name distingeix majúscules i minúscules, l’hexadecimal dels atributs compatibles accepta totes dues i radius_mac requereix la convenció exacta de majúscules amb guions amb calling-station-id-uppercase-hyphen-v1. Els filtres en línia utilitzen --revision i els indicadors d’àmbit --radius-* documentats a lc set filter.
Els filtres compostos utilitzen lc set filter --file. Cada revisió de criteri ha de coincidir amb la revisió del filtre que el conté; incrementeu-les conjuntament quan canvieu criteris, àmbit o activació:
filters:
- id: radius-line-and-account
type: radius_compound
enabled: true
revision: 1
radius:
group_id: line-and-account
scope:
operator_scope: operator-a/nas-a
profile_revision: v1
criteria:
- filter_id: account
filter_revision: 1
kind: username
value: alice@example.test
target_kind: account
- filter_id: line
filter_revision: 1
kind: attribute
value: "57086C696E652D61"
target_kind: line
Consulteu captura RADIUS i POI per a la compatibilitat de distribució i l’aïllament d’àmbits.
Patrons amb comodins
Els filtres basats en cadenes (usuaris SIP, dominis, SNI, amfitrions, adreces de correu) admeten comodins per a una cerca de coincidències flexible:
| Patró | Tipus | Coincidències |
|---|---|---|
alicent | Conté | Coincidència de subcadena en qualsevol posició |
*456789 | Sufix | Qualsevol prefix + 456789 |
alicent* | Prefix | alicent + qualsevol sufix |
*alicent* | Conté | Conté explícitament |
Això és especialment útil per a números de telèfon que apareixen en formats diferents (E.164, prefix 00, prefixos tècnics com *31#).
Extracció IMSI/IMEI
Els identificadors IMSI i IMEI s’extreuen de la senyalització SIP:
- IMSI: extret de les capçaleres SIP
AuthorizationiP-Asserted-Identity - IMEI: extret del paràmetre
+sip.instancede les capçaleres SIPContact
Aquests filtres són especialment útils en entorns mòbils/VoLTE on cal seguir la identitat del subscriptor.
Coincidència d’adreces IP
El tipus de filtre ip_address admet tant adreces individuals com notació CIDR:
192.168.1.100— coincideix amb un únic amfitrió10.0.1.0/24— coincideix amb totes les adreces de la subxarxa- També s’admeten adreces i prefixos IPv6
Els filtres IP utilitzen consulta a un mapa hash per a adreces individuals i a un arbre radix per a intervals CIDR, amb rendiment O(1) i O(longitud del prefix), respectivament.
Filtres BPF
El tipus de filtre bpf accepta expressions Berkeley Packet Filter en brut. S’apliquen al nivell de captura abans de l’anàlisi de protocols, cosa que les fa la manera més eficient de reduir el volum de trànsit.
Consulteu l’apèndix C: referència de filtres BPF per a la sintaxi BPF completa.
Glossari
Aquest apèndix defineix els termes clau utilitzats al llarg del manual d’usuari de lippycat.
| Terme | Definició |
|---|---|
| ADMF | Administration Function (funció d’administració). El sistema extern que gestiona tasques d’intercepció legal enviant peticions d’activació/desactivació per la interfície X1. Consulteu intercepció legal. |
| Aho-Corasick | Un algorisme de cerca de coincidències de cadenes que cerca múltiples patrons simultàniament en una sola passada. lippycat l’utilitza per al filtratge eficient de múltiples patrons (p. ex., trobar moltes URI SIP alhora). Consulteu optimització del rendiment. |
| PCAP amb rotació automàtica | Una funció de captura no VoIP que rota automàticament els fitxers de sortida PCAP segons llindars de mida o temps, i evita que cap fitxer creixi sense límit. Consulteu agregació central amb lc process. |
| BPF | Berkeley Packet Filter. Un llenguatge de filtratge de paquets al nucli que permet a les eines de captura descartar paquets no rellevants abans que arribin a l’espai d’usuari, i redueix el cost de CPU i memòria. Consulteu la referència de filtres BPF. |
| Etiqueta de compilació | Una directiva del compilador Go que controla quins fitxers font s’inclouen en un binari. lippycat utilitza etiquetes de compilació (all, hunter, processor, cli, tui, li, cuda) per produir variants binàries especialitzades. Consulteu instal·lació i configuració. |
| CA | Certificate Authority (autoritat de certificació). Una entitat que emet i signa certificats TLS i estableix una cadena de confiança. En l’arquitectura distribuïda de lippycat, una CA signa certificats de nodes Hunter, processadors i clients TUI. Consulteu seguretat. |
| Call-ID | Un valor de capçalera SIP globalment únic que identifica una trucada en tots els missatges SIP relacionats (INVITE, BYE, ACK, etc.) i associa els fluxos de mitjans RTP amb la senyalització. Consulteu VoIP: anàlisi SIP i RTP. |
| Interfície de captura | La interfície de xarxa (NIC física, interfície virtual o bucle local) des de la qual lippycat llegeix paquets. S’especifica amb l’indicador -i / --interface. Consulteu captura CLI amb lc sniff. |
| CC | Communication Content (contingut de comunicació). La càrrega útil real dels paquets (mitjans, dades) lliurada per la interfície X3 en intercepció legal. Consulteu intercepció legal. |
| Disjuntor | Un patró de resiliència que atura els intents de transmissió després de fallades repetides i evita l’esgotament de recursos. S’utilitza en la transmissió jeràrquica entre processadors. Consulteu arquitectura distribuïda. |
| Còdec | Codificador-descodificador. Un algorisme que codifica i descodifica àudio o vídeo per transmetre’l per RTP. Els còdecs VoIP habituals inclouen G.711 (sense compressió), G.729 (comprimit) i Opus (adaptatiu). Consulteu VoIP: anàlisi SIP i RTP. |
| Ordre associada | Una ordre de l’intèrpret executada automàticament quan es tanca un fitxer PCAP o es completa una trucada VoIP. Es configura amb els indicadors --pcap-command i --voip-command. Consulteu agregació central amb lc process. |
| CUDA | Compute Unified Device Architecture. La plataforma de càlcul GPU de NVIDIA, utilitzada per lippycat per al filtratge de paquets accelerat per maquinari en nodes Hunter i Tap. Requereix l’etiqueta de compilació cuda. Consulteu optimització del rendiment. |
| Memòria intermèdia de desbordament en disc | Una funció de Hunter que escriu paquets capturats al disc local quan es perd la connexió amb el processador i els reprodueix en reconnectar-se. Evita la pèrdua de dades durant interrupcions de xarxa. Consulteu captura perifèrica amb lc hunt. |
| DNS | Domain Name System (sistema de noms de domini). Un protocol que tradueix noms de domini llegibles per persones a adreces IP. lippycat pot capturar i analitzar consultes i respostes DNS. Consulteu anàlisi DNS. |
| ETSI | European Telecommunications Standards Institute (Institut Europeu de Normes de Telecomunicacions). L’organisme de normalització que defineix les interfícies X1/X2/X3 utilitzades per a intercepció legal. Consulteu intercepció legal. |
| Filtre | Una regla amb nom (p. ex., sip_user, dns_domain, ip_address) que determina quins paquets captura i transmet un node Hunter. Els filtres s’envien del processador als nodes Hunter per gRPC. Consulteu conceptes bàsics. |
| Control de flux | El mecanisme amb què un processador indica als nodes Hunter que ajustin la taxa d’enviament. Utilitza quatre estats: CONTINUE (normal), SLOW (redueix la taxa), PAUSE (atura l’enviament) i RESUME (reprèn després d’una pausa). Consulteu arquitectura distribuïda. |
| gRPC | Google Remote Procedure Call. Un marc RPC d’alt rendiment utilitzat per a la comunicació entre nodes Hunter i processadors en l’arquitectura distribuïda. Consulteu arquitectura distribuïda. |
| HTTP | Hypertext Transfer Protocol (protocol de transferència d’hipertext). El protocol fonamental del web. lippycat pot capturar i analitzar peticions i respostes HTTP. Consulteu anàlisi HTTP. |
| Topologia en estrella | Una topologia de desplegament on un únic processador rep paquets capturats de múltiples nodes Hunter. És la configuració distribuïda més simple i habitual. Consulteu arquitectura distribuïda. |
| Hunter | Un node de captura perifèrica que captura paquets en una interfície de xarxa, aplica filtres i transmet els paquets coincidents a un processador per gRPC. Els nodes Hunter són lleugers i es poden desplegar en múltiples segments de xarxa. Consulteu captura perifèrica amb lc hunt. |
| Mode jeràrquic | Una topologia de desplegament on els processadors transmeten paquets a processadors ascendents, creant una jerarquia d’agregació de múltiples nivells per a desplegaments a gran escala. Consulteu arquitectura distribuïda. |
| IMAP | Internet Message Access Protocol. Un protocol per recuperar correu d’un servidor de correu que permet que els missatges romanguin al servidor. Consulteu anàlisi de protocols de correu. |
| IRI | Intercept Related Information (informació relacionada amb la intercepció). Metadades de senyalització (p. ex., capçaleres SIP, detalls d’establiment de trucada) lliurades per la interfície X2 en intercepció legal. Consulteu intercepció legal. |
| JA3 | Un mètode d’empremta de client TLS que genera un resum dels paràmetres de Client Hello (conjunts de xifratge, extensions, corbes el·líptiques). S’utilitza per identificar aplicacions client independentment de l’adreça IP. Consulteu inspecció TLS. |
| JA3S | Un mètode d’empremta de servidor TLS que genera un resum dels paràmetres de Server Hello. El complement de JA3 al costat del servidor. Consulteu inspecció TLS. |
| JA4 | Un mètode d’empremta TLS de nova generació i successor de JA3 que proporciona més precisió i context addicional de transport. Consulteu inspecció TLS. |
| LI | Lawful Interception (intercepció legal). Supervisió autoritzada de xarxa sota autoritat legal, implementada mitjançant les interfícies ETSI X1/X2/X3. Requereix l’etiqueta de compilació li. Consulteu intercepció legal. |
| libpcap | La biblioteca C estàndard de captura de paquets de xarxa en sistemes de tipus Unix. lippycat utilitza libpcap (mitjançant gopacket) per llegir paquets d’interfícies i fitxers PCAP. Consulteu conceptes bàsics. |
| MDF | Mediation/Delivery Function (funció de mediació/lliurament). La instal·lació de les autoritats que rep dades interceptades (IRI per X2, CC per X3) de l’element de xarxa. Consulteu intercepció legal. |
| mDNS | Multicast DNS (DNS multidifusió). Un protocol (port 5353) que resol noms d’amfitrió a adreces IP en xarxes locals sense servidor DNS central. Consulteu anàlisi DNS. |
| MOS | Mean Opinion Score (puntuació mitjana d’opinió). Una mètrica numèrica de qualitat de veu entre 1,0 (inintel·ligible) i 5,0 (excel·lent). S’estima a partir d’estadístiques de fluxos RTP, com la fluctuació temporal i la pèrdua de paquets. Consulteu VoIP: anàlisi SIP i RTP. |
| mTLS | Mutual TLS (TLS mutu). Una configuració TLS on tant el client com el servidor presenten certificats per autenticar-se i proporcionen verificació bidireccional d’identitat. És obligatòria per a desplegaments distribuïts en producció. Consulteu seguretat. |
| NE | Network Element (element de xarxa). En terminologia ETSI LI, el sistema que fa la intercepció; en aquest cas, lippycat mateix (normalment el node processador). Consulteu intercepció legal. |
| OpenCL | Open Computing Language. Un estàndard obert de càlcul paral·lel en GPU, CPU i altres acceleradors. Un motor GPU alternatiu a CUDA per al filtratge de paquets. Consulteu optimització del rendiment. |
| P-Asserted-Identity | Una capçalera SIP que transporta la identitat verificada de qui truca, afirmada per un intermediari de confiança. S’utilitza per identificar qui truca en l’anàlisi VoIP. Consulteu VoIP: anàlisi SIP i RTP. |
| PCAP | Packet Capture (captura de paquets). Un format de fitxer estàndard (.pcap) per emmagatzemar paquets de xarxa capturats, compatible amb eines com Wireshark i tcpdump. Consulteu conceptes bàsics. |
| PCAP per trucada | Una funció específica de VoIP que escriu un fitxer PCAP separat per a cada trucada SIP, amb tots els paquets de senyalització i mitjans associats al Call-ID de la trucada. Consulteu agregació central amb lc process. |
| POP3 | Post Office Protocol version 3. Un protocol per recuperar correu d’un servidor de correu, normalment descarregant els missatges i eliminant-los del servidor. Consulteu anàlisi de protocols de correu. |
| Processador | Un node d’agregació central que rep paquets d’un o més nodes Hunter per gRPC, fa anàlisi de protocols, escriu fitxers PCAP i serveix la interfície TUI. Consulteu agregació central amb lc process. |
| Mode de producció | Un mode operatiu activat establint LIPPYCAT_PRODUCTION=true, que exigeix xifratge TLS en totes les connexions i bloqueja l’indicador --insecure. Consulteu seguretat. |
| RADIUS | Remote Authentication Dial-In User Service. Un protocol UDP per a autenticació, autorització i comptabilització d’accés a la xarxa. lippycat captura missatges visibles, associa respostes amb peticions i exposa metadades amb les credencials ocultades. Consulteu captura RADIUS i POI. |
| Mode promiscu | Un mode d’interfície de xarxa que captura tot el trànsit del segment, no només el que s’adreça a l’amfitrió. És necessari per supervisar trànsit entre altres amfitrions. Consulteu captura CLI amb lc sniff. |
| RTP | Real-time Transport Protocol (protocol de transport en temps real). Un protocol que transporta fluxos d’àudio i vídeo VoIP i proporciona seqüenciació, marques de temps i identificació de tipus de càrrega útil. Consulteu VoIP: anàlisi SIP i RTP. |
| SDP | Session Description Protocol (protocol de descripció de sessió). Un format utilitzat dins de la senyalització SIP per negociar paràmetres de sessió de mitjans, com còdecs, adreces IP i ports. Consulteu VoIP: anàlisi SIP i RTP. |
| SIMD | Single Instruction, Multiple Data (una instrucció, múltiples dades). Extensions vectorials de CPU (AVX2, SSE4.2) que processen múltiples elements de dades en paral·lel, utilitzades per lippycat per a cerca de patrons accelerada. Consulteu optimització del rendiment. |
| SIP | Session Initiation Protocol (protocol d’inici de sessió). Un protocol de senyalització utilitzat per establir, modificar i acabar trucades VoIP. lippycat analitza missatges SIP per seguir i filtrar trucades. Consulteu VoIP: anàlisi SIP i RTP. |
| SMTP | Simple Mail Transfer Protocol. El protocol estàndard per enviar correu entre servidors de correu. Consulteu anàlisi de protocols de correu. |
| SNI | Server Name Indication (indicació del nom del servidor). Una extensió TLS del missatge Client Hello que especifica el nom d’amfitrió al qual es connecta el client i permet allotjament virtual per TLS. Consulteu inspecció TLS. |
| SRTP | Secure RTP (RTP segur). Una variant xifrada d’RTP que proporciona confidencialitat, autenticació i protecció contra reproduccions per als fluxos de mitjans VoIP. Consulteu VoIP: anàlisi SIP i RTP. |
| Tap | Un node autònom que combina capacitats de Hunter i processador sense gRPC, executant captura i anàlisi localment en un únic procés. Consulteu mode autònom amb lc tap. |
| Mode de rendiment TCP | Perfils de configuració que controlen el comportament del reassemblatge TCP, amb un compromís entre completesa i velocitat. Els modes inclouen balanced, high_performance, low_latency i minimal. Consulteu optimització del rendiment. |
| TLS | Transport Layer Security (seguretat de la capa de transport). Un protocol criptogràfic que proporciona comunicació xifrada entre aplicacions en xarxa. lippycat analitza trànsit TLS i també utilitza TLS per protegir les seves pròpies connexions gRPC. Consulteu seguretat. |
| TUI | Terminal User Interface (interfície d’usuari de terminal). La interfície interactiva de supervisió de lippycat basada en terminal, construïda amb el marc Bubbletea. Proporciona visualització de paquets en temps real, gestió de nodes Hunter i supervisió de trucades. Consulteu captura interactiva amb lc watch. |
| Interfície virtual (VIF) | Una interfície de xarxa creada per programari (p. ex., dispositiu tap/tun) utilitzada per a injecció o reproducció de paquets, o comunicació entre màquines virtuals. Es pot utilitzar com a interfície de captura. Consulteu captura CLI amb lc sniff. |
| WAL | Write-Ahead Log (registre d’escriptura anticipada). Un diari durador utilitzat per a entrada fiable d’esdeveniments: el processador registra els esdeveniments rebuts abans de confirmar-los al productor, cosa que permet recuperar-los després d’una fallada del processador. Consulteu agregació central amb lc process. |
| X1 | La interfície d’administració d’intercepció legal ETSI. Transporta peticions d’activació i desactivació de tasques entre ADMF i l’element de xarxa per HTTPS/XML. Consulteu intercepció legal. |
| X2 | La interfície de lliurament IRI d’intercepció legal ETSI. Transporta metadades de senyalització (Intercept Related Information) de l’element de xarxa a MDF per TLS. Consulteu intercepció legal. |
| X3 | La interfície de lliurament CC d’intercepció legal ETSI. Transporta contingut de comunicació (dades reals de paquets) de l’element de xarxa a MDF per TLS. Consulteu intercepció legal. |