Mail Server · 10 min read · Nov 12, 2025

So konfigurieren Sie den ISP-Mailserver mit virtuellen Benutzern/Domains auf Centos 5.0 mit Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL - Seite 2

Konfiguration:

SMTP-AUTH/TLS

Zuerst konfigurieren wir SMTP-AUTH und TLS. Dazu bearbeiten Sie /usr/lib/sasl2/smtpd.conf mit Ihrem bevorzugten Editor.

vi /usr/lib/sasl2/smtpd.conf

und nehmen Sie die Änderungen wie unten angegeben vor.

pwcheck_method: saslauthd
mech_list: plain login

Erstellen Sie Verzeichnisse, dann den privaten Schlüssel und schließlich das Zertifikat.

mkdir -p /etc/postfix/ssl/mailserver  
cd /etc/postfix/ssl/mailserver  
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024  
chmod 600 smtpd.key  
openssl req -new -key smtpd.key -out smtpd.csr  
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt  
openssl rsa -in smtpd.key -out smtpd.key.unencrypted  
mv -f smtpd.key.unencrypted smtpd.key  
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Private Schlüssel und Zertifikate wurden erstellt. Später werden wir Postfix anweisen, sie zu verwenden.

MySQL:

Wir werden jetzt eine Datenbank namens mail erstellen, dazu geben wir die folgenden Befehle ein;

mysql -u root -p

Geben Sie das Passwort ein und Sie befinden sich an der MySQL-Eingabeaufforderung ( mysql>).

CREATE DATABASE mail;

Geben Sie alle Berechtigungen für mail an den Benutzer mail.

GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';  
FLUSH PRIVILEGES;  
quit

Setzen Sie das Passwort für den Benutzer mail. Dies geschieht mit der folgenden Anweisung.

mysqladmin -u mail password newpassword

Dann erstellen wir die notwendigen Tabellen für unsere neue Datenbank (mail), die Informationen zu Domains, Benutzern, Aliasen und Postfächern enthält.

mysql -u mail -p

Nachdem Sie das Passwort eingegeben haben, befinden Sie sich an der MySQL-Eingabeaufforderung.

show databases;

Es werden alle Datenbanken angezeigt, einschließlich unserer “mail”-Datenbank. Wir werden “mail” verwenden.

USE mail;
  1. Erstellen Sie die Domain-Tabelle.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Virtuelle Domains';
  1. Die zweitwichtigste Tabelle ist das Postfach, also erstellen Sie das Postfach.
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Virtuelle Postfächer';
  1. Erstellen Sie die Alias-Tabelle.
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Virtuelle Aliase';

Wir haben die notwendigen Tabellen erstellt, also beenden Sie MySQL.

quit

Postfix MySQL:

Postfix muss wissen, wo und wie es alle mailboxbezogenen Informationen abrufen kann. Zu diesem Zweck erstellen wir die folgenden Dateien unter /etc/postfix. Neuere Versionen von Postfix verwenden möglicherweise diese anstelle der anderen Anweisungen, und in diesem Fall kommentieren Sie einfach alle Zeilen aus und heben Sie die letzte hervor.

  1. Erstellen Sie die Datei mysql_virtual_alias_maps.cf für die Weiterleitung von E-Mails von einer E-Mail-Adresse zu einer anderen.
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
  1. Erstellen Sie die Datei mysql_virtual_domains_maps.cf für die Zuordnung virtueller Domains. Virtuelle Domains werden mit den in dieser Datei bereitgestellten Informationen abgefragt.
vi /etc/postfix/mysql_virtual_domains_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
  1. Erstellen Sie die Datei mysql_virtual_mailbox_maps.cf. Dies ist normalerweise die Zuordnung von E-Mail-Adressen zum Speicherort des Postfachs des Benutzers auf Ihrer Festplatte. Wenn Sie eingehende E-Mails mit dem integrierten virtuellen Zustellagenten von Postfix auf der Festplatte gespeichert haben, wird diese abgefragt, um den Pfad zum Postfach zu ermitteln.
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
  1. Erstellen Sie schließlich die Datei mysql_virtual_mailbox_limit_maps.cf, die zur Zuordnung des Quotenlimits der Benutzerpostfächer verwendet wird.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
  1. Geben Sie den mysql_virtual-Dateien die entsprechenden Berechtigungen und Eigentümerschaften.
