Mail Server · 6 min read · Feb 14, 2026
Mail-Server-Einrichtung mit Exim, MySQL, Cyrus-Imapd, Horde Webmail auf Centos 5.1 - Seite 2
Konfiguration
Apache konfigurieren
- Aktivieren Sie das virtuelle Hosting und erstellen Sie den Standard-VirtualHost, bearbeiten Sie /etc/httpd/conf/httpd.conf und fügen Sie am Ende hinzu
NameVirtualHost *:80ServerAdmin [email protected] - Erstellen Sie den virtuellen Host für Horde Webmail, fügen Sie dies unter dem obigen hinzu
Servername mail.home.topdog-software.com DocumentRoot /usr/share/horde ErrorLog logs/mail-error_log CustomLog logs/mail-access_log common - Aktivieren Sie die Horde-Sicherheitseinstellungen, bearbeiten Sie die Datei /etc/httpd/conf.d/horde.conf und setzen Sie sie wie folgt
#Alias /horde /usr/share/hordeOptions +FollowSymLinks php_admin_flag safe_mode off php_admin_flag magic_quotes_runtime off php_flag session.use_trans_sid off php_flag session.auto_start off php_admin_flag file_uploads on #php_admin_flag allow_url_fopen on php_value post_max_size 20M php_value upload_max_filesize 10M php_admin_value open_basedir "/usr/share/horde:/usr/share/horde/config:/usr/share/pear:/tmp" php_admin_flag register_globals off Order Deny,Allow Deny from all Order Deny,Allow Deny from all - Erhöhen Sie das PHP-Speicherlimit, bearbeiten Sie /etc/php.ini und ändern Sie es wie folgt
memory_limit = 64M - Aktivieren Sie Horde unter SSL, bearbeiten Sie /etc/httpd/conf.d/ssl.conf und fügen Sie Folgendes zum Standard-VirtualHost zwischen den
default:443> -Tags hinzu Servername mail.home.topdog-software.com:443 DocumentRoot /usr/share/horde
Exim konfigurieren
- Wechseln Sie den MTA zu Exim
system-switch-mail (exim auswählen)Anti-Virus / Sanesecurity-Überprüfungen
- Konfigurieren Sie Exim (/etc/exim/exim.conf), um ClamAV zu verwenden, um eingehende E-Mails zu scannen und virusinfizierte E-Mails sowie Bild- und PDF-Spam zur SMTP-Zeit abzulehnen
av_scanner = clamd:/var/run/clamav/clamd.sock
RBLs
- Konfigurieren Sie die RBLs unter acl_check_rcpt:
drop message = REJECTED because $sender_host_address is in a black list spamhaus.org dnslists = zen.spamhaus.org drop message = REJECTED because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text dnslists = bl.spamcop.net drop message = REJECTED because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text dnslists = dnsbl.sorbs.net
Anti-Spam
- Wenn Sie Nachrichten von Servern ohne Reverse-DNS ablehnen möchten, fügen Sie dies unter acl_check_rcpt: hinzu. Es gibt eine Ausnahmeliste, zu der Sie Domains hinzufügen können, bei denen die ACL nicht angewendet werden soll, und versucht, eine Testnachricht an die Absenderadresse zuzustellen, um zu überprüfen, ob der Absender gültig ist.
drop message = REJECTED - Wir akzeptieren keine Nachrichten von Hosts ohne Reverse-DNS log_message = Kein Reverse-DNS domains = ! lsearch;/etc/exim/checks_exempt_hosts !verify = reverse_host_lookup !verify = sender/callout=2m,defer_ok !condition = ${if eq{$sender_verify_failure}{} } - Um Nachrichten von Clients abzulehnen, die kein HELO/EHLO bereitstellen, fügen Sie dies zu acl_check_rcpt hinzu:
drop message = REFUSED - kein HELO/EHLO-Gruß log_message = Remote-Host hat keinen Gruß präsentiert condition = ${if def:sender_helo_name {false}{true}} - Sie können die Verbindungen zu Ihrem Server auch drosseln, fügen Sie dies zu acl_check_connect hinzu, um dies zu tun (lesen Sie die Exim-Dokumentation zu den Parametern, wenn Sie es für Ihre Website feinabstimmen möchten)
deny ratelimit = 250 / 15m / strict message = Sie können nur $sender_rate pro $sender_rate_period senden log_message = RATE: $sender_rate/$sender_rate_period (max $sender_rate_limit) accept - Stoppen Sie bösartige Spam-Bots, die Ihre Maschine verwüsten
smtp_accept_max_nonmail = 30 smtp_max_unknown_commands = 1 - Bewerben Sie kein Pipelining
pipelining_advertise_hosts = - Aktivieren Sie Spamassassin-Überprüfungen
spamd_address = /var/run/spamassassin/spamd.sock - Lehnen Sie alle Nachrichten mit einem Score über 6 zur SMTP-Zeit ab. (acl_check_data)
accept condition = ${if >={$message_size}{100000} {1}} add_header = X-Spam-Note: SpamAssassin-Lauf umgangen aufgrund der Nachrichten Größe warn spam = nobody/defer_ok add_header = X-Spam-Flag: YES accept condition = ${if !def:spam_score_int {1}} add_header = X-Spam-Note: SpamAssassin-Aufruf fehlgeschlagen warn add_header = X-Spam-Score: $spam_score ($spam_bar)\n\# X-Spam-Report: $spam_report drop condition = ${if >{$spam_score_int}{60} {1}} message = Ihre Nachricht hat $spam_score SpamAssassin-Punkte erzielt. Der Bericht folgt:\n\ $spam_report
Mail-Routing
- Aktivieren Sie den Zugriff auf die MySQL-Datenbank
hide mysql_servers = localhost/horde/horde/hordepassword - Ändern Sie den lokalen Zustellrouter, um an Cyrus zu liefern, aber die E-Mail-Adresse des Benutzers vor der Zustellung zu überprüfen (im Router-Bereich von exim.conf)
localuser: driver = accept local_parts = ${lookup mysql {SELECT REPLACE(user_uid,'${quote_mysql:@$domain}','') \ as user FROM horde_users WHERE user_uid='${quote_mysql:$local_part@$domain}'}{$value}} transport = local_delivery cannot_route_message = Unbekannter Benutzer - Erstellen Sie einen Transport, um über den LMTP-Socket an Cyrus zu liefern
local_delivery: driver = lmtp socket = /var/lib/imap/socket/lmtp batch_max = 50 user = cyrus
SMTP-Authentifizierung
- Fügen Sie Folgendes zum Authentifizierungsbereich von /etc/exim/exim.conf hinzu
plain: driver = plaintext public_name = PLAIN server_prompts = : server_set_id = $2 server_condition = ${if saslauthd{{$2}{$3}{pop}}{1}{0}} server_advertise_condition = true login: driver = plaintext public_name = LOGIN server_prompts = "Benutzername:: : Passwort::" server_condition = ${if saslauthd{{$1}{$2}{pop}}{1}{0}} server_set_id = $1 server_advertise_condition = true
Vollständige Beispielkonfiguration
Laden Sie die vollständige Konfigurationsdatei hier herunter.
MySQL konfigurieren
- Deaktivieren Sie TCP-Netzwerke, bearbeiten Sie /etc/my.cnf und fügen Sie Folgendes im mysqld-Bereich hinzu
skip-networking - Setzen Sie das Root-Passwort /usr/bin/mysqladmin -u root password ‘new-password’
/usr/bin/mysqladmin -u root -h your_host_name password ‘new-password’ -p
Horde konfigurieren
- Bearbeiten Sie die SQL-Datei und ändern Sie das MySQL-Passwort für den Horde-Benutzer cp /usr/share/horde/scripts/sql/create.mysql.sql .
vi create.mysql.sqlREPLACE INTO user (host, user, password) VALUES ( 'localhost', 'horde', -- WICHTIG: Ändern Sie dieses Passwort! PASSWORD('hordepassword') ); - Erstellen Sie den Benutzer und füllen Sie die Horde-Datenbank
mysql -p < create.mysql.sql - Erstellen Sie die Tabellen für Turba (Adressbuch)
mysql -p horde < /usr/share/horde/turba/scripts/sql/turba_objects.mysql.sql - Erstellen Sie die Tabellen für Kronolith (Kalender)
mysql -p horde < /usr/share/horde/kronolith/scripts/sql/kronolith.mysql.sql
Horde-Konfiguration
- Erstellen Sie die Horde-Basiskonfiguration /usr/share/horde/config/conf.php
- Setzen Sie die Horde-Präferenzen, um Webmail zur Standardanwendung beim Anmelden zu machen. Bearbeiten Sie die Datei /usr/share/horde/config/prefs.php und ändern Sie $_prefs[‘initial_application’] wie folgt
$_prefs['initial_application'] = array( 'value' => 'imp', 'locked' => true, 'shared' => true, 'type' => 'select', 'desc' => sprintf(_("Welche Anwendung sollte %s nach dem Login anzeigen?"), $GLOBALS['registry']->get('name')) ); - Lassen Sie Horde von innerhalb des Standard-Roots der Webserver arbeiten, bearbeiten Sie /usr/share/horde/config/registry.php und ändern Sie $this->applications[‘horde’] wie folgt
$this->applications['horde'] = array( 'fileroot' => dirname(__FILE__) . '/..', 'webroot' => '', 'initial_page' => 'login.php', 'name' => _("Horde"), 'status' => 'aktiv', 'templates' => dirname(__FILE__) . '/../templates', 'provides' => 'horde' );
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.