Links
Postfix Projekt
Deutscher Mirror vom Postfix Projekt
Postfix HowTo
Postfix DE Mailingliste
Postfix absichern
Grundabsicherung von Postfix
SASL HowTo
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
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.
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
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.
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.
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
Ü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 |
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 |
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
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!
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
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
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
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
- 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 ...
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.
abuse.net Relay Test
Mailradar OpenRelay Test
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"
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 ...
Pakete postfix fetchmail cyrus-imapd
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
# /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>
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
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
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 ...
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 |
# 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
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.
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
- 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
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
# 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.
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
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.
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.
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
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
- 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) |
- 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
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 ...
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" ...
554 5.7.1 <user@domain.tld>: Relay access denied
Lösung:
# main.cf ... smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination ...
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
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
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.