14.11.2014

Programminstallation unter Linux


Apache Webserver
Samba Server
eMail-Server
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

Navigation
Postfix (Mail Transfer Agent)
FetchMail
GetMail
Courier-IMAP
Cyrus-IMAP
Procmail
Sieve
Konfiguration testen
sonstiges

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

Spam und Virenschutz
Mailserver mit Spamfilter
Fetchmail HowTo

LiveMail SMTP Fehlermeldung

Seitenanfang

E-Mail-Server einrichten

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

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

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

- 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

Fehlermeldung

/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