|
|
|
Email-Server: Postfix - Ein Email-System für Linux |
|
Im dritten und letzten Teil des Email-Servers [1] erf�hrst du wie die Emails von deinem Email-Server versendet werden.
Dazu dient uns Postfix.
Postfix
Postfix ist ein sogennanter MTA, ein Mail Transfer Agent,
er kümmert sich um den Versand und Empfang von Email. Er nimmt die
Emails von den Nutzern im Netzwerk an, verteilt sie im eigenen Netzwerk
oder übergibt sie an einen anderen MTA. Desweiteren kann er auch Emails
außerhalb des eigenen Netzes annehmen und weiterleiten. Er ist quasi
der Postbote; ein Tux mit einem Rucksack, der durch das Netz flitzt.
Postfix ist (wird) von Wietse Venema geschrieben worden und steht unter
einer von der Mozilla Public License abgeleiteten Lizenz von IBM.
Richtig, IBM, dort arbeitet Wietse und bei IBM hat Postfix einen
anderen Namen "IBM Secure Mailer".
Postfix ist ein sehr sicheres und ziemlich einfach zu administrierendes
Programm. Postfix istmodular aufgebaut und besteht aus vielen kleinen Programmen,
hier mal eine kleine Übersicht (Quelle: Postfix-Doku) :