chown root:postfix *.cf  
chmod 644 *.cf

Postfix:

Im Postfix-Konfigurationsabschnitt bearbeiten wir die main.cf-Datei im Konfigurationsverzeichnis von Postfix ( /etc/postfix), um einige grundlegende Informationen einzugeben, die für Postfix erforderlich sind.

mv /etc/postfix/main.cf /etc/postfix/main.cf.orig  
vi /etc/postfix/main.cf
############## Postfix###############
#Datum geändert 17. Juni 2008
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
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
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################postfix section ends here###############

Postfix Virtuelle Benutzerinformationen:

Erneut werden wir die main.cf-Datei bearbeiten, um die Unterstützung für virtuelle Benutzer hinzuzufügen. Die “virtual_minimum_uid” und “virtual_uid_maps” verweisen in meinem Fall auf die Benutzer-ID 150, die ich speziell für die Verwaltung virtueller E-Mails erstellt habe. Es verwendet die Standardgruppe “mail” mit der Standard-gid 12. Erstellen Sie also zuerst den Benutzer, indem Sie den Befehl useradd oder adduser ausführen.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtuelles Postfach" vmail  
chmod 770 /var/vmail/ (verzeichnis erstellen, falls es nicht existiert)  
chown vmail:mail /var/vmail  
vi /etc/postfix/main.cf
#######################Virtuelle Domains Benutzer und Postfächer###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################Virtueller Abschnitt der main.cf endet##############

Postfix SASL/TLS-Authentifizierung:

Schließlich werden wir erneut die main.cf-Datei bearbeiten, um die SASL/TLS-Authentifizierung zu aktivieren. Zuvor haben wir einige Zertifikate erstellt, die wir hier verwenden werden, um den Mailserver abzusichern.

vi /etc/postfix.main.cf
#################### SASL/TLS-Authentifizierung###########################
######SASL-TEIL#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######TLS-TEIL###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################SASL/TLS-Authentifizierung endet hier#############

Zu meinem Komfort habe ich main.cf in drei Abschnitte unterteilt { Postfix, virtuelle-Domains-Benutzer-und-Postfächer, SASL/TLS-Authentifizierung}. SASL/TLS-Authentifizierung ist weiter unterteilt in ( SASL-TEIL und TLS-TEIL). Um Ihnen jeden Abschnitt und deren Parameter zu zeigen, habe ich dieselbe Datei dreimal bearbeitet. Kopieren Sie jetzt die /etc/aliases und /etc/aliases.db nach /etc/postfix/ und führen Sie newaliases aus.

cp /etc/aliases* /etc/postfix/  
newaliases

Dovecot v1.x IMAP und POP:

Lassen Sie uns Dovecot konfigurieren, das sowohl einen POP3- als auch einen IMAP-Dienst bereitstellt. Die Konfigurationsdatei für Dovecot ist /etc/dovecot.conf. Wir sichern die Originaldatei in dovecot.conf.orig und ändern die laufende Datei nach unseren Bedürfnissen. Um virtuelle Benutzer mit Dovecot zu verwalten, erstellen wir die Datei /etc/dovecot-mysql.conf.

vi /etc/dovecot-mysql.conf
######dovecot-mysql.conf sollte so aussehen##########
# HINWEIS: '\' Zeilenaufteilung wird nur zur Lesbarkeit verwendet, derzeit unterstützt Dovecot dies nicht
# Der mysqld.sock-Socket kann sich an verschiedenen Orten in verschiedenen Systemen befinden
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# Alternativ können Sie sich auch mit localhost verbinden:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u' AND active ='1'
####################endet hier####################

Jetzt gehen wir zur Konfiguration von dovecot.conf über, um den virtuellen Benutzer mit der mysql_auth-Methode zu authentifizieren. Beachten Sie, dass normale Linux-Benutzer sich nicht beim Mailserver anmelden können. Da wir die Pam-Authentifizierungsmethode in unserer Dovecot-Konfiguration nicht aktiviert haben. Außerdem sind first_valid_uid und last_valid_uid auf 150 gesetzt, was bedeutet, dass nur der Benutzer mit der uid 150 sich anmelden kann. Die Protokolle Pop3 und pop3s sind verfügbar.

