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
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
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
fetchmail --quit
postconf -e "defer_transports =smtp"
postfix reload
Speicherort der Zertifikate für Fetchmail unter /usr/share/ssl-cert/
oder /etc/ssl/fetchmaild/
- SSL Zertifikate der MailServer laden und in Datei speichern
echo "quit" | openssl s_client -connect pop3.web.de:995 -showcerts 2>/dev/null | sed -ne '/BEGIN/,/END/p' >/usr/share/ssl-cert/pop3.web.de.pem echo "quit" | openssl s_client -connect pop.gmx.net:995 -showcerts 2>/dev/null | sed -ne '/BEGIN/,/END/p' >/usr/share/ssl-cert/pop.gmx.net.pem echo "quit" | openssl s_client -connect securepop.t-online.de:995 -showcerts 2>/dev/null | sed -ne '/BEGIN/,/END/p' >/usr/share/ssl-cert/securepop.t-online.de.pem
- Fingerabdruck der Zertifikate anzeigen, aus den gespeicherten Zertifiakten oder Online vom MailServer.
openssl x509 -in /usr/share/ssl-cert/pop3.web.de.pem -fingerprint -noout -md5 openssl x509 -in /usr/share/ssl-cert/pop.gmx.net.pem -fingerprint -noout -md5 openssl x509 -in /usr/share/ssl-cert/securepop.t-online.de.pem -fingerprint -noout -md5
fetchmail -v -p pop3 pop.gmx.net | grep -i Fingerabdruck
Die Passwortabfrage mit ENTER bestätigen, Passwort ist für den Fingerprint nicht nötig. Nach der Zeile "pop.gmx.net-Schlüssel-Fingerabdruck:" suchen und notieren, Zertifikat anzeigen lassen (Ausssteller "Issuer" wird auch angezeigt)
- Zertifikate des Mailservers anzeigen
für POP3
echo "quit" | openssl s_client -connect pop.gmx.net:995 -showcerts 2>/dev/null
für IMAP
echo "quit" | openssl s_client -connect imap.gmx.net:993 -showcerts 2>/dev/null
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, Telekom und Thawte.
wget https://www.telesec.de/downloads/DT-Root-CA-2.cer -O /usr/share/ssl-cert/Deutsche_Telekom_Root_CA_2.pem wget https://www.thawte.com/roots/thawte_Premium_Server_CA.pem -O /usr/share/ssl-cert/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
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.
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/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
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
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
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
Cyrus Projekt
Installation des Cyrus-IMAP Servers
Cyrus mit Virtuellen Domains
Cyrus Server Befehle
Cyrus mit SASL
sonstiges
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 |
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.
#/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
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 |
- 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.
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
# /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
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
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.
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/spool/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/spool/procmail chown fetchmail.root /var/spool/procmail chmod 755 /var/spool/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
Sieve Beispiele
Sieve Tutorial
Sieve Web Validator
Manage Sieve
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
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.
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.
- 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'
/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
/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
/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