19.04.2023

Programminstallation unter Linux

Apache Webserver
Samba Server
eMail-Server
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
NTP Server / Client
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
Stunnel einrichten
MySQL-Server einrichten
Datensicherung auf Bandlaufwerk
Audio CDs in WAV umwandeln
CDs und DVD erstellen
Grafiken bearbeiten erstellen
FAX Versand und Empfang
Web und FTP Sites syncronisieren
Verschlüsselung von E-Mails und Dokumenten
Programm Übersicht
Datenrettung
Linux Terminalserver
PXE Boot
sonstige Programme

Navigation:

Links
Postfix Projekt
Deutscher Mirror vom Postfix Projekt
Postfix HowTo
Postfix DE Mailingliste
Postfix absichern
Grundabsicherung von Postfix
SASL HowTo

LiveMail SMTP Fehlermeldung

Seitenanfang

Mailserver Postfix MTA (Mail Transfer Agent)

Konfigurationsdateien Beschreibung
/etc/postfix/main.cf Postfix Konfiguration
/etc/postfix/master.cf Steuerdatei für master; Regelt Module und chroot-Umgebung
/etc/postfix/virtual Mailumschreibung lokal und nicht-lokale Mails, die Mail bekommt einen neuen Umschlag (Envelope) mit der neuen Adresse
/etc/aliases lokale Mails neuen Empfänger zuordnen
/etc/postfix/canonical nicht-lokale Mails neue Empfänger zuordnen, tauscht die Mailadressen nicht nur wie aliases und virtual im SMTP-Envelope, sondern auch im Mailheader aus
/etc/postfix/relocated bounct unzustellbare Adressen unter Angabe der neuen Adresse des verzogenen Accounts
/etc/postfix/transport Transportmethoden
/etc/postfix/access Zugriffsrechte zum einliefern der Mails
/etc/defaultdomain Maildomain für die der Server zuständig ist
/var/spool/postfix Postfix Queue Verzeichnis wird durch den Parameter "queue_directory =" in der main.cf gesetzt. Unter Debian läuft Postfix in diesem Verzeichnis als chroot
/var/spool/postfix/deffered/ Postfix Postausgangsverzeichnis
/var/spool/postfix/hold/ MailQueue für Mails die auf halten gesetzt sind
/var/spool/postfix/incoming/ Postfix Posteingangsverzeichnis
/var/spool/postfix/etc/resolv.conf Kopie der resolv.conf wird beim starten von Postfix erstellt
/var/spool/postfix/etc/hosts Kopie der hosts
/usr/lib/postfix Postfix Moduleverzeichnis

- mit den Client Access Maps kann der Absender und/oder der Empfänger geprüft werden, dafür werden in der main.cf folgende Parameter gesetzt.

- IP-Adresse oder Hostname prüfen
smtpd_client_restrictions

- HELO Angaben prüfen
smtpd_helo_restrictions

- MAIL FROM: prüfen
smtpd_sender_restrictions

- RCPT TO: prüfen
smtpd_recipient_restrictions

führt einer der angegebenen Prüfungen zu einem REJECT wird der SMTP Dialog mit dem Client noch bis zur Angabe von RCPT TO: fortgeführt und danach erscheint die Ablehnung z.B. durch einen 550 ERROR der die Mail nicht annimmt. Der Client kann dann durch Angabe von weiteren RCPT TO: mit anderen eMail Adressen die Prüfung erneut durchführen lassen, vieleicht führen diese ja nicht zur Ablehnung.

bei gesetzten Parameter smtpd_delay_reject = no wird bei einem REJECT die Verbindung zum Client sofort getrennt.

Die Parameter können nur Angaben prüfen die auch zu dem Zeitpunkt der Prüfung vorliegen, so kann der Parameter smtpd_client_restrictions keine Empfängerprüfung machen da er nur die IP oder den Hostnamen des Clients kennt. Daher macht es Sinn alle Prüfungen im Parameter smtpd_recipient_restrictions vorzunehmen, da hier alle relevanten Angaben vorliegen.

Die Parameter werden von oben nach unten abgearbeitet, bei dem erste Parameter in dieser Reihenfolge der ein OK liefert wird die Mail angenommen, liefert dagegen einer einen REJECT wird die Mail nicht angenommen. Prüfungen die noch folgen würden, werden nicht durchgeführt.

Filteraktionen Wirkung
REJECT nimmt Mail nicht an und loggt ein REJECT
REJECT Text ... loggt angegebenen Text
OK akzeptiert
IGNORE entfernt die jeweilige Zeile, nimmt die Mail ansonsten an
WARN nimmt Mail an und loggt ein WARN
WARN Text ...s loggt angegebenen Text
HOLD nimmt die Mail an und speichert diese in der HOLD-Queue wird nicht zugestellt
HOLD Text ... loggt angegebenen Text
DISCARD nimmt Mail an, die Mail wird dann aber verworfen
DISCARD Text ... loggt angegebenen Text
DUNNO beendet die client access map Prüfung, weitere Prüfungen können folgen

mögliche Datenquellen die Postfix unterstützt werden mit postconf -m angezeigt, andere Datenquellen müssen einkompiliert werden. Das Default Format das postmap erstellt. lgt der Postfix Parameter default_database_type fest.

Datenquellen Beschreibung
btree DB-Datenbank im btree-Format
cidr access-Tabelle mit IP-Netzbereichen
dbm DBM-Datenbank
hash DB-Datenbank (Default)
ldap LDAP-Server
mysql MySQL-Server
nis Tabelle von einem NIS-Server
pcre Textdatei mit Perl Compatibe Regular Expression
regexp Textdatei mit Regular Expressions

Die Parameter für die main.cf.

alias_maps = hash:/etc/aliases, nis:/etc/mail.aliases
Seitenanfang

/etc/aliases

user:	user@provider.tld
root:	tux
daemon:	root
wwwrun:	root, user, webmaster
abuse:	postmaster
report:	/root/report.txt
maillist: :include:/etc/postfix/userlist.txt

- wenn Mails an report gesendet werden, landen diese hintereinander in einer Datei.
- Mails an maillist werden an eine Gruppe von Usern geschickt, die in einer Datei aufgelistet sind, auf jeder Zeile eine Mailadresse.

in der aliases-table sind externe Mailadressen möglich, auch mehrere Zuordnungen kann es geben Es ist auch darauf zu achten, das der Doppelpunkt nach dem ersten Usernamen gesetzt wird. Der Hash der aliases-table wird mit

postalias /etc/aliases
oder
newaliases

erzeugt. Der Parameter in der main.cf von Postfix sieht wie folgt aus.

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

die alias-Table wird vom Modul local verarbeitet, also erst wenn Postfix die Mail im System ablegt, nicht wenn diese über SMTP oder andere Methoden weiterverschickt wird.

Seitenanfang

/etc/postfix/virtual

Virtuelle Benutzer

# /etc/postfix/virtual
domain.tld			anything		# Virtuelle Domain definieren
domain2.tld			anything		# Virtuelle Domain definieren

alias@domain.tld		alias2@domain.tld	#Weiterleitung (Alias) definieren
@domain.tld			alias2@domain.tld	#Catch-All Regel
alias3@domain.tld		alias@provider.tld	#Weiterleitung, auch an externe Mail möglich
alias4@domain.tld		Mustermann		#Alias definieren
Max.Mustermann			Mustermann
alias1@domain.tld		alias@domain2.tld, alias2@domain.tld

