Postfix Mailserver unter Linux

Allgemeine Übersicht Mailserver Protokolle

Protokoll PortFunktionalität
Pop3110Mails abrufen → ohne Ordnerunterstützung
IMAP143
SMTP25Mails an den Mailserver versenden

Vorwort

Diese Dokumentation behandelt die Installation und Konfiguration eines Mailservers unter Suse Linux Enterprise Server 10 (SLES10).Für den Mailserver Postfix werden Courier und MYSQL verwendet. Die Konfiguration von Postfix wird zum Großteil in der MYSQL Datenbank ausgliedern, welches einen Geschwindigkeitsvorteil mit sich bringt. Außerdem wird die Benutzerverwaltung einfacher und übersichtlicher. Durch die Verwendung einer Datenabank werden virtuelle Benutzer und keine Systembenutzer verwendet.

Es gilt zu beachten, dass sich diese Dokumentation nur mit einer lokalen Installation befäßt. Die Konfiguration von SSL-Schlüsseln, Antiviren Tests, und verschiedenen Spam-Filtern wird nicht beschrieben. Der Mailserver eignet sich dementsprechend nicht für einen Gebrauch in einem produktiven Umfeld.

Postfix Installation

Für die Installation werden verschiedene RPM – Pakete benötigt.
Die Installation erfolgt über:

rpm -ivh Pfad/Paketname

oder

rpm -U Pfad/Paketname

→Es könnte sein, dass Postfix auf manchen SLES Versionen schon installiert ist. In solchen Fällen bietet sich die „-U“ – Option für „Upgrade“ an.

→ Postfix wie oben beschrieben installieren.
Software:

http://software.opensuse.org/search?q=postfix&baseproject=SUSE%3ASLE-10%3ASDK&lang=de&exclude_debug=true
unter SLES10 32 Bit ->i586 
unter SLES10 64 Bit ->x64

Benötigte Pakete

Nach der Installation bzw. Aktualisierung von Postfix werden noch andere Pakete benötigt:

  • Postfix:
MYSQL - Lib - > libmysqlclient15-5.0.67-21.2.i586.rpm

Mysql Dateien -> Postfix-mysql-2.3.2-12.6.i586.rpm 
  • Courier:
expect (Installation über Yast)

courier-authlib-0.63.0-29.2.i586.rpm

courier-authlib-mysql-0.63.0-29.2.i586.rpm

courier-imap-4.9.3-26.4.i586.rpm

Installation von Mysql über Lampp

Für die hier beschriebene Installation von Postfix wird ein MYSQL – Server vorrausgesetzt. Neben einer normalen MYSQL – Installation bietet sich auch die Installation von Lampp an. Dieses Softwarepaket bietet neben einem MYSQL – Server auch einen Apache – Server mit vorkonfiguriertem PHP – MyAdmin an.

Erklärung:
Lampp ist die Linux variante zu Xampp im Windows Bereich. Lampp besteht aus einer Ansammlung von freier Software, es ermöglicht das einfache Installieren und konfigurieren eines Apache Webservers mit der Datenbank MYSQL, hat aber auch andere nützliche Pakete wie z.B. Phpmyadmin oder PHP.

Installation

  • Herunterladen von xampp-linux-1.7.7.tar.gz
  • Danach Datei in Linux entpacken mit dem Befehl: tar –xzf Paktename
  • Die entpackte Datei nach /opt/ verschieben (oder gleich in /opt/ entpacken), denn in /opt/ liegt Fremdsoftware.
  • Den Speicherort von Lampp der Linux – Pfadvariable hinzufügen um das Startscript ohne Pfadangabe aufrufen zu können.
PATH=$PATH:/opt/lampp

Achtung: Das zufügen der Pfadangabe in die Linux – Pfadvariable ist nur in der aktuellen Shell gesetzt!

  • Starten von Lampp mit dem Befehl: lampp start

→ Wenn alles richtig ausgeführt wurde, sollte das unten aufgeführte Fenster in der Konsole erscheinen.

SLES10:~ # PATH=$PATH:/opt/lampp/
SLES10:~ # lampp start
Starting XAMPP for Linux 1.7.7...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.

Erstellen der Datenbank mit Phpmyadmin

  • Die Datenbank wird in Phpmyadmin erstellt, hierfür im Browser der virtuellen Maschine localhost / phpmyadmin eingeben, oder im lokalen Browser IP / phpmyadmin, um auf die Startseite zu gelangen.
  • Auf der folgenden Seite über den Button „SQL“ betätigen und dort den MYSQL Code hinzufügen. Über den Code werden dann die Tabellen für die benötigte Datenbank erstellt. Der MYSQL – Code werde ich in den darauf folgenden Seiten etwas näher erklären.
  • Um die eben angelegte Datenbank abrufen zu können, wird der Button „Datenbank“ genutzt. Im nun folgenden fenster wird die eben erstellte Datenbank „Postfix“ angezeigt.
  • Bearbeiten der Tabellen:

