apt install ulogd2
In the configuration file /etc/ulogd.conf we configure one plugin stack adding this line:
# Custom stack for logging connections metadata. stack=ct1:NFCT,ip2str1:IP2STR,print1:PRINTFLOW,emu1:LOGEMU
This stack definition in the ulog2 configuration file defines a pipeline of processing modules that handle network flow data. Each module in the stack performs a specific transformation or logging function. Every stack definition requires:
Each plugin module in the stack is referenced with an instance_name:module_type, where the instance_name is an arbitrary string used to identify that specific instance of the module_type. The instance_name is used also to configure the instance in the same configuration file.
Here's a breakdown of the components in the stack defined above:
NFCT
stands for Netfilter Connection Tracking.IP2STR
converts IP addresses into human-readable string representations.PRINTFLOW
formats and prints the logged packet or flow information. LOGEMU
refers to a custom logging output (generally referred as a logging emulator).The instance_name ct1 is used in the same configuration file to configure the NFCT module (which interfaces with the nfnetlink_conntrack kernel subsystem).
[ct1] event_mask=0x00000001 hash_enable=0
In this case the module will consider only new connections packets because the bitmask 0x00000001 matches new connections only. The option hash_enable=0
means that no memory will be used to track connections, this will in the other and, slow down the processing of packets.
These two modules are used at their defaults, no custom configuration is used for their instances.
The LOGEMU modules is configured as follow in the same configuration file:
[emu1] file="/var/log/ulog/syslogemu.log" sync=1
This means that the log is written in the specified file, every log entry is flushed immediately to the disk due the sync=1
option.
Bit Position | Hex Value | Decimal Value | Event Description |
---|---|---|---|
0 | 0x00000001 | 1 | New connection (conntrack entry created) |
1 | 0x00000002 | 2 | Connection update (state changes, e.g., from SYN_SENT to ESTABLISHED) |
2 | 0x00000004 | 4 | Destroyed connection (entry removed from conntrack table) |
3 | 0x00000008 | 8 | Assured connection (fully established, unlikely to be dropped) |
4 | 0x00000010 | 16 | Confirmed connection (packet has been seen in both directions) |
5 | 0x00000020 | 32 | Expectation event (related to NAT helper expectations) |
6 | 0x00000040 | 64 | Helper event (connection helper activity, e.g., FTP, SIP) |
7 | 0x00000080 | 128 | Destroy by GC (garbage collector removed the connection) |
8-31 | - | - | (Reserved or unused in most implementations) |
So if I want to track new and destroyed connections, the event_mask mus be set to 0x00000001 + 0x00000004 = 0x00000005.
Check that conntrack has the bytes= field in this output:
conntrack -L -o extended
Run the following:
sysctl -w net.netfilter.nf_conntrack_acct=1
for permanent setting across reboot create the file /etc/sysctl.d/99-nf_conntrack_acct.conf with:
net.netfilter.nf_conntrack_acct=1
systemctl enable ulogd2.service systemctl start ulogd2.service