nDPI/doc/configuration_parameters.md
Ivan Nardi 1b3ef7d7b2
STUN: improve extraction of Mapped-Address metadata (#2370)
Enable parsing of Mapped-Address attribute for all STUN flows: that
means that STUN classification might require more packets.

Add a configuration knob to enable/disable this feature.

Note that we can have (any) STUN metadata also for flows *not*
classified as STUN (because of DTLS).

Add support for ipv6.

Restore the correct extra dissection logic for Telegram flows.
2024-04-08 10:24:51 +02:00

11 KiB

Configuration knobs

TODO

Protocol Parameter Default value Min value Max value Description Notes
NULL "packets_limit_per_flow" 32 0 255 The upper limit on the number of packets per flow that will be subject to DPI, after which classification will be considered complete (0 = no limit)
NULL "flow.direction_detection" enable NULL NULL Enable/disable internal detection of packet direction (client to server or server to client)
NULL "flow.track_payload" disable NULL NULL Enable/disable tracking/export of flow payload (i.e. L5/7 data): if enabled, the library exports the first 1024 bytes of payload for each flow
NULL "tcp_ack_payload_heuristic" disable NULL NULL In some networks, there are some anomalous TCP flows where the smallest ACK packets have some kind of zero padding. It looks like the IP and TCP headers in those frames wrongly consider the 0x00 Ethernet padding bytes as part of the TCP payload. While this kind of packets is perfectly valid per-se, in some conditions they might be treated by the TCP reassembler logic as (partial) overlaps, deceiving the classification engine. This parameter enable/disable an heuristic to detect these packets and to ignore them, allowing correct detection/classification. See #1946 for other details
NULL "fully_encrypted_heuristic" enable NULL NULL Enable/disable an heuristic to detect fully encrypted sessions, i.e. flows where every bytes of the payload is encrypted in an attempt to “look like nothing”. This heuristic only analyzes the first packet of the flow. See: https://www.usenix.org/system/files/sec23fall-prepub-234-wu-mingshi.pdf
NULL "libgcrypt.init" 1 NULL NULL Enable/disable initialization of libgcrypt. When using the external libgcrypt (instead of the internal crypto code) the libgcrypt runtime must be initialized. If, for whatever reasons, the application alread does it, nDPI must be told to skip it. Note that, by default, nDPI uses the crypto code and not libgcrypt: in that case this parameter is ignored
NULL "dpi.guess_on_giveup" 0x03 0x00 0x03 Tell the library to guess flow classification, if any DPI algorithms/logics fail. The value is a bitmask. Values: 0x0 = disabled; 0x01 = enable guessing by port; 0x02 = enable guessing by ip
NULL "flow_risk_lists.load" 1 NULL NULL Enable/disable loading of every IP addresses lists used to check any flow risks
NULL "flow_risk.anonymous_subscriber.list.icloudprivaterelay.load" 1 NULL NULL Enable/disable loading of internal iCouldPrivateRealy IP address list used to check NDPI_ANONYMOUS_SUBSCRIBER flow risk
NULL "flow_risk.anonymous_subscriber.list.protonvpn.load" 1 NULL NULL Enable/disable loading of internal IP address list of ProtonVPN exit nodes used to check NDPI_ANONYMOUS_SUBSCRIBER flow risk
NULL "flow_risk.crawler_bot.list.load" 1 NULL NULL Enable/disable loading of internal IP address list used to check NDPI_HTTP_CRAWLER_BOT flow risk
NULL "filename.config" NULL NULL NULL Name of the file containing a list of configuration knobs itself (one per line)!. Useful to configure nDPI via text file instead of via API
NULL "log.level" 0 0 3 Configure the log/debug level. Possible values: 0 = error, 1 = trace, 2 = debug, 3 = extra debug
NULL "lru.$CACHE_NAME.size" See description 0 16777215 Set the size (in number of elements) of the specified LRU cache (0 = the cache is disabled). The keyword "$CACHE_NAME" is a placeholder for the cache name and the possible values are: ookla, bittorrent, zoom, stun, tls_cert, mining, msteams, stun_zoom. The default value is "32768" for the bittorrent cache, "512" for the zoom cache and "1024" for all the other caches
NULL "lru.$CACHE_NAME.ttl" See description 0 16777215 Set the TTL (in seconds) for the elements of the specified LRU cache (0 = the elements never explicitly expire). The keyword "$CACHE_NAME" is a placeholder for the cache name and the possible values are: ookla, bittorrent, zoom, stun, tls_cert, mining, msteams, stun_zoom. The default value is "120" for the ookla cache, "60" for the msteams and stun_zoom caches and "0" for all the other caches
NULL "lru.$CACHE_NAME.scope" 0 0 1 Set the scope of the specified LRU cache (0 = the cache is local, 1 = the cache is global). The keyword "$CACHE_NAME" is a placeholder for the cache name and the possible values are: ookla, bittorrent, zoom, stun, tls_cert, mining, msteams, stun_zoom. The global scope con be set only if a global context has been initialized
"tls" "certificate_expiration_threshold" 30 0 365 The threshold (in days) used to trigger the NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE flow risk
"tls" "application_blocks_tracking" disable NULL NULL Enable/disable processing of TLS Application Blocks (post handshake) to extract statistical information about the flow
"tls" "metadata.sha1_fingerprint" enable NULL NULL Enable/disable computation and export of SHA1 fingerprint for TLS flows. Note that if it is disable, the flow risk NDPI_MALICIOUS_SHA1_CERTIFICATE is not checked
"tls" "metadata.ja3c_fingerprint" enable NULL NULL Enable/disable computation and export of JA3C fingerprint for TLS flows. Note that if it is disable, the flow risk NDPI_MALICIOUS_JA3 is not checked
"tls" "metadata.ja3s_fingerprint" enable NULL NULL Enable/disable computation and export of JA3S fingerprint for TLS flows
"tls" "metadata.ja4c_fingerprint" enable NULL NULL Enable/disable computation and export of JA4C fingerprint for TLS flows
"smtp" "tls_dissection" enable NULL NULL Enable/disable dissection of TLS packets in cleartext SMTP flows (because of opportunistic TLS, via STARTTLS msg)
"imap" "tls_dissection" enable NULL NULL Enable/disable dissection of TLS packets in cleartext IMAP flows (because of opportunistic TLS, via STARTTLS msg)
"pop" "tls_dissection" enable NULL NULL Enable/disable dissection of TLS packets in cleartext POP flows (because of opportunistic TLS, via STARTTLS msg)
"ftp" "tls_dissection" enable NULL NULL Enable/disable dissection of TLS packets in cleartext FTP flows (because of opportunistic TLS, via AUTH TLS msg)
"stun" "max_packets_extra_dissection" 4 0 255 After a flow has been classified has STUN, nDPI might analyse more packets to look for a sub-classification or for metadata. This parameter set the upper limit on the number of these packets
"stun" "tls_dissection" enable NULL NULL Enable/disable dissection of TLS packets multiplexed into STUN flows
"stun" "metadata.attribute.mapped_address" enable NULL NULL Enable/disable extraction of (xor)-mapped-address attribute for STUN flows. If it is disabled, STUN classification might be significant faster
"dns" "subclassification" enable NULL NULL Enable/disable sub-classification of DNS flows (via query/response domain name). If disabled, some flow risks are not checked
"dns" "process_response" enable NULL NULL Enable/disable processing of DNS responses. By default, DNS flows are fully classified after the first request/response pair (or after the first response, if the request is missing). If this parameter is disabled, the flows are fully classified after the first packet, i.e. usually after the first request; in that case, some flow risks are not checked and some metadata are not exported
"http" "process_response" enable NULL NULL Enable/disable processing of HTTP responses. By default, HTTP flows are usually fully classified after the first request/response pair. If this parameter is disabled, the flows are fully classified after the first request (or after the first response, if the request is missing); in that case, some flow risks are not checked and some metadata are not exported
"ookla" "dpi.aggressiveness", 0x01 0x00 0x01 Detection aggressiveness for Ookla. The value is a bitmask. Values: 0x0 = disabled; 0x01 = enable heuristic for detection over TLS (via Ookla LRU cache)
$PROTO_NAME "log" disable NULL NULL Enable/disable logging/debug for specific protocol. Use "any" as protocol name if you want to easily enable/disable logging/debug for all protocols
$PROTO_NAME "ip_list.load" 1 NULL NULL Enable/disable loading of internal list of IP addresses (used for (sub)classification) specific to that protocol. Use "any" as protocol name if you want to easily enable/disable all lists. This knob is valid only for the following protocols: Alibaba, Amazon AWS, Apple, Avast, Bloomberg, Cachefly, Cloudflare, Discord, Disney+, Dropbox, Edgecast, EpicGames, Ethereum, Facebook, Github, Google, Google Cloud, GoTo, Hotspot Shield, Hulu, Line, Microsoft 365, Microsoft Azure, Microsoft One Drive, Microsoft Outlook, Mullvad, Netflix, Nvidia, OpenDNS, ProtonVPN, RiotGames, Roblox, Skype/Teams, Starcraft, Steam, Teamviewer, Telegram, Tencent, Threema, TOR, Twitch, Twitter, UbuntuONE, VK, Yandex, Yandex Cloud, Webex, Whatsapp, Zoom