Skript für Mail mit Anhang und SMTP Authentfizierung

iceview

Lieutenant
Registriert
Jan. 2008
Beiträge
705
Hallo zusammen,

wenn man ein Shell Skript baut um unter Ubuntu 12.04 eine Mail mit Anhang an einen SMTP (netzinternen) Relay zu senden, welches tool würdet Ihr nehmen? Der SMTP lauscht auf Port 25, TLS und braucht eine Authentifizierung.

- sendmail -> muss ich die mailutils dann mit installieren?
- ssmtp?

Danke für einige Tipps
 
sendmail reicht ist eh nur ein einzeiler Script ist da ggf. etwas zu hoch gegriffen.
 
Zuletzt bearbeitet:
Das stimmt... mehr als ne Zeile würde es auch nicht werden ;-)
Ergänzung ()

Ich habe das mit sendmail nicht ganz hinbekommen, ist mir irgendwie zu kompliziert gewesen.

Mit postfix und mailutils habe ich es versucht, dies geht --> allerdings nur wenn ich die Firewall zwischen den beiden Servern öffne (any <-> any).
Ich möchte eigentlich nur definieren Host darf 25 auf Mailserver. Wenn ich dies so eng mache, dann kann ich keine Mail versenden.

Ich nutze nur TLS, kein SSL zwischen den beiden Netzen. Eine Mail in der Shell kann ich mit dem Kommando "mail" versenden, wenn alles an Ports offen ist.

Strange ist, dass ich im Logfile der Firewall sehe wenn eine Mail rausgeht, allerdings nicht wie erwartet Host - 25 - Server, sondern Server-25 auf Host x beliebiger Port. Ich nehme an hier sehe ich die Quittung und das was ins Log als "erledigt" geschrieben wird.

Ist aber für eine externe Firewallkonfiguration eher ungünstig... Jemand eine Idee wie man es einschränken oder anders machen kann?

Danke
 
Meinst du mit "Host darf 25 auf Mailserver", dass der Quell-Port nur 25 sein darf? Das würde nur ein als root laufendes Programm überhaupt hinbekommen können. Warum sollte man das wollen? Nagelst du den Quell-Port fest, wären nie mehrere Verbindungen zum gleichen Server gleichzeitig möglich, da das Quadrupel Quell-IP, Quell-Port, Ziel-IP, Ziel-Port für jede Verbindung eindeutig sein muß. Es ist keine wirre, überflüssige Spielerei, dass beim Aufbau einer neuen Verbindung im Normalfall der Quell-Port ständig wechselt.

Ist aber für eine externe Firewallkonfiguration eher ungünstig...
Würde eher sagen, du hast eine "ungünstige" Vorstellung von clientseitigen Portbeschränkungen. Planst du alle Webbrowsernutzer auch nur mit Quell-Port 80 raus in die Welt zu lassen? :) Das wird nichts. Ich vermute dein Problem bei der Planung der Firewallregeln, nicht beim Versenden der Mail.

Im Eingangspost stand, dass die Mail an ein netzinternes Ziel gehen soll. Nun schreibst du, dass dir die "externe Firewallkonfiguration" Sorgen macht?!? Vielleicht habe ich alles falsch verstanden.
 
Zuletzt bearbeitet:
Ich route nach intern in ein anderes Subnetz, allerdings mittels der Firewall.

Klar soll der Sender nur auf 25 senden. Die Ports sind z.B. bei unserer Firewall schon vorkonfiguriert (wenn man es nutzen mag) in die gängigen Services mit deren Portgruppen. Websurfing = 80+443 / Mail = 443+25+587+110 usw...sind in unseren Fall Sophos UTM 220.

Natürlich gehen die Geräte nur mit den Ports raus... sonst wäre ja eine Einschränkung der Verbindungen überhaupt nicht möglich. Ich muss doch definieren können x darf nur service y auf z machen. Hinter Service y ist dann z.B. Websurfing oder Mail oder oder oder...

Gängige Regel ist z.B. LAN darf Websurfing in Richtung any. Websurfing lässt also nur 443 und 80 raus.
Anderes Beispiel ist:

mail.JPG

Email Messaging enthält dann:

mail2.JPG

Und hier ist das Problem. Um am Beispiel hier zu arbeiten:

- Rechner im LAN intern sendet auf 25 an Mailserver
- Paket geht raus, sieht man im Log
- Mailserver sendet
- alles gut

Mit einem Ubuntu Rechner im LAN:

- Paket geht auf 25 raus an Mailserver, sieht man im Log
- 2 Pakete gehen vom Mailserver:25 auf die IP des LAN Rechners zurück
- keine Mail wird versendet
- warum? was unterscheidet hier also das Mailing telnet oder Windows von der postfix, ssmtp oder andere Funktion?
- Wenn ich zusätzlich definiere Mailserver darf alles an Ubuntu Rechner (also einen Rückweg schaffe) --> dann geht es.

