Home
Webdesign
aktuelle Projekte
Referenzen
Aktuelles Wetter
Das Wetter heute
Das Wetter morgen
Login Form





Passwort vergessen?
Firewall Lösungen
Endian Firewall Community
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) :
Postfix-Übersicht
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:
[root]# postfix check

Achtung !! postfix check findet keinerlei Schreibfehler !!
Zum �berpr�fen deiner Parameter folgendes eingeben:
[root]# postconf


Hier sollten jetzt alle Parameter die du in die main.cf geschrieben hast auftauchen.

Jetzt kannst du deinen Postfix mal starten:
[root]# postfix start

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:
[root]# postfix stop

Nach jeder Änderung mußt du Postfix sagen, daß er die Konfiguration neu einlesen soll, und zwar so:
[root]# postfix reload




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/

 
Viedeo-Server

Videoserver selbst gemacht

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)

  1. #!/bin/bash
  2.  
  3. SOURCE_DIR=/var/www/.../fileadmin/upload-directory
  4. DEST_DIR=/var/www/.../fileadmin/flash-directory
  5. ARCHIVE_DIR=/var/www/.../fileadmin/upload-directory/.archive
  6. PREFIX=`date +%Y-%m-%d`
  7.  
  8. cd $SOURCE_DIR
  9.  
  10. #check whether mencoder is running, if so exit
  11. if ps ax |grep -v grep |grep mencoder >/dev/null
  12. then
  13.   echo "mencoder already running, skipping..."
  14.   exit 1
  15. fi
  16.  
  17. #running mencoder for each file in SOURCE_DIR
  18. for i in `ls -1`
  19. do
  20.  
  21. #if file ist not in use or uploading, continue...
  22. if ! fuser -s $i; then
  23.  
  24.   echo
  25.   echo "processing file: $i";
  26.   #removing file-extension
  27.   FILE_NAME=`echo $i | sed 's/\(.*\)\..*/\1/'`
  28.   echo "output file: $DEST_DIR/$PREFIX-$FILE_NAME.flv"
  29.   echo
  30.  
  31.   #encode vid
  32.   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
  33.   RETURN=$?
  34.  
  35.   echo
  36.   echo "encoding done with errorlevel $RETURN"
  37.   echo
  38.  
  39.   #moving source to archive dir
  40.   mv $i $ARCHIVE_DIR
  41. fi
  42.  
  43. done

/etc/crontab

  1. */2 * * * * root /path/to/vid2flv.sh >> /var/log/vid2flv.log 2>&1

mencoder installieren

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

  1. deb http://debian.netcologne.de/debian-multimedia.org stable main
  2. 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

  1. dpkg -i debian-multimedia-keyring_2008.10.16_all.deb

installieren. Der mencoder und die gängigen Video-Codecs werden wie folgt installiert:

  1. apt-get update
  2. apt-get install mencoder w32codecs

Auflösung, Bitrate, etc...

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ß.

Integration in die Website

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