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]