====== Monitoraggio con ulogd2 ======
apt install ulogd2
==== /etc/ulogd.conf ====
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:
- One input plugin
- None, one or multiple filter plugins
- One output plugin
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:
- **ct1:NFCT**
* ''NFCT'' stands for **Netfilter Connection Tracking**.
* This input plogin module extracts connection tracking (conntrack) information from packets, such as session state, source/destination IPs, and ports.
- **ip2str1:IP2STR**
* ''IP2STR'' converts IP addresses into human-readable string representations.
* This ensures that logs display IP addresses in standard notation instead of numerical or binary formats.
- **print1:PRINTFLOW**
* ''PRINTFLOW'' formats and prints the logged packet or flow information.
* This is useful for debugging or human-readable log output.
- **emu1:LOGEMU**
* ''LOGEMU'' refers to a custom logging output (generally referred as a //logging emulator//).
* This is the output plugin module which is responsible for sending logs to a file, database, or another destination.
=== Configuring the NFCT Netfilter Connection Tracking ===
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.
=== The IP2STR and PRINTFLOW modules ===
These two modules are used at their defaults, no custom configuration is used for their instances.
=== The LOGEMU module ===
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.
==== Bitmask Breakdown of event_mask in NFCT ====
^ 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.
==== Logging bytes_sent and bytes_received ====
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
==== /etc/logrotate.d/ulogd2 ====
systemctl enable ulogd2.service
systemctl start ulogd2.service