andere Farbe:
andere Schriftgröße: 60% 70% 80% 90%

MTA-Postfix

1. Was ist postfix?
2. Kurzanleitung postfix-Installation
3. postfix-Verzeichnisse
4. wichtige postfix-Befehle
5. wichtige postfix-Einstellungen
   5.1 Die /etc/postfix/master.conf
   5.2 Die /etc/postfix/main.conf-Datei
6. postfix-Alias-Datenbank
7. postfix-Mailing-Listen
8. postfix-Besondere Einstellungen
   8.1 postfix-Header_checks und body_checks
   8.2 postfix-canonical
   8.3 postfix-Virtual

1. Was ist postfix? (nach oben)

Postfix ist ein MTA (Mail Transfer Agent) und es dient zum Senden und Empfangen von E-mails. Es besteht aus mehreren kleinen Programmen und ist relativ leicht zu administrieren. Aus Sicherheitsgründen arbeitet Postfix mit vier verschiedenen Queues (Speicher): "maildrop", "incoming", "active" und "deferred". Lokal gesendete Mails landen in "maildrop" und werden von dort in die "incoming"-Queue kopiert, nachdem sie regelbasiert auf Größe, Inhalt und anderes überprüft wurden. In der "active" Queue landen die Mails, die der Queue-Manager gerade bearbeitet und ausliefert (lokal oder remote).

Nachrichten, die Postfix nicht ausliefern kann (Dienst des Zielmailservers reagiert nicht, keine Route, keine Netzverbindung, ...), landen in der "deferred" Queue. Da Postfix immer nur eine Mail gleichzeitig bearbeitet und die "active" Queue klein hält, ist es unempfindlich gegen Ressourcenknappheit. Das Bearbeiten/Ausliefern von Mails kann also in keinem Fall, beispielsweise wegen eines vollen Dateisystems, blockiert werden.
Postfix ist nicht zuständig für das Abholen der E-Mails aus einem Postfach (z.B. mit Thunderbird, Outlook, The Bat,...). Dieses Abholen, erledigt das Programm qpopper oder fetchmail über den Dienst pop3 (Port 110). Andere MTA's: sendmail, qmail,...

2. Kurzanleitung postfix-Installation: (nach oben)

Homepage und Download-Adresse: http://www.postfix.org

Für das rpm-Paket:

rpm -U postfix-2.x.x-xxx.i386.rpm

Wenn der Quelltext übersetzt werden soll:

useradd -r postfix
groupadd postdrop
tar xvfz postfix-2.x.x.tar.gz
cd postfix-2.x.x
make
make install

3. postfix-Verzeichnisse: (nach oben)

/usr/sbin Enthält alle Postfix-Command-Befehle. (Also alle postxxx-Befehle)
/usr/lib/postfix Enthält alle Postfix daemon Programme. (z.B., die in der Konfigurationsdatei master.cf aufgelistet sind)
/etc/postfix Konfigurationsdateien
/var/spool/postfix Das sogenannte Queue-Verzeichnis
/var/spool/mail Enthält die Postfächer
/var/spool/postfix/deferred Enthält alle noch nicht verschickten E-mails.
/var/log mail.log

4. wichtige postfix-Befehle: (nach oben)

postfix start Startet postfix. Ob postfix ausgeführt wird, kann man mit ps -AH überprüfen. Hier sollte der postfix-Hauptprozess master auftauchen. Man kann aber auch gleich eine Testmail schreiben: echo "Dies ist eine Testmail" | mail -s "Test" root@localhost (mail muß installiert sein). In /var/spool/mail/root sollte dann die mail angekommen sein. Das Versenden wird in der /var/log/mail.log protokolliert.
postfix stop postfix stoppen
postfix reload Liest die Konfigurationsdateien neu ein.
postfix check Überprüft die Konfiguration des Postfix-Systems.
postconf Zeigt die in der Datei main.cf gesetzten Werte an.
postmap Erstellt aus einer Textdatei eine Datenbank. Wird z.B. die Datei transport verändert, hat dies noch keine Auswirkung auf das Postfix-System. Erst wenn aus der geänderten transport-Datei eine transport.db erstellt wurde, kann postfix die neu gesetzten Werte übernehmen. "postmap tranport" erstellt die transport.db
postqueue -p Zeigt den Inhalt der Mailqueue
postsuper -d 9064B165C4 Wartende Email löschen. Die Nummer ist die ID der mail in der queue. Durch postqueue -p werden die ID's angezeigt.

5. wichtige postfix-Einstellungen: (nach oben)

5.1 Die /etc/postfix/master.conf: (nach oben)

Beim Start von Postfix wird der Masterprozeß "master" gestartet, der sich dafür verantwortlich zeigt, die spezialisierten Prozesse für die Teilaufgaben zu starten. Die Konfiguration des Masterdaemons und die Überwachung der Teilprozesse wird in der Datei master.cf vorgenommen. Hier kann der Administrator einstellen, welche Programme für welche Aufgaben gestartet werden müssen, wieviele der jeweiligen Prozesse aus Performancegründen vorgehalten werden sollen und wann einzelne Prozesse beendet werden.