Erklärung:
- gelbe Ellipsen = Programme
- gelbe Kästchen = Mail-Queues
- grüne Kästchen = Tabellen / Dateien
In der obigen �berischt erkennst du, welchen Weg die Emails durch die einzelnen
Postfix-Programme nehmen.
Ich denke mal das reicht als grober Überblick, weiteres findest du
in der Doku auf der Postfix-Homepage [2].
Installation von Postfix
Die Installation kann einfach oder schwer werden, es hängt davon ab
ob und welcher MTA (sendmail, smail, qmail, exim, ...) vorher auf deinem
System lief. Am besten einfach Postfix von deiner Distribution installieren,
sollte überall dabei sein (bei Mandrake ist es der Standart-MTA).
Bei Debian solltest du nicht den exim deinstallieren (sonst wird noch weitere
Software deinstalliert !! ), sondern einfach Postfix installieren. Dann
wird auch exim entfernt.
Wenn du es aus dem Internet im Quelltext laden willst, solltest du vorher
alles was mit sendmail zu tun hat umbennen ( d.h. sendmail, newaliases, mailq) und dann kompilieren und installieren (der üblich Dreisatz: ./configure, make, make install).
Aber wie gesagt, es kann beim selberkompilieren sehr verschiedene
Probleme geben und deshalb beschreibe ich es nicht, kann dir aber bei
Fragen evtl. weiterhelfen.
Wenn dein Provider dir anbietet oder dich zwingt SMTP mit Authentifizierung (STMP Auth) zu verwenden, solltest du das tun. Die Vorgehensweis hierzu findest du im Tuxhausen-Artikel SMTP AUTH mit Postfix [3].
Konfiguration von Postfix
main.cf
Die Datei main.cf (meist unter /etc/postfix zu finden) ist die
Hauptkonfigurations-Datei von Postfix. In ihr stehen alle wichtigen
Parameter.
Die Datei erklärt auch direkt (in englisch) was der Parameter bewirkt,
und wie er voreingestellt ist. Ich werde hier nicht alle Parameter
erklären, sondern nur die wichtigen die wir für unseren Server
brauchen!
Für dieses Beispiel hab ich Postfix in der Version 1.1.11 unter Debian
Woody (3.0) benutzt.
- queue_directory,command_directory, daemon_directory
dienen zum Einstellen der Arbeitsverzeichnisse und können meist so stehen bleiben.
- mail_owner
legt den Besitzer der Queues und der meisten Postfix-Programme fest.
Auf keinen Fall root verwenden !! Besser einen Benutzer anlegen der nur
für Postfix zuständig ist und sich nicht einloggen kann, Empfehlung: mail_owner = postfix
- myhostname
legt fest welchen Namen der Mailserver haben soll. Bei uns also:
myhostname=benton.example.net
Gibst du hier keinen Namen an, probiert Postfix den Namen mit Hilfe von gethostname() selber herauszufinden.
Ein Tipp: Der Name muß nicht der richtige Name des Rechners sein,
solange der Name per DNS aufgelöst werden kann.
- mydomain
legt den Domain-Namen fest. Also f�r uns: mydomain=example.net
- mydestination
legt fest wofür der Server zuständig ist; d.h. f�r welche Domains
die Emails angenommen werden. Günstig wäre unser Hostnamen, unsere
Domain und noch unser localhost, die Einstellung dafür ist :
mydestination= $myhostname, $mydomain, localhost.$mydomain
Das $ vor $myhostname besagt, das der Namen benutzt werden soll der in
myhostname steht. Die Variable $myhostname hat also den Wert benton.example.net
Diese Vorgehensweise verhindert Schreibfehler und dient zum schnellen �ndern
mehrerer Parameter.
- alias_maps
legt fest welche Alias-Datenbank verwendet werden soll und welches Format sie hat. Siehe nächsten Abschnitt
Der richtige Eintrag für uns ist : alias_maps = hash:/etc/aliases
- mynetworks
An diesem Punkt tr�gst du die Netzwerke ein, die Postfix als vertrauensw�rdig
einstufen soll.
Also f�r uns: mynetworks = 127.0.0.0/8, 192.168.44.0/24
Die 127. Adresse stellt den localhost, also den Emailserver selber dar.
- relayhost
legt fest wohin Postfix die Emails die er selber nicht ausliefern kann
(also alles außerhalb der Domain), senden soll. Wir wollen sie zu dem
Mailserver unseres Providers senden, und zwar auf Port 25 (Standart
SMTP-Port). Wir geben also an: relayhost = smtp.puretec.de
Diese Einstellung hängt natürlich davon wie dein Povider es genau
managt, es könnte sein daß du dich zuerst via POP3 anmelden
mußt. Damit wollen die Provider Spam verhindern. Verlangt dein Provider
SMTP mit Authentifizierung (STMP Auth), sollten du mal in Tuxhausen-Artikel
SMTP AUTH mit Postfix [3] gucken.
Genaueres bitte bei deinem Provider erfragen!
Wäre unser Server fest mit dem Internet verbunden, wären wir
so gut wie fertig (allerdings w�re dieser Server dann extrem unsicher );
aber unser Server wählt sich ja nur bei Bedarf ein und kann nur dann
die Emails abschicken.
Also müßen wir noch einige Dinge einstellen:
- defer_transports = smtp
verhindert das der
Server selbständig versucht die Emails zu veschicken. Wir wollen dem
Server nach der Einwahl explizit die Anweisung zum Email versenden
geben. Mit dem Befehl postfix flush verschickt Postfix die Email, dieser Befehl gehöhrt also in dein
Einwahlscript.
Leider ist dieses Script sehr Distributionsabhängig, aber unter /etc/ppp/ip-up
findest du ein Script das sich um die PPP-Anmeldung kümmert. Dort
trägst du diesen Befehl irgendwo unten ein, dann sollte der Server
nach der Einwahl die Emails abliefern. Ich presönlich habe mir ein
Script für diesen Zweck geschrieben (für Debian potato).
Leider gibt es ein kleines Problem: Wenn du online bist und eine Email
schreibst, versendet Postfix diese nicht, da er ja nur explizit
aufgefordert ausliefern soll!
Tja, ich habe die Funktion wieder herausgenommen, aber im
Postfix-Manual wird extra darauf hingewiesen. Weitere Hinweise zum
Betrieb von Postfix an einem Einwahl-Rechner findest du hier [4] (eng.) (Ich danke Ralf Rascher für diesen Tip).
Ist der Server allerdings nicht online und bekommt eine Email, so wird
diese gespeichert und sp�ter versendet.
Das war es auch schon, alle anderen Parameter sind für unseren Zweck
nicht direkt wichtig. Solltest du den Server aber in einer größeren
Umgebung einsetzen die permanent mit dem Internet verbunden ist,
solltest du noch einige Sicherheitsvorkehrungen gegen Spam einbauen.
Alle weiteren Parameter sind in der Datei und in der Doku beschrieben.
Zuerst testen wir mal ob alles soweit in Ordnung ist:
Achtung !! postfix check findet keinerlei Schreibfehler !!
Zum �berpr�fen deiner Parameter folgendes eingeben:
Hier sollten jetzt alle Parameter die du in die main.cf geschrieben hast auftauchen.
Jetzt kannst du deinen Postfix mal starten:
Gibt es Fehler in deiner Konfigurationsdatei oder falsche Rechte, weist
dich Postfix nun darauf hin, ansonsten ist alles glatt gegangen.
Dieses Start-Kommando mußt du natürlich noch in deine Startscripte
aufnehmen, sonst hast du nach dem nächsten rebbot keinen Postfix mehr.
Das brauchst du aber nur zu machen, wenn du Postfix aus den Quellen kompilierst
hast.
Beendet wird Postfix so:
Nach jeder Änderung mußt du Postfix sagen, daß er die Konfiguration neu einlesen soll, und zwar so:
Die Alias-Datenbank
Mit dieser Datenbank lassen sich lokale Adressen umschreiben und umleiten.
Wir brauchen diese Datenbank um einen virtuellen Email-Namen einem reelen
Benutzer-Namen zuordnen, also alle Emails an
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
gehen
an den lokalen Benutzer bert.
Verwendest du f�r die lokalen Benutzer-Namen den Email-Namen, brauchst
du die Alias eigentlich nicht, aber guck trotzdem mal rein.
Die Eintragungen finden in der Datei aliases statt, diese ist meistens im /etc Verzeichnis zu finden.
Achtung, sollte diese Datei noch von sendmail stammen, könnte es damit evtl. Probleme geben!
Ein Eintrag in der Alias-Datenbank sieht bei Postfix so aus:
"B.Beimer": bert
"A.Allen": angela
root: bert
postmaster: root
test:
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
|
Die erste Zeile bedeutet, alle Emails an B.Beimer(@example.net) werden
an bert(@example.net) weitergleitet. Das gleiche machen wir mit Angela.
Danach legen wir fest, daß alle Emails die an root gehen, zu bert
geleitet werden. Danach gehen alle Emails von postmaster an root , aber
wir eben festgelegt das diese an bert gehen; also kriegt bert alle
Emails die an postmaster gehen.
Als kleinen Zusatz zu den F�higkeiten von Postfix steht in der letzten Zeile: Alle Emails
die nach
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
gehen, werden an
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
weitergeleitet.
Wichtig ist noch: Kommt ein Punkt im Namen vor, benutze die " "Zeichen (siehe letzte Zeile).
Ich denk mal, so schwer war das nicht, oder?
Nach jeder Änderung in aliases mußt du Postfix sagen, daß er die
Datenbank neu erzeugen soll (keine Angst, die aliases wird dabei nicht
überschrieben) und das geht so:
| [root]# postalias /etc/aliases |
Mailing-Listen
Mit der Alias Datenbank kannst du auch prima kleine Email-Verteiler-Listen
schreiben. Nehmen wir mal an du willst allen lokalen Benutzern eine Mitteilung
schreiben, wäre es nicht prima wenn du eine Email an
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
schreiben würdest, und alle bekommen sie?
Kein großes Problem mit Postfix:
Zuerst eine Text-Datei ( /etc/postfix/lists/alle ) mit der Empfänger-Liste anlegen.
Hier die Liste:
#Interne Mailingliste von example.net
#DAS LETZTE KOMMA IST WICHTIG!!!
angela,
bert,
|
Und in die Alias-Datenbank kommt dieser Eintrag:
#Mailinglisten
alle: :include:/etc/postfix/lists/alle
|
Dann noch schnell die Alias-Datenbank updaten und das war es schon, schreibst
du nun eine Email an
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
, bekommen angela und bert diese Email.
Das Ganze geht natürlich auch mit Adressen die nicht innerhalb deiner
Domain liegen. Der Tuxhausen-Newsletter funktionierte so. Deine
Textdatei sieht dann in etwas so aus:
#Tuxhausen Newsletter
#DAS LETZTE KOMMA IST WICHTIG
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
,
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
,
"
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
",
|
Tipps zu Postfix
- Auch Postfix hat ein sendmail, es ist aber nicht das Original sendmail
gemeint, sondern das "Postfix-sendmail-Ersatz-Programm", damit bleiben
die wichtigsten alten sendmail Befehl verfügbar, nur das sie jetzt von
Postfix ausgeführt werden.
- Mit dem Befehl mailq werden alle Emails angezeigt die noch nicht
ausgeliefert wurden. Im Grunde versteckt sich hinter mailq der Befehl
sendmail -bp
- Mit postfix flush fordest du Postfix auf, alle wartenden Emails
jetzt zu verschicken. Sehr nützlich wenn die Einwahl ins Internet erfolgt
ist
- Alle noch nicht abgeschickten Emails lagern unter /var/spool/postfix/deferred/.
Löscht du eine Email aus dem Verzeichnis, wird sie nicht mehr versendet.
Nützlich um eine fehlerhafte Email noch schnell abzufangen.
- Hast du eine echte Domain (wie tuxhausen.de) und verwendest du diese Domain
auch für dein Intranet, möchtest aber eine Email an einen externen
Kollegen (
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
) senden, der Kollege aber keinen Zugang zu
deinem Postfix-Server hat, hast du ein kleines Problem. Schickst du die Email
an unseren Server nimmst er sie an und leitet sie weiter, aber Lokal !!
Postfix ist ja der Mailer der Domain (mydestination= $myhostname, $mydomain,
...), und so bleibt die Email in deinem Netz !
Der einzige Weg den ich kenne: $mydomain aus mydestination löschen und
alle internen Emails an @benton.example.net senden.
- Wenn du eine Email aus der Warteschlange l�schen willst mu�t du zuerst die
Queue ID ermittlen und diese dann l�schen:
[root]# mailq #Wartende
Emails anzeigen
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
9064B165C4* 582 Tue Aug 20 22:11:11
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
Diese E-Mail-Adresse ist gegen Spam Bots geschützt, Sie müssen JavaScript aktivieren, damit Sie es sehen können
-- 0 Kbytes in 1 Request.
[root]# postsuper -d 9064B165C4 #Wartende
Email l�schen
postsuper: 9064B165C4: removed
postsuper: Deleted: 1 message |
Quellen und weitere Dokus
Der deutsche Mirror der Postfix-Homepage [2]
Außerdem gibt es das Red Hat Postfix HowTo [5] (englisch).
Im Linux-Magazin 06/2000 erschien ein Artikel über Postfix:
Modular und sicher [6]
�ber Postfix gibt ein recht gutes deutschsprachiges Buch: "Das Postfix
Buch" von Peer Heinlein, erschienen bie SuSE Press (ist aber nicht
nur f�r SuSE geeignet), ISBN 3-935922-41-8
Und natürlich die üblichen man Pages....
Und ein weiterer Link: http://www.schrenk.cc/2008/06/06/ubuntu-das-mailen-beibringen/
|
|
|
Die
Tage habe ich überlegt wie ich am schönsten Flash Videos auf meine
Seite bekomme. Auf der Arbeit gab es hierzu einmal ein Serverprojekt,
welches jedem Benutzer erlaubt, per FTP Videodateien hochzuladen. Egal
welches Format hier hochgeladen wird, bevor das File veröffentlicht
wird durchläuft es einen Encoder, der, egal was vorne rein kommt,
hinten ein Video im FLV-Container (Flash) ausgibt. In Anlehnung an
dieses Projekt habe ich etwas ähnliches bei mir auf der Linux-Shell
eingerichtet. Ein Script überwacht einen Incoming-Ordner, über
»Crontab« wird dieser Ordner alle 2 Minuten abgefragt. Wird nun ein
neues File hochgeladen, startet dieses Script den »mencoder«, legt ein
.flv-File im Flash-Ordner an und verschiebt das original File nach
erfolgreichem Encoden in einen Archivordner.
Hier der Quellcode (vid2flv.sh)
-
#!/bin/bash
-
-
SOURCE_DIR=/var/www/.../fileadmin/upload-directory
-
DEST_DIR=/var/www/.../fileadmin/flash-directory
-
ARCHIVE_DIR=/var/www/.../fileadmin/upload-directory/.archive
-
-
-
cd $SOURCE_DIR
-
-
#check whether mencoder is running, if so exit
-
if ps ax |grep -v grep |grep mencoder >/dev/null
-
then
-
echo "mencoder already running, skipping..."
-
-
fi
-
-
#running mencoder for each file in SOURCE_DIR
-
for i in `ls -1`
-
do
-
-
#if file ist not in use or uploading, continue...
-
if ! fuser -s $i; then
-
-
-
echo "processing file: $i";
-
#removing file-extension
-
FILE_NAME =` echo $i | sed 's/\(.*\)\..*/\1/'`
-
echo "output file: $DEST_DIR/$PREFIX-$FILE_NAME.flv"
-
-
-
#encode vid
-
mencoder "$i" -o "$DEST_DIR/$PREFIX-$FILE_NAME.flv" -of lavf -ovc lavc -oac mp3lame -lavcopts vcodec=flv:vbitrate=832:autoaspect:mbd=2:mv0:trell:v4mv:cbp:last_pred=3: predia=2:dia=2:precmp=2:cmp=2:subcmp=2:preme=2:turbo:acodec=mp3:abitrate=64 -vf scale=720:400 -srate 22050 -af lavcresample=22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames
-
RETURN=$?
-
-
-
echo "encoding done with errorlevel $RETURN"
-
-
-
#moving source to archive dir
-
mv $i $ARCHIVE_DIR
-
fi
-
-
done
/etc/crontab
-
*/2 * * * * root /path /to /vid2flv .sh >> /var/log/vid2flv .log 2>&1
Um
das Script zu nutzen wird lediglich der »mencoder« benötigt. Unter
Ubuntu z.B. ist er meine ich ganz einfach über »apt-get install
mencoder« installierbar. Auf meinem Server läuft Debian etch, hier muss
vorher noch folgende Quelle unter /etc/apt/sources.list hinzugefügt
werden
-
deb http://debian.netcologne.de/debian-multimedia.org stable main
-
deb-src http://debian.netcologne.de/debian-multimedia.org stable main
Um den Keyring für diese Quellen zu bekommen könnt ihr folgenden Datei herunterladen und über
-
dpkg -i debian-multimedia-keyring_2008.10.16_all.deb
installieren. Der mencoder und die gängigen Video-Codecs werden wie folgt installiert:
-
apt-get update
-
apt-get install mencoder w32codecs
Eine
wichtige Frage, welche Auflösung und welche Bitrate sollen die Videos
auf der Seite haben. Hier habe ich auch lange überlegt und bin mir noch
immer nicht sicher, ob ich die optimale Konfiguration gefunden habe.
Für mich ist klar, es soll eine 16:9-Auflösung sein. Sie sieht zum
einen moderner aus, zum anderen besitze ich einen HD-Camcorder und
nehme natürlich auch nur in 16:9 auf. Wieviel Qualität man nun
zugunsten der Bandbreite und den möglicherweise anfallenden
Volumenkosten her gibt, muss jeder für sich entscheiden. Ich habe mich
für eine Auflösung von 720x400 bei einer Video-Bitrate von 832kbit
entschieden. Audio wird auf eine Samplerate von 22050 mit einer Bitrate
von 64kbit heruntergerechnet. Zum Verständnis und Vergleich bitte noch
einmal oben im Script den »mencoder«-Aufruf ansehen (»vbitrate«,
»abitrate« und »scale«. »srate« einfach bei Änderungen von 22050 auf
z.B. 44100 mit »lavcresample« gleichsetzen).
Die Auflösung könnte bei der doch recht niedrigen
Bitrate noch ein bisschen kleiner ausfallen, werde ich allerdings
kleiner, so bekommt der von mir gewählte FLV-Player
Darstellungsprobleme im Vollbild. Hier wird das Bild also einfach
wieder vom Player herunterskaliert, solange dieser sich nicht im
Vollbild-Modus befindet.
Im Großen und Ganzen lande ich bei der von mir
gewählten Konfiguration bei einer Übertragungsrate von ca. 896kbit (das
entspricht 112kb/s) und sollte so ab einem DSL1000-Anschluss gut
abspielbar sein. Ein Video mit der Länge von 1:33Min ist hier ca 10,5MB
groß.
So
nun habt ihr also einen Ordner auf der Website, in dem die ganzen
FLV-Dateien landen. Einfach drauf auf die Website und den Anwender noch
kurz auffordern, seinem Browser Flash-Unterstützung zu spendieren,
reicht leider nicht ganz aus. Gut in Zeiten von Youtube und co. ist das
mit dem Flash natürlich nicht mehr das Problem. Für das Abspielen eines
im FLV-Container verschachtelten Filmes wird allerdings noch ein, ich
sage mal, Steuer-Container benötigt. Diese zumeist in Flash und Java
programmierte Schnittstelle zaubert u.a. den Fortschrittbalken und die
Steuertasten unter die Filme. Meine Wahl fiel hier unter Typo3 auf die
Extension namens bddb_flvvideogallery. Zum Einsatz kommt in dieser Extension der FLV-Player von Jeroen Wijering. Ich muss aber gestehen, nicht alle durchprobiert zu haben und lasse mir hier gerne Alternativen empfehlen.
Da es sicher im allgemeinen Interesse ist, hier ein
Testvideo. Nehmt euch 1:30Min Zeit und lauscht dem Klang der
Kaffeemaschine :-)
Update 4.2.2009:
Anscheinend
gibt es doch noch Probleme zwischen den »MooTools« und dem »SFWObject«,
das Video ist daher erst einmal von der Seite genommen.
|
|
| << Anfang < Vorherige 1 2 3 4 5 Nächste > Ende >>
| | Ergebnisse 17 - 18 von 18 |
|
|