gsanchietti / pmacct

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pmacct

pmacct RPM with nDPI support for CentOS 7.

This is work is based on RPM from Lux Repository.

How to build

nDPI 3.4

The build must be done on a NethServer 7.

First, compile ndpi-dev rRPM because pmacct requires nDPI devel headers.

yum install gcc-c++ automake autoconf  libpcap-devel libtool numactl-devel jason-c-devel -y
wget https://github.com/ntop/nDPI/archive/refs/tags/3.4.tar.gz
tar xvzf 3.4.tar.gz
ln -s nDPI-3.4/ nDPI
cd nDPI-3.4/
./autogen.sh && ./configure && make && make install
cd packages/rpm
./configure && make

pmacct

Move to root directory, then prepare the evironment to build rpms:

yum install podman git
mkdir ~/bin
curl https://raw.githubusercontent.com/NethServer/nethserver-makerpms/master/install.sh | bash

Build pmacct:

export PATH=$PATH:~/bin
git clone https://github.com/gsanchietti/pmacct.git
cd pmacct
YUM_ARGS="--enablerepo=nethserver-testing" ~/bin/makerpms pmacct.spec

Install

You need to force install to avoid dependency errors:

rpm -Uvh --nodeps pmacct-*.rpm

Usage

Create this sqlite file, eg schema.sql:

CREATE TABLE acct_v5 (
    agent_id INT(8) NOT NULL DEFAULT 0,
    class CHAR(16) NOT NULL DEFAULT ' ',
    class_id CHAR(16) NOT NULL DEFAULT ' ',
    mac_src CHAR(17) NOT NULL DEFAULT '0:0:0:0:0:0',
    mac_dst CHAR(17) NOT NULL DEFAULT '0:0:0:0:0:0',
    vlan INT(4) NOT NULL DEFAULT 0,
    ip_src CHAR(45) NOT NULL DEFAULT '0.0.0.0',
    ip_dst CHAR(45) NOT NULL DEFAULT '0.0.0.0',
    src_port INT(4) NOT NULL DEFAULT 0,
    dst_port INT(4) NOT NULL DEFAULT 0,
    ip_proto CHAR(6) NOT NULL DEFAULT 0, 
    tos INT(4) NOT NULL DEFAULT 0, 
    packets INT NOT NULL,
    bytes BIGINT NOT NULL,
    flows INT NOT NULL DEFAULT 0,
    stamp_inserted DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
    stamp_updated DATETIME,
    PRIMARY KEY (agent_id, class, class_id, mac_src, mac_dst, vlan, ip_src, ip_dst, src_port, dst_port, ip_proto, tos, stamp_inserted)
);

Then load it:

sqlite3 /etc/pmacct/pmacct.db < schema.sql

Example of pmacctd.conf:

! debug: true
daemonize: false
!
! libpcap daemon configs
!
pcap_interface: eth0
!
! Plugins definitions
!
plugins: sqlite3[foo],  memory[all]
!
! 'foo' plugin configuration
!
aggregate[foo]: src_host, dst_host, src_port, dst_port, proto, tos, class
sql_db[foo]: /etc/pmacct/pmacct.db
sql_table_name[foo]: acct
sql_table_version[foo]: 5 
! sql_table_version[foo]: 2 
! sql_table_version[foo]: 3 
sql_refresh_time[foo]: 60
sql_history[foo]: 1m 
sql_history_roundoff[foo]: m

aggregate[all]: dst_host, src_host
!imt_path[all]: /tmp/pipe.memory

Execute the daemon:

cd /etc/pmacct
pmacctd -f pmacctd.conf

Example of data:

# sqlite3 /etc/pmacct/pmacct.db "select * from acct_v5;"
0|Unknown/Unknown|unknown|0:0:0:0:0:0|0:0:0:0:0:0|0|157.240.203.14|192.168.122.213|443|44942|tcp|0|1|60|0|2022-01-24 09:52:00|2022-01-24 09:53:01
0|TLS/Facebook|unknown|0:0:0:0:0:0|0:0:0:0:0:0|0|192.168.122.213|157.240.203.14|44942|443|tcp|0|8|596|0|2022-01-24 09:52:00|2022-01-24 09:53:01
0|TLS/Facebook|unknown|0:0:0:0:0:0|0:0:0:0:0:0|0|157.240.203.14|192.168.122.213|443|44942|tcp|0|6|3480|0|2022-01-24 09:52:00|2022-01-24 09:53:01

About