cp -p /etc/dovecot.conf /etc/dovecot.conf.orig  
vi /etc/dovecot.conf

(Nur die folgenden Zeilen bearbeiten)

##############dovecot konfiguriert, um mit virtuellen Benutzern zu arbeiten############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################endet hier######################

Danach setzen wir die Eigentümerschaft und Zugriffsrechte auf /etc/dovecot-mysql.conf.

chmod 600 /etc/dovecot/*.conf  
chown vmail /etc/dovecot/*.conf

Roundcube Installation & Konfiguration:

Basierend auf INSTALLATIONS-HINWEISEN (Roundcube)

  1. Dekomprimieren Sie und legen Sie diesen Ordner irgendwo in Ihrem Dokumentenstamm ( /var/www/html/mail)
  2. Stellen Sie sicher, dass die folgenden Verzeichnisse (und die darin enthaltenen Dateien) vom Webserver beschreibbar sind
  • /temp
  • /logs
  1. Erstellen Sie eine neue Datenbank und einen Datenbankbenutzer für RoundCube (siehe DATENBANK-EINRICHTUNG)
  2. Richten Sie Ihren Browser auf http://url-to-roundcube/installer/
  3. Befolgen Sie die Anweisungen des Installationsskripts (oder siehe MANUELLE KONFIGURATION)
  4. Entfernen Sie nach dem Erstellen und Testen der Konfiguration das Installationsverzeichnis
  5. Fertig!

DATENBANK-EINRICHTUNG

  • MySQL 4.1.x/5.x

Für MySQL-Version 4.1 und höher wird empfohlen, die Datenbank für RoundCube mit dem Zeichensatz utf-8 zu erstellen. Hier ist ein Beispiel für das Initialisierungsverfahren:

mysql -u root -p
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';  
quit
mysql -u mail -p roundcubemail < SQL/mysql5.initial.sql

Hinweis: ‘password’ ist das Master-Passwort für den Roundcube-Benutzer. Es wird dringend empfohlen, dies durch ein sichereres Passwort zu ersetzen. Bitte beachten Sie: Sie müssen dieses Passwort später in ‘config/db.inc.php’ angeben.

HTTP-Abschnitt:

Um die Weboberfläche des Mailservers zu verwenden, bearbeiten wir die Datei /etc/httpd/conf/httpd.conf.

vi /etc/httpd/conf/httpd.conf

Und fügen Sie die unten angegebenen Anweisungen hinzu.

#Frontend-Mailzugriff mit Roundcube

  DocumentRoot /var/www/html/mail
  ServerName mail.example.co.tz

Speichern Sie die Konfiguration und beenden Sie.

Erstellen von virtuellen Benutzern und Domains:

  1. Jetzt werden wir virtuelle Domains und virtuelle Benutzer in unserer Mail-Datenbank erstellen.
mysql -u mail -p
  1. Geben Sie das Passwort ein und Sie befinden sich an der mysql> Eingabeaufforderung.
USE mail;
  1. Erstellen Sie zuerst eine virtuelle Domain in der Domain-Tabelle (example.co.tz) mit dem folgenden Befehl.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Virtuelle Domain','10','10', '0','virtual', '0','1');
  1. Erstellen Sie nun zwei virtuelle Benutzer in der Mailbox-Tabelle. Ich habe ( [email protected] & [email protected]) als Benutzernamen für kiiza und hoboka erstellt.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');  
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');  
quit

Jetzt, da wir virtuelle Benutzer und eine virtuelle Domain erstellt haben, möchten wir unseren Mailserver testen, indem wir uns anmelden und E-Mails von einem Benutzerkonto an ein anderes senden. Lassen Sie uns auch Dovecot, Postfix, MySQL und Webserver-Daemons starten. Außerdem möchten wir, dass sie sich beim nächsten Neustart selbst starten. Dazu geben wir die folgenden Befehle ein.

chkconfig -level 235 mysqld on  
chkconfig -level 235 saslauthd on  
chkconfig -level 235 postfix on  
chkconfig -level 235 dovecot on  
chkconfig -level 235 httpd on  
/etc/init.d/saslauthd start  
/etc/init.d/mysqld start  
/etc/init.d/postfix start  
/etc/init.d/dovecot start  
/etc/init.d/httpd start
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.