Die genaue Kenntnis der Konfigurationsdatei ist für allgemeine Administrationsaufgaben nicht notwendig, da diese Datei in der Regel schon passend vorkonfiguriert ist. Hier sind nur Eingriffe notwendig wenn der Administrator Einstellungen für erweiterte Setups konfigurieren will. Die Datei master.cf muss z.B. geändert werden, wenn ein Virenscanner wie z.B. F-prot oder ein Spam Filter wie Spamassassin mit Hilfe von Amavis angebunden werden soll.

Beispiel einer master.cf:

smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
localhost:10026 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o myhostname=mein.domain.tld
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
localhost:10025 inet n n n - 10 spawn
user=nobody argv=/usr/local/f-prot/tools/scan-mail.pl -postfix 127.0.0.1:10026

Diese Anweisungen fügen einen zusätzlichen SMTP-Listener auf Port 10026 hinzu. Dieser Daemon wird von Amavis dazu genutzt die gescannten E-mails (mit f-prot) wieder an den Postfix-MTA zurückzugeben.

In der postfix-datei /etc/postfix/main.cf folgendes hinzufügen:

content_filter = smtp-amavis:[127.0.0.1]:10024

Mit diesem Befehl wird postfix angewiesen alle Emails für das Filtern am Amavis auf localhost auf Port 10024 zu schicken. Dort werden die E-mails bearbeitet und über Port 10025 (siehe oben) wieder zurück an postfix gesendet.

5.2 Die /etc/postfix/main.conf-Datei: (nach oben)

Die wichtigsten Einstellungen:

queue_directory,command_directory, daemon_directory dienen zum Einstellen der Arbeitsverzeichnisse.
mail_owner Bezeichnet den Besitzer der Postfix queue und viele der Postfix daemon Prozesse. mail_owner = postfix
myhostname legt den Namen des Mailservers fest. Wird kein Name angegeben, versucht postfix mit Hilfe von gethostname() den Namen zuvergeben. Der Name muss nicht der Name des Rechners sein. Allerdings muss der Name per DNS aufgelöst werden können.
myhostname = host.domain.tld
mydomain legt den Domain-Namen fest.
mydomain = domain.tld
mydestination legt fest wofür der Server zuständig ist; d.h. für welche Domains die Emails angenommen werden. Also der Hostnamen, die eigentliche Domain und localhost. Es können aber noch weitere Domains hinzugefügt werden. Die Domains, für die Postfix zuständig sein soll, müssen in mydestinition vorhanden sein. (Ausnahme: die virtuellen Domains.)
mydestination= $myhostname, $mydomain, localhost.$mydomain, domain1.de, domain2.de
alias_maps legt fest welche Alias-Datenbank verwendet werden soll und welches Format sie hat. "alias_maps = hash:/etc/aliases"
mynetworks Dieser Parameter legt fest, von welchem Netz E-mails empfangen werden dürfen.
Beispiele:
mynetworks = $myhostname
mynetworks = $myhostname, localhost
mynetworks = 127.0.0.0/8, 192.168.1.0/24
mynetworks = all
maximal_queue_lifetime Lebensdauer einer nichtzustellbaren Email in der queue.
message_size_limit max. Größe einer E-mail. Angabe in Bytes. Standardwert: 10240000 Bytes
mailbox_size_limit max. Größe eines Postfaches. Angabe in Bytes. Standardwert: 51200000 Bytes

6. postfix-Alias-Datenbank: (nach oben)

In der Alias-Datenbank können Benutzer weitere mail-Namen bekommen. Auch ist es möglich, E-mails eines Benutzers zusätzlich an einer weiteren E-mail-Adresse zu schicken.

Datei: /etc/aliases
Beispiele:

# ein lokaler Benutzer mit verschieden Mail-Adressen
# wird eine mail an die Adresse Max.Mustermann@example.com oder
# Mmustermann@example.com oder Mustermann@example.com geschickt, erhält
# im jeden Fall der Benutzer mustermann die mail.
Max.Mustermann: mustermann
Mmustermann: mustermann
# die mail eines lokalen Benutzers
#wird zusätzlich an einer externen Adresse
# verschickt.
Mustermann: mustermann, mustermann@gmx.de
# alle Administratoren sollen die "root"-Nachrichten bekommen
root: root, mustermann, meier, schmidt

Nach Veränderung der /etc/aliases-Datei, muss noch newaliases aufgerufen werden. newaliases wandelt die Datei /etc/aliases in eine Datenbank um.

7. postfix-Mailing-Listen: (nach oben)

In einer Mailing-Liste (Text-Datei z.B. /etc/postfix/lists/alle) können verschiedene E-mail-Adressen gespeichert sein, die dann per "Include" in die /etc/aliases-Datei eingebunden wird.
Beispiel-Datei /etc/postfix/lists/alle.txt:

