Linux_Befehle | Programme_einrichten | Linux_System | Firewall | Shell_Scripte | FAQs | Debian | Ubuntu | OpenSUSE | RedHat

22.04.2014

Programminstallation unter Linux


Apache Webserver
Samba Server
E-Mail-Server einrichten
Kerberos einrichten
OpenSSH Server / Client
DSL Konfiguration unter Linux
Zeitserver unter Linux erstellen
DNS Server
Subversion
iSCSI
LDAP-Server
Radius-Server
OpenSSL-Server einrichten
OpenVPN einrichten
NNTP Server (NEWS-Server) INN und Leafnode
DHCP-Server einrichten
SNMP Service einrichten
VPN 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

abuse.net OpenRelay Test
MXtoolbox OpenRelay Test
MXtoolbox Blacklist Test
MXtoolsbox SuperTool
Postmaster.t-online.de

Spam und Virenschutz
Mailserver mit Spamfilter
Postfix HowTo
Fetchmail HowTo
SASL HowTo

LiveMail SMTP Fehlermeldung

Seitenanfang

E-Mail-Server einrichten

Postfix
Postfix mit RealTime Blacklist
Postfix mit Greylist (PostGrey)
Postfix als Mail-Relay für nachfolgende Mailserver
Postfix Mailserver für eine locale Arbeitsgruppe
SASL (Simple Authentication and Security Layer)
StartTLS TLS-Verschlüsselung
Hosts/Adressen prüfen
FetchMail
GetMail
Courier-IMAP
Cyrus-IMAP
Procmail
Sieve
SMTP Return Code
Konfiguration testen
sonstiges

MTA - Message Tranfer Agent ist ein Mailserver wie z.B. Postfix, QMail, Exim, Courier, Sendmail.

MDA - Message Delivery Agent dient zum weiterleiten / sortieren der Mail die vom MTA empfangen wurden z.B. procmail, maildrop ...

MUA - Mail User Agent ist der Mailclient z.B. Evolution, kMail, Mutt ...

Webmailprogramme: SquirrelMail, Horde, Sqwebmail

für den Mailverkehr wichtige RFCs sind 2821 und 2822 siehe hier.

Mailbox Formate:  
mbox alle Mails werden in einer Datei gespeichert
mbx alle Mails werden in einer Datei gespeichert, der Datei wird noch ein Index hinzugefügt
maildir jede Mail wird in einer separaten Textdatei gespeichert, neue Mail werden in ein Unterverzeichnis tmp gespeichert, die vollständig geschrieben Mail landet dann im new Verzeichnis, gelesene kommen dann nach cur
mh (Mail Handler) jede Mail wird in einer separaten Textdatei gespeichert, und erhält eine fortlaufende Nummer, zentrale .mh_sequences Datei in der die Mails verzeichnet sind

wenn man das maildir oder mh Mailbox-Format verwendet, muss man darauf achten, das man beim anlegen des Dateisystems genügend INODES einrichtet.

Mailbox-Konverter
noch mehr Mailbox-Konverter

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

Mailserver Postfix MTA (Mail Transfer Agent)

/etc/aliases
/etc/postfix/virtual
/etc/postfix/vmailbox
/etc/postfix/canonical
/etc/postfix/master.cf
/etc/postfix/main.cf
Befehle
Loglevel
Fehlermeldungen
sonstiges

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 main.cf kann man auch in der nächste Zeile weiterführen, man muß nur ein Leerzeichen am Zeilenanfang der neuen Zeile einfügen.

Konfigurationsdatei von PostFix
Arbeitsverzeichnisse (Debian):
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

Optionen  
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.
Seitenanfang

Befehle

Befehle Bedeutung
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

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

 

Seitenanfang

Fehlermeldungen


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.


Seitenanfang

sonstiges

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

Postfix mit RealTime Blacklist

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
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)

SMTP-Auth für Mailversand
SMTP-Auth für Mailempfang
Erweiterung /etc/postfix/main.cf
SASL mit RIMAP Mechanismus
SASL mit PAM Mechanismus
Verbindung testen

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")'
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

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

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
openssl s_client -host mail.domain.tld -port 25 -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

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

Fetchmail holt e-Mails vom POP | IMAP Server

FetchMail ist ein reines Abholprogramm für e-Mails eines oder mehrerer Accounts mittels POP3 oder IMAP. Fetchmail setzt einen localen Mailserver vorraus z.B. Postfix oder einen Mail Delivery Agent (MDA) z.B. Procmail, um die abgeholten Mails direct in den Mail-Folder zu speichern.

Konfigurationsdatei Beschreibung
/etc/fetchmailrc  
/etc/default/fetchmail bei Debian, Grundkonfiguration von Fetchmail
SERVICE=true als Daemon starten
CONFFILE=/etc/fetchmailrc Konfigurationsdatei für die abzufragenden Server und Benutzer
OPTIONS="--daemon 600 --syslog --logfile /var/log/fetchmail" Daemon gibt an in welchen abstand (sekunden) das Postfach abgefragt werden soll, hier alle 10min, Meldungen werden ins Syslog und in die Datei /var/log/fetchmail geschrieben.
RUNASROOT=false der Daemon läuft als Benutzer "fetchmail"

LOG Datei erstellen, Berechtigung setzen

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

Konfigurationsdatei: Einwahlverbindung

#/etc/fetchmailrc
set daemon 600
set syslog
set logfile "/var/log/fetchmail"
poll gmx.de via pop.gmx.net proto pop3 user "XYZ" with pass "geheim"
is bert here monitor ippp0
pop web.de via pop.web.de user "123" pass "geheim" is luigi here monitor ippp0

- POP vor SMTP durch "/usr/sbin/sendmail -q" - in "etc/ppp/ip-up" bzw. "ip-up.local" leert die Warteschlange bei einem Verbindungsaufbau

- die Datei sollte mit "chmod 600 /etc/fetchmailrc" für die Benutzer nicht lesbar sein um die Passwörter zu schützen

- Ein Beispiel bei dem Fetchmail die Mails an einem auf localhost Port 25 laufenden SMTP-Daemon übergibt

poll mail.provider.de protocol POP3 user USERNAME password "" is USER keep