Um einen Wert eintragen zu können muss der „Einfügen“ Button oben in der Leiste betätigt werde. Danach kann der Wert ganz rechts gesetzt werden, alles andere wird ignorieren , das Feld ID wird ebenfalls immer frei gelassen.

destination: unseredomain.de
user: Benutzer@userdomain.de
forwardings: Stehen für Weiterleitungen, damit ist die Weiterleitungen von „root“ zu unserem angelegten Benutzer gemeint. Diese Weiterleitung brauchen wir, weil Postfix Warnmeldungen auch an root versendet und wir nicht wollen dass diese verschwinden. In das Feld E-Mail tragen wir root@unseredomain.de ein. Also die E-Mail die weitergeleitet werden soll. In das Feld Destination tragen wir dann „unsere Benutzer“ ein benutzer@unseredomain.de.

MYSQL CODE

CREATE DATABASE postfix;
GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY 'post';
use postfix;

CREATE TABLE IF NOT EXISTS `destination` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `destination` varchar(128) NOT NULL DEFAULT '',
  `virtual` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

CREATE TABLE IF NOT EXISTS `forwarding` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `email` varchar(100) NOT NULL,
  `destination` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=51 ;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL DEFAULT '',
  `status` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;''

Erläuterung des Codes:

CREATE DATABASE postfix;

#Erstelle eine neue Datenbank mit dem Namen Postfix

GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY 'post';
use postfix;

#Mit dieser Zeile sagen wir dem Server in welcher Datenbank er die Tabellen erstellen soll. Wir erteilen alle Rechte der Datenbank Postfix an den Benutzer „Postfix“ mit dem Passwort „Post

CREATE TABLE IF NOT EXISTS `destination` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `destination` varchar(128) NOT NULL DEFAULT '',
  `virtual` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

#Erstelle die Tabelle „ destination“ falls sie noch nicht existiert. Die Klammern müssen gesetzt werden, da es sich um eine Funktion handelt, alles was sich innerhalb der Klammern befindet bezieht sich auf die Tabelle. #Primary key: Jede Tabelle braucht einen primären (primary) Schlüssel, damit der Datensatz eindeutig identifiziert werden kann. #Auto_Increment: Bedeutet das der Wert der ID vom Server automatisch verwaltet / gesetzt wird. Das hat den Sinn, dass kein Datensatz auf der gleichen ID angelegt wird, sprich doppelt vorkommt.

Weiterleitungen zu MYSQL

Um die Konfigurationen in MYSQl für Postfix verwenden zu können, müssen entsprechende Weiterleitungen erstellt werden, die auf die Datenbank verweisen.

Hierfür wird in Postfix ein neues Verzeichnis „mysql“ erstellt, indem dann die Weiterleitungen angelegt werden. Der Pfad der Weiterleitung wird später der Postfix – Konfigurationsdatei hinzugefügt.

Weiterleitungen: Mysql_auth.cf

user = postfix	
password = post
dbname = postfix
table = users
select_field = email
where_field = password
additional_conditions = and status = '1'
hosts = 127.0.0.1

Mysql_destination_virtual.cf

user = postfix
password = post
dbname = postfix
table = destination
select_field = destination
where_field = destination
additional_conditions = and virtual = '1'
hosts = 127.0.0.1

Mysql_forwarding.cf

user = postfix
password = post
dbname = postfix
table = forwarding
select_field = destination
where_filed = email
hosts = 127.0.0.1

Mysql_mailboxes.cf

user = postfix
password = post
dbname = postfix
table = users
select_field=CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
where_field = email
hosts = 127.0.0.1

Neustartscript

Um das Neustarten des Mailservers zu erleichtern, empfiehlt es sich ein kleines Script anzulegen.#

#Script Anlegen

touch postfixrestart

#In Das Script „rein gehen“

vi postfixrestart

#Folgenden Text ins Script einfügen:

#!/bin/sh
echo Starte Postfix und Courier neu
echo ---
rcpostfix restart
echo ---
rccourier-pop restart
echo ---

#Als letztes das Script ausführbar machen

Postfixrestart chmod +x

Konfiguration Postfix

#Konfig Datei:

/etc/postfix/main.cf

#Folgende Konfigurationen werden benötigt:

#Benutzer spezifische Parameter
myhostname = SLES10
mydomain = SLES10.de
myorigin = SLES10.de
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
inet_interfaces = all
mynetworks = 10.6.7.0/24, 127.0.0.0/8
message_size_limit = 10240000
##
daemon_directory = /usr/lib/postfix
mydestination = mysql:/etc/postfix/mysql/mysql_destination_virtual.cf
forwarding = mysql:/etc/postfix/mysql/mysql_forwarding.cf
users = mysql:/etc/postfix/mysql/mysql_auth.cf
biff = no
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
append_dot_mydomain = no
delay_warning_time = 2h
smtpd_sasl_local_domain = $mydestination
tarsmtpd_helo_required = yes
broken_sasl_auth_clients = yes
virtual_mailbox_base = /var/mail
mailbox_transport = virtual
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_mailboxes.cf
local_recipient_maps =
alias_maps = hash:/etc/aliases