# Mailingliste
# Das letzte Komma ist wichtig!
mustermann,
meier,
schmidt,
max@example.net

In die /etc/aliases-Datei wird folgendes eingefügt:

#Mailinglisten
alle: :include:/etc/postfix/lists/alle.txt

Anschließend newaliases ausführen.
Wird nun eine mail an alle@example.net verschickt, erhalten alle Benutzer, die in der /etc/postfix/lists/alle.txt-Datei stehen, diese mail.

8. postfix-Besondere Einstellungen: (nach oben)

8.1 postfix-Header_checks und body_checks: (nach oben)

Im Header einer E-mail stehen die einzelnen Received-Zwischen-Stationen bzw. die Hostnamen aus dem internen Netz. Damit diese aus dem Header verschwinden, kann man einen Filter einsetzen, der diese Zeilen mit den Hostnamen ausblendet.
Dieser Filter heißt header_checks und muss über die /etc/postfix/main.cf freigeschaltet werden:
In der /etc/postfix/main.cf von folgende Zeile die Kommentierung entfernen:

header_checks = regexp:/etc/postfix/header_checks

Der eigentliche Filter wird über die Datei /etc/postfix/header_checks eingestellt:

/fw1.example/ IGNORE
/intern.example.net/ IGNORE
/ws1.example.dmz/ IGNORE
/ws2.example.dmz/ IGNORE

Alle Header-Zeilen, die entweder fw1.example, intern.example.net, ws1.example.dmz.oder ws2.example.dmz beinhalten, werden aus dem Header entfernt. Nach Bearbeitung dieser Datei noch den folgenden Befehl ausführen, damit aus der Datei header_checks eine header_checks.db generiert wird.:

postmap header_checks

8.2 postfix-canonical: (nach oben)

Diese Datei wird dafür verwendet, um ein Absenderdomain-Name zu verändern. z.B.: aus user@extern.example.net wird user@example.net Die zuständige Datei hierfür: /etc/postfix/canonical

Beispiel einer canonical-Datei:

# veränderung der domain: aus user@extern.domain.tld wird user@domain.tld
@extern.example.net @example.net
@ws1.example.dmz @example.net
@ws2.example.net @example.net

Nach Bearbeitung dieser Datei, noch den folgenden Befehl ausführen: postmap canonical

8.3 postfix-Virtual: (nach oben)

In der /etc/postfix/virtual-Datei werden virtuelle Adressen Benutzern oder anderen E-Mail-Adressen zugewiesen. Beispiel: Die Hauptdomain bzw. Hauptadresse soll example.net sein. Neben dieser Domain soll postfix aber auch für die virtuellen Adressen domain1.tld und domain2.tld zuständig sein. Damit nun E-mails, die an domain1.tld oder an domain2.tld gesendet werden, an Benutzern mit der Domain example.net oder an externe E-Mail-Adressen gehen, muss die /etc/postfix/virtual-Datei folgendermaßen aufgebaut sein:

domain1.tld irgendein Text, (dieser Text ist nicht wichtig, muss aber vorhanden sein)
support@domain1.tld meier@example.tld
karl@domain1.tld karl@example.tld
werner@domain1.tld werner@irgendeine_externe_mail.tld
@domain1.tld unbekannt@example.tld
domain2.tld wieder irgendein Text
support@domain2.tld meier@example.tld
@domain2.tld unbekannt@example.tld

Erklärung: die erste Zeile in jedem Domain-Abschnitt muss vorhanden sein, kann aber irgendein Text enthalten. Fehlt diese erste Zeile, lehnt der SMTP-Dämon von Postfix alle E-Mails mit dieser Domain ab. Die Zeilen unterhalb der erste Zeile beschreiben wohin eine bestimmte E-mail weitergeleitet werden soll. Zum Beispiel: E-mails an support@domain1.tld werden an meier@example.tld weitergeleitet. E-mails an werner@domain.tld werden an die externe E-mail-Adresse werner@irgendeine_externe_mail.tld weitergeleitet. Alle anderen E-mails mit der Adressen-Endung domain1.tld (z.B. abc@domain1.tld, xxx@domain1.tld, ...) werden an unbekannt@example.tld weitergeleitet. Damit der Server einer dieser Domain überhaupt annimmt, muss postfix diese Domains kennen. In der Datei /etc/postfix/main.cf unter dem Abschnitt mydestinition werden diese Domains hinzugefügt:

mydestination = example.tld, domain1.tld , domain2.tld

Zusätzlich in der /etc/postfix/main.cf-Datei wird die Virtual-Tabellen aktiviert:

virtual_maps = hash:/etc/postfix/virtual

Nach dem Eintragen der Weiterleitungs-E-mail-Adressen in die /etc/postfix/virtual-Datei, muss die sogenannte Hash-Tabelle für Postfix (mit Hilfe von postmap) generiert werden und die Einstellungen von postfix müssen neu eingelesen werden.

postmap /etc/postfix/virtual
rcpostfix reload