- Procmail wird direkt aufgerufen (d.h. es wird kein lokaler SMTP-Daemon benötigt)

poll mail.provider.de protocol POP3 user USERNAME password PASS mda "/usr/bin/procmail -d eva"

Konfigurationsdatei: localer Benutzer

# /etc/fetchmailrc
set daemon 600
set syslog
set logfile "/var/log/fetchmail"

poll	pop.gmx.net protocol pop3
		port 995
		user "user@gmx.de"
		password "geheim"
		smtpaddress localhost
#		keep
		is USER
preconnect "echo 'fetchmail: Start '`date +'%a, %d %b %G %H:%M:%S(%Z)'` >> /var/log/fetchmail"
poll	pop.gmx.net protocol pop3
		port 995
		user "user2@gmx.de"
		password "geheim"
		smtpaddress localhost
#		keep
		is USER
...
postconnect "echo 'fetchmail: Ende '`date +'%a, %d %b %G %H:%M:%S(%Z)'` >> /var/log/fetchmail"
Optionen Beschreibung
set no bouncemail Wenn Mails nicht Ihre Mailadresse enthalten (z.B. von Mailinglisten oder BCC-Header), sollten Sie noch aufpassen, daß diese nicht wieder mit einer Fehlermeldung ("user unknown") zurückgesandt werden.
poll Der Servers von dem die Emails geholt werden sollen
proto oder protocol Das Protokoll des Servers. Meist wird POP3 benutzt
user Der Benutzername von dem du die Emails abholen willst
pass Das Passwort des Benutzers
is oder to Emails direkt in die INBOX vom lokalen Benutzer gespeichert
keep eMails auf dem Server nicht löschten
fetchall alle eMails abholen, auch schon geholte
limit <maxbytes> eMails die größer sind wie angegeben werden nicht geholt
mda Emails an das Programm (hier /usr/bin/procmail )weitergeleitet (procmail ist ein Mailfilter-Programm)
all holt alle Mails die auf dem Server liegen, egal ob diese schon einmal abgeholt wurden
preconnect beim ersten User in der Konfiguration gesetzt, wird Datum und Uhrzeit in der LOG geschrieben, es können auch andere Befehle ausgeführt werden. Der Befehl hinter preconnect wird nach dem Login beim Mailserver ausgeführt
postconnect beim letzten User in der Konfiguration gesetzt, wird Datum und Uhrzeit in der LOG geschrieben. Der Befehl hinter postconnect wird vor dem Logout beim Mailserver ausgeführt
Befehle:  
fetchmail --daemon 500 alle 500 Sekunden werden die EMail abgeholt
fetchmail -q Daemon beenden

Fetchmail von Hand oder durch einen cron Job durch den User starten
Konfigurationsdatei ~/.fetchmailrc erstellen, Option -v Verbose, -a alle Mails vom Server holen

fetchmail -v -a

oder

su fetchmail
fetchmail -v --syslog -f /etc/fetchmailrc

Mails via POP oder IMAP abholen

mit Fetchmail kann man die Mails über POP3 und IMAP holen, YahooMail via FetchYahoo und GotMail holt die Mails von einem Hotmail Account.
Fetchmail Konfigurationsdatei kann man mittels "Fetchmailconf" auf grafischer Basis oder mit "fetchmail -a -f /etc/fetchmailrc"
Als EMail Clients kann man z.B. MUTT für die Konsole und KMAIL für KDE nehmen.
/etc/ppp/ip-up
fetchmail -a -f /etc/fetchmailrc
postconf -e "defer_transports ="
postfix reload
/etc/ppp/ip-down

fetchmail --quit
postconf -e "defer_transports =smtp"
postfix reload

Fetchmail mit SSL

- Fingerprint notieren

fetchmail -v -p pop3 -u user@gmx.net pop.gmx.net | grep -i Fingerabdruck

nach der Zeile "pop.gmx.net-Schlüssel-Fingerabdruck:" suchen und notieren, Zertifikat anzeigen lassen (Ausssteller "Issuer" wird auch angezeigt)

- für POP3

openssl s_client -connect pop.gmx.net:995 -showcerts

- für IMAP

openssl s_client -connect imap.gmx.net:993 -showcerts

Zertifikat in Datei "/usr/share/ssl-cert/pop.gmx.net.pem" speichern

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Ausssteller (Issuer) Zertifikat auslesen und speichern

- anzeigen des Ausstellers bei einem gespeicherten Zertifikat

openssl x509 -in /usr/share/ssl-cert/pop.gmx.net.pem -noout -issuer

- Root Zertifikat herunterladen und im Ordner /usr/share/ssl-cert speichern

wget https://www.thawte.com/roots/thawte_Premium_Server_CA.pem

/etc/fetchmailrc erweitern

	...
	options ssl
	sslcertpath /usr/share/ssl-cert
	sslfingerprint "A6:57:BC:4A:97:AD:DB:99:00:E9:3A:B8:81:55:D7:B6"
	sslcertck
	...

- HASH erstellen

c_rehash /usr/share/ssl-cert

- Fetchmail abholung prüfen

su fetchmail
fetchmail -v --syslog -f /etc/fetchmailrc
Seitenanfang

mit GetMail EMails abholen

GetMail holt die Mails via POP3 oder IMAP und speichert diese dann direkt in den Mail-Folder ab. Es wird kein localer Mailserver oder MDA benötigt. GetMail unterstützt MBox und das Maildir-Format.

Seitenanfang

Courier-IMAP

Courier - Installation
Konfiguration von Courier-IMAP
Verzeichnisse auf dem IMAP Server anlegen
Courier-IMAP mit SSL einrichten
Courier-IMAP Mails mittels Maildrop sortieren
Seitenanfang

Installation von Courier-IMAP

1. Aktuelles Release entpacken

tar xvfj courier-0.xx.x.xxxxxxx.tar.bz2

2. Da Courier-IMAP sich nicht genau an den IMAP RFCs hält, muss man es mit einer configure-Option "--enable-workarounds-for-imap-client-bugs" anpassen

./configure --prefix=/usr/local --sysconfdir=/etc/courier --enable-workarounds-for-imap-client-bugs
- Die Installation landet dann unter /usr/local (--prefix=/usr/local) und die Konfigurationsdateien unter /etc/courier (--sysconfdir=/etc/courier)

