sicherer Mailserver mit Postfix
Für die eMailkommunikation in unserem SOHO1)-LAN bedienen wir uns des SMTP-Server Postfix. Dies nicht zuletzt, da dieser, im Gegensatz zum Dinosaurier verschrieenen Sendmail wesentlich einfacher zu konfigurieren ist und auch sicherheitstechnische Vorteile bietet.
Die nachfolgende Beschreibung zeigt, wie man unter CentOS 5 einen Postfix-Mailserver aufsetzen und sicher betreiben kann.
Installation
Von Haus aus wird bei der CentOS-Installation sendmail installiert. Daher werden wir zur späteren Konfiguration neben dem eigentlichen Paket postfix noch die beiden Pakete system-switch-mail und system-switch-mail-gnome via yum installieren.
yum install postfix system-switch-mail system-switch-mail-gnome
Konfiguration
Der Großteil der Konfiguration von Postfix erfolgt über /etc/postfix.main.cf. Desweiteren spielt die /etc/postfix/master.cf und weitere Dateien eine entscheidende Rolle.
# ll /etc/postfix/ insgesamt 296 -rw-r--r-- 1 root root 17832 21. Jan 2007 access -rw-r--r-- 1 root root 3550 21. Jan 2007 bounce.cf.default -rw-r--r-- 1 root root 11175 21. Jan 2007 canonical -rw-r--r-- 1 root root 9920 21. Jan 2007 generic -rw-r--r-- 1 root root 16838 21. Jan 2007 header_checks -rw-r--r-- 1 root root 11942 21. Jan 2007 LICENSE -rw-r--r-- 1 root root 26896 9. Aug 23:01 main.cf -rw-r--r-- 1 root root 17981 21. Jan 2007 main.cf.default -rw-r--r-- 1 root root 958 21. Jan 2007 makedefs.out -rw-r--r-- 1 root root 4138 9. Aug 23:02 master.cf -rw-r--r-- 1 root root 17639 21. Jan 2007 postfix-files -rwxr-xr-x 1 root root 6366 21. Jan 2007 postfix-script -rwxr-xr-x 1 root root 22564 21. Jan 2007 post-install -rw-r--r-- 1 root root 6805 21. Jan 2007 relocated -rw-r--r-- 1 root root 1629 21. Jan 2007 TLS_LICENSE -rw-r--r-- 1 root root 12081 21. Jan 2007 transport -rw-r--r-- 1 root root 11984 21. Jan 2007 virtual
Als erstes sehen wir uns die Hauptkonfigurationsdatei /etc/postfix.main.cf etwas genauer an. Die Konfigurationsdatei ist durch die vielen sehr guten Dokumentationshinweise doch sehr angewachsen, aber im Grunde beschränkt sich diese auf ein paar wenige „aktive“ Zeilen.
egrep -v '(^#|^$)' /etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = host.domain.de
mydomain = domain.de
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain, localhost, localhost.$mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.1.0/24, 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
Eine weitere Möglichkeit sich die Konfiguration unseres Mailservers, oder besser gesagt die Definitionen die von den Standardvorgaben abweichen, anzeigen zu lassen, ist die Verwendung von postconf -n:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, $mydomain, localhost, localhost.$mydomain
myhostname = host.domain.de
mynetworks = 192.168.1.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name
unknown_local_recipient_reject_code = 550
Test
Die erfolgreiche erste Konfiguration testen wir am besten ganz einfach mit Hilfe von postfix selbst.
service postfix check
Der erste Start erfolgt dann ganz unspektakulär mittels:
service postfix start
Unsere erste Testmail verschicken wir dann von Hand und Verfolgen das Ergebnis im /var/log/maillog**.
telnet localhost 25
HELO localhost
MAIL FROM: root@localhost
RCPT TO: django@localhost
DATA
From: root@localhost
To: django@localhost
Subject: erste Testmail
Dies ist unsere erste Testmail
.
quit
Aug 9 12:23:17 nss postfix/smtpd[30340]: connect from localhost.localdomain[127.0.0.1] Aug 9 12:23:39 nss postfix/smtpd[30340]: 1780F76020C: client=localhost.localdomain[127.0.0.1] Aug 9 12:23:53 nss postfix/cleanup[30354]: 1780F76020C: message-id=<20080809102339.1780F76020C@host.nausch.org> Aug 9 12:23:53 nss postfix/qmgr[30337]: 1780F76020C: from=<root@localhost.domain.de>, size=400, nrcpt=1 (queue active) Aug 9 12:23:53 nss postfix/local[30373]: 1780F76020C: to=<bigchief@localhost.domain.de>, orig_to=<bigchief@localhost>, relay=local, delay=21, delays=21/0/0 /0.04, dsn=2.0.0, status=sent (delivered to mailbox) Aug 9 12:23:53 nss postfix/qmgr[30337]: 1780F76020C: removed Aug 9 12:23:56 nss postfix/smtpd[30340]: disconnect from localhost.localdomain[127.0.0.1]