PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Log Datei per Email verschicken



waldi5001
05.10.07, 12:04
Hallo Leute

Ich habe einen Server der auch ans Internet angebunden ist. Unter der Woche kann ich nicht per SSH auf diesen zugreifen da ich hinter einer Firewall sitze. Jetzt wollte ich das mir das Logfile immer per EMail zugesandt wird. Wie kann ich sowas via Cron Job machen. Muss ich zum schicken extra Postfix konfigurieren? Gibt es da einen Befehl dafür?

Bis dann Waldi

marce
05.10.07, 12:10
als cronjob:

0 * * * * mail -s Logfile a@bc.de < $logfile

Ob und was Du am Postfix konfigurieren musst kann man bei der jetzigen Informationslage leider nicht sagen...

waldi5001
06.10.07, 15:29
Also ertmal Danke für die schnelle Hilfe. Leider funktioniet das bei mir nicht. Ich meine es wäre ja auch ein bisschen unlogisch. Braucht man dazu nicht noch einen Postausgangsserver? Es würde ja reichen wenn man einen angeben könnte. In den Man Pages steht nichts. Oder ich kapier nicht was da steht. Kann ja auch sein. Wäre Cool wenn einer ne Lösung hätte

Tomek
06.10.07, 15:31
Läuft kein lokaler MTA? Wenn nicht, dann kannst du z.B. msmtp (http://msmtp.sourceforge.net/) installieren und so konfigurieren, dass ein externen MTA zum Versenden von Mails benutzt wird.

zyrusthc
06.10.07, 16:29
Läuft kein lokaler MTA? Wenn nicht, dann kannst du z.B. msmtp (http://msmtp.sourceforge.net/) installieren und so konfigurieren, dass ein externen MTA zum Versenden von Mails benutzt wird.

Das ganze kann über ein externes Relay auch so mittels Script ala netcat realisiert werden.

zb.

#!/bin/sh
#Email über relay senden

#DATEN="Das ist die Nachricht"
DATEN=$(cat /pfad/datei.log)

SMTPSERVER="xx.xx.xx.xx"
SMTPUSER="benutzername"
SMTPPASS="passwort"

SOURCE="absender@domain.de"
TARGET="empfänger@domain.de"
SUBJECT="Betreff"
MAILTEXT=$DATEN
###########################################


TMPDATA="/tmp/send.txt"

CRYPT=$(perl -MMIME::Base64 -e 'print encode_base64("'$SMTPUSER'\0'$SMTPUSER'\0'$SMTPPASS'");')

echo HELO localhost > $TMPDATA
echo AUTH PLAIN $CRYPT > $TMPDATA

echo MAIL FROM: $SOURCE >> $TMPDATA
echo RCPT TO: $TARGET >> $TMPDATA
echo DATA >> $TMPDATA
echo SUBJECT: $SUBJECT >> $TMPDATA
echo TO: $TARGET >> $TMPDATA
echo $MAILTEXT >> $TMPDATA
echo . >> $TMPDATA
echo QUIT >> $TMPDATA

cat $TMPDATA | netcat $SMTPSERVER 25

rm -f $TMPDATA
Das Script dann einfach über Cron aufrufen lassen.


Greeez Oli

waldi5001
07.10.07, 17:28
So etzt haben wir hier diese wunderbare Fehlermeldung. Weis einer warum? Ist alles so eingestellt wie bei meinem EMail Client. Mir fällt aber noch auf das ich da einen Haken bei: Server erfordert Authentifizierung setzen mus. Aber das mach ich doch oder? Ich meine bei meinem Server authentifizieren.


220 netroom12.de ESMTP Postfix
535 Error: authentication failed
250 Ok
503 <management@stellwerkx.de>: Recipient address rejected: Improper use of SMTP command pipelining
554 Error: no valid recipients
221 Error: I can break rules, too. Goodbye.

BedriddenTech
08.10.07, 07:58
Nutzt du das hier gepostete Skript? Da sind leider Fehler drin. Gib uns bitte mal den SMTP-Code, den du an den MTA übergibst.

waldi5001
08.10.07, 08:07
Nutzt du das hier gepostete Skript? Da sind leider Fehler drin. Gib uns bitte mal den SMTP-Code, den du an den MTA übergibst.

Sorry das versteh ich jetzt nicht. Ich habe das Script oben genommen, dieses angepasst und ausgeführt. Dabei kommt die von mir gepostete Fehlermeldung. Hätte ich da noch was anderes machen sollen?

Ich weis nicht was ein SMTP-Code ist. Einen MTA habe ich nicht laufen. Zumindest nicht das ich wüsste.

MTA = MailTransferAgent??

BedriddenTech
08.10.07, 08:50
Richtig, der MTA ist dein Mail Transfer Agent, sprich der SMTP-Server. Kommentiere mal die letzte Zeile aus ("rm -f $TMPDATA") und gib uns dann den Inhalt der Datei (/tmp/send.txt).

waldi5001
08.10.07, 11:02
Ja mach ich. Leider kann ich euch die Sache erst frühestens am Freitag geben da ich im Moment kein Zugriff auf den Server habe. Ich würd mich dann nochmal melden

zyrusthc
08.10.07, 20:41
Nutzt du das hier gepostete Skript? Da sind leider Fehler drin. ...
Bullshit, wo ist denn da ein Fehler?!
Bei mir funzt es so wie gedacht!

220 v29xxx.1blu.de ESMTP Postfix (2.2.5)
250 v29xxx.1blu.de
235 Authentication successful
250 Ok
250 Ok
354 End data with <CR><LF>.<CR><LF>
250 Ok: queued as 748764567404E
221 Bye


... und gib uns dann den Inhalt der Datei (/tmp/send.txt).
Warum sollte er das tun? Schliesslich enthällt $TMPDATA auch seinen PasswortHash!

@waldi5001
Also poste hier nicht den String nach "AUTH PLAIN"!
Überprüfe noch einmal ob du Passwort und Benutzername auch korrekt angeben hast.


Greeez Oli

waldi5001
09.10.07, 10:09
Hab ich gemacht. Das ist wirklich zu 100% sicher. Ich hab es mehrere male überprüft, neu eingegeben. So kompliziert ist der BN und das PW auch nicht das ich das nicht noch hinkrig. Ich glaub der SMTP Server mag das nicht was wir mit ihm machen. Dem fehlt was keine Ahnung. Vielleicht müssen erst die Mails geholt werden bevor sie geschickt werden können. Sowas gibts doch auch oder??

BedriddenTech
09.10.07, 12:26
Bullshit, wo ist denn da ein Fehler?!
Bei mir funzt es so wie gedacht!


echo HELO localhost > $TMPDATA
echo AUTH PLAIN $CRYPT > $TMPDATA

"HELO localhost" wird nie in $TMPDATA stehen, weil "AUTH PLAN $CRYPT" den Inhalt überschreibt. Das ist ein Fehler, wenn auch vielleicht kein gravierender. Einige MTAs regen sich über ein fehlendes "HELO" aber auf.

Nebenbei: Was tust du, wenn er die 2GB Firewallogs verschicken will? (Das wird er zwar wahrscheinlich nicht tun wollen, aber genausowenig guckt er jeden Tag nach, wie groß die Datei geworden ist.) Der Server freut sich bestimmt über "DATEN=$(cat /var/log/foo)", und noch viel mehr über das unnötige "MAILTEXT=$DATEN". Die temporären Daten erstmal vollständig in /tmp/send.txt zu speichern ist auch keine gute Lösung - auffällig und leicht ausnutzbar. Seinen Paßworthash hat er auf jeden Fall öffentlich auf dem System herumliegen. Hoffentlich kommt keiner auf die Idee, regelmäßig in /tmp nach Dateien zu suchen, die praktische Sachen enthalten könnten.

zyrusthc
09.10.07, 14:51
@BedriddenTech
OK könnte möglich sein, dann mache er bei "AUTH PLAN $CRYPT" aus > einmal >> .
Und zum Thema grosses Logfile, man könnte eine If Abfrage einbauen die prüft ob das Logfile zu gross ist, und in diesen Fall blos eine Warnung sendet. Der Passworthash in /tmp ist das kleinere Problem , denn man könnte ja auch statt "rm -f $TMPDATA" auch "shred -z $TMPDATA" anwenden. Das grössere Problem ist das das Passwort im Script steht!

@waldi5001
Schau dir mal den Vorschlag von Tomek in #4 (http://www.linuxforen.de/forums/showpost.php?p=1579626&postcount=4) an.


Greeez Oli

BedriddenTech
09.10.07, 15:22
@BedriddenTech
Und zum Thema grosses Logfile, man könnte eine If Abfrage einbauen die prüft ob das Logfile zu gross ist, und in diesen Fall blos eine Warnung sendet.

Es ging mir darum, daß du das Logfile gleich 2x in den RAM schreibst. Ein "cat /logfile >> /tmp/file" hätte auch gereicht.


Der Passworthash in /tmp ist das kleinere Problem , denn man könnte ja auch statt "rm -f $TMPDATA" auch "shred -z $TMPDATA" anwenden.

Dann hätte er den Hash gleich hier veröffentlichen können. ;) Mir geht's nicht um Dateifragmente, sondern darum, daß die Datei, die dein Skript anlegt, solange von allen lesbar ist, bis die Datei versendet ist. Ich glaube kaum, daß das betreffende Nutzerkonto eine umask von 0077 besitzt.

Machen wir's doch so:


#!/bin/sh
#
# Begin of user-customizable parameters
#

# The logfile that is to be mailed
LOGFILE=/var/log/foo.log

# SMTP authentication data
SMTPSERVER="xx.xx.xx.xx"
SMTPUSER="benutzername"
SMTPPASS="passwort"

# Mail header
# MAIL_FROM and RCPT_TO must be in the form "Username <user@domain.tld>" if you want to be RFC-conformant
MAIL_FROM="Logsender <logsender@domain.tld>"
RCPT_TO="Logreceiver <logreceiver@domain.tld>"
SUBJECT="Logfile $LOGFILE from $(date)"

#
# User-customizable area ends.
#


CRYPT=$(perl -MMIME::Base64 -e 'print encode_base64("'$SMTPUSER'\0'$SMTPUSER'\0'$SMTPPASS'");')
TMPFILE=$(mktemp /tmp/logsend.XXXXXXXXXX)

[ -n "$CRYPT" -a -r "$TMPFILE" ] || exit 1
chmod 0600 "$TMPFILE"

# Say hello
echo "HELO localhost" > "$TMPFILE"

# Authenticate
echo "AUTH PLAIN $CRYPT" >> "$TMPFILE"

# Set up mail header
echo "MAIL FROM: $MAIL_FROM" >> "$TMPFILE"
echo "RCPT TO: $RCPT_TO" >> "$TMPFILE"
echo "DATA" >> "$TMPFILE"
echo "SUBJECT: $SUBJECT" >> "$TMPFILE"
echo "TO: $RCPT_TO" >> "$TMPFILE"
echo >> "$TMPFILE"
cat "$LOGFILE" >> "$TMPFILE"
echo '.' >> "$TMPFILE"
echo "QUIT" >> "$TMPFILE"

cat "$TMPFILE" | netcat "$SMTPSERVER" 25

rm -f "$TMPFILE"

Hoffentlich ist da jetzt kein Fehler drin, wäre jetzt echt peinlich. :D

waldi5001
09.10.07, 15:39
Vielen Danke für eure Antworten. Ich prüfe alles ASAP und mach ein Feedback. Bis dann. Cu