3. Programm kompilieren
make

4. Kontrolle
make check
- wenn ./configure mit der Option "--enable-workarounds-for-imap-client-bugs" lief, erhält jetzt die Meldung "FAILING", selbst dann, wenn der Server Problemlos funzt.
Zur Kontrolle kann man alles noch mal ohne die Option laufen lassen, wenn man ganz sicher sein will.

5. Installation des Paketes
make install

6. kopieren der Vorlagen für die Konfiguratinsdateien
make install-configure

Debian Paket Installation
apt-get install courier-authdaemon courier-base courier-doc courier-imap courier-maildrop
und für SSL
apt-get install courier-imap-ssl

- danach ist das Konfigurationsverzeichnis unter /etc/courier und das Programm in /usr/lib/courier, Maildir Verzeichnis muss unter $HOME/Maildir eingerichtet werden.
Seitenanfang

Konfiguration von Courier-IMAP

/etc/courier/imapd  
ADDRESS=192.168.xx.xx IP unter der der Server erreichbar ist
MAXPERIP=16 Max. Anzahl Verbindungen pro Client (da viele Clients für einen IMAP Ordner eine Verbindung öffnen, ist dieser Wert auf mind. 16 zu erhöhen)
IMAPDSTART=YES Daemon beim Systemstart starten
/etc/courier/authdaemonrc  
authmodulelist="authuserdb" Authentifizierungsmethode mit der /etc/courier/userdb
authmodulelistorig="authuserdb" Authentifizierungsmethode Auswählen
version="authdaemond.plain" simple Methode authentifiziert alle Benutzer gegen die gewöhnlichen Systemdateien /etc/passwd und /etc/shadow

Postfix Postfach konfiguration ändern (Mailbox in Maildir) /etc/postfix/main.cf
# home_mailbox = Mailbox/
home_mailbox = Maildir/

- Kontrollieren ob der Daemon läuft

ps fax | grep imapd

anlegen der Benutzer für die authuserdb Methode

1. IMAP Benutzer Verzeichnis erstellen

mkdir /var/spool/imap
cd /var/spool/imap; maildirmake Maildir

2. Gruppe und Benutzer erstellen und Berechtigungen setzen

groupadd imap -g 150
useradd imap -u 150 -g imap -s /bin/false -c "Mailaccount IMAP" -d /var/spool/imap
chown -R imap.imap /var/spool/imap
chmod -R 770 /var/spool/imap

3. User Datenbank anlegen, alle User bis auf den Benutzer "IMAP" aus der userdb löschen

pw2userdb > /etc/courier/userdb

4. Berechtigungen setzen und Binärdatei für den IMAP-Mailserver erstellen.

cd /etc/courier
chmod 600 /etc/courier/userdb
makeuserdb

5. Userpasswort setzen für den Benutzer "imap" setzen

userdbpw -md5 | userdb imap set systempw
makeuserdb

6. weitere Verzeichnisse erstellen

maildirmake -f "Debian Mailingliste" /var/spool/imap/Maildir
chown -R imap.imap /var/spool/imap

Hinweis !
unter /etc/courier/imap den Loglevel einrichten, bei 2 wird auch das Passwort mitgeloggt.

DEBUG_LOGIN=2
Seitenanfang

Verzeichnisse auf dem IMAP Server anlegen

1. Maildir Verzeichnisstruktur unter /etc/skel anlegen

cd /etc/skel; maildirmake Maildir

- Beim Einrichten eines neuen Users kann man mit useradd -m das Skelett in das Home des neuen Users kopieren

2. Neuen Ordner anlegen (bem User)

maildirmake -f"Neuer Ordner" ~/Maildir

- Der Neue Ordner wird dann unter Posteingang angelegt

3. Öffentlichen Ordner anlegen

maildirmake -S /usr/local/share/maildirs

- oberste Ordner Ebene der öffentlichen Ordner anlegen

/etc/courier/maildirshared editieren / anlegen
Public /usr/local/share/maildirs
- Im IMAP-Client ist der Order dann als share/Public sichtbar mit den Unterordnern

maildirmake -s write -f"BugTraq" /usr/local/share/maildirs
maildirmake -s read -f"Intern" /usr/local/share/maildirs

- Unterordner im Öffentlichem Bereich erstellen (unter share/Public)

maildirmake --add BugTraq=/usr/local/share/maildirs/.BugTraq ~/Maildir

- Öffentlichen Ordner unter Posteingang des Users einblenden

- bei Fragen zum Programm maildirmake

man maildirmake
Seitenanfang

Courier-IMAP mit SSL einrichten

1. Konfigurationsdatei /etc/courier/imapd.cnf

[ req_dn ]
# Country
C=US
# Bundesland
ST=NY
# Stadt (Location)
L=New York
# Organisation
O=Courier Mail Server
# Abteilung (Organization Unit)
OU=Automatically-generated IMAP SSL key
# IP oder Rechnername
CN=localhost
# Mail Adresse
emailAddress=postmaster@example.com

2. /etc/courier/imapd.pem (Server-Zertifikat) aus den Einstellungen der /etc/courier/imapd.cnf erzeugen.
mkimapdcert
- falls eine imapd.pem schon vorhanden ist, muss sie vorher umbenannt werden.

/etc/courier/imapd-ssl  
SSLADDRESS=0 Server IP
IMAPDSSLSTART=YES Start des IMAPD-SSL Daemons beim Systemstart

Mails im POP3 Account durchsuchen mit "grepmail"

Fehlermeldung von Fetchmail:
warning: database /etc/aliases.db is older than source file /etc/aliases
Lösung:
Die /etc/aliases wurde verändert ohne die dazugehöre Datenbank upzudaten.
Einfach "newaliases" ausführen. Das Programm aktuallisiert die Alias-Datenbank

Seitenanfang

Courier-IMAP Mails mittels Maildrop sortieren

maildrop -v zeigt Infos mitwelchen Funktionen Maildrop kompiliert wurde
/etc/courier/maildroprc Globale Filter Datei (Delivery Mode)
$HOME/.mailfilter Userbhängige Filter Datei (Delivery Mode)
$HOME/.mailfilters/ Filterdirectory im Embedded Mode

