Traffic Monitoring

25. Februar 2009


 

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.