Mailserver mit Postfix und dovecot

Werbung
Mailserver mit Postfix und dovecot
VORSICHT!!! Dieser Beitrag ist ein BETA-Howto!!!
Vorwort
Dieses Howto führt durch ein Basic Setup eines virtuellen Mailservers
mit Postfix (SMTP), PostfixAdmin (Webadministration) und Dovecot (pop3
und IMAP).
Es beschäftigt sich NICHT mit dem Absichern des Netzes, oder mit
Secure Connections (SSL/TLS), Mailinglisten und/oder Anti-Virus oder
Spam Filterung!!!
Ganz wichtig ist dass Deine Domian über einen MX 1 Eintrag verfügt,
ansonsten wird es nicht möglich sein Mails zu empfangen bzw. korrekt
zu verschicken!!!
Vorraussetzungen
Das Howto setzt einen bereits installierten und laufenden Apache2
Server sowie eine mysql Installation voraus.
Informationen
Hostname = example.org (Wann immer dieser Name erscheint, muss er mit
dem Domainnamen Deines Servers ausgetauscht werden!!)
user = mail (8), dovecot (97, postfix (207)
gruppen = mail (12)
Um PostfixAdmin zu installieren nutzen wir webapp-admin!!!
Vorarbeiten
Damit die Software mit den richtigen USE-Flags installiert wird,
müssen wir einige Einträge in der Datei /etc/portage/package.use
machen.
nano /etc/portage/package.use
und dann folgendes darin eintragen:
mail-mta/postfix dovecot-sasl mysql -pam sasl
net-mail/dovecot mysql -pam pop3d
www-apps/postfixadmin mysql vhosts
Installation
Nun können wir mit der Installation beginnen. Wir emergen alle
relevanten Pakete mit
emerge -av sasl postfix postfixadmin dovecot
Nachdem die Installation fertig ist, starten und stoppen wir einmal
Postfix, damit Postfix alle von uns benötigten Dateien erstellt.
/etc/init.d/postfix start
/etc/init.d/postfix stop
Als nächstes konfigurieren wir den virtual Host mit postfixadmin in
der Version 2.6.5 (Die Versionsnummer in der nächsten Befehlszeile
muss dann evtl. angepasst werden).
webapp-config --install --host=mailadmin.example.org
postfixadmin 2.6.5
Achte bitte genau auf die Hinweise die nach dem ausführen des Befehls
angezeigt werden und folge den Anweisungen!!!
Als nächstes müssen wir die Domain für unseren PostfixAdmin im Apache
einrichten.
Wir legen uns also eine Datei im Verzeichnis /etc/apache2/vhosts.d/
z.B mit dem Namen 99_default_host.conf an (Der Name muss an Dein Setup
vom Apache angepasst werden) und füllen sie mit folgendem Inhalt
(Achte darauf das die Domainnamen noch von Dir angepasst werden
müssen!!!)
<VirtualHost *:80>
ServerName mailadmin.example.org
DocumentRoot
"/var/www/mailadmin.example.org/htdocs"
<Directory
"/var/www/mailadmin.example.org/htdocs">
# Possible values for the Options directive
are "None", "All",
# or any combination of:
#
Indexes Includes FollowSymLinks
SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named
*explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated
and important. Please see
#
http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
Options Indexes FollowSymLinks
# AllowOverride controls what directives may
be placed in .htaccess files.
# It can be "All", "None", or any combination
of the keywords:
#
Options FileInfo AuthConfig Limit
AllowOverride All
# Controls who can get stuff from this server.
Order allow,deny
Allow from all
</Directory>
<IfModule alias_module>
# Alias: Maps web paths into filesystem paths
and is used to
# access content that does not live under the
DocumentRoot.
# Example:
#
Alias /webpath /full/filesystem/path
#
# If you include a trailing / on /webpath then
the server will
# require it to be present in the URL. You
will also likely
# need to provide a section to allow access
to
# the filesystem path.
# ScriptAlias: This controls which directories
contain server scripts.
# ScriptAliases are essentially the same as
Aliases, except that
# documents in the target directory are
treated as applications and
# run by the server when requested rather than
as documents sent to the
# client. The same rules about trailing "/"
apply to ScriptAlias
# directives as to Alias.
ScriptAlias /cgi-bin/
"/var/www/mailadmin.example.org/cgi-bin/"
</IfModule>
<Directory "/var/www/mailadmin.example.org/cgibin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<IfModule mpm_peruser_module>
ServerEnvironment apache apache
</IfModule>
</VirtualHost>
# vim: ts=4 filetype=apache
Anschliessend muss der Apache neu gestartet werden.
/etc/init.d/apache2 restart
Nun richten wir unsere MySQL Datenbank ein. Am einfachsten geht das
mit phpmyadmin. Wie das genau geht beschreibe ich hier nicht.
Als erstes müssen wir eine Datenbank erstellen in denen wir unsere
Mail Accounts und die Details speichern können. Wir benutzen als Namen
für die Datenbank „postfixadmin“.
Es müssen 2 MySQL User angelegt werden. Der erste ist der User
postfixadmin und dieser muss folgende Rechte in der „postfixadmin“
Datenbank haben.
SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX
Den User „postfixadmin“ benötigen wir um die Mail Accounts zu
administrieren.
Der zweite User, den wir anlegen müssen, ist der User mailauth. Dieser
User benötigt nur das Recht
SELECT
für die postfix-Datenbank. Der User wird später von Postfix und
Dovecot genutzt. Als nächsten wollen wir PostfixAdmin konfigurieren.
Wir öffenen dazu die Datei
/var/www/mail.example.org/htdocs/postfixadmin/config.inc.php (nicht
vergessen mail.example.org gegen Deine Domain auszutauschen!!)
und ändern die folgenden Zeilen ab. Du kannst die Zeilen nicht einfach
kopieren!!!
#$CONF['configured'] = false;
$CONF['postfix_admin_url'] =
'http://mailadmin.example.org/';
$CONF['default_language'] = 'de';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'password'; (Das Passwort
muss natürlich das gleiche sein wie bei Deinem User
postfixadmin)
$CONF['database_name'] = 'postfixadmin';
$CONF['database_prefix'] = ;
$CONF['admin_email'] = '[email protected]';
(Diese Adresse wird als FROM Adresse genutzt. Evtl.
möchtest Du sie anpassen)
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['user_footer_link'] = "http://example.org/";
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Example Webhosting';
$CONF['footer_link'] = 'http://example.org/';
$CONF['welcome_text'] = <<<EOM
Hi,
Welcome to your new account.
EOM;
Du solltest nun in der Lage sein dein Setup mit PostfixAdmin zu
beenden.
http://mailadmin.example.org/setup.php
Folge den Anweisungen von PostfixAdmin zu den weiteren Schritte.
Bitte lege zum derzeitigen Zeitpunkt noch keine Mailadressen, Domains
usw. in PostfixAdmin an, da weder Postfix noch Dovecot eingerichtet
sind!!!
Wir wollen nun Dovecot für SQL einrichten. Öffne dazu die Datei
/etc/dovecot/dovecot-sql.conf
Als erstes wollen wir die Datenbankverbindung einrichten.
driver = mysql
connect = host=/var/run/mysqld/mysqld.sock
user=mailauth password=password dbname=postfixadmin
Das Passwort muss mit dem Passwort von dem User mailauth
übereinstimmen!!!
PostfixAdmin legt die Passwörter md5-crypt ab, so dass wir auch
Dovecot dieses mitteilen müssen. Das machen wir in dieser Zeile der
Datei.
default_pass_scheme = MD5-CRYPT
Nun noch den password_query für die Authentifizierung konfigurieren.
Die Zeile an das Dateiende anfügen
password_query = SELECT CONCAT('/var/mail/', maildir)
AS userdb_home, username as user, password,
CONCAT('*:bytes=', quota) AS userdb_quota_rule FROM
mailbox WHERE username = '%u' AND active = 1
Wir kommen nun zu den Haupteinstellungen von Dovecot. Diese finden wir
in der Datei /etc/dovecot/dovecot.conf.
Die folgende Zeile bestimmt, für welche Protokolle Dovecot zuständig
ist.
protocols = pop3 imap
By default Dovecot only listens on IPv6 interfaces. Many people are
still using IPv4, so you probably want to listen on IPv4 interfaces
too. To do so, change the listen line to:
Von Hause aus hört Dovecot nur auf IPv6 Interface, aber viele nutzen
immer noch IPv4. Damit das funktioniert ändere die Zeile so ab.
listen = *
By default Dovecot disables plain text authentication on unencrypted
(non-SSL/TLS) connections. It is highly recommended that you
investigate setting up SSL/TLS connections, but for the purposes of
this setup you can enable plain text authentication by setting:
Von Hause aus disabled Dovecot die plain text authentification von
nichtverschlüsselten Verbindungen (non-SSL/TLS). (Es wird ausdrücklich
empfohlen sich mit diesen SSL/TLS Verbindungen auseinander zusetzen
und diese entsprechende einzurichten.)
disable_plaintext_auth = no
Der mail_location Parameter teilt Dovecot mit, wo sich die Mailboxen
befinden und in welchem Format sie gespeichert sind. Dieses Howto
nutzt das Maildir (Qmail style) Format.
mail_location =
maildir:/var/mail/%d/%n/Maildir/:INDEX=/var/mail/%d/%n
/indexes
Der nächste Parameter spezifiziert den User und die Gruppe mit der die
Mails gespeichert werden. Hier kann man eine numerische oder die Namen
eintragen.
Um die User ID zu bekommen gibt man einfach auf der shell id mail ein.
mail_uid = mail
mail_gid = mail
Die nächsten Einstellungen legen die User ID und die Gruppen ID fest,
die für Mail-Prozesse von Dovecot erlaubt sind. Die ID’s sollten sehr
genau geprüft werden.
first_valid_uid = 8
last_valid_uid = 12
first_valid_gid = 12
last_valid_gid = 12
Es folgen nun die IMAP Settings
protocol imap {
}
und die POP3 Settings
protocol pop3 {
}
dann noch die LDA Settings (Local Delivery Agents)
protocol lda {
postmaster_address = [email protected]
}
Auch die Authentifizierungseinstellungen müssen wir noch vornehmen.
auth default {
mechanisms = plain login
#passdb pam {
#}
...
#userdb passwd {
#}
#userdb passwd {
#}
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
Wir nutzen den Dovecot LDA, also müssen wir auch den User query für
die Mailzustellung einbinden.
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
Wir nutzen die prefetch Methode um eine zusätzliche Überprüfung nach
der Datenbank Authentifikation zu haben. Es müssen dazu keine Werte
eingetragen werden,
da alle Informationen von passdb kommen.
userdb prefetch {
}
Authentifizierungs User setzen
user = nobody
Jetzt spezifizieren wir die sockets, die wir für den
Authentifizierungsmechanismus erlauben wollen. In diesem Setup nutzen
wir einen Master Socket für den Dovecot LDA und einen Client Socket
für Postfix.
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mail
group = mail
}
client {
# If you change the postfix queue_directory,
you must also change this.
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
Als nächstes nehmen wir uns die mail-aliase vor. Die Datei dafür
finden wir in /etc/mail/aliases
# Basic system aliases -- these MUST be present.
MAILER-DAEMON:
postmaster
postmaster:
root
# General redirections for pseudo accounts.
adm:
root
bin:
root
daemon:
root
exim:
root
lp:
root
mail:
root
named:
root
nobody:
root
postfix:
root
# Well-known aliases -- these should be filled in!
root:
[email protected]
operator:
[email protected]
# Standard RFC2142 aliases
abuse:
postmaster
ftp:
root
hostmaster:
root
news:
usenet
noc:
root
security:
root
usenet:
root
uucp:
root
webmaster:
root
www:
webmaster
# trap decode to catch security attacks
# decode:
/dev/null
Anschliessend wollen wir die Änderungen der mail-aliase unserem System
mitteilen.
newaliases
Damit Postfix die aliase besser finden kann, setzen wir einen Symlink
für die Postfix Konfiguration.
ln -s /etc/mail/aliases /etc/postfix/
ln -s /etc/mail/aliases.db /etc/postfix/
Dovecot Integration – LDA
Als erstes informieren wir Postfix darüber, dass Dovecot unser LDA
ist. Dies machen wir, indem wir die folgenden Zeilen am Dateiende der
Datei /etc/postfix/master.cf einfügen.
dovecot
unix n
n
pipe
flags=DRhu user=mail:mail
argv=/usr/libexec/dovecot/deliver -f ${sender} -d
${recipient}
Ausserdem ändern wir noch die folgende Zeile so ab.
smtp
smtpd -v
inet
n
-
n
-
-
Damit Postfix auch unsere Einstellungen zum zustellen nutzt, fügen wir
am Dateiende von der /etc/postfix/main.cf folgendes ein:
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot
Wir fügen für die Dovecot Integration in Postfix noch diese Zeilen in
die Datei /etc/postfix/main.cf ein.
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
Die folgenden Dateien haben enthalten Zugangsdaten die Postfix nutzt
wird, um verschiedene Details in der PostfixAdmin Datenbank nutzen zu
können.
Erstelle die Datei /etc/postfix/mysql_virtual_alias_maps.cf mit
folgendem Inhalt.
user = mailauth
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND
active = '1'
(bei password = muss das Passwort für den User mailauth hin!!!)
Erstelle die Datei /etc/postfix/mysql_virtual_domain_maps.cf mit
folgendem Inhalt.
user = mailauth
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s'
AND backupmx = '0' AND active = '1'
(bei password = muss das Passwort für den User mailauth hin!!!)
Erstelle die Datei /etc/postfix/mysql_virtual_mailbox_maps.cf mit
folgendem Inhalt.
user = mailauth
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT CONCAT(maildir, 'Maildir/') AS maildir
FROM mailbox WHERE username='%s' AND active = '1'
(bei password = muss das Passwort für den User mailauth hin!!!)
Füge das folgende an das Dateiende der Datei /etc/postfix/main.cf an
virtual_alias_maps =
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains =
mysql:/etc/postfix/mysql_virtual_domain_maps.cf
virtual_mailbox_maps =
mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
Füge noch folgende Restriktionen in die Datei /etc/postfix/main.cf
ein, die Postix bei Mails anwenden soll.
smtpd_sender_restrictions= reject_non_fqdn_sender
smtpd_reject_unlisted_sender = yes
smtpd_recipient_restrictions= permit_mynetworks,
reject_non_fqdn_recipient, permit_sasl_authenticated,
reject_unauth_destination
Optional
Um Spam vorzubeugen sollte noch folgende Zielen eingefügt werden.
(Bitte lese dazu auch die Vereinbarungen auf der Spamhaus Webseite.)
reject_rbl_client = zen.spamhaus.org
reject_rbl_client = dnsbl.sorbs.net
reject_rbl_client = list.dsbl.org
Nun wollen wir noch Einstellungen in der Datei /etc/sasl2/smtpd.conf
machen. Wir fügen folgendes ein.
pwcheck_method:saslauthd
log_level:3
mech_list: PLAIN LOGIN
authdaemond_path:/var/lib/sasl2/mux
und achten darauf das der Eintrag pwcheck_method:pam auskommentiert
ist.
#pwcheck_method:pam
Konfiguration überprüfen und starten des Mailservers
postfix check
Sollte keine fehlermeldung bringen. Lediglich diese Zeile könnte
erscheinen.
postfix/postfix-script: warning: not owned by postfix:
/var/lib/postfix/./.keep_mail-mta_postfix-0
Wenn alles gut gelaufen ist starten wir unseren Mailserver und die
dazugehörigen Dienste.
/etc/init.d/dovecot start
/etc/init.d/saslauthd start
/etc/init.d/postfix start
Mailboxen können nun mit PostfixAdmin eingerichtet werden.
Damit unser Mailserver auch bei einem Reboot des Systems automatisch
gestartet wird, geben wir noch folgendes ein.
rc-update add dovecot default
rc-update add saslauthd default
rc-update add postfix default
Ich hoffe ich habe nichts vergessen und wünsche Euch viel Erfolg.
Hinweis:
Ich habe feststellen müssen, dass bei einigen Systemen die log-Datei
von Dovecot in /var/log/ nicht mit den richtigen Rechten versehen
wird. Warum das von System zu System so ist, konnte ich bisher nicht
herausfinden. Das Problem der falschen Rechte bewirkt, das keine LogEinträge erstellt werden und das damit auch keine Mails abgeholt
werden können.
Herunterladen