Hilfe zum erstellen der Filter erhält man mit man maildropfilter oder auf der Mailingliste.

Filter Syntax Test, Maildrop beendet sich mit Fehlercode 75 (temporärer Fehler), wenn die Berechtigungen nicht in Ordnung sind oder die Syntax fehlerhaft ist.

echo | maildrop -V 1 2>/dev/null && echo "OK" || echo "Error $?"

Änderungen an der /etc/postfix/main.cf

mailbox_command = /usr/bin/maildrop -d $USER $EXTENSION

Änderungen an der /etc/postfix/master.cf

## Courier Maildrop ##
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}

Eintragung in die /etc/courier/maildroprc oder $HOME/.mailfilter

#
#
#	Globale Maildrop Filterdatei
#
DEFAULT =Maildir/
logfile Maildir/maildrop.log

MAILDEB ="Maildir/.Debian Mailingliste/"
MAILKDE ="Maildir/.KDE Mailingliste/"
SYSTEM  ="Maildir/.System/"
SYSNEWS ="Maildir/.System.News/"
SPAM    ="Maildir/.Spam/"
WIKI    ="Maildir/.WIKI/"

if (/^List-Post: <mailto:debian-user-german@lists.debian.org>/)
 to $MAILDEB
if (/^List-Post: <mailto:kde-de@mail.kde.org>/)
 to $MAILKDE
if (/^From: root@domain\.tld/)
 to $SYSTEM
if (/^To: news@domain\.tld/)
 to $SYSNEWS
if (/^X-Spam-Status: Yes/)
 to $SPAM
if (/^Subject: Cron/)
 to $SYSTEM
if (/^From wiki@/)
 to $WIKI
#if (/^Return-Path: <>/)
# to $DEFAULT
Seitenanfang

Cyrus-IMAP

Cyrus Projekt
Installation des Cyrus-IMAP Servers
Cyrus mit Virtuellen Domains
Cyrus Server Befehle
Cyrus mit SASL
sonstiges

Seitenanfang

Installation des Cyrus-IMAP Servers

Installation unter Debian (Etch)

apt-get install cyrus-imapd-2.2 cyrus-clients-2.2 cyrus-pop3d-2.2 cyrus-doc-2.2 cyrus-admin-2.2
Dateien Bedeutung
/etc/cyrus.conf Grunglegende Einstellung des CyrusServers | Daemons
/etc/imapd.conf spezielle Einstellungen des CyrusServers
/etc/init.d/cyrus2.2 Start | Stop Script
/etc/default/cyrus2.2 Defaults für Start | Stop Script
   
Verzeichnis Bedeutung
/var/spool/cyrus/mail Postfachverzeichnis
/var/lib/cyrus Verzeichnis mit MailBox Indexdateien und Verwaltungsdateien
/var/spool/cyrus/mail/domain Speicherort der virtuellen Domain Postfächer

Der START {} Bereich führt Dienst und Hilfsprogramme aus, die vor dem eigentlichen Cyrus Service gestartet werden, im Beispiel recover der eine Sicherung der Cyrus Datenbank anfertigt und idled das den Mailclient über neue Mails auf dem Server informiert.

Abschnitt SERVICES {} legt fest welche Dienste Cyrus anbietet. IMAP auf Port 143, 993 (SSL/TLS) und POP3 auf Port 110, 995 (SSL/TLS) aktivieren. Die Kommunikation zwischen Postfix und Cyrus mittels LMTP-Socket (Local Message Transport Protocol) aktivieren. Postfix leitet über den Socket /var/run/cyrus/socket/lmtp die Mails an Cyrus weiter. lmtpunix richtet den Socket ein und lmtp leitet die Mails auf dem lmtp-Port weiter. Prefork gibt die Anzahl der Cyrus Prozesse an.

Bei der Benutzung von lmtp muss vorher in der /etc/services erst noch der Port definiert werden. Vorgesehen für den Dienst ist Port 24.

