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 *:80
    
      ServerAdmin [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/horde
    
      Options +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.sql
    REPLACE 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'
    );
    
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.