Empfänger-Mailadressen werden im SMTP-Envelope umgeschrieben, der MailHeader bleibt unverändert.

DB der virtual-table erstellen

postmap /etc/postfix/virtual

Parameter für die main.cf

virtual_alias_maps =  hash:/etc/postfix/virtual
virtual_alias_domains = $virtual_alias_maps
Seitenanfang

/etc/postfix/vmailbox

Virtuelle Mailboxen

# /etc/postfix/vmailbox
info@example.com		domain.tld/info
sales@example.com		domain.tld/sales/
@domain.tld			domain.tld/catchall		#Catch-All Regel

DB der virtual-table erstellen

postmap /etc/postfix/vmailbox

Parameter für die main.cf

virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_mailbox_domains = domain.tld domain1.tld domain2.tld

- Unter virtual_mailbox_domains darf nicht die gleiche Domain wie in myhostname oder mydomain sein.

Seitenanfang

/etc/postfix/canonical

Mailadresse im SMTP-Envelope und im SMTP-Header werden ersetzt. Es können auch interne cryptische Mailadressen in externe "lessbare" Mailadressen umgewandelt werden.

@server.domain.tld		@domain.tld		# wandelt alle Adressen der Domain
@server2.domain.tld		serveralias@domain.tld	# wandelt alle Adressen der Domain
u2345@domain.tld		alias@provider.tld
u4567@domain.tld		alias@domain.tld
root				alias3@domain.tld

DB der canonical-table erstellen

postmap /etc/postfix/canonical

Parameter für die main.cf

# Tabelle wird auf Absender und Empfängeradresse angewendet
canonical_maps = hash:/etc/postfix/canonical
# Tabelle wird auf Absenderadressen angewendet
sender_canonical_maps = /etc/postfix/canonical-sender
# Tabelle wird auf Empfängeradresse angewendet
recipient_canonical_maps = /etc/postfix/canonical-recipient

es können auch unterschiedliche Tabellen für Absender und Empfänger geführt werden. Es sind auch verschiedenen Datentypen möglich.

Seitenanfang

/etc/postfix/master.cf

in der master.cf kann man die Postfix-Daemons festlegen, die in einer CHROOT Umgebung laufen sollen, indem man in der Spalte "chroot" ein "y" einträgt.

- Verbose Modus von Postfix aktivieren

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd -v
Seitenanfang

/etc/postfix/main.cf

Überlange Einträge in der /etc/postfix/main.cf, kann man auch in der nächste Zeile weiterführen, man muß nur ein Leerzeichen am Zeilenanfang der neuen Zeile einfügen.

 

Parameter Beschreibung
mail_owner = postfix legt Besitzer der Queues und Postfix Programme fest (nicht root verwenden, lieber einen User anlegen und den das Anmelden am System verhindern)
myhostname = mail.domain.de Namen des Mailservers
mydomain = domain.de legt Domainname fest
alias_maps = hash:/etc/aliases Alias-Datei für die virtuelle Domain, Format muss angegeben werden
alias_database = hash:/etc/aliases Alias-Datenbank und Format der Datenbank (Datenbank "/etc/aliases.db" wird mit "postalias /etc/aliases"erstellt)
mydestination = localhost localhost.$mydomain, $myhostname $mydomain legt die Domain fest, für die der Server zuständig ist
mynetworks = 127.0.0.0/8, 192.168.1.0/24 Netzwerk das Postfix vertraut
relayhost = mail.t-intra.de Server an den die Mails geleitet werden, die er nicht selbst zustellen kann
inet_interfaces = $myhostname, localhost Interface, auf denen der Server lauscht
defer_transports = smtp alle Mails die über SMTP verschickt werden sollen und nicht lokal zugeordnet werden können, kommen in eine Warteschlange (bei Dialup verwenden). Mit dem Befehl "postfix flush" werden die angefallenen Mails versendet (der Befehl gehört in den Einwahlscript).
disable_dns_lookups = yes verhindert das zur DNS Server Adressauflösung eine Verbindung geöffnet wird, Mails bleiben in der Queue, bis sie gelöscht oder mit "postfix flush" versendet werden. (bei Dialup verwenden)
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) SMTP Begrüssungstext bei der Anmeldung
masquerade_domains = $mydomain interne Rechnernamen werden von den FQDN in den Absendeadressen ausgehender Mails entfernt
smtpd_recipient_limit = 100 gibt an wieviel Empfänger maximal in einer Mail angegeben werden könne. (Standardwert = 1000)
disable_vrfy_command = yes die Unterstützung für das ESMTP Kommando VRFY deaktivieren, Spammer könnten damit die Existenz einer E-Mail Adresse verifizieren.
smtpd_delay_reject = yes erst abweisen, wenn alles bekannt ist (Standard)
message_size_limit = 20480000 eMail Größe auf 20MB setzen, default Postfix Wert ist 10240000 (10MB)
message_size_limit = 52428800 eMail Größe auf 50MB
Seitenanfang

Befehle

Befehle Beschreibung
postfix check Testet ob alles in Ordnung ist
postfix reload Konfigurationsänderung neu einlesen
postfix flush alle Mails in der Queues werden verschickt (Option defer_transports = smtp)
postconf -m von Postfix unterstützte Module
postconf mail_version zeigt Postfix Version an
postconf -n listet alle Parameter die nicht auf Default-Werte stehen auf
postconf -d listet alle Parameter die auf Default-Werte stehen auf
postconf alle Parameter überprüfen
postconf -h myhostname Postfix REALM (Domain) anzeigen
postconf mydomain zeigt Inhalt der Variablen
postalias /etc/aliases erstellt die Datei "/etc/aliases.db" aus der "/etc/aliases" die von Postfix sehr schnell gelesen werden kann.
newaliases siehe postalias
postmap /etc/postfix/virtual erstellt /etc/postfix/virtual.db aus der /etc/postfix/virtual, die Datei wird dann in der Postfixkonfiguration mit hash:/etc/postfix/virtual genutzt.
postmap btree:/etc/postfix/virtual ignoriert den Default-Wert default_database_type und konvertiert die ASCII Datei im angegebenen Format.
postmap -q user@domain.tld hash:/etc/postfix/vmailbox sucht in der angegebenen Datei nach der angegebenen eMail Adresse, außer hash: ist auch ldap:, mysql:, u.a. möglich
postmap -q "String" hash:/etc/postfix/virtual wie oben
/etc/init.d/postfix start|stop|restart Postfix starten, stoppen, neu starten
mailq oder sendmail -bp listet Inhalt der Mailqueues, zeigt Versandstatus oder Probleme
postdrop nimmt Mails auf der Kommandozeile an und leitet diese zur Queues.
postcat -q <MailID> zeigt Inhalt der Mail mit der angegebenen MailID in der Queue
postkick sendet Postfix-Modul Steuerbefehl
postlock Postfix Mailboxsperre (File Locking)
postlog erzeugt Logmeldungen für syslogd
postqueue -p listet die Mailqueue
postqueue -f startet Auslieferung der Mails in der Queue neu
postsuper verwaltet Postfixqueue
postsuper -d <queue> <id> löscht die angegebene Mail aus der Queue
postsuper -d ALL löscht alle Mails aus der Queue
postsuper -h <queue> <id> legt die über <id> angegebene Mail in die hold-Mailqueue (im Verz. /var/spool/postfix/hold unter Debian) es wird keine weitere Zustellung unternommen.
postsuper -H <queue> <id> gibt die über <id> angegebene Mail wieder frei, die Mail wird aus der hold in die deferred-MailQueue verschoben (im Verz. /var/spool/postfix/deferred unter Debian).
postsuper -H ALL alle auf hold gesetzen Mails wieder freigeben
postsuper -p löscht temporäre Dateien
postsuper -s checkt die Queue Struktur, nach einem Backup muss ist es immer notwendig
postsuper -r <queue> <id> liest die mit <id> angegebenen Mails in der Queue neu ein
postsuper -r ALL liest alle Mails der Queue neu ein
   
   
   
