Was ist pmacct
pmacct ist eine GPL2-Software, die im sogenannten Promiscuous Mode jeglichen Datenverkehr auf einem Netzwerkgerät mitliest und dem Betriebssystem zur Verarbeitung zur Verfügung stellt.
Unsere Anforderungen
- Tages- und Wochenstatistiken zu ein- und ausgehendem Traffic
- automatische Erstellung der Statistiken
- Anzeige der IP-Adressen, die den meisten Traffic erzeugen
Installation
Die Installation ist mit Debian erdenklich einfach, da pmacct im offiziellen Debian-Paketpool vorhanden ist.
aptitude install pmacct
Konfiguration
Die default-Konfiguration in Debian verwendet eine „in-memory“ Speicherung der Trafficdaten. Mit dem Kommandozeilenprogramm pmacct lassen sind die Werte anzeigen. Die Sortier- und Auswertungsmöglichkeiten sind in diesem Modus sehr beschränkt.
Das Backend in dem pmacct die gesammelten Daten speichert ist allerdings austauschbar.
SQL-Backends
pmacct kann die Daten in SQL-Datenbanken schreiben. Als Backends sind SQLite3, MySQL und PostgreSQL möglich.
Im folgenden wird die Verwendung von SQLite beschrieben.
Um eine SQLite Datenbank für die Verwendung von pmacct anzulegen:
cd /var/lib/pmacct
sqlite3 pmacct.db < /usr/share/doc/pmacct/sql/pmacct-create-table_v1.sqlite3
Die acct-Tabelle sieht wie folgt aus:
CREATE TABLE acct (
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',
ip_src CHAR(15) NOT NULL DEFAULT '0.0.0.0',
ip_dst CHAR(15) 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,
packets INT NOT NULL,
bytes BIGINT NOT NULL,
stamp_inserted DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
stamp_updated DATETIME,
PRIMARY KEY (mac_src, mac_dst, ip_src, ip_dst, src_port, dst_port, ip_proto, stamp_inserted)
);
Informationen zu den anderen möglichen Tabellentypen gibt die mitgelieferte FAQ.
pmacct daemon
pmacctd kann über /etc/pmacct/pmacctd.conf konfiguriert werden:
/etc/pmacct/pmacctd.conf
daemonize: true
plugins: sqlite3
interface: intif0
aggregate: src_host,dst_host
sql_db: /var/lib/pmacct/pmacct.db
sql_table: acct
sql_refresh_time: 60
sql_history: 1h
sql_history_roundoff: h
Die meisten Optionen sind selbsterklärend nur folgende benötigen Erklärung:
- sql_refresh_time: Wie oft werden Daten ins Backend geschrieben. (in Sekunden anzugeben)
- sql_history: Zeitbereich für den Trafficdaten (zusammen)gesammelt werden.
- sql_history_roundoff: Anpassung des Zeitbereichs der in sql_history definiert wurde. h bedeutet hier, dass Zeitbereiche immer von XX:00 bis (XX+1):00 gehen.
daemon starten und erste Abfrage
/etc/init.d/pmacct restart
Nach 1min (siehe sql_refresh_time) sind die ersten Daten abrufbar, z.b. mit:
cd /var/lib/pmacct
sqlite3 pmacct.db "SELECT SUM(bytes) FROM acct"
regelmäßige Abfragen
- Um den gesamten Traffic (in MB) von gestern einzugrenzen:
S=`date +"%F 00:00:00" -d Yesterday`
E=`date +"%F 23:59:59" -d Yesterday`
cd /var/lib/pmacct
sqlite3 pmacct.db "
SELECT SUM(bytes)/1024/1024 FROM acct
WHERE stamp_inserted >= '$S'
AND stamp_inserted <= '$E'"
Obiges Skript lässt sich einfach als Cronjob einrichten, welcher z.b. automatisch E-Mails generiert.
- Trennung nach eingehendem und ausgehendem Traffic
Die Abfrage wird erweitert um die Filterung nach internem und externem Netz, z.B. mit:
#...
# ausgehend
WHERE ip_src LIKE '192.168.1.%*' AND ip_dst NOT LIKE '192.168.1.%*'
# eingehend
WHERE ip_dst LIKE '192.168.1.%*' AND ip_src NOT LIKE '192.168.1.%*'
#...
- Summe des ausgehenden Traffic sortiert nach IP, z.B. mit:
SELECT ip_src,sum(bytes)/1024/1024 FROM acct
WHERE ip_src LIKE '192.168.1.%*' AND ip_dst NOT LIKE '192.168.1.%*'
GROUP BY ip_src
ORDER BY sum(bytes) DESC
LIMIT 10
Fazit
pmacctd belastet das System wenig und die Abfragemöglichkeiten sind durch die Verwendung von SQL sehr vielfältig erweiterbar.