#/etc/services
...
lmtp		24/tcp
lmtp		24/udp
...
#/etc/cyrus.conf
...
START {
	# do not delete this entry!
	recover		cmd="/usr/sbin/ctl_cyrusdb -r"

	# this is only necessary if idlemethod is set to "idled" in imapd.conf
	idled		cmd="idled"
	...
}
SERVICES {
	# --- Normal cyrus spool, or Murder backends ---
	# add or remove based on preferences
	imap            cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100
	imaps           cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
	pop3            cmd="pop3d -U 30" listen="pop3" prefork=0 maxchild=50
	pop3s           cmd="pop3d -s -U 30" listen="pop3s" prefork=0 maxchild=50
...
lmtpunix        cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20
...

Im Abschnitt EVENTS {} stehen Dienste die in Zeitabständen zur Wartung ausgeführt werden.
ctl_cyrusdb - prüft Index der Cyrus Datenbank
cyr_expire - kontrolliert auf doppelte Mails zur angegebenen Zeit.
tls_prune - bereinigt TLS-Session-Cache

Posfix die Domain mitteilen für die er Mails annehmen soll, und wohin er diese weiterleitet.

#/etc/postfix/main.cf
...
relay_domains = hash:/etc/postfix/relay_domains
transport_maps = hash:/etc/postfix/transport, hash:/etc/postfix/relay_domains
...

Eintrag in /etc/postfix/relay_domains, hier wird die Domain angegeben und wo die Mails dann hingehen sollen.

#/etc/postfix/relay_domains
...
domain.tld		lmtp:unix:/var/run/cyrus/socket/lmtp
...

Textdateien in Binardateien für Postfix convertieren.

postmap /etc/postfix/relay_domains /etc/postfix/transport

Name des Cyrus Admins festlegen und Methode für die Authentifizierung wählen.

#/etc/imapd.conf
...
admins: cyrus
sasl_pwcheck_method: auxprop
...
Methode Beschreibung
auxprop /etc/sasl2db abfragen
saslauthd über den saslauthd Daemon über Klartextpasswörter
pwcheck veraltet, Authentifizierung über passwd und shadow Datei
authdaemond über das authdaemond-Modul von Courier-IMAP
Anpassung für Cyrus mit Debian | Ubuntu

unter Debian | Ubuntu läuft Postfix im Chroot-Käfig.

mkdir -p /var/spool/postfix/var/run/cyrus/socket
chown cyrus.mail /var/spool/postfix/var/run/cyrus/socket
#/etc/cyrus.conf
...
lmtpunix cmd="lmtpd" listen="/var/spool/postfix/var/run/cyrus/socket/lmtp" prefork=0 maxchild=20
...

Cyrus Verzeichnisstruktur wird mit cyrus-makedirs angelegt. Verzeichnis /var/lib/cyrus und /var/spool/cyrus werden erstellt.

mkdir /var/lib/cyrus
chown -R cyrus.mail /var/lib/cyrus
cyrus-makedirs
chmod -R 750 /var/lib/cyrus
chown -R cyrus.mail /var/spool/cyrus
chmod -R 750 /var/spool/cyrus

Cyrus Admin anlegen und mit Passwort versehn und Rechte auf Datenbank setzen.

saslpasswd2 cyrus
chown cyrus:mail /etc/sasldb2

Cyrus Benutzer anlegen

saslpasswd2 user1

als Admin anmelden und Mailboxen für die User anlegen, eine Übersicht über mögliche Befehle erhält man mit help.

cyradm -auth login localhost -user cyrus
cm user.user1

cm user.example Mailbox anlegen, alle Benutzermailboxen erhalten den Prefix "user."
lm Mailboxen auflisten (Wildcards erlaubt)
dm user.example löschen einer Mailbox (wenn entsprechende Rechte vorhanden sind)
sq user.example 10000 Quota für einen User setzen
sq user 10000 Quota für alle User des Servers setzen
lq user.example Quota des Users anzeigen
lq user.example.Trash Quota des Ordners Trash vom User example anzeigen
sq user.example none gesetzte Quota löschen
sam user.example cyrus cd dem Administrator (cyrus) das Recht erstellen (c) und das Recht löschen (d) für das Postfach des Benutzers "example" zuweisen.

Seitenanfang

Cyrus mit Virtuellen Domains

#/etc/imap.conf
...
# loginrealms: domain.tld domain2.tld
virtdomains: yes
# defaultdomain: domain.tld
...

defaultdomain muss nicht unbedingt angegeben werden, nur virtdomains: yes ist wichtig.

Benutzeraccount mit Passwort erstellen, dann mit cyradm sich am Server anmelden und ein Postfach für den Domainbenutzer erstellen und dem Cyrusadmin das Recht auf erstellen und löschen des Postfaches erteilen.

saslpasswd2 max@domain.tld
cyradm -auth login localhost -user cyrus
cm user.max@domain.tld
sam user.max@domain.tld cyrus cd

Wenn Postfächer angelegt werden sollen, die aus vor.nachname@example.com bestehen, muss als Trennzeichen ein Slash verwendet werden, da sonst der Punkt als Unterverzeichniss in einem Cyrus Postfach interpretiert werden würde. Damit man den Slash als Ebenentrenner benutzt kann, muss in der /etc/imapd.conf der Parameter unixhierarchysep: 1 gesetzt sein.

cm user/max@domain.tld
cm user/max.mustermann@domain.tld
Seitenanfang

Cyrus Server Befehle

Befehl Beschreibung
saslpasswd2 user1 SASL User anlegen
sasldblistusers2 SASL User in der Datenbank anzeigen
saslpasswd2 -d user1 SASL User löschen
cyradm -auth login localhost -user cyrus Cyrus Serveradministration Benutzer, Mailboxen, u.a.
cyrdump  
su -c /usr/sbin/cyrquota cyrus gesetzten Quota des gesammten Cyrus Servers anzeigen, ist auch unter /usr/lib/cyrus/bin/quota verlinkt.
cyrus-makedirs legt Cyrus Verzeichnisstruktur an
cyrdeliver  
cyrmaster  
su -c /usr/sbin/cyrreconstruct cyrus Datenbankindex mit MailVerzeichnis abgleichen
su -c /usr/sbin/cyrreconstruct -r user.user1 cyrus Postfach des User1 reparieren
imtest -m login -a example localhost IMAP Login testen (Paket cyrus-clients-x.x)
lmtptest LMTP Port Weiterleitung testen (Paket cyrus-clients-x.x), nicht für den Socket
sivtest -a user@domain.tld localhost Sieve Verbindungstest
/usr/sbin/cyrreconstruct reparieren Datenbankindex der Mailboxen
chk_cyrus Cyrus Datenbank mit Mailverzeichnisse vergleichen
/usr/sbin/arbitron Statisticinformationen
/usr/sbin/mbpath user.mail1@domain.tld gibt Path des Postfaches aus
/usr/sbin/ctl_cyrusdb -r prüft Cyrus Datenbanken und repariert bei Fehlern, wird vom Daemon alle 30min. ausgeführt und beim Start.
/usr/sbin/ctl_deliver Wartung der Deliver-Datenbank
/usr/sbin/cyrdump user.mail1@domain.tld > user.dump Dump der Mailbox erstellen und dieses in user.dump speichern
   

Vorgehen beim Einspielen von Backups

- Cyrus Login prüfen

server:/# imtest -m login -a mailuser localhost
S: * OK server.domain.tld Cyrus IMAP4 v2.2.13-Debian-2.2.13-10 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME 
 UNSELECT CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE AUTH=NTLM 
 AUTH=DIGEST-MD5 AUTH=CRAM-MD5 SASL-IRS: C01 OK Completed
Please enter your password:
C: L01 LOGIN mailuser {8}
S: + go ahead
C: <omitted>
S: L01 OK User logged in
Authenticated.
Security strength factor: 0
01 logout
* BYE LOGOUT received
01 OK Completed
Connection closed.

Mailboxen syncronisieren

IMAPSync, Rerl Script zum sichern und verschieben von IMAP Konten
IMAPSize, Windows Tool zum sichern von IMAP Konten
eMailMan, Sammlung von Mailbox Dateiformat konverter
pop2imap

saslauthd -a shadow

- Benutzer der SASLDB2 setzen

chown root.mail /etc/sasldb2

Es gibt zwei Varianten Mails an Cyrus zu übergeben.
1. Version
Fetchmail holt die Mails und leitet dies an einen localen Benutzer weiter, diese geht dann an Postfix der sie direkt an Cyrus weiterreicht.

/etc/fetchmailrc

poll pop.gmx.net protocol POP3
	user "user@gmx.net" password "geheim" is lokaluser

/etc/postfix/main.cf

#direkt an Cyrus weiterleiten
#mailbox_transport		= cyrus
mailbox_transport 		= lmtp:unix:/var/run/cyrus/socket/lmtp

LMTP Local Mail Transfer Protocol. Dieses werden Sie nur selten sehen. Postfix schickt seine internen Mails per LMTP an Cyrus (wenn man ihn so konfiguriert...)

2. Version
Fetchmail reicht Mails an einen Mail Deliver Agent (MDA) auf Deutsch Mailfilter z.B. procmail weiter, der dann diese Mails sortiert an Cyrus liefert.

/etc/fetchmailrc

poll pop.gmx.net protocol POP3
	user "user@gmx.net" password "geheim" mda "/usr/bin/procmail -t -a \$EXTENSION "
 
# /etc/procmailrc
DELIVERMAIL="/usr/sbin/cyrdeliver"
COMSAT=no
LOGFILE=/var/log/procmail.log
LOGABSTRACT=no
VERBOSE=on

### Filter nach Empfänger ###
:0 H
* (^To|^Cc):.*user@gmx.net
| $DELIVERMAIL -e -a localuser -m user.localuser

Mailserver testen

mail -s "Das ist ein Test" user@domain.tld < mail.txt
Seitenanfang

Cyrus mit SASL

# /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
# /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"
# /etc/init.d/saslauthd start
Seitenanfang

sonstiges

ServerBanner ab Version 2.3.11 ist es möglich mit dem Parameter serverinfo die Serverbegrüßung vorzugeben.

#/etc/imapd.conf
...
#"off" = no server information in the greeting or capabilities
#"min" = servername in the greeting; no server information  in  the capabilities
#"on"  =  servername  and  product version in the greeting; product version in the capabilities
serverinfo min | on | off
...

ChangeLog Cyrus Server

Seitenanfang

Procmail

Procmail Doku
Procmail FAQs
Procmail Beispiele

Procmail Oreilly OpenBook Kapitel 12

Die Mails gehen von Fetchmail oder Postfix nach Procmail zum Filtern für SPAM danach zum Mailprogramm Courier, Cyrus, Zarafa u.a.

Flags

A, a, B, b, c, D, E, e, f, H, h, i, r, W, w

Syntax

:0 flags: LockfileName
Flag Beschreibung
:0 Begin einer Filterregel, ohne LOCK Datei
:0: nutzt eine LOCK Datei, Procmail wird das Händling überlassen, sollte verwendet werden, wenn über eine Pipe | oder direkt in eine Datei geschrieben werden soll.
:0:file.lock nutzt eine LOCK Datei, Dateiname wird vorgegeben, sollte verwendet werden, wenn über eine Pipe | oder direkt in eine Datei geschrieben werden soll.
Scope of matching
H Header der Nachricht (default)
B Body der Nachricht (default aus)
:0 HB Header und Body Filtern lassen
Scope of action
h Header der Nachricht (default)
b Body der Nachricht (default)
es gibt Unterschiede zwischen "Scope of action" und "Scope of matching"
Flow control
c Kopie erstellen
A ausführen, wenn vorherige Bedingung erfüllt wurde
a ausführen, wenn vorherige Bedingung erfüllt wurde und Aktion erfolgreich war
E ELSE ausführen, wenn vorherige Bedingung nicht erfüllt wurde
e ELSE ausführen, wenn vorherige Bedingung nicht erfüllt wurde und Aktion nicht erfolgreich war
Execution mode
f Nachricht an ein Programm weiterleiten
i Fehlermeldung ünterdrücken beim schreiben an eine Pipe |
r RAW Modus: Orginal fügt Zeilenumbruch der Nachricht hinzu
w warten bis Programm fertig ist
W wie w, Fehlermeldung des Programms wird unterdrückt
Case sensitivity
D Groß-und Kleinschreibung wird unterschieden/berücksichtigt
Beispiele
:0 f Nachricht an ein Programm weiterleiten
:0 fw warten bis Programm fertig ist
:0 c Kopie der Mail erzeugen
:0 Efw E ELSE (wenn vorherige Bedingung nicht zutrift dann)
:0 Efw: spamassassin.lock  
Filter
From  
To  
Subject  
Delivered-To  
X-Delivered-To  
Envelope-To  
X-Original-To  
X-Apparently-To  
X-MailNull-To  
X-Rcpt-To  
X-Real-To  
^ Anfang der Zeile
$ Ende der Zeile
. Ein beliebiges Zeichen, aber keine neue Zeile
* beliebige Anzahl Zeichen oder auch keins
+ mind. ein beliebiges Zeichen
? ein beliebiges Zeichen
! Umkehr des Filters
[] eine Menge von Zeichen, die in den eckigen Klammern angegeben werden
[^] diese Zeichen dürfen nicht vorkommen
a|b entweder 'a' oder 'b'
# /etc/procmailrc
# Run procmail as the receiving user, not root:
DROPPRIVS=yes
# Debug Informationen an oder aus
VERBOSE=on
LOGABSTRACT=yes
# LOG File festlegen
LOGFILE=/var/log/procmail.log
# Zeichensatz festlegen
EXPORT LANG=de_DE.UTF-8
# Verzeichnis für Sperrdateien
HOMEDIR=/var/lock/procmail

DELIVERMAIL="/usr/bin/zarafa-dagent"
USER=$1

# Virencheck Mail und Anhang
:0 fw: $HOMEDIR/clamassassin.lock
|/usr/bin/clamassassin

# Virenmails markieren
:0 w
* ^X-Virus-Status: Yes
| $DELIVERMAIL -j $USER
EXITCODE=$?

# Spamcheck
:0 fw: $HOMEDIR/spamc.lock
|/usr/bin/spamc -u spam

# Sortierung
# SPAM mit -j in den Junk E-Mail Ordner
:0 w
* ^X-Spam-Status: Yes
|$DELIVERMAIL -j $USER
EXITCODE=$?

# GMX WerbeMail
:0 w
* ^Reply-to.*mailings@gmxnet.de*
# ODER Regel, einer der beiden Bedingungen muss erfüllt sein
# * ^Reply-to.*mailings@gmxnet.de*|^From:.*mailings@gmx.net
# UND Regel, beide Bedingungen müssen zutreffen
# * ^Reply-to.*mailings@gmxnet.de*
# * ^From:.*mailings@gmx.net
# * ^To.user@^domain.tld # * ^Subject.*TEST # an Mailadresse weiterleiten # ! user@domain.tld # Mail in den Ordner Posteingeng\Archiv (-F) ablegen, # ist der Ordner nicht vorhanden, wird er angelegt (-C) # |$DELIVERMAIL -C -F 'Posteingang\Archiv' $USER # beim Ordner Gelöschte Objekte ist es wichtig das die Variable LANG # gesetzt ist damit die Umlaute richtig verarbeitet werden |$DELIVERMAIL -F 'Gelöschte Objekte' $USER # Mail im Ordner Junk E-Mail des Benutzers verschieben # |$DELIVERMAIL -j $USER # Mail unwiederbringlich löschen # /dev/null EXITCODE=$? # normale Nachrichten :0 w |$DELIVERMAIL $USER EXITCODE=$?

- Berechtigungen für LOG Datei setzen

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

- Verzeichnis für Sperrdateien anlegen

mkdir /var/lock/procmail
chown fetchmail.root /var/lock/procmail
chmod 755 /var/lock/procmail

wenn das Verzeichnis nicht existiert, erscheinen folgende Fehlermeldungen

kein Zugriff oder Verzeichnis nicht vorhanden

procmail: Lock failure on "/var/lock/procmail/clamassassin.lock"

keine Sperrdatei definiert hinter :0 fw:

procmail: Couldn't determine implicit lockfile from "/usr/bin/spamc"

- Delivereintrag für Zarafa

DELIVERMAIL="/usr/bin/zarafa-dagent"
...
|$DELIVERMAIL -j $USER

Delivereintrag für Cyrus

DELIVERMAIL="/usr/lib/cyrus/bin/deliver"
...
|$DELIVERMAIL -a -m $USER

Log Datei anlegen

touch /var/log/procmail.log
chown fetchmail:root /var/log/procmail.log
chmod 650 /var/log/procmail.log

Spamassasin Anbindung

cp /etc/mail/spamassassin/spamassassin-spamc.rc /etc/procmailrc

 

Seitenanfang

Sieve

Sieve Beispiele
Sieve Tutorial
Sieve Web Validator
Manage Sieve

Postfix - Sieve - Cyrus

Sieve Arbeitsverzeichnis festlegen

#/etc/imap.conf
sievedir: /var/spool/sieve

Sieve Daemon starten

#/etc/cyrus.conf
sieve           cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100

Postfix - Sieve - Dovecot

apt-get install postfix dovecot-imapd
# /etc/postfix/main.cf
...
mailbox_delivery_lock=dotlock, fcntl
virtual_mailbox_lock=dotlock, fcntl
home_mailbox=Maildir/
mailbox_command=/usr/lib/dovecot/deliver
...
# /etc/dovecot/dovecot.conf
...
protocol lda {
postmaster_address = postmaster@domain.tld
mail_plugins = sieve
}
...

.dovecot.sieve - beinhaltet alle Filterregeln, wird automatisch in dovecot.svbin zu schnelleren abarbeiten compiliert
.dovecot.sieve.log - Logdatei mit Fehlermeldung beim Filtern
.dovecot.lda-dupes - bei aktivierten Urlaubsbenachrichtigungen, werden die verschickten Auto-Replies verzeichnet
/var/log/mail.log - Logdatei für Mails, erfolgreiche Filtervorgänge werden dort verzeichnet.

ein Beispiel für ein Sieve Script

Die Regeln werden von Sieve der Reihe, nacheinander abgearbeitet, außer es ist ein stop gesetzt, dann ist die Abarbeitung für diese Nachricht an der Stelle zu Ende. Ein stop gehört in jede Regel für Newsletter und Mailinglisten damit diese nicht auch noch mit der Urlaubsbenachrichtigung belästigt werden

# ~/sievescript.dat
# -- Laden der PlugIns -----------------------------------
# fileinto - verschieben von Nachrichten in andere Ordner
# vacation - Urlaubsbenachrichtigung
# imap4flags - stellt den Befehl setflag zur verfügung
#
require ["fileinto", "vacation", "imap4flags"];

# -- Filterregeln -----------------------------------
# einfache SPAM Regel Nachricht wird in Junk-Mail Ordner verschieben
if header :contains "X-Spam-Flag" "YES" {
	fileinto "Junk";
}

# SPAM-Filter
# anyof - eine der drei/alle Bedingungen braucht nur erfüllt sein
# setflag "\\Seen" - Nachricht als gelesen kennzeichnen
# stop - wenn eine Bedingung für die Nachricht zutrifft, wird keine weitere Regel mehr abgearbeitet,
# ist auch vorteilhaft den stop Befehl bei Newsletter oder Mailinglisten zu setzen,
# da diese z.B.nicht die Urlaubsbenachrichtigung erhalten sollen, die womöglich noch nach dieser Regel kommen.
if anyof (header :contains "X-Spam-Flag" "YES",
	  header :contains "Subject" "<ADV>",
	  header :contains "Subject" "[SPAM]") {
	setflag "\\Seen";
	fileinto "Junk";
	stop;
}

# Mailinglisten Filter
# stop - beendet die Bearbeitung durch Sieve
if header :matches "List-Id" "deutschsprachige KDE-Benutzer <kde-de.kde.org>" {
		fileinto "INBOX.KDE Mailingliste";
		stop;
}

# Mailinglisten Filter
# allof - beide/alle Bedingungen müssen erfüllt sein
# matches - Text muss exact so im Header vorkommen
if allof (header :matches "From" "*owner@*",
	  header :matches "Subject" "Moderator*") {
	fileinto "INBOX.Moderator";
	stop;
}

# Urlaubsbenachrichtigung
# days - Anzahl der Tage, bevor erneut eine Nachricht zugestellt wird
# addreses - Empfänger eMail Adresse
vacation
:days 2
:addreses "user@domain.tld"
:subject "Abwesenheitsnotiz"
" Ich bin zur zeit nicht im Büro.
Diese Nachricht wird nur ein mal innerhalb von zwei Tagen verschickt";

# im Header ist das Feld "X-Mailing-List" enthalten das den Wert "debian-user-german@lists.debian.org" hat.
	if header :contains "X-Mailing-List" "debian-user-german@lists.debian.org" {
		fileinto "INBOX.Debian Mailingliste";}

# im Empfängernamen enthaltene Zeichenkette
	elsif address :contains ["To", "Cc"] "@lists.debian.org" {
		fileinto "INBOX.Debian Mailingliste";}

# im Header hat das Feld "List-Id" den genauen Wert
	elsif header :is "List-Id" "deutschsprachige KDE-Benutzer <kde-de.kde.org>" {
		fileinto "INBOX.KDE Mailingliste";}

# Mails an eine andere Adresse weiterleiten und eine Kopie behalten (keep - behalten)
#redirect "user@domain.tld";
#keep;

# Mails an zwei verschiedene Adressen weiterleiten und keine Kopie behalten (discard - löschen)
#redirect "user1@domain.tld";
#redirect "user2@domain.tld";
#discard;

# Abwesenheitsnotiz eine Nachricht am Tag je Absender (days 1)
vacation :days 1 :subject "Danke fuer diese Nachricht" :mime
"MIME-Version: 1.0
Content-type: text/plain; charset=us-ascii

        Bin zur Zeit nicht erreichbar ...";

#Syntax:
# eine Bedingung muss zutreffen
#if anyof (Bedingung1, Bedingung2, ... ) {Anweisung;}

# alle Bedingungen müssen zutreffen
#if allof (Bedingung1, Bedingung2, ... ) {Anweisung;}

# wenn if nicht greift kommt der alterneative Zweig zum Zug
#elsif anyof (Bedingung1, Bedingung2, ... ) {Anweisung;}
#elsif allof (Bedingung1, Bedingung2, ... ) {Anweisung;}

# wenn keine der if Anweisungen zutreffen
#else {Anweisung;}

mögliche Module für require
fileinto, vacation, reject, envelope

Anweisung Auswirkung auf
address FROM:, To:, Cc:, Bcc:
envelope Umschlag der Mail
header Mailheader
Vergleichsoperatoren Bedeutung
:is genau gleich
:contains der angegebene Test kommt irgendwo in der Kopfzeile vor
:matches der angegebene Test muß exakt so in der Kopfzeile vorkommen
:regex nach regulären Ausdrücken filtern
Aktion Bedeutung
discard löscht die Mail
fileinto verzeichnis ins Verzeichnis verschieben, wenn das Verz. nicht vorhanden ist landet die Mail in der INBOX
keep in der INBOX ablegen
redirect mailadresse Umleitung an die angegebene Adresse
reject text Antwort mit angegebenen Text an den Absender
vacation text Abwesenheitsnotiz
stop beendet die Ausführung, wenn bis dahin keine Regel gegriffen hat, kommt die Mail in die INBOX
mehr Bedingungen gültig für
anyof eine Bedingung muss zutreffen
allof alle Bedingungen müssen zutreffen
   

Wenn mehrere Filter angegeben werden müssen diese in eckigen Klammern durch Komma getrennt gesetzt werden.
z.B. ["To", "Cc"]

 

- das Script wird dann mit sieveshell auf Server geladen und aktiveren

# sieveshell -a user@domain.tld -u user@domain.tld localhost
connecting to localhost
Please enter your password:
> put sievescript.dat
> list
sievescript.dat
> activate sievescript.dat
> list
sievescript.dat  <- active script
> quit

wenn der aktuelle Unixname nicht mit dem Namen der Mailusers übereinstimmt, gibt man diesen mit der Option -a (--authname=name) an, Option -u (--user=user) übergibt den Username, wenn diese Option nicht angegeben wird, fragt Sieve dreimal nach dem Passwort.
Nach dem Login erhält man mit help eine Hilfe mit möglichen Befehlen.

der Script wird dann auf dem Server im Verzeichnis /var/spool/sieve/u/user/ kopiert.

- Sieve Verbindungstest durchführen, ein Login auf dem SieveServer wird ausführen.

# sivtest -a user@domain.tld localhost
S: "IMPLEMENTATION" "Cyrus timsieved v2.2.13-Debian-2.2.13-10"
S: "SASL" "PLAIN NTLM LOGIN DIGEST-MD5 CRAM-MD5"
S: "SIEVE" "fileinto reject envelope vacation imapflags notify subaddress
 relational comparator-i;ascii-numeric regex"
S: OK
C: AUTHENTICATE "DIGEST-MD5"
S: {252}
S: ...
Please enter your password: geheim
C: {372+}
C: ...
S: OK (SASL "...")
Authenticated.
Security strength factor: 128
logout
OK "Logout Complete"
Connection closed.

 

 

 

 

 

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'

 

 

 

 

Seitenanfang

sonstiges

/proc/net/ip_conntrack

- 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

/usr/lib/cyrus/bin/imapd  listen="imap" prefork=0 maxchild=100
/usr/lib/cyrus/bin/imapd: error while loading shared libraries: libhx509.so.3:
 cannot open shared object file: No such file or directory

Lösung: Heimdal deinstallieren, Cyrus 2.2 neu installieren

apt-get --purge remove libhx509-3-heimdal
apt-get install cyrus-imapd-2.2 cyrus-clients-2.2 cyrus-pop3d-2.2 cyrus-doc-2.2 cyrus-admin-2.2

- Problem

/usr/lib/cyrus/bin/imapd  listen="imap" prefork=0 maxchild=100
/usr/lib/cyrus/bin/imapd: symbol lookup error: /usr/lib/libhx509.so.3: undefined symbol: oid_id_pkcs3_rc2_cbc

Lösung: Reinstall der Pakete libasn1-8-heimdal libroken18-heimdal libssl0.9.8 libwind0-heimdal

- Abhänigkeiten prüfen

ldd $(which /usr/lib/cyrus/bin/imapd) | grep libhx

Problem: Postfix 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
...

Problem: 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"
... 

Problem: 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