sendmail Sendmail-kompatibles Interface für local erzeugte Mails
nmap mail.domain.tld zum prüfen ob der Server auf Port 25 lauscht
nslookup -query=MX domain.tld MX-Einträge der Domain prüfen.
dig domain.tld MX MX-Einträge der Domain prüfen.
dig -t any domain.tld MX-Einträge der Domain prüfen.
strace -f -o <logdatei> <Programm> Debugging bei der Fehlersuche
Seitenanfang

Restriktionen

Restriktionen Beschreibung
reject_rbl_client  
reject_non_fqdn_helo_hostname das Feld HELO/EHLO muss einen Fully Qualified Domain Name (FQDN) enthalten
reject_non_fqdn_sender das Feld MAIL FROM: muss einen Fully Qualified Domain Name (FQDN) enthalten
reject_non_fqdn_recipient das Feld RCPT TO: muss einen Fully Qualified Domain Name (FQDN) enthalten
check_helo_access hash:/etc/postfix/helo_rejectlist prüfen, ob ein Eintrag in der Datei /etc/postfix/helo_rejectlist mit dem HELO/EHLO Argument übereinstimmt
reject_invalid_helo_hostname prüfen, ob HELO/EHLO Argument ein gültiger Hostname Syntax ist (keine Umlaute, Leerzeichen, Sonderzeichen)
reject_unknown_helo_hostname prüfen, ob HELO/EHLO Argument mit dem A und MX-Record im DNS übereinstimmt
check_sender_mx_access prüfen, ob MAIL FROM: AbsenderMailServer in der Datei /etc/postfix/sender_mx_blocked verzeichnet ist
reject_unverified_sender prüft, durch eine SMTP-Verbindung ob der Envelope Sender existiert (Vorsichtig prüfen, kann auch zu vielen reject führen)
permit_sasl_authenticated SASL Authentifizierte Clients Versand zulassen
permit_mynetworks Mailversand/Relaying aus dem eigenen Netz mynetworks erlauben
reject_unauth_destination das Ziel muss Postfix (der Server selbst) sein. Relaying wird verhindert.
reject_unknown_sender_domain prüfen, ob MAIL FROM: Domain über einen A noch über einen MX-Record im DNS verfügt
reject_unknown_recipient_domain prüfen, ob RCPT TO: Domain über einen A noch über einen MX-Record im DNS verfügt
reject_sender_login_mismatch Clients, die sich Authentifiziert haben (mit SASL), können nur mit ihrer zugeordneten eMail-Adresse senden, ohne diese Restriktion, ist das Senden mit einer beliebigen existierenden eMail Adresse als Absender möglich. Der Eintrag ist vor permit_sasl_authenticated zu setzen
reject_unlisted_recipient prüfen, ob RCPT TO: Empfänger existiert, Regel wird am Ende der Restriktionen immer ausgeführt, durch die Angabe kann man sie vorher ausführen lassen

Beispiel: Restriktionen für einen Mailserver im INet

# erster Verbindungsaufbau der Gegenstelle
smtpd_client_restrictions =
# Whitelist Client Ausnahmen
		check_client_access cidr:/etc/postfix/client_access
# RealTime Blocklist
# NixSpamProjekt
                reject_rbl_client ix.dnsbl.manitu.net
# blocklist.de
                reject_rbl_client bl.blocklist.de

# HELO prüfen Hostname im DNS
smtpd_helo_restrictions =
# HELO Checkliste eigenen Hostnamens/IP ablehnen
		check_helo_access hash:/etc/postfix/helo_rejectlist
# unsauberer eMails nicht annehmen
		reject_non_fqdn_helo_hostname
		reject_invalid_helo_hostname
		reject_unknown_helo_hostname

# MAIL FROM: prüfen
smtpd_sender_restrictions =
		check_sender_mx_access cidr:/etc/postfix/sender_mx_blocked
		reject_unverified_sender
		reject_sender_login_mismatch

# RCPT TO: prüfen
smtpd_recipient_restrictions =
# SASL prüfen
		permit_sasl_authenticated
# eigenes Netzwerk erlauben
		permit_mynetworks
# nicht vorhandene Empfaenger abweisen, umgedrehtes "permit_auth_destination"
		reject_unauth_destination
# MAIL FROM: muss ein FQDN Name sein
		reject_non_fqdn_sender
# RCPT TO: muss ein FQDN Name sein
		reject_non_fqdn_recipient
# unbekannte Absenderdomain werden abgelehnt
		reject_unknown_sender_domain
# Postfix muss für Empfänger Domain verantwortlich sein
		reject_unknown_recipient_domain

Datei mit Angabe eines kompletten Subnetzes cidr:/etc/postfix/client_access Beispiel 1 (Classless Inter-Domain Routing), oder Beispiel 2 als hash:/etc/postfix/client_access. Mit 194.25.134.0/24 z.B. das T-Online Netz auf die Withlist setzen, wenn es es auf eine RBL geschaft hat.

# cidr:/etc/postfix/client_access
# Beispiel 1
# Client Whitelist
#
192.168.1.1		OK
192.168.0.0/16		REJECT
194.25.134.0/24		permit_auth_destination
# hash:/etc/postfix/client_access
# Beispiel 2
# Client Whitelist
#
192.168.1.1		OK
192.168.2.3		REJECT

TextDatei /etc/postfix/client_access in die HASH Datei /etc/postfix/client_access.db umwandeln. CIDR Dateien, brauchen nicht mit postmap umgewandelt werden.

postmap /etc/postfix/client_access

Testen der Eintragungen

postmap -q 192.168.1.1 cidr:/etc/postfix/client_access
postmap -q 192.168.1.1 /etc/postfix/client_access
# /etc/postfix/helo_rejectlist
# eigenen Hostnamens/IP im HELO ablehnen
1.2.3.4			reject do no use my IP as HELO!
mail.example.com	reject do not use my hostname as HELO!

Testen der Eintragungen

postmap -q 1.2.3.4 /etc/postfix/helo_rejectlist
# /etc/postfix/sender_mx_blocked
#
# Clients abweisen, die eine Absenderdomain verwenden, wo der MX
# in einem privaten Adressbereich liegt
0.0.0.0/8		REJECT IP address of MX host is a bogus address RFC5735
127.0.0.0/8		REJECT IP address of MX host is a loopback address RFC1700
224.0.0.0/12		REJECT IP address of MX host is a multicast address RFC1112
255.0.0.0/8		REJECT IP address of MX host is a bogus address

10.0.0.0/8		REJECT IP address of MX host is a IANA reserved address RFC1918
172.16.0.0/12		REJECT IP address of MX host is a IANA reserved address RFC1918
192.168.0.0/16		REJECT IP address of MX host is a IANA reserved address RFC1918