Ich hoffe es ist etwas klarer geworden :)
 
iceview schrieb:
Klar soll der Sender nur auf 25 senden. Die Ports sind z.B. bei unserer Firewall schon vorkonfiguriert (wenn man es nutzen mag) in die gängigen Services mit deren Portgruppen. Websurfing = 80+443 / Mail = 443+25+587+110 usw...sind in unseren Fall Sophos UTM 220.
80+443 für Web sind nur Zielports. Du unterschiedest leider nie zwischen Quell- und Zielport. Was mit "Klar soll der Sender nur auf 25 senden" gemeint ist, bleibt deshalb leider nebulös.

Zielport(also die Serverseite beim Verbindungsaufbau) beim Versenden einer Mail per SMTP ist 25. Der Quellport (Clientseite) bei diesem Versenden wird jedoch in aller Regel nicht 25 sein. Die TCP-Verbindung sieht also so z.B. so aus: SMTPclient:20000 <----> SMTPserver:25

Beim Websufen analog: HTTPclient:20000 <---> HTTPserver:80

(Die 20000 steht jeweils für "zufälliger Port größer 1023")

Man _kann_ auch den Quellport einer TCP-Verbindung auf was festes setzen, erntet damit aber die in meiner ersten Antwort genannten Einchränkungen. (nur 1 Verbindung gleichzeitig, man muß root sein wenn Port kleiner 1024)

Natürlich gehen die Geräte nur mit den Ports raus... sonst wäre ja eine Einschränkung der Verbindungen überhaupt nicht möglich.
Mit diesen Ziel-Ports, ja. Aber nicht mit diesen Quell-Ports.

Um die Unterhaltung sinnvoll zu machen:
1. Bitte nicht mehr nur von "Port" reden. Bei Paketen genau QuellPort oder Zielport unterscheiden. Da diese beim Antwortpaket genau vertauscht werden, ggf. sagen, von welcher Seite der Verbindung gerade die Rede ist.
2. laß uns die 2 Rechner Rechner Ubuntu und Mailserver nennen

Den hintere Teil deines Beitrags, wo du die beiden Varianten vergleichst, sagt mir nicht viel, weil zu vieles unklar ist. Ebenso die Gui-Screenshots. Ganz besonders ist unklar, was du bei
Wenn ich zusätzlich definiere Mailserver darf alles an Ubuntu Rechner (also einen Rückweg schaffe) --> dann geht es.
genau getan hast. Ich gehe davon aus, das du auf dem Mailserver diese Firewallregel ein/ausschaltest, richtig? Nötig wäre kein Zulassen von "alles an Ubuntu". Nötig wäre nur "Antwortpakete an Ubuntu für bestehende Verbindungen zum SMTP-Server" zuzulassen. Die Regel dafür würde man auf einer Linuxkiste sehr strikt etwa so formulieren:
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -d ubuntu-ip -m state --state ESTABLISHED,RELATED -j ACCEPT
oder allgemeiner für die Testphase
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Was deine GUI-Firewall tatsächlich tut, ist aus den Screenshots nicht zu erraten, insbesonderen nicht was genau sie erlaubt, wenn deine "alles-erlauben-regel" nicht aktiv ist. Auf dem Mailserver kannst du für die fragliche Verbindung bei eingehenden Paketen NUR auf Ziel-Port 25 prüfen und bei abgehenden Paketen NUR auf Quell-Port 25.

Mein Tip, um die Ursache zu finden:
Log dich auf Ubuntu ein und verschicke von da mal manuell eine Mail via SMTP an den Mailserver. Dann siehst an welcher Stelle es klemmt und kannst besser auf Ursachensuche gehen. Du sagst also auf Ubuntu "telnet mailserver:25" und redest mit dem Mailserver SMTP. Nimm Mailadressen, die bei dir funktionieren sollen, nicht meine. Das sieht dann etwa so aus:

Code:
$ telnet mailserver:25
Trying 11.12.13.14...
Connected to mailserver.
Escape character is '^]'.
220 ESMTP server ready
HELO ubuntu
250 irgendeine nette antwort
MAIL FROM: absender@bla.com
250 OK
RCPT TO: empfaenger@bla.com
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
Das ist der Mailinhalt
.
250 OK 
QUIT
221 mailsever closing connection
Connection closed by foreign host.
$

In meinem Beispiel lief alles glatt. Die Mail wurde vom Mailserver erfolgreich angenommen. Wenn das geht, sollte auch sendmail (bzw. der Sendmailersatz deiner Wahl, der sich nur aus Kompatibilitätsgründen "sendmail" nennt) aus dem Skript seine Mail an den Mailserver absetzen können.
 
Zuletzt bearbeitet:
Zurück
Oben