Settings
Overview
You can make custom configuration changes to the Netify agent by modifying Netify's main configuration file, /etc/netifyd.conf. Changes made
to this file remain persistent across reboots and upgrades.
On BSD-based systems, this file is located in /usr/local/etc/netifyd.conf.
In Netify version 5.x and later, many configuration settings were migrated to be managed as a profile that could be easily toggled, or overridden, as necessary. The
default profile can be found in /etc/netifyd/profiles.d/10-default.conf
On BSD-based systems, this file is located in /usr/local/etc/netifyd/profiles.d/00-default.conf.
The following list represents the supported sections in this ini-style configuration file:
- netifyd
- capture-defaults
- threads
- flow-hash-cache
- dns-hint-cache
- privacy-filter
- netify-api
- protocols
Main Configuration File
The main configuration file only uses one section name by default, that being netifyd, identified by:
[netifyd]
Profile
| Property |
profile |
| Description |
Configuration profile to load from /etc/netifyd/profiles.d |
| Type |
string |
| Default |
/etc/netifyd/profiles.d/00-default.conf |
Volatile Path
| Property |
path_state_volatile |
| Description |
Where to store 'volatile' data (temporary state files). The value for this attribute can be referenced throughout this configuration file using the ${path_state_volatile} variable. |
| Type |
string |
| Default |
/var/run/netifyd |
Persistent Path
| Property |
path_state_persistent |
| Description |
Where to store 'persistent' data (configuration files). The value for this attribute can be referenced throughout this configuration file using the ${path_state_persistent} variable. |
| Type |
string |
| Default |
/etc/netifyd |
PID File
| Property |
path_pid_file |
| Description |
Where to save our PID for: netifyd --status. |
| Type |
string |
| Default |
${path_state_volatile}/netifyd.pid |
Shared Data
| Property |
path_shared_data |
| Description |
Path to shared data files |
| Type |
string |
| Default |
/usr/share/netifyd |
License Manager Library
| Property |
path_license_manager |
| Description |
Path to License Manager Library |
| Type |
string |
| Default |
$\{path_plugin_libdir\}/libnetify-plm.so |
| Property |
auto_informatics |
| Description |
Enable automatic Netify Informatics integration. This option is intended to be managed exclusively by the --enable/disable-informatics command-line parameters |
| Type |
string |
| Options |
yes, no |
| Default |
no |
Profiles
The netifyd section is identified by:
[netifyd]
Auto Flow Expiry
| Property |
auto_flow_expiry |
| Description |
When set to yes, TCP flows will not be tracked until a SYN+ACK has been captured. |
| Type |
string |
| Options |
yes, no |
| Default |
yes |
Flow Map Buckets
| Property |
auto_flow_expiry |
| Description |
The number of 'buckets' the main flow map will be divided into. the default is adequate for up to 5,000 flows. Increasing this value will reduce the chances of flow map lock contention on systems that track a large number of flows. |
| Type |
integer |
| Default |
128 |
Maximum Capture Length
| Property |
max_capture_length |
| Description |
The maxiumum number of bytes to capture (copy) per packet. Reducing this may be appropriate for embedded systems. Reducing this value too much will result in less accurate application/protocol detection. The maximum value is 65535, which is also the default. |
| Type |
integer |
| Default |
65535 |
Maximum Detection Packets
| Property |
max_detection_pkts |
| Description |
The maxiumum number of packets to inspect per flow. This is a performace tuning option for embedded systems. Reducing this value too much will result in less accurate application/protocol detection, specifically TLS. Generally, a safe range for adequate detection accuracy would be between 15 - 25 packets. |
| Type |
integer |
| Default |
32 |
Maximum Flows
| Property |
max_flows |
| Description |
The maximum number of flows to track at any given moment. When this value has been reached, new flows will stop being tracked until old flows expire. This option can be used to conserve memory on embedded systems, or to set an upper safety limit to guard agains DDoS attacks or network scanning tools. |
| Type |
integer |
| Default |
0 |
Soft Dissectors
| Property |
soft_dissectors |
| Description |
Soft-dissectors are flow expressions defined in the application signatures configuration file (usually in /etc/netifyd/netify-apps.conf). For debugging or for embedded systems with very limited resources, it may be helpful to disable Soft-dissectors. |
| Type |
yes |
| Options |
yes, no |
SYN Scan Protection
| Property |
syn_scan_protection |
| Description |
Don't track TCP flows until a SYN+ACK has been captured. This option can offer protection agains network scanners and has the alternative benefit of not tracking already established TCP flows when the Agent is first started. |
| Type |
yes, no |
| Default |
no |
TTL Idle
| Property |
ttl_idle_flow |
| Description |
How long to wait (in seconds) until an idle flow is scheduled for expiry. This time-to-live (TTL) applies to all non-TCP flows. |
| Type |
integer |
| Default |
30 |
TTL TCP Idle
| Property |
ttl_idle_tcp_flow |
| Description |
How long to wait (in seconds) until an idle TCP flow is scheduled for expiry. |
| Type |
integer |
| Default |
300 |
Update Interval
| Property |
update_interval |
| Description |
How often (in seconds) to process the global flow maps. Flow statistics are made available, idle flows are expired, and other house-keeping is performed during this update period. The default of 15s is appropriate in most cases. |
| Type |
integer |
| Default |
15 |
Use getifaddrs
| Property |
use_getifaddrs |
| Description |
Periodically call getifaddrs(3) to update the associated IP addresses of each capture source, where applicable. This option is primarily intended for non-Linux systems where an on-demand system like Netlink is non available. Should be enabled for FreeBSD and variants. |
| Type |
boolean |
| Options |
true, false |
| Default |
|
Server Socket Path
| Property |
path_server_socket |
| Description |
Local command/control socket. Receive commands and control messages on a local UNIX socket. |
| Type |
string |
| Default |
${path_state_volatile}/netifyd.sock |
Serial UUID Path
| Property |
path_uuid_serial |
| Description |
The path to a script that returns a unique UUID for the agent. When set, this UUID will be sent in addition to the Agent UUID as a means of uniquely identifying the agent. |
| Type |
string |
The path_uuid_serial field can be a regular file, containing a unique string, however this case is rarely used since the string must be
exactly 32 bytes in length. More often, an integrator will add the path to an executable file that extracts the unique value. As an
executable script, any length (providing enough entropy) can be used. Two examples are listed below:
Config
[netifyd]
..
.
path_uuid_serial = /usr/share/netifyd/get-serial.sh
Script Example 1 - Activation Key in File
/usr/share/netifyd/get-serial.sh
#/bin/sh
if [ -f /var/distro/activation ]; then
cat /var/distro/activation
else
echo '-'
fi
Script (get-serial.sh) Example 2 - Using Hardware Serial as Key
/usr/share/netifyd/get-serial.sh
#/bin/sh
dmidecode -s system-uuid
Capture Defaults
The capture-defaults section is identified by:
[capture-defaults]
Capture Type
| Property |
capture_type |
| Description |
Default capture method for -I and -E command-line options. |
| Type |
string |
| Options |
pcap, tpv3 |
| Default |
pcap |
Read Timeout
| Property |
read_timeout |
| Description |
# Packet capture timeout value (milliseconds). How long reads from PCAP or TPv3 capture sources will wait for packet data before being cancelled and retrying. The default value of 500ms is appropriate in almost all cases. |
| Type |
integer |
| Default |
500 |
Threading
The threads section is identified by:
[threads]
Capture Base
| Property |
capture_base |
| Description |
Base CPU ID to start capture threads from. |
| Type |
integer |
| Default |
0 |
Detection Base
| Property |
detection_base |
| Description |
Base CPU ID to start detection threads from. |
| Type |
integer |
| Default |
0 |
Detection Cores
| Property |
detection_cores |
| Description |
Number of detection cores to start. |
| Type |
integer |
| Default |
1 |
Flow Hash Cache
The flow-hash-cache section is identified by:
[flow-hash-cache]
Enable
| Property |
enable |
| Description |
Enable flow hash caching. |
| Type |
string |
| Options |
yes, no |
| Default |
yes |
Persistent
| Property |
save |
| Description |
Enable flow hash cache persistence during restarts. |
| Type |
string |
| Default |
persistent |
Flow Hash Cache Size
| Property |
cache_size |
| Description |
Limits the maximum size of the flow hash cache (in bytes). |
| Type |
integer |
| Default |
1000 |
DNS Hint Cache
The DNS Hint Cache (DHC) in the Netify Agent is a feature that is designed to aid or improve flow detection when protocol metadata may be lacking, for example, TLS without SNI.
The DHC system processes DNS responses. It stores the returned IP address and the associated domain name in a configurable LRU (least-recently used) cache. During the flow detection phase, if the flow remains unclassified, a look-up is performed in the DHC for the remote IP address. If a match is found, the associated domain name is used to improve application detection.
This cache is optionally saved to disk on exit (enabled by default) which will be reloaded on start-up, priming the cache. The DHC is saved as a CSV file.
When save is set to persistent, the default location is /etc/netifyd/dns-cache.csv.
The dns-hint-cache section is identified by:
[dns-hint-cache]
Enable
| Property |
enable |
| Description |
Enable DNS hint caching. |
| Type |
string |
| Options |
yes, no |
| Default |
yes |
Persistent
| Property |
save |
| Description |
Enable DNS hint cache persistence during restarts. |
| Type |
string |
| Default |
persistent |
DNS Hint Cache Size
| Property |
cache_size |
| Description |
Limits the maximum size of the flow hash cache (in bytes). |
| Type |
integer |
| Default |
1000 |
Partial Lookups
| Property |
partial_lookups |
| Description |
If set to yes, the Netify agent will apply DNS cache hinting only when a hostname is not extracted from the protocol. The practical implications of setting this field to yes typically results in slightly lower application classification rates.Unknown applications that use a Content Delivery Network or CDN to deliver content such as Cloudflare, Fastly etc. will no longer be classified as the CDN. The potential upside is fewer false positive rates due to shared IP usage across applications. |
| Type |
string |
| Options |
no, yes |
| Default |
no |
Netify API
Netify API is an optional RESTful API endpoint owned and maintained by eGloo Inc. for:
- enabling application signature and category updates
- enabling Netify Informatics
- automating tracking/audit for OEM integrations
The Netify API section is identified by:
[netify-api]
| Property |
enable |
| Description |
By default, Netify API is disabled and will not connect to any resource outside of your network. |
| Type |
boolean |
| Options |
true, false |
| Default |
false |
| Property |
update_tick |
| Description |
Number of seconds between API check-ins. |
| Type |
integer |
| Default |
30 |
| Property |
update_interval |
| Description |
Number of seconds between API updates. An API update checks for things like a new application signature file. |
| Type |
integer |
| Default |
86400 |
| Property |
tls_verify |
| Description |
Validate certificate - this should always be set to true or be undefined, except possibly in developer environments. |
| Type |
true, false |
| Default |
true |
| Property |
vendor |
| Description |
Vendor code. |
| Type |
string |
| Default |
N/A - Please contact us for OEM details |
Protocols
The protocols section name is:
[protocols]
| Property |
all |
| Description |
Enabling and disabling Protocol dissection can be an effective way to manage CPU resources. |
| Type |
string |
| Options |
include, exclude |
| Default |
include |
Privacy
The privacy section name is:
[privacy_filter]
For information on Netify's privacy settings, please refer to the Privacy Settings section of the documentation.
Next Steps