169.254.0.0/16		REJECT IP address of MX host is a IANA reserved APIPA address RFC3927
240.0.0.0/12		REJECT IP address of MX host is a IANA reserved address RFC1112
192.0.2.0/24		REJECT IP address of MX host is a IANA reserved address RFC5737

198.51.100.0/24		REJECT IP address of MX host is a IANA reserved address RFC5737
203.0.113.0/24		REJECT IP address of MX host is a IANA reserved address RFC5737
192.88.99.0/24		REJECT IP address of MX host is a IANA reserved 6to4 anycast address address RFC3068
198.18.0.0/15		REJECT IP address of MX host is a IANA reserved testing network address RFC2544
255.255.255.255/32	REJECT MX in RFC 5735 limited broadcast destination address

Testen der Eintragungen

postmap -q 127.0.0.2 cidr:/etc/postfix/sender_mx_blocked

- prüft ob die eMail Adresse zum Benutzernamen, der bei der SASL Authentifizierung angegeben wurde passt. reject_sender_login_mismatch immer vor permit_sasl_authenticated verwenden. smtpd_sender_login_maps enthält Liste LoginUser - eMail-Adresse (im Beispiel liegen die Daten in einer SQL Datenbank)

smtpd_sender_login_maps = $virtual_mailbox_maps
...
smtpd_sender_restrictions =
		...
                reject_sender_login_mismatch
		...
# hash:/etc/postfix/sender_login_maps
#
# eMail-Adresse		SASL-Anmeldename	
# user@domain.tld	mail001

 

 

Seitenanfang

Loglevel

Logdateien /var/log/mail und /var/log/syslog

- Loglevel von Postfixzum probieren welche Mechanismen funkti

# /etc/postfix/master.cf
smtp      inet  n       -       -       -       -       smtpd -v
...

- Loglevel für TLS

# /etc/postfix/main.cf
...
smtpd_tls_loglevel = 3
...

 

Postfix IPv4 IPv6

inet_interfaces = all
inet_protocols = ipv6, ipv4
smtp_bind_address = xxx.xx.xx.xx
smtp_bind_address6 = 2a00:e10:1004::1
Seitenanfang

RealTime Blocklist

Erweiterung in der main.cf

...
smtpd_recipient_restrictions = permit_mynetworks,
 reject_unauth_destination,
 reject_non_fqdn_sender,
 reject_non_fqdn_recipient,
 reject_unknown_recipient_domain,
 reject_unknown_sender_domain
 reject_rbl_client bl.spamcop.net,
 permit
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_helo_restrictions = reject_unknown_helo_hostname
...

- reject_rbl_client RBL-Domain Abfrage einer RealTime Blacklist
- permit gibt an das jede Mail die bis hierher gekommen ist passieren kann
- reject_unauth_pipelining verhindert, das mehrere SMTP Kommandos auf einmal eingeliefert werden
- reject_unknown_helo_hostname prüft den Hostname im DNS, der bei der Begrüßung angegeben wurde

permit		erlauben
warn_if_reject	Warnung ins LOG schreiben
reject		ablehnen
defer		temporärer Fehler

DNS-Blacklist

- NixSpamProjekt der IX Blacklist Zonendatei ist unter ix.dnsbl.manitu.net zu finden, die Liste als Download.

- Blocklist.de Einbindung in der main.cf

# /etc/postfix/main.cf
...
smtpd_recipient_restrictions =
		...
		reject_rbl_client bl.blocklist.de
...

Spam-Links

Spamhaus Blacklist

