############################
###### mailserver-konfiguration ######
############################
#
# copyright 2002 by mark patruck
#
#
# das tutorial bietet eine kurze einführung in die thematik und
# darauffolgend eine einfache anleitung zum aufsetzen eines
# mailservers (smtp & imap)
#
#
# begriffe:
# ---------
#
# mta = mail transfer agent
- der mta dient als "herz" des mailservers, empfängt mails und
gibt diese wieder an andere mtas weiter (bsp. postfix)
# mda = mail delivery agent
- erhält vom mta mails, die an lokale user zugestellt werden,
und kann komplexe filterregeln abarbeiten (bsp. procmail)
# mua = mail user agent (kein direkter zusammenhang zum mailserver)
- ermöglicht dem lokalen user mailzugriff (bsp. pine, kmail)
# smtp = simple mail transport protocol
- über dieses sehr einfache protokoll reichen sich mtas mails weiter
# pop3 = post office protocol (version 3)
- entwickelt für dial-up verbindungen; die mails werden direkt vom
mua abgeholt
# imap = internet message access protocol (version 4)
- wesentlicher unterschied zu pop3 ist das belassen der mails auf dem
mailserver; nachrichten gehen dadurch auch nach einer neuinstallation
der clients nicht verloren
# ziel:
# -----
#
#
# empfangen:
#
# mails werden mit hilfe von fetchmail vom isp (bsp. web.de) abgeholt, mit
# hilfe von procmail gefiltert (auf empfänger, absender...) und anschließend
# in virtuelle mailboxen verteilt
#
#
# senden:
#
# mails werden sowohl intern als auch extern per postfix versandt
#
#
# benötigte packete:
# -----------------
#
# - postfix
# - cyrus-imap
# - procmail
# - fetchmail
#
#
# nach erfolgreicher installation ->
#
###### postfix | konfiguration ######
#
#########
#
# hinweis:
# --------
# postfix liefert eine standard-"main.cf" die bei den meisten
# distributionen (suse, redhat) nach der installation bereits
# voll funktionsfähig ist (internes & externes senden). die
# folgenden punkte bzw. konfigurationsmöglichkeiten sollen den
# leser nicht abschrecken....viele variablen werden von postfix
# automatisch ermittelt, bzw. es werden default-einstellungen
# verwendet
# um auch die letzen, möglichen einstellungen selbst "in die hand"
# zu nehmen, sollte man sich die sample*.cf-files durchlesen.
#
#########
#
#
# main.cf (meist unter /etc/postfix)
#
# wichtig:
# --------
# von jedem konfigurationsfile eine sicherungskopie erstellen
# main.cf -> main_default.cf
#
#
# variable
# # erklärung
# +++++++++++++
#
soft_bounce = no
# "testmodus", bei dem mails durch falsche einstellungen nicht
# verworfen werden, sondern in der mailqueue bleiben.
# voreinstellung: deaktiviert (no)
queue_directory = /var/spool/postfix
# legt fest wo postfix wartende mails ablegt, also die warteschlange
command_directory = /usr/sbin
# hier liegen alle ausführbaren postxx (postfix, postconf...)files
daemon_directory = /usr/lib/postfix
# verzeichnis des postfix-daemons
mail_owner = postfix
# besitzer der postfix-prozesse; keinen user verwenden der schon auf
# dem system vorhanden ist.
# - jemanden, der keiner gruppe angehört
# - ..und keine weiteren rechte besitzt
# keinesfalls root verwenden
# eine gute wahl wäre "postfix"
default_privs = nobody
# es darf nicht root oder der "$mail_owner" gewählt werden, sonst kommt es
# zu einer fehlermeldung.
# "nodody" ist die default einstellung
myhostname = host.domain
# hostname des mailservers
# für einen lokalen mailserver sollte keine im internet vorhandene adresse
# verwendet werden; anstatt host.test.de -> host.test.int | int für intern
mydomain = domain
# domain des mailservers; am einfachsten ist $myhostname ohne den ersten
# teil (host)
myorigin = $myhostname
# abschnitt hinter dem "@"
# standardeinstellung ist $myhostname
inet_interfaces = all
# gibt die interfaces (ethx) an, für die postfix zuständig ist
mydestination = $myhostname, localhost.$mydomain
# gibt an für welche domain dieser mailserver zuständig ist, sprich welchen
# in der domain vorhandenen rechner mails lokal ausgeliefert werden und
# wann sie an isps (bsp. web.de) weitergeleitet werden.
# sehr wichtig ist hierbei mindestens die standard-einstellung zu verwenden,
# da es sonst zu "mail delivery loops" kommt
# 1. $myhostname + 2. localhost.@domain
mynetworks_style = host
# netzwerke bzw. rechner die zugriff auf den mailserver haben
mynetworks = 168.100.189.0/28, 127.0.0.0/8
# alternative methode zu "$mynetworks_style"; hiermit werden ip-adressen der
# rechner angegeben, die vom mailserver akzeptiert werden
# es kann auch eine datei mit den aufgelisteten rechnern eingefügt werden
# bsp. /verzeichnis/datei
# bei verwendung von "$mynetworks" wird "mynetworks_style" übersprungen
relay_domains = $mydestination
# definiert die domains für die postfix zuständig ist
# ähnlich "$mydestination" daher ist die standardeinstellung auch so
relayhost = [an.ip.add.ress]
# host, an den der mailserver post schickt mit der er selbst nichts anzufangen
# weiss; mails außerhalb der domain werden hierhin geleitet
# bsp. [an.ip.add.ress]:25
mail_name = postfix mailer-daemon
# welchen namen soll der mailer-daemon haben (wird eine mail falsch zugestellt,
# erhält der absender eine mail von unserem mailsystem
###### cyrus imap | konfiguration ######
#
#########
#
# hinweis:
# --------
# wie in der einleitung schon beschrieben, besitzt imap die fähigkeit mails auf
# dem server zu belassen, wodurch man mails deutlich leichter archivieren kann.
# nach einer neuinstallation baut man in seinem bevorzugten mua nur schnell eine
# verbindung zum mailserver auf und hat sofort zugang zur mailbox und allen darin
# enthaltenen mails. ein entscheidender grund sich für imap zu entscheiden
# warum ich mich speziell für den cyrus-server entschieden habe, liegt an seiner
# hervorragenden performance. selbst die verwaltung von mehreren tausend usern
# ist kein problem und man hat kontrolle über alle mailboxen (berechtigungen &
# speicherplatz pro userbox)
#
#########
#
#
# bevor wir beginnen muss überprüft werden ob cyrus-imap auch vom inet-daemon
# aufgerufen wird.
# inetd.conf zu finden unter /etc/inetd.conf sollte für imap so aussehen
# IMAP Mailservice
imap stream tcp nowait cyrus /usr/cyrus/bin/imapd imapd
# die ändernungen werden erst nach einem "kill -HUP" der prozessID wirksam
# suse linux user restarten den daemon mit dem befehl "rcinetd restart"
# damit das imap protokoll auch im system bekannt ist, muss der eintrag
# "imap4 143/tcp" unter /etc/services vorhanden und wie in der inetd.conf
# auskommentiert sein.
#
# konfiguration der "imapd.conf"; meist in /etc zu finden
#
# wichtig:
# --------
# vor dem ändern...sicherungskopie erstellen
#
#
configdirectory: /var/imap
# verzeichnis der imap-konfigurations-dateien
# eine gute wahl ist "/var/imap"
partition_default: /var/spool/imap
# gibt den namen der partition, auf der neue mailboxen abgelegt werden, an
# wichtig: nicht das verzeichnis angeben
admins: cyrus
# benutzer die administrative rechte bezüglich des imap servers haben
allowanonymouslogin: no
# sollen auch benutzer ohne authentifizierung admin-rechte haben?
# das umgehen der passwortabfrage wird nicht empfohlen
reject8bit: no
# wenn "yes" werden alle 8bit-zeichen durch XXX ersetzt
quotawarn: 90
# gibt eine warnung aus, wenn die mailbox zu x% voll ist
# hier würde der user bei 90% quota-auslastung benachrichtigt werden
timeout: 30
# zeit in minuten, in der der server keine meldung mehr vom client erhält
# und daraufhin die verbindung "kappt". bei lokalen server sollte der
# "timeout" recht hoch eingestellt werden
defaultacl: anyone lrs
# hiermit bekommt eine neu angelegte mailbox gleich bestimmte rechte
# übersicht aller rechte:
#
l man kann die mailbox "abbonieren", der inhalt bleibt aber verborgen
r mailbox kann "abboniert" werden und man erhält einsicht
s sichert den status einer mail (ungelesen, gelesen)
w man kann jetzt auch den status verändern
i nun kann man mails einfügen, verschieben oder kopieren
p möglichkeit mails an andere mailboxen zu senden
c man kann unterverzeichnisse erstellen
d mails oder mailboxen können gelöscht werden
a administrator-rechte
# gängig sind:
("none") none der benutzer besitzt keine rechte
("lrs") read der benutzer darf den inhalt einer mails lesen
("lrsp") post der benutzer darf den inhalt lesen und an die mailbox senden
("lrsip") append der benutzer darf den inhalt lesen und an die mailbox anhängen
("lrswipcd") write der benuzter darf alles, außer benutzerrechte ändern
("lrswipcda") all gegenteil zu "none"
autocreatequota: 0
# soll eine neu erstellte mailbox automatisch einen festgelegten
# speicherplatz in kb bekommen
# bsp. 40000 = 40mb
sasl_pwcheck_method: sasldb
# gibt an welche methode der server verwendet um user zu authentifizieren
# möglich sind: "sasldb", "kerberos_v4", "passwd" und "shadow"
# die vorgestellte konfiguration macht gebrauch der "sasldb"
################# weiter unten befindet sich ein einfaches beispiel ###################
# als nächsten schritt weisen wir dem user "cyrus" ein passwort zu. dazu folgender befehl
#
saslpasswd cyrus
-> passwort
-> passwort-bestätigung
# wichtig!!
# eine mailbox setzt sich immer aus "user.mailboxname" zusammen
# ein kurzer überblick über die wichtigsten befehle und festlegen einer test-mailbox
# aufbau:
# --------
befehl -> befehl ausgeschrieben
-> erklärung
-> funktionsweise
-> beispiel
#
#
# cm -> create mailbox
-> erstelle ein mailbox in der unter "imapd.conf" festgelegten partition
-> cm partition user.mailboxname
-> cm user.test
# dam -> deleteaclmailbox
-> lösche die berechtigungen der mailbox
-> dam mailbox id
-> dam user.test test
# disc -> disconnect
-> verbindung zum cyrus server trennen
-> disc
-> disc
# dm -> deletemailbox
-> lösche die gewählte mailbox
-> dm mailbox
-> dm user.test
# exit -> exit
-> konfigurations-tool verlassen
-> exit
-> exit
# lam -> listaclamilbox
-> berechtigungen der mailbox anzeigen
-> lam user.mailbox
-> lam user.test
# lm -> listmailbox
-> zeigt die mailbox an (ob vorhanden oder nicht)
-> lm user.mailbox (nur "lm" zeigt alle mailboxen an)
-> lm user.test
# lqm -> listquotamailbox
-> listet den belegten speicherplatz in kilobyte und prozent
-> lqm user.mailbox
-> lqm user.test
# renm -> renamemailbox
-> mit "renm" kann man eine mailbox umbenennen
-> renm user.mailbox user.mailboxneu
-> renm user.test user.testneu
# sam -> setaclmailbox
-> verändert die berechtigungen für die mailbox
-> sam user.mailbox id rights
-> sam user.test test post bzw. lrsp (siehe oben)
# sq -> setquota
-> geben den platz in kilobyte für die mailbox an
-> sq user.mailbox 40000
-> sq user.test 40000
# komplettes beispiel für den user "test"
# ---------------------------------------
# einloggen
host.domain> su cyrus
host.domain> cyradm localhost
-> passwort
# erstelle die mailbox test
localhost> cm user.test
# wenn man keine automatische zuweisung des speicherplatzes gewählt hat
# bitte in kilobyte angeben:
# in diesem beispiel ist die mailbox test 40mb gross
localhost> sq user.test 40000
-> STORAGE 0/40000 (0%)
# überprüfen auf berechtigungen
localhost> lam user.test
test lrsp
# passwort für die mailbox festlegen
localhost> exit
cyrus@host:/root> exit
host.domain> saslpasswd test (name der mailbox ohne user.)
-> passwort
-> passwort-bestätigung
# wichtig!! der administrator (imapd.conf) hat nicht von vornherein das recht
# mailboxen zu löschen. er hat das recht "l" und "a", d.h er darf maximal die
# berechtigungen der mailboxen verändern.
# zurück zum thema: sollte man einmal eine mailbox löschen müssen, muss man
# sich selbst (cyrus bzw. der wert der unter imapd.conf unter admins eingetragen
# wurde) rechte geben und zwar mit dem recht "d" für delete.
# mit diesem befehl fügen wir der mailbox den user cyrus (admin) hinzu und geben
# ihm alle rechte
localhost> sam user.test cyrus all
# mailbox test löschen
localhost> dm user.test
# überprüfen ob die mailbox gelöscht wurde; user.test müsste weg sein
localhost> lm
# gehen wir davon aus, dass die mailbox nicht gelöscht wurde, könnte man sie
# bereits in einem mua (pine, kmail) abbonieren.
imap-server: ip des mailservers
smtp-server: ip des mailservers
username : test (name der mailbox ohne user.)
passwort : passwort der mailbox (vorhin mit saslpasswd festgelegt)
# thats it!
###### fetchmail | konfiguration ######
#
#
# fetchmail ist ein hilfreiches tool um mails von isps zu fetchen
#
#
#
# funktionen von fetchmail
#
# übersicht:
# ----------
#
poll server
# gibt den server an, von dem wir die mails holen
protocol pop3
# gibt das protokoll an mit dem wird unsere mails abholfen (i.d.r. pop3)
user testuser
# username für den account beim isp
password geheim
# passwort für den account beim isp
mda "application"
# damit können wir die mail an einen mail delivery agent (mda) weiterleiten
# in userem fall leiten wir "gefetchte" mails an procmail weiter
keep
# damit können wir mails am server belassen
silent
# informationen über den abruf der mails werden unterbunden
# einfaches beispiel:
poll pop.web.de protocol pop3 user ich password geheim mda "/usr/bin/procmail ~/.procmailrc"
# erklärung:
# ----------
#
# es wird zum server pop.web.de kontakt aufgenommen und mit dem usernamen "testuser"
# und dem passwort "geheim" authentifiziert. abgerufene (gefetchte) mails werden an
# den mda procmail weitergeleitet; dabei wird ein vorgefertigtes script
# (siehe "procmail | konfiguration" weiter unten) verwendet, welches filterregeln enthält
###### procmail | konfiguration ######
#
# wie schon bei der konfiguration von fetchmail muss auch hier eine datei mit befehlen
# bzw. regeln erstellt werden
#
#
# grundlegendes zur regelerstellung in der procmailrc:
# ----------------------------------------------------
# die procmailrc hat die aufgabe eingehende mails zu filtern. verwendet werden programme
# wie grep oder egrep, welche die mails auf reguläre ausdrücke durchsuchen
# aufbau
:0 [flags]
[* suchmuster]
anweisung
# einfaches beispiel:
# --------------------
:0
* ^TO.*test@test.de
|/usr/cyrus/bin/deliver -a -m mailbox
# bei obigem beispiel werden alle mails die an test@test.de gehen (To: und Cc mit dem
# programm "deliver" in die mailbox "mailbox" weitergeleitet werden.
# soll die mail nach der filterung nicht in die mailbox gelangen, sondern beispielsweise
# an eine bestimmte e-mail-adresse gesendet werden, so ist folgendes beispiel richtig
:0
* ^Subject.*wichtig
!wichtigemails@daheim.de
# sehr praktisch ist auch das filtern nach bestimmten grössen
:0
* > 500000
|/usr/cyrus/bin/deliver -a -m bigfiles
# alle mails grösser als 500 kbyte werden in die mailbox bigfiles delivered
# eine procmailrc sollte neben den eigentlichen regeln ebenfalls einen pfad
# zu einer logdatei enthalten, um fehlern schnell auf die spur zu kommen
#
# hier eine empfehlung:
# ---------------------
# procmailrc
LOGFILE=/var/log/procmail
# ein regelbeispiel
:0
* ^TO.*test@test.de
|/usr/cyrus/bin/deliver -a -m mailboxname (ohne user.)
# automatisierung für's mail abrufen
# -----------------------------------
#
# eine "feine" sache ist das automatisierte abrufen der mails
# dazu dient der cron-daemon, der zeitgesteuert befehle ausführen kann
# beispiel:
# ---------
#
# fetchmail soll alle 30 minuten mails von den isps (eingetragen in der fetchmailrc)
# abrufen
# dazu öffnen wir "crontab" zu finden unter /etc
# wichtig: zeitgesteuerte kommandos können nur root oder user die spezielle rechte
# haben, ausführen
#
# wichtige befehle
crontab -
l listet den inhalt der aktuellen crontab-datei auf
r löscht die derzeitige crontab-datei
e ruft eine editor auf; damit kann man eine neue crontab-datei erstellen
#
*/30 * * * * user(normal root) kommando
1 2 3 4 5 6
1. minuten (0-59)
2. stunden (0-23)
3. tag des monats (1-31)
4. monat (1-12)
5. tag der woche (0-6 wobei 0 für sonntag steht)
# um zurück zu unserem automatisierten mailabholen zu kommen:
# folgender eintrag ist in der /etc/crontab zu machen um alle 30 minuten mails abzuholen
*/30 * * * * root /usr/bin/fetchmail -a -v >> /var/log/fetchmail 2>&1 && /usr/bin/mailq -q
# damit werden alle 30 minuten mails abgerufen mit der option "-v" werden die logs in die datei
# /var/log/fetchmail geschrieben und anschließend werden in der mailqueue (welche mails in der
# warteschlange sind kann man mit "mailq" überprüfen) versandt
# mit hilfe der tabelle kann man leicht eigene zeitgesteuerte abrufe erstellen
####### ende #######
#
# somit sind wir am ende unserer mailserver-konfiguration. ich hoffe es war verständlich und
# hat spass gemacht
Lesezeichen