Inhaltsverzeichnis

sicherer Mailserver mit Postfix

Postfix-LogoFü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]
1)
Small Office Home Office