SBL - (Spamhaus Block List) sbl.spamhaus.org IP-Adressen, von denen man keine Mails empfangen soll. Von diesen Adressen wurde in letzter Zeit Spam versendet.
XBL - (Exploits Block List) xbl.spamhaus.org gehackte Server und Desktops, von Botnetzen
PBL - (Policy Block List) pbl.spamhaus.org IP-Adressen zu Dialup-Bereichen der Provider
ZEN - zen.spamhaus.org umfasst alle drei Listen SBL, XBL, PBL
DROP - (Don't Route Or Peer) drop.spamhaus.org Insolvente oder Übernommene Unternehmen
DBL - (Domain Block List) Domain die in Spam beworben oder für Phishing genutzt wurden.

Server Relay Test

abuse.net Relay Test
Mailradar OpenRelay Test

Seitenanfang

Postfix mit Greylist (PostGrey)

Es muss das Paket Postgrey installiert werden, damit Postfix eine Greylist nutzen kann.

mit Postgrey werden noch folgende Pakete installiert libberkeleydb-perl libdigest-hmac-perl libdigest-sha1-perl libio-multiplex-perl libnet-cidr-perl libnet-dns-perl libnet-ip-perl libnet-server-perl postgrey ucf

Erweiterung der main.cf

smtpd_recipient_restrictions = permit_mynetworks,
 ...
 check_policy_service inet:127.0.0.1:60000,
 permit

- check_policy_service inet:127.0.0.1:60000 Anbindung von Postfix an Postgrey über ein local laufenden Socket auf Port 6000

Der nächste Zustellversuch von Servern die nicht in $mynetworks verzeichnet sind, erhalten erst einmal eine temporäre Fehlermeldung, die in /var/log/mail.log verzeichnet werden. Bei der zweiten Zustellung mit der gleichen IP wird die Mail angenommen.
Die Zeit wie lange die Greylist die Annahme verweigert, wird in /etc/default/postgrey festgelegt. Der Wert sollte mind. 20 Minuten betragen.

Einstellungen in /etc/default/postgrey

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=1200"
Seitenanfang

Postfix als Mail-Relay für nachfolgende Mailserver

Postfix verifiziert bei nachfolgenden Mailservern eintreffenden eMailsAdressen, ob die eMail Adresse auf dem verantwortlichen Mailserver existiert. Wenn diese existiert, nimmt er die eMail an.

- Verzeichnis für den eMailAdressCache anlegen

mkdir --mode=700 /var/spool/postfix/data
chown postfix:root /var/spool/postfix/data

- Postfix Pfad für die Cache Datei festlegen

# main.cf
...
address_verify_map = btree:/var/spool/postfix/data/verify
smtpd_recipient_restrictions =
	permit_sasl_authenticated,
	permit_mynetworks,
	reject_rbl_client zen.spamhaus.org,
	reject_rbl_client ix.dnsbl.manitu.net,
	reject_unverified_recipient,
	permit_mx_backup,
	reject_unauth_destination,
	permit
...
Seitenanfang

Postfix Mailserver für eine locale Arbeitsgruppe

Pakete postfix fetchmail cyrus-imapd

Postfix Konfiguration

Option bei Postfix Installation wählen: Internet mit Smarthost
Netzwerk: 192.168.2.0/24
IP des MailServers: 192.168.2.62

- Postfix Konfigurationsdatei anpassen, Netzwerk und IP des Servers eintragen.

# /etc/postfix/main.cf
...
mynetworks = 192.168.2.0/24, 127.0.0.0/8
inet_interfaces = 192.168.2.62, localhost
...
# eMail dem SMTP Host zuordnen
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relayhost
# wenn es nur einen RelayServer gibt
# relayhost = smtp.1und1.de
smtp_sender_dependent_authentication = yes
smtp_sasl_auth_enable = yes
# Nutzer/Passwort für die Authentifizierung festlegen
smtp_sasl_password_maps = hash:/etc/postfix/smtp_relayhost_auth
smtp_sasl_security_options = noanonymous
# /etc/postfix/sender_relayhost
# Zuordnung eMail Domain und Versandserver
# Syntax: eMail-Adresse SMTP-des-Providers
# einzelne eMail Adressen
# user1@gmx.de	mail.gmx.net
# user2@gmx.net	mail.gmx.net
# user3@web.de	smtp.web.de
#
# je Provider
@gmx.de		mail.gmx.net
@gmx.net	mail.gmx.net
@gmx.it		mail.gmx.net
@web.de		smtp.web.de
# /etc/postfix/smtp_relayhost_auth
# Passwort per Mailadresse
# Syntax: eMail-Adresse	Benutzer:Passwort
user1@gmx.de	nutzer1:passwort
user2@gmx.net	nutzer2:passwort
user3@web.de	nutzer3:passwort
# Passwort pro MailHost
# Syntax: SMTP-des-Providers Benutzer:Passwort
# smtp.1und1.de	user@domain.tld:Passwort
postmap /etc/postfix/sender_relayhost
postmap /etc/postfix/smtp_relayhost_auth

- Postfix Konfiguration neuladen

postfix reload

Fetchmail Konfiguration

# /etc/fetchmailrc
# set daemon 300
# set logfile "/var/log/fetchmail"
poll pop.gmx.net proto pop3 interval 3 user "user1@gmx.de" password "geheim" is user1
poll pop.gmx.net proto pop3 interval 3 user "user2@gmx.net" password "geheim" is user2
poll pop.web.de proto pop3 interval 4 user "user3@web.de" password "geheim" is user3

interval 4 - wenn daemon auf 300 gesetzt ist bedeutet es 4 x 300 = 20 Min

- Berechtigungen setzen

chmod 600 /etc/fetchmailrc
chown fetchmail /etc/fetchmailrc

touch /var/log/fetchmail
chown fetchmail:root /var/log/fetchmail
chmod 0600 /var/log/fetchmail

- Fetchmail Daemon automatisch starten

chkconfig fetchmail on
chkconfig -add fetchmail
chkconfig -l

- unter OpenSuSE die Konfigurationsdatei anpassen

/etc/sysconfig/fetchmail

- Protokoll überwachen

tail -f /var/log/mail

- eMailDatei

/var/spool/mail/<username> 

Cyrus Konfiguration

Konfigurationsdateien

/etc/cyrus.conf
/etc/imapd.conf
# /etc/imapd.conf
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
sievedir: /var/lib/sieve
admins: cyrus
allowanonymouslogin: no
autocreatequota: 10000
reject8bit: no
quotawarn: 90
timeout: 30
poptimeout: 10
dracinterval: 0
drachost: localhost
sasl_pwcheck_method: saslauthd
lmtp_overquota_perm_failure: no
lmtp_downcase_rcpt: yes
sasl_auxporp_plugin: sasldb

- Administrativen Benutzer mit Passwort anlegen

saslpasswd2 cyrus

- angelegten Cyrus Benutzer anzeigen

sasldblistusers2

- eMail Weiterleitung von Postfix zum Cyrus Server

# /etc/postfix/master.cf
cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

cyrus als Transportmethode für Postfix verwenden

# /etc/postfix/main.cf
...
mailbox_transport = cyrus
...

- CyrusDaemon starten (OpenSuSE)

rccyrus start
cyradm -u cyrus localhost
cyradm -user cyrus -auth login localhost

- Testen

mail -r user1@gmx.net -s "Das ist ein Test" mail@domail.tld < ~/mail.txt
imtest -m login -a user1 localhost
netstat -anp | grep 'LISTEN '
netcat -zv 192.168.2.62 25

- weiter Konfigurationsdateien

/etc/sysconfig/mail
/etc/sysconfig/postfix

- Log Dateien

/var/log/mail /var/log/fetchmail /var/log/firewall

 

Seitenanfang

SASL (Simple Authentication and Security Layer)

Befehl Beschreibung
saslpasswd -u `postconf -h myhostname` -c username User in die "/etc/sasldb" eintragen, mit vollstädigen REALM (ist wichtig, da sonst die Authentifikation scheitert)
saslpasswd2 -u domain.tld -c username User in Datei /etc/sasldb2 übernehmen
saslpasswd2 -u domain.tld -d username User in Datei /etc/sasldb2 löschen
sasldblistusers2 User der /etc/sasldb2 anzeigen
testsaslauthd -u user -p pass -r domain.tld SASL Zugang testen (nur SASL2)
testsaslauthd -u user -p pass -s smtp SASL Zugang testen SMTP Service
testsaslauthd -u user@domain.tld -p geheim SASL Authentifizierung testen
testsaslauthd -u user -p pass -f /var/spool/postfix/var/run/saslauthd/mux SASL Authentifizierung testen
saslfinger -s zeigt SMTP-AUTH Server Konfiguration
saslfinger -c zeigt SMTP-AUTH Client Konfiguration
saslpluginviewer zeigt alle von SASL unterstützten Mechanismen an
sasl-sample-server  
sasl-sample-client  
sasldbconverter2  
service saslauthd start SASL Daemon Service starten

- SASL Binarys und Module

apt-get install sasl2-bin libsasl2 libsasl2-modules
Seitenanfang

SMTP-Auth für Mailversand

SMTP-Auth führt eine Anmeldung an einem anderen Mailservern durch.

notwendigen Pakete postfix-tls, sasl-bin, libsasl-modules-plain, libsasl-digestmd5-plain (für Digest MD5 Authentifikation)

Datei /etc/postfix/sasl_passwd erzeugen mit dem Eintrag

mail.gmx.net	username:passwort

Mit postmap /etc/postfix/sasl_passwd wird nach der Änderung die BinärDatei für Postfix erstellen.

#/etc/postfix/main.cf
...
relayhost = mail.gmx.net
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_always_send_ehlo = yes
smtp_sasl_security_options = noanonymous
...
Seitenanfang

SMTP-Auth für Mailempfang

Dateien Bedeutung
/etc/default/saslauthd SASL-Daemon Konfigurationsdatei
/etc/postfix/sasl/smtp.conf SASL Konfigurationsdatei (wird unter Debian nicht verwendet)
/etc/sasldb2 SASL-DB Passwortdatei bei Auth. über sasldb
   
Auth-Mechanismen Beschreibung
kerberos5 über Kerberos5
pam Authentifizierung wird von PAM übernommen
rimap über Remote IMAP Server, nach Möglichkeit nutzen, wenn IMAP und SMTP auf einer Maschine liegt, da sonst die Passwörter im Klartext übers Netz gehen, oder mittels SSL Tunnel zwischen SMTP und IMAP/POP3 Server verschlüsseln
shadow SASL greift auf /etc/passwd und /etc/shadow zu, benötigt dafür auch Leserechte für diese Dateien, ist aus Sicht der Sicherheit bedenklich.
sasldb über eine eigene Datenbank, aus Wartungssicht nicht so empfehlenswert, da zwei Dateien gepflegt werden müssen, die des IMAP/POP3 Servers und die SASL-DB
ldap Anfragen an einen LDAP Server weiterleiten
Seitenanfang

Erweiterung der /etc/postfix/main.cf

# Postfix für den Empfang über TLS
...
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_loglevel = 3
smtpd_use_tls = yes
# smtpd_enforce_tls = yes
smtpd_tls_auth_only = yes
broken_sasl_auth_clients = yes
...
# SASL aktivieren
...
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_tls_auth_only = yes
smtpd_sasl_local_domain = domain
brocken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  check_recipient_maps,
  reject_unauth_destination,
  permit_auth_destination
smtp_sasl_auth_enable = no
...

smtpd_tls_cert_file und smtpd_tls_key_file gibt Ort für Server-Zertifikat und Privaten-Schlüssel an
smtpd_use_tls aktiviert TLS für den SMTP Daemon
smtpd_enforce_tls TLS-Verbindung erzwingen, nicht empfohlen lt. RFC 2847
smtpd_tls_auth_only AUTH-Befehl nur, wenn TLS verwendet wird (keine Passwörter im KLARTEXT übers Netz)
broken_sasl_auth_clients Authentifizierung auch für Clients ermöglichen, die sich nicht an RFC2554 halten.

smtpd_sasl_auth_enable SASL Authentifizierung aktivieren
smtpd_sasl_security_options Sicherheitsoption, noanonymous - Anonymous Login deaktivieren, noplaintext - unverschlüsselte Passwortübertragung deaktivieren, wenn mit SSL/TLS gearbeitet wird kann man PlainText auch zulassen, da die Verbindung sowieso Verschlüsselt ist.
smtp_sasl_local_domain wenn hier die Doamin eingetragen wird, muss der Anwender den Benutzername mit angehängter Domain eingeben
smtpd_recipient_restrictions wenn sich der Benutzer Authentifiziert hat kann er über den Server Mails verschicken
smtp_sasl_auth_enable mit NO aktiviert man SASL nur für den SMTP-Server ein, nicht für den Client.

- Wenn Postfix im CHROOT Käfig läuft und mit dem SASL Prozess kommunizieren soll.

PWDIR=/var/spool/postfix/var/run/saslauthd
PARAMS="-m $PWDIR"

Die Datei /etc/postfix/sasl/smtp.conf wird unter Debian nicht verwendet.

#/etc/postfix/sasl/smtp.conf
pwcheck_method: auxprop
mech_list: plain login
Seitenanfang

SASL mit RIMAP Mechanismus

1. Das Starten des saslauth-Daemons ermöglichen /etc/default/saslauthd (nur wenn SASL2 installiert ist)

#/etc/default/saslauthd
START=yes
MECHANISMS="rimap"
MECH_OPTIONS="127.0.0.1"

oder

#/etc/default/saslauthd
START=yes
MECHANISMS="rimap -O mail.domain.tld"

MECHANISMS legt den Authentifizierungsmodus fest, weitere Hilfe mit "man saslauthd" MECH_OPTIONS die Optionen.
Bei rimap muss die IP oder der DNS-Name des IMAP/POP3 Mailservers als Option angegeben werden.

Seitenanfang

SASL mit PAM Mechanismus

1. SASL-Daemon konfigurieren.

#/etc/default/saslauthd
START=yes
MECHANISMS="PAM"
MECH_OPTIONS=""
...

2. den Postfix Benutzer in die SASL Gruppe aufnehmen

usermod -G sasl postfix

3. SASL-Authentifizierungs-daemon (saslauthd) einrichten

#/etc/postfix/sasl/smtpd.conf
# pwcheck_method: saslauthd
mech_list: plain login
log_level: 3

pwcheck_method legt Methode fest mit der Postfix die Passwörter des AUTH-Kommandos überprüfen soll.
mech_list Authentifizierungsmethode, meist "Plaintext", Outlook und Outlook Express verwenden "Login", andere beherrschen noch "CRAM-MD5".

pwcheck_method: pam Hier wird PAM benutzt; hiermit lassen sich Anmeldungen über LDAP, RADIUS oder NIS durchführen
pwcheck_method: shadow Es wird die Datei /etc/shadow gelesen. Problematisch da der Postfix-User Leserechte auf die Datei braucht
pwcheck_method: sasldb SASL benutzt seine eigene Datenbank
pwcheck_method: pwcheck Eine alternative zum Lesen der /etc/shadow. Hier wird ein pwcheck helper daemon benutzt
pwcheck_method: kerberos_v4 Authentifizierung mit Kerberos
pwcheck_method: auxprop Authentifizierung über eine Datenbank wie MySQL

4. noch einen Link erstellen (oder kopieren) auf die SASL Datei und die Dateirechte (lesen für SASL) anpassen.

ln /etc/sasldb /var/spool/postfix/etc/sasldb
ln /etc/sasldb2 /var/spool/postfix/etc/sasldb2
chgrp sasl /etc/sasldb
oder
chgrp sasl /etc/sasldb2

5. wenn die Authetifizierung mittels PAM erfolgen soll, muss man noch einige Dateien in den CHROOT Jail von Postfix kopieren.

/etc/pam.conf
/etc/pam.d/other
/etc/pam.d/smtp
/var/spool/postfix/lib/security

- zum probieren welche Mechanismen funktionieren, kann man das wie folgt testen

saslauthd -a pam
testsaslauthd -u username -p password
ps ax | grep saslauthd
killall saslauthd

nach allen Änderungen nicht vergessen Postfix und SASL neu zu starten

/etc/init.d/postfix restart && /etc/init.d/saslauthd restart

 

Seitenanfang

Verbindung testen

- Log Datei für die Authentifizierung beobachten

tail -f /var/log/auth.log

- SASL Test

saslfinger -c :
saslfinger -s :

- SASL Login Test

testsaslauthd -f /var/spool/postfix/var/run/saslauthd/mux -s smtpd -u user@domain -p password

Authentifizierung an der Konsole checken, im allgemeinen kann man den Parameter -f weg lassen, im Beispiel läuft SASL im Chroot von Postfix
Parameter
-s - Servicename - pam, smtpd
-u - User
-p - Passwort
-f - SocketPath

- läuft der SASL Daemon

ps ax | grep saslauthd
ls -al /var/spool/postfix/var/run/saslauthd
oder
ls -al /var/run/saslauthd
AUTH String für den SASL AUTH Test mit Telnet erstellen Base64 Encoder/Decoder
echo -ne '\0benutzer\0passwort' | openssl enc -base64
oder
echo -ne '\000benutzer\000passwort' | openssl base64
oder
perl -MMIME::Base64 -e 'print encode_base64("\0benutzer\0passwort");'
oder
perl -MMIME::Base64 -e 'print encode_base64("\000benutzer\000passwort")'
oder
perl -MMIME::Base64 -e 'print encode_base64("user\@domain\.tld")'
echo 'benutzer' | base64
YmVudXR6ZXIK

echo 'YmVudXR6ZXIK' | base64 -d
benutzer

- mit "netcat" oder "telnet" apt-get install netcat

Verbindungstest mit SASL
# telnet localhost 25
Trying 127.0.0.1...
[...]
220 mail.domain.tld ESMTP Postfix (TUX/GNU)
ehlo localhost
250-mail.domain.tld
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN NTLM LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN NTLM LOGIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHVzZXJAZG9tYWluLnRsZABwYXNzd29ydA==
235 2.0.0 Authentication successful
MAIL FROM:user@domain.tld
...

wenn in der /etc/postfix/main.cf der Parameter smtpd_sasl_security_options = noplaintext gesetzt ist, ist der Login über PLAIN nicht möglich. Dieser Parameter muss zum Testen mit Telnet vorher deaktiviert werden.

Verbindung testen mit eingerichteten TLS

ohne TLS Verbindung

# nc localhost 25
[...]
220 host.local ESMTP Postfix (Debian/GNU)
EHLO localhost
250-host.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-XVERP
250 8BITMIME

entscheidend ist die Zeile 250-STARTTLS, das AUTH Kommando darf nicht auftauchen, da keine TLS Verbindung besteht

mit TLS Verbindung

# openssl s_client -starttls smtp -host localhost -port 25
[...]
220 host.local ESMTP Postfix (Debian/GNU)
EHLO localhost
250-host.local
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
AUTH PLAIN dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcnQ=
235 2.0.0 Authentication successful

Encrypt

perl -MMIME::Base64 -e 'print encode_base64("username\0username\0passwort");'
dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcnQ=

perl -MMIME::Base64 -e 'print encode_base64("\0user\@domain.tld\0passwort");'
AHVzZXJAZG9tYWluLnRsZABwYXNzd29ydA==

perl -MMIME::Base64 -e 'print encode_base64("\user\@domain.tld\0user\@domain.tld\0passwort");'
U2VyQGRvbWFpbi50bGQAdXNlckBkb21haW4udGxkAHBhc3N3b3J0

Decrypt

perl -MMIME::Base64 -e 'print decode_base64("dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=");
print "\n";'

- Testen von einem entfernten Host aus

openssl s_client -starttls smtp -host host.domain.tld -port 25
#/etc/pam.d/smtp
auth required pam_permit.so
account required pam_permit.so
password required pam_permit.so
session required pam_permit.so

Fehlermeldung:
fatal: no SASL authentication mechanisms
Lösung:
folgende Pakete installieren

apt-get install libsasl-modules-plain libsasl-digestmd5-des libsasl7
apt-get install libsasl-gssapi-mit oder libsasl-gssapi-heimdal

- entweder SASL2 Pakete und Libs oder SASL1 Pakete und Libs installieren.

/etc/postfix/master.cf

# only used by postfix-tls
#smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
Seitenanfang

StartTLS TLS-Verschlüsselung

Heise - StartTLS-Verschlüsselung austesten

- StartTLS Verschlüsselung für Postfix SMTP (Port 25) einrichten

# /etc/postfix/main.cf
...
# TLS parameters ##############################################
smtpd_tls_cert_file=/PATH/ssl/cert.pem
smtpd_tls_key_file=/PATH/ssl/privkey.pem
smtpd_tls_loglevel = 3
smtpd_use_tls=yes
# TLS erzwingen (nicht empfohlen lt. RFC 2847)
# smtpd_enforce_tls = yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# TLS parameters Ende##########################################
...
# SASL bei eingehenden Verbindungen
smtpd_sasl_auth_enable = yes
# nur Clients die sich per SASL Authentifizieren
smtpd_client_restrictions =
                permit_sasl_authenticated
#               reject

wenn der Server auch Mails von anderen MailServer annehmen soll, darf bei smtpd_client_restrictions das reject nicht aktiviert werden, da dann der externe MailServer der eMails einliefern will, abgewiesen wird, da er sich nicht über SASL Authentifiziert.

- StartTLS Verschlüsselung für Postfix SMTP (Port 587) einrichten, die Einstellungen beziehen sich nur auf die Kommunikation über Port 587

# /etc/postfix/master.cf
...
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
...

smtpd_tls_security_level=encrypt
smtpd_sasl_auth_enable=yes - SASL Authentifizierung nur über TLS möglich
smtpd_client_restrictions=permit_sasl_authenticated,reject - nur der Client der sich über SASL Authentifiziert darf Mails versenden, alles andere wird abgewiesen

Die gleichen Einstellungen in der /etc/postfix/main.cf beziehen sich nur auf Port 25.

Seitenanfang

Verbindung prüfen

in der Ausgabe des MailServers nach den EHLO sollte StartTLS in der Liste auftauchen, dann ist der Server bereit, für die Verschlüsselte Kommunikation.

nc mail.domain.tld 25
EHLO localhost
...
250-STARTTLS
...

STARTTLS
220 2.0.0 Ready to start TLS
QUIT
perl -MMIME::Base64 -e 'print encode_base64("\000benutzer\000passwort")'
AGJlbnV0emVyAHBhc3N3b3J0

- STARTTLS Verbindung zum Mailserver herstellen

openssl s_client -host mail.domain.tld -port 587 -starttls smtp
EHLO localhost
...
250-AUTH PLAIN LOGIN
...

AUTH PLAIN AGJlbnV0emVyAHBhc3N3b3J0
235 2.7.0 Authentication successful

Paket gnutls-bin

apt-get install gnutls-bin
gnutls-cli -s -p submission mail.domain.tld -p 25
EHLO localhost
...
250-STARTTLS
...

STARTTLS
220 2.0.0 Ready to start TLS

STRG + D drücken um ein SIGALRM an gnutls-cli zu schicken, dadurch wird die TLS Verbindung ausgehandelt

*** Starting TLS handshake
- Ephemeral Diffie-Hellman parameters
 - Using prime: 1024 bits
 - Secret key: 1023 bits
 - Peer's public key: 1024 bits
- Certificate type: X.509
 - Got a certificate list of 1 certificates.
 - Certificate[0] info:
  - subject `C=DE,ST=GERMANY,...
- The hostname in the certificate matches 'mail.domain.tld'.
- Peer's certificate issuer is unknown
- Peer's certificate is NOT trusted
- Version: TLS1.2
- Key Exchange: DHE-RSA
- Cipher: AES-128-CBC
- MAC: SHA1
- Compression: NULL

- Forward Secrecy Test, Verschlüsselung über STARTTLS

openssl s_client -starttls smtp -connect smtp.domain.tld:587

SMTP, POP3, IMAP und FTP werden als Protokoll auch noch unterstützt.

Seitenanfang

Hosts/Adressen prüfen

Postfix Configuration Parameters
smtpd_restriction_classes
RESTRICTION_CLASS_README

 

# /etc/postfix/main.cf
...
smtpd_restriction_classes = restrictive, permissive
# With Postfix < 2.3 specify reject_unknown_client.
restrictive = reject_unknown_sender_domain reject_unknown_client_hostname ...
permissive = permit

smtpd_recipient_restrictions = 
	permit_mynetworks
	reject_unauth_destination
	check_recipient_access hash:/etc/postfix/recipient_access
# /etc/postfix/recipient_access
joe at my.domain	permissive
jane at my.domain	restrictive
# gesperrte Hosts/Domain prüfen - smtpd_helo_restrictions =
                check_helo_access hash:/etc/postfix/helo_access
# gesperrte Clients prüfen - smtpd_client_restrictions =
                check_client_access hash:/etc/postfix/client_access
# gesperrte Sender prüfen - smtpd_sender_restrictions =
                check_sender_access hash:/etc/postfix/sender_access
# gesperrte Empfänger prüfen - smtpd_sender_restrictions =
                check_recipient_access hash:/etc/postfix/recipient_access
# /etc/postfix/client_access
mail.yahoo.de		REJECT
mail.gmx.de		OK
Seitenanfang

SMTP Return Code

Der Return Code besteht aus drei Zahlen die sich wie folgt zusammensetzen.

1xx nur ESMTP vorläufige positive Antwort, endgültiges Ergebniss muss noch abgewartet werden.
2xx erfolgreich ohne Fehler ausgeführt.
3xx Anforderung verstanden, benötigt aber zur Verarbeitung weitere Informationen.
4xx temporären Fehler, Kommando nicht ausgeführt. Ein späterer Versuch ist sinvoll, Fehler nur von vorübergehender Natur.
5xx permanenter Fehler, weitere Versuche zwecklos.

- Weiter Detail zeigt die zweite Zahl

x0x Syntax Fehler
x1x Antwort nur zur Info
x2x Antwort bezieht sich auf den Status der Verbindung
x3x Nicht spezifiziert
x4x Nicht spezifiziert
x5x Status des Mailservers

Die dritte Zahl meldet den Status des Mailtransfers.

- Allgemeine Status Meldungen

211 Statusmeldung, oder Antwort System Hilfe
214 Hilfe Nachricht
220 Server bereit
221 TCP/IP Verbindung schließen
421 TCP/IP Verbindung besteht, aber Server nimmt derzeit keine Mails an.

- alles Bestens

250 alles ok, Befehl ausgeführt
251 Mail wird angenommen, und Weitergeleitet an die angegebenen Adresse

- Mailübertragung

354 Beginne Mail Eingabe; beende mit [CRLF].[CRLF]
554 Übertragungsfehler

- Empfänger vorhanden, Mailannahme aber verweigert

450 Mail Aktion nicht ausgeführt: Mailbox offline|gesperrt|überfüllt
451 Abbruch: unbekannter Fehler
452 Aktion nicht ausgeführt: Nicht genügend RAM|Plattenplatz
550 Aktion nicht ausgeführt: Mailbox unerreichbar|existiert nicht
551 Benutzer nicht lokal; bitte [Weiterleitungspfad] versuchen
552 Aktion abgebrochen: Überschreitung des Speichers
553 Aktion nicht ausgeführt: Mailadresse falsch oder geblockt

- Allgemeine Fehler

500 Syntax Fehler, unbekannter Befehl
501 Syntax Fehler bei Parameter oder Argumenten
502 Befehl unbekannt
503 falsche Befehlsreihenfolge
504 Befehlsparameter für den Befehl nicht vorhanden/unbekannt

 

Seitenanfang

Konfiguration testen

- TesteMail auf der Konsole versenden

mail -s "Das ist ein Test" user@domain.tld < ~/mail.txt
echo "Dies ist eine Testmail" | mail -s "Test" user@domain.tld

- zeigt Verbindungen an

lsof -i :25 | grep ESTABLISHED

- zeigt Anzahl der Verbindungen

lsof -i :25 | grep ESTABLISHED | wc -l

- im Intervall (5 Sekunden) die Größe der Dateien verify_cache.db und mail.log abfragen

watch --interval=5 'du -sch /var/lib/postfix/verify_cache.db; du -sch /var/log/mail.log'
# telnet localhost smtp
HELO mail.domain.tld Verbindung herstellen und Hostname mitteilen
EHLO mail.domain.tld eine Enhanced-SMTP Verbindung herstellen und Hostname mitteilen
MAIL FROM:<user@domain.tld> Spezifiziert den Absender und leitet das Absenden von Mail ein.
RCPT TO:<user2@domain.tld> Spezifizieren des Empfängers.
DATA Nachrichteninhalt eingeben und übertragen.
FROM:<user@domain.tld> Absender für den MailHeader
TO:<user@domain.tld Empfänger für den MailHeader
SUBJECT:Eine Mail Betreff der Mail
. Texteingabe abschliessen
RSET Abbruch einer laufenden übertragung und Reset der Verbindung.
QUIT beenden der Verbindung zum Server
Enhanced SMTP (Optional)
HELP fordert Hilfeinstruktionen an
SEND FROM:<user@domain.tld> Übertragung der Nachricht an ein Terminal.
SOML FROM:user@domain.tld Übertragung der Nachricht an ein Postfach oder ein Terminal.SEND OR MAIL
SAML FROM:user@domain.tld Übertragung der Nachricht an ein Terminal und ein Postfach.SEND AND MAIL
VRFY user@domain.tld Fragt nach, ob ein bestimmtes Postfach verfügbar ist. (Sicherheitsbedenklich)
EXPN user@domain.tld Fragt nach den Mitgliedern einer Maillingliste.
NOOP No Operation, gibt einen positiven Wert zurück, falls der Server noch lebt.
TURN Dreht das Verhältnis zwischen Server und Client um.
ETURN Server soll veranlasst werden, alle Mails an eine bestimmte Maildomain sofort zuzustellen. (Sicherheitsbedenklich)

 

Seitenanfang

sonstiges

- MailHost mit mehreren Round-Robin A-Records

# host mx01.domain.tld
mx01.domain.tld has address 1.2.3.4
mx01.domain.tld has address 1.2.5.6

- mehrere MX Records

# host -t MX domain.tld
domain.tld mail is handled by 10 mx00.domain.tld
domain.tld mail is handled by 10 mx01.domain.tld

Fehlermeldung

postfix/master[XXXX]: nss_ldap: could not search LDAP server - Server is unavailable

Lösung: Datei bearbeiten und "services" Eintrag ändern

# /etc/nsswitch.conf
...
# services:       files ldap
services:       files
...

Login SMTP Server funktioniert nicht

OpenSuSE# telnet 127.0.0.2 25
Trying 127.0.0.2...
telnet: connect to address 127.0.0.2: Connection refused 

Lösung:

inet_Interface = ...
# /etc/sysconfig/mail
...
SMTPD_LISTEN_REMOTE="yes"
... 

eMail Versand nicht möglich

554 5.7.1 <user@domain.tld>: Relay access denied

Lösung:

# main.cf
...
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
...

Fehlermeldung

SASL in der /var/log/auth.log

postfix/smtpd[16485]: sql_select option missing
postfix/smtpd[16485]: auxpropfunc error no mechanism available
postfix/smtpd[16485]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql

Lösung: Modul zur direkten SQL Authorisierung darf nicht installiert sein

apt-get remove libsasl2-modules-sql

Fehlermeldung

postfix/error[7256]: 0354F5174604:
 to=<user@domain.tld>, relay=none, delay=0.55, delays=0.34/0.03/0/0.18,
 dsn=5.0.0, status=bounced (User unknown in virtual alias table)

Mailadresse in die /etc/postfix/canonical eintragen

user@domain.tld		user@domain.tld

Fehlermeldung

postfix/trivial-rewrite[10163]: warning: do not list domain domail.tld
 in BOTH virtual_alias_domains and relay_domains

Die Domain ist in der /etc/postfix/mail.cf in mehreren Parametern gelistet, im Beispiel unter virtual_alias_domains und relay_domains, wenn es sich um eine virtuelle Domain handelt, am besten unter virtual_mailbox_domains oder relay_domains

virtual_mailbox_domains = domain1.tld, domain2.tld
oder
relay_domains = hash:/etc/postfix/relay_domains
#/etc/postfix/relay_domains
domain1.tld      lmtp:unix:/var/run/cyrus/socket/lmtp

Der Account für den User muss dann noch in der /etc/postfix/canonical angelegt werden.