IP Traffic Accountig mit pmacct
Für das Traffic Accounting werden häufig Flows ausgewertet.
Ein Flow ist eine Verkehrsbeziehung zwischen zwei IP-Hosts.
Er wird gekennzeichnet durch IP-Adressen, Protokoll und
Port-Nummern. Im folgenden Beispiel sind die beiden Flows
einer SNMP-Abfrage zu sehen.
src_ip dst_ip src_port dst_port proto packets bytes
192.168.0.101 192.168.0.102 4352 161 udp 8 584
192.168.0.102 192.168.0.101 161 4352 udp 8 616
Die Erfassung von Flows ermöglich eine
genauere Auswertung als die reine Messung der
Bandbreite und Auslastung (z.B. mit Cacti oder MRTG). Dabei ist die
Datenmenge aber wesentlich geringer als bei der
Speicherung des kompletten Traffics (z.B. mit Wireshark
oder tshark). Daher bietet sich die Erfassung von Flows
für das Accounting oder für das Lokalisieren von
sporadischen Netzwerkproblemen an.
pmacct kann die Trafficdaten direkt von einem Interface auslesen und in eine SQL-Datenbank schreiben. Der
interessierende Traffic muss per Spiegelport oder Tap zu diesem Interface
geleitet werden. Der Zugriff auf die Daten erfolgt via libpcap.
sFlow und NetFlow werden von pmacct ebenfalls als Datenquellen unterstützt.
pmacct installieren und einrichten
Das Tool pmacct besteht aus dem Frontend pmacct und dem
Daemon pmacctd.
Nach dem Download der aktuellen Version von pmacct,
wird das Archiv entpackt und installiert:
wget http://www.pmacct.net/pmacct-0.11.4.tar.gz
tar xvzf pmacct-0.11.4.tar.gz
cd pmacct-0.11.4
./configure --enable-mysql
make
make install
pmacct benötigt die Packete libpcap und libmysqlclient. Diese können
unter debian mit apt-get installiert werden.
Die Konfiguration wird in der Datei /etc/pmacct/pmacctd.conf
gespeichert:
debian2:~# cat /etc/pmacct/pmacctd.conf
interface: eth0
daemonize: true
aggregate: src_host,dst_host,proto,src_port,dst_port
ports_file: /etc/pmacct/ports.list
plugins: mysql
sql_user: pmacct
sql_passwd: sqlpassword
sql_db: pmacct
sql_table: acct_v4_%Y_%m_%d
sql_table_schema: /etc/pmacct/acct_v4.schema
sql_table_version: 4
sql_refresh_time: 60
sql_optimize_clauses: true
sql_history: 10m
sql_history_roundoff: m
Die MySQL-Datenbank pmacct muss manuell angelegt werden und sql_user sowie
sql_passwd angepasst werden. Der SQL-User muss Tabellen in der Datenbank anlegen
dürfen. Für die Testphase können Sie auch daemonize: false
in die Konfig schreiben. Dadurch läuft pmacctd im Vordergrund.
Die Datei /etc/pmacct/acct_v4.schema beschreibt das Aussehen
der Tabellen:
debian2:~# cat /etc/pmacct/acct_v4.schema
CREATE TABLE acct_v4_%Y_%m_%d (
ip_src CHAR(15) NOT NULL,
ip_dst CHAR(15) NOT NULL,
src_port INT(2) UNSIGNED NOT NULL,
dst_port INT(2) UNSIGNED NOT NULL,
ip_proto CHAR(6) NOT NULL,
packets INT UNSIGNED NOT NULL,
bytes BIGINT UNSIGNED NOT NULL,
stamp_inserted DATETIME NOT NULL,
stamp_updated DATETIME,
PRIMARY KEY (ip_src, ip_dst, src_port, dst_port,
ip_proto, stamp_inserted)
);
Mit der gezeigten Konfig legt pmacctd für jeden Tag eine neue Tabelle in der
Datenbank an. Nun wird noch eine Datei mit den relevanten UDP- bzw. TCP-Ports
benötigt:
debian2:~# cat /etc/pmacct/ports.list
20
21
22
23
25
53
67
68
80
110
111
119
135
137
138
139
143
161
443
1433
4662
8080
10000
Nur Flows mit den in der /etc/pmacct/ports.list aufgeführten
Portnummern werden auch mit Portnummern erfasst. Alle andere Portnummern
werden von pmacctd durch eine 0 ersetzt. Dadurch wird das Datenvolumen
deutlich reduziert.
Starten von pmacctd
Für einen ersten Test starten Sie pmacctd mit der Option -d .
Dadurch werden zusätzliche Debug-Meldungen ausgegeben.
debian2:~# pmacctd -d -f /etc/pmacct/pmacctd.conf
INFO ( default/mysql ): 131070 bytes are available to address
shared memory segment; buffer size is 100 bytes.
INFO ( default/mysql ): Trying to allocate a shared memory
segment of 3276700 bytes.
OK ( default/core ): link type is: 1
( default/mysql ) *** Purging cache - START ***
DEBUG ( default/mysql ): UPDATE acct_v4_2007_11_03 SET packets=packets+1,
bytes=bytes+52, stamp_updated=NOW() WHERE FROM_UNIXTIME(1194117600) =
stamp_inserted AND ip_src='192.168.0.101' AND ip_dst='192.168.0.102'
AND src_port=0 AND dst_port=22 AND ip_proto='tcp'
DEBUG ( default/mysql ): UPDATE acct_v4_2007_11_03 SET packets=packets+44,
bytes=bytes+10210, stamp_updated=NOW() WHERE FROM_UNIXTIME(1194117600) =
stamp_inserted AND ip_src='88.72.223.254' AND ip_dst='192.168.0.102' AND
src_port=0 AND dst_port=0 AND ip_proto='tcp'
( default/mysql ) *** Purging cache - END (QN: 4, ET: 0) ***
OK: Exiting ...
115 packets received by filter
0 packets dropped by kernel
Beim ersten Aufruf legt pmacctd dann die benötigte Tabelle in der MySQL-Datenbank
an und schreibt die Daten in diese Tabelle. Den Inhalt können Sie sich
zum Beispiel via phpmyadmin ansehen.
Wenn das funktioniert, können Sie in der pmacctd.conf
wieder daemonize: true setzen und pmacctd starten:
debian2:~# pmacctd -f /etc/pmacct/pmacctd.conf
So sollte es aussehen, wenn pmacctd mit dem MySQL-Plugin aktiv ist:
debian2:~# ps -ef | grep pmacctd
root 8506 1 0 20:35 ? 00:00:00 pmacctd: Core Process [default]
root 8507 8506 0 20:35 ? 00:00:00 pmacctd: MySQL Plugin [default]
root 8525 7982 0 20:36 pts/0 00:00:00 grep pmacctd
Nun können Sie sich die erfassten Flows in der Datenbank ansehen.
In einem aktiven Netzwerk können da in kürzester Zeit Tausende
Flows auflaufen. Über die Datei /etc/pmacct/ports.list lässt sich die
Granularität der Erfassung beeinflussen. Wenn die genutzten Protokolle
und Ports für Sie nicht relevant sind, können Sie auch die Ports aus dem
Aggregate-Statement entfernen:
aggregate: src_host,dst_host
Das Datenvolumen in der Tabelle wird dadurch natürlich wesentlich verringert.
Bei Bedarf lässt sich die Erfassung auch auf die lokalen Hosts
eingrenzen.
Auswertung der Flow-Daten
Die von pmacctd in der SQL-DB gespeicherten Flows lassen sich
auf die vielfältigsten Arten auswerten. Für Einzelreports
eignen sich Programme wie OpenOffice.org Calc, Microsoft Excel und Access.
FloX - Flow eXplorer
Flox ist ein kleines PHP-Script zum Auswerten von Flow-Daten.
Flox wird über ein Webinterface gesteuert und erlaubt das einfache
Setzen von Filtern auf die Flows.
pNRG - pmacct's Network Resource Grapher
pNRG erlaubt eine einfache grafische Darstellung von pmacct-Daten.
pNRG greift dazu auf das pmacct-Frontend zu und speichert die Daten
in RRD-Files.
Um den Traffic der lokalen Host darzustellen, eignet sich folgende
pmacctd-Konfig:
debian2:~# cat /etc/pmacct/pmacctd-pnrg.conf
daemonize: true
interface: eth0
plugins: memory[in], memory[out]
aggregate[out]: src_host
aggregate[in]: dst_host
aggregate_filter[out]: src net 192.168.0.0/24
aggregate_filter[in]: dst net 192.168.0.0/24
imt_path[out]: /tmp/pmacct_out.pipe
imt_path[in]: /tmp/pmacct_in.pipe
Dann starten Sie eine neue pmacctd-Instanz mit:
debian2:~# pmacctd -f /etc/pmacct/pmacctd-pnrg.conf
Beim Aufruf von http://example.org/pnrg sollte das dann so aussehen:
pNRG benötigt rrdtool und rrdcgi .
Im Quellcode und den Templates von pNRG sind einige Pfade
hart kodiert. Diese müssen Sie bei Bedarf an ihr System anpassen.
Weiterführende Informationen
Viele weitere Informationen zu den Möglichkeiten von pmacct finden
Sie auf der Projekt-Homepage. Dort wird u.a. auch die Integration
in Cacti beschrieben. In den pmacct-contribs finden Sie nützliche Scripts
für die Auswertung der Flows (z.B. Top Talker finden).
Hilfe im Forum
Im Netzwerkforum erhalten Sie Hilfe zur Nutzung von pmacct.
- Fragen zur Installation und Benutzung von pmacct posten Sie bitte
in das Forum Tools
- Fragen zu Netzwerkprotokollen wie SNMP posten Sie bitte
in das Forum Netzwerkprotokolle und Dienste
Professioneller Support
Im Raum Berlin bieten wir Ihnen professionellen
Support für pmacct und die anderen
genannten Tools an.
Wir bieten Ihnen Hilfe bei Netzwerkproblemen und
betriebsbereite Server mit IP-Accounting-Tools nach Ihren Vorgaben.
Für den kurzfristigen Einsatz zur Fehlersuche halten wir auch
Leihsysteme mit pmacct, ntop, Cacti und anderer Analysesoftware für Sie bereit.
Individuelle Schulungen und Workshops zu Netzwerk-Monitoring und Protokollanalyse
gehören ebenfalls zu unserem Angebot.
|