SMTP - Zugriff auf Postfix testen

#Neustarten des Servers

postfixrestart

#Danach wird über die Logdatei überprüft ob der Server beim Testen oder Starten einen Fehler aufgewiesen hat.

Tail –f /var/log/mail

#testen des Mailservers:

telnet localhost 25                  # Verbindung herstellen
ehlo testmail.org                    # Authentifizierung
mail from:<test@ŧest.de>             # Abesender
rcpt to:<Benutzer@deinedomain.de>    # Empfänger
data                                 # Startet den Eingabemodus für den E-Mail Inhalt
Das ist ein Test
                                     # Beendet den Modus und sendet die Mail ab
quit                                 # Verbindung schließen

Achtung: Die Mailbox, sprich die Verzeichnisse der Benutzer werden erst beim ersten richtig ausgeführten Test des Mailservers auf dem System angelegt!

Konfiguration Courier

Damit die Mails auch über einen Mailclient abrufbar werden, brauchen wir einen IMAP oder POP3 Server. Courier bietet beides, ich werde mich auf den POP3 beschränken.

#Änderungen in der Konfigurationsdatei des POP3 Servers:

/etc/courier/pop3d

#Hier folgende zwei Zeilen hinzufügen:

MAILDIRPATH=/var/mail/
Authmodulelist=“authmysql

# Anschließend folgende Datei öffnen:

/etc/authlib/authmysclrc

# Inhalt folgend editieren: #Den Parameter DEFAULT_DOMAIN entsprechend editieren!

MYSQL_SERVER			127.0.0.1
MYSQL_USERNAME		postfix
MYSQL_PASSWORD		post
MYSQL_PORT			3306
MYSQL_DATABASE		postfix
MYSQL_USER_TABLE		users
MYSQL_CLEAR_PWFIELD		password
DEFAULT_DOMAIN		deinedomain.de
MYSQL_UID_FIELD		'5000'
MYSQL_GID_FIELD		'5000'
MYSQL_LOGIN_FIELD		email
MYSQL_HOME_FIELD 		CONCAT('/var/mail/',SUBSTRING_INDEX(email,'@',-1),'/')
MYSQL_MAILDIR_FIELD		CONCAT(SUBSTRING_INDEX(email,'@',1),'/')
MYSQL_WHERE_CLAUSE		status='1'

→ Im nächsten Schritt wird dem Authdaemon „mittgeilt“, dass er ausschließlich über MySQL authentifizieren soll. Wenn dieser Schritt nicht erfolgt, überprüft er zunächst andere Methoden, zum Beispiel AuthPam (Systembenutzer). Das würde das System der virtuellen Benutzer kaputt machen.

#Folgende Datei öffnen:

/etc/authlib/authdaemonrc

#Die entsprechenden parameter editieren:

authmodulelist=“authmysql“
authmodulelistorig=“authmysql“
deamons=1

#Nach einem Postfixrestart sollte in der Logdatei folgende Zeilen auftauchen:

Nov 3 15:28:50 SLES10 authdaemond: modules="authmysql", daemons=1
Nov 3 15:28:50 SLES10 authdaemond: Installing libauthmysql
Nov 3 15:28:50 SLES10 authdaemond: Installation complete: authmysql

→ Es sollten nicht mehr Zeilen von ‘authodaemond’ auftauchen, wenn doch stimmt etwas nicht! Wenn das passiert, ist es am besten die Konfigurationsdateien nochmals zu überprüfen und danach Courier nochmals deinstallieren und neu installieren!

Testen des POP3 - Servers

Ein Test ob eine Verbindung auf den Server erzielt werden kann, wird über Telnet erreicht:

#Sieht wie folgt aus:

telnet localhost pop3
user BENUTZER
pass PASSWORT

→Bei Angabe des Benutzers muss nicht zwingend die Domain angehängt werden, wenn der Benutzer zur DEFAULT_DOMAIN gehört. (Die in etc/authlib/authmysclrc angegeben wurde.)

→Wenn kein Fehler aufgetreten ist sollte +OK logged in, in der Kommandozeile stehen!

Nutzung des Mailservers

Um den Server jetzt richtig für einen Gebrauch zu testen wird einen Mailclient benötigt. Dabei gilt es zu beachten: Wenn eine Mail an eine Domain gesendet wird, welche nicht zu unserem Postfixmailserver gehört, wird sie mit einem Fehler abgelehnt, weil wir unseren Mailserver nur lokal installiert / konfiguriert haben. Deshalb ist eine produktive Nutzung des Servers nicht möglich, wie in der Einleitung schon erwähnt.

 
 postfix_mailserver.txt · Zuletzt geändert: 2014/03/04 18:06 (Externe Bearbeitung)
[unknown button type]
 
Recent changes RSS feed Driven by DokuWiki