Ngrep -> syslog

Servus,

also mein eigentliches Problem ist nicht ngrep, sondern postfix. Ich benötige ein Protokoll der Envelope-Daten. In der Standardeinstellung loggt postfix diese nicht mit, stelle ich aber die verbosity auf ein Level, in dem ich die benötigten Daten bekomme, wird postfix dermassen geschwätzig, dass ich das bisschen Envelope aus einem Himalaya von debug-Daten wieder isolieren muss.

Ich bin daher auf die Idee gekommen, mir mittels ngrep -q -t ‚^MAIL|^RCPT|^HELO|^EHLO|^550|^554|^QUIT|^RSET‘ port 25 | logger & genau die Daten, die ich sehen will, mitzuschreiben. Funktioniert eigentlich auch ganz gut - nur dass das piping an logger dafür sorgt, dass alle Daten in spitzen Klammern, also z. B. Mailadressen, ersetzt werden: aus wird auf diese Weise .

Etwas unbefriedigend, da ich gerade die Mailadressen brauche. Jemand einen Tipp, wie ich das ganze eleganter anfangen kann?

Danke
Schorsch

Servus,

Hi,

also mein eigentliches Problem ist nicht ngrep, sondern
postfix. Ich benötige ein Protokoll der Envelope-Daten. In der
Standardeinstellung loggt postfix diese nicht mit, stelle ich
aber die verbosity auf ein Level, in dem ich die benötigten
Daten bekomme, wird postfix dermassen geschwätzig, dass ich
das bisschen Envelope aus einem Himalaya von debug-Daten
wieder isolieren muss.

Kommt mir leider sehr bekannt vor.

Ich bin daher auf die Idee gekommen, mir mittels ngrep -q
-t ‚^MAIL|^RCPT|^HELO|^EHLO|^550|^554|^QUIT|^RSET‘ port 25 |
logger &
genau die Daten, die ich sehen will,
mitzuschreiben. Funktioniert eigentlich auch ganz gut - nur
dass das piping an logger dafür sorgt, dass alle Daten in
spitzen Klammern, also z. B. Mailadressen, ersetzt werden: aus
wird auf diese Weise .

Wieso das denn eigentlich? Wenn ich hier ein

 $ echo '' |logger

mache landet das unverfaelscht im logfile. Der syslogd wertet Zahlen zwischen als Prioritaet, allerdings wird das wohl durch logger (zumindest hier) abgefangen, vielleicht macht das Dein logger nicht. Ich mutmasse mal, dass Du auf

 sed 's/\([]\)/\\\1/g'

schon selbst gekommen bist, das aber aus Gruenden, die ich hier nicht nachvollziehen kann, nicht funktioniert hat…

Alternativ koennte ich Dir syslog-ng waermstens ans Herz legen, der kann nach regulaeren Ausdruecken auf facility, level, Programmname, hostname und message selbst in unterschiedliche Dateien schreiben. Dann ersparst Du Dir das Gefrickel mit ngrep.

HTH,
Gruss vom Frank.

Ich mutmasse mal, dass Du auf

sed
‚s/([])/\\1/g‘

schon selbst gekommen bist,
das aber aus Gruenden, die ich hier nicht nachvollziehen kann,
nicht funktioniert hat…

Das ist eine Sache, die ich absolut nicht begreife: Ich kann mit ngrep beliebige Datenströme auf jedem beliebigen Port filtern und an sed pipen - nur nicht Port 25.

ngrep port 25 | sed 's/Ausdruck#1/Ausdruck#2/'

bleibt absolut stumm.

Alternativ koennte ich Dir syslog-ng waermstens ans Herz
legen, der kann nach regulaeren Ausdruecken auf facility,
level, Programmname, hostname und message selbst in
unterschiedliche Dateien schreiben. Dann ersparst Du Dir das
Gefrickel mit ngrep.

Werd ich mir mal anschauen. Zwar bin ich mit syslog-ng schon mal auf die Schnauze gefallen (ich erinnere das damalige Problem jetzt nicht mehr), aber damals war ich auch ziemlich unmotiviert an die Sache gegangen.

Danke
Schorsch

P.S.

Das ist eine Sache, die ich absolut nicht begreife: Ich kann
mit ngrep beliebige Datenströme auf jedem beliebigen Port
filtern und an sed pipen - nur nicht Port 25.

ngrep port
25 | sed ‚s/Ausdruck#1/Ausdruck#2/‘

bleibt absolut
stumm.

Das gilt übrigens nicht nur, wenn ich explizit auf Port 25 filtere, sondern auch dann, wenn ich keinen spezifischen Port angebe, sondern nur nach typischen Pattern aus dem smtp-Datenstrom filtere. Schicke ich das gleiche Pattern hingegen über einen beliebigen anderen Port, erhalte ich die erwartete Ausgabe.

Gruss
Schorsch

Das ist eine Sache, die ich absolut nicht begreife: Ich kann
mit ngrep beliebige Datenströme auf jedem beliebigen Port
filtern und an sed pipen - nur nicht Port 25.

> ngrep port 25 | sed 's/Ausdruck#1/Ausdruck#2/'

bleibt absolut stumm.

Auch das kann ich hier nicht nachvollziehen.

 # ngrep '^(HELO|QUIT)' port 25 |sed 's/HELO/HEYU/'

macht genau das, was man von ihm erwartet.

 $ ngrep -V; sed --version |head -n1
ngrep: V1.40.1, $Revision: 1.23 $
GNU sed Version 4.1.2

Na, hoffentlich hast Du aktuelle checksums von dem System. :wink:

Gruss vom Frank.

Das

**GNU sed Version 4.1.2**

war’s. Nachdem ich sed aus den Backports von 3.0.2 auf 4.1.2 upgegradet habe, bekomme auch ich die erwarteten Ergebnisse. Jetzt schaue ich mir mal meine logger-Version an.

Vielen Dank,
Schorsch

Update und Epilog
Nachdem sed zwar jetzt funktioniert, aber mit seinen beschränkten Basic Regexes doch nicht das gewünschte Ergebnis erzielen konnte, pipe ich die ngrep-Ausgabe jetzt an ein eigenes Perlscript, welches die gewünschte Formatierung vornimmt und die Ausgabe an syslog schickt. Funktioniert so weit ganz gut.

Danke an Der Frank und alle anderen, die sich sonst über diese Sache den Kopf zerbrochen haben,
Schorsch