Zahlungsmethoden Abuse

Mail-Server auf CentOS 7. Installation von Dovecot + Exim + Roundcube

13.03.2023, 23:01

Die Installation eines Mailservers unter CentOS 7 kann auf verschiedene Arten erfolgen, aber eine der häufigsten ist die Verwendung einer Kombination aus Postfix und Dovecot.

Postfix ist eine Absendersoftware und einer der beliebtesten Mailserver der Welt. Dovecot hingegen ist ein Mailserver, der für den Empfang von E-Mails über das IMAP- oder POP-Protokoll verwendet wird.

Was ist Exim?

Exim ist ein Mail Transfer Agent (MTA), der häufig in Unix-ähnlichen Betriebssystemen verwendet wird. Exim ist Freeware, die unter den Bedingungen der GNU (General Public Licence) vertrieben wird, und ist ein vielseitiges und flexibles E-Mail-Tool mit umfangreichen Funktionen zur Überprüfung eingehender E-Mails.

Was ist Dovecot?

Dovecot ist ein quelloffener IMAP- und POP3-Mailserver für Linux/UNIX-ähnliche Systeme. Die Sicherheit ist der Eckpfeiler dieses Produkts, das auf Flexibilität und Geschwindigkeit ausgerichtet ist.

Was ist Roundcube?

Roundcube ist ein webbasiertes E-Mail-Interface, das die Möglichkeit bietet, mit Ihren Mailboxen über IMAP und SMTP zu arbeiten. Die Anwendung verfügt über leistungsstarke Funktionen und ist vergleichbar mit Desktop-E-Mail-Clients wie Outlook Express oder Mozilla Thunderbird.

Installation von Apache + MySQL + PHP

Melden Sie sich über SSH bei Ihrem virtuellen Server an.

Als nächstes müssen Sie das System aktualisieren, geben Sie den Befehl ein:

# sudo yum update -y

Nach der Aktualisierung des Systems wird eine Meldung wie die folgende angezeigt.

Apache installieren

Um Apache auf Ihrem virtuellen Server zu installieren, geben Sie den folgenden Befehl ein:

# sudo yum install httpd -y

Nach der Installation starten Sie Apache:

# sudo systemctl start httpd.service

Gehen Sie danach auf - http://ServerIP/ und überprüfen Sie, ob Apache richtig funktioniert

Wenn alles richtig funktioniert, geben Sie den Befehl zum automatischen Starten von Apache auf dem virtuellen Server ein:

# sudo systemctl enable httpd.service

MySQL (MariaDB) installieren

Verwenden Sie zum Herunterladen den Befehl:

# sudo yum install mariadb-server mariadb -y

Nachdem der Download und die Installation abgeschlossen sind, müssen Sie MariaDB ausführen:

# sudo systemctl start mariadb

Führen Sie das sichere Installationsskript aus, das unsichere Einstellungen entfernt:

# sudo mysql_secure_installation

Geben Sie das Root-Passwort ein. Da Sie die Datenbank gerade erst erstellt haben, ist es standardmäßig leer. Stimmen Sie anschließend den Einstellungen zu, geben Sie überall"Y" ein. Geben Sie ein neues Passwort ein, bestätigen Sie es, und stimmen Sie den Änderungen erneut mit"Y" zu.

MariaDB ist nun installiert.

PHP installieren

Um PHP zu installieren, geben Sie den Befehl ein:

# sudo yum install php php-mysql -y

Starten Sie anschließend den Apache neu, damit er PHP ausführen kann:

# sudo systemctl restart httpd.service

Um zu testen, wie PHP funktioniert, müssen Sie eine Datei wie index.php mit diesem Befehl erstellen:

# echo "<?php phpinfo(); ?>" > /var/www/html/index.php

Öffnen Sie nun den Link in Ihrem Browser - http://ServerIP/index.php. Sie sollten eine Seite mit PHP-Parametern sehen.

Als nächstes müssen Sie das Paket zur Unterstützung von MariaDB in PHP installieren:

# sudo yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

Danach starten Sie den Apache neu:

# sudo systemctl restart httpd.service

Das war's. Sie haben Apache, MySQL und PHP auf dem virtuellen Server installiert.

Zusätzliche Repositories verbinden

Um alle Komponenten zu installieren, müssen Sie ein zusätzliches Repository verbinden.

# sudo yum install epel-release

Erstellen einer Vexim-Datenbank

Um eine Verbindung zwischen allen Komponenten der Kette herzustellen, ist es notwendig, eine Datenbank zu verwenden. Verbinden Sie sich mit dem MySQL-Server:

# mysql -u root -p

Erstellen Sie eine Datenbank, Sie müssen Ihr eigenes Passwort angeben:

CREATE DATABASE vexim;  
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';  
quit

Postfixadmin installieren

Falls nicht alle PHP-Module installiert sind, ist eine zusätzliche Installation erforderlich.

# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli

Laden Sie Postfixadmin herunter und installieren Sie es in den Ordner /var/www/html/postfixadmin.

# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz
# tar xpf postfixadmin-3.0.tar.gz
# mv postfixadmin-3.0 /var/www/html/postfixadmin
# chown -R apache:apache /var/www/html/postfixadmin
# rm postfixadmin-3.0.tar.gz
# cd /var/www/html/postfixadmin > # vi config.inc.php

Bearbeiten Sie die Konfigurationsdatei config .inc.php:

Installation von Dovecot

# yum -y install dovecot dovecot-mysql

Benennen Sie die Standardkonfiguration um, damit wir bei Bedarf auf sie zurückgreifen können:

# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf

Speichern Sie die folgenden Einträge in der Konfigurationsdatei dovecot.conf:

## Dovecot configuration file

base_dir = /var/run/dovecot/  

auth_default_realm = site.com 

auth_mechanisms = plain login cram-md5 

protocols = imap pop3  

listen = *  

disable_plaintext_auth = no  

dotlock_use_excl = yes  

first_valid_gid = 5  

first_valid_uid = 25  

mail_location = maildir:/var/vmail/%d/%u  

mail_privileged_group = mail  

passdb {  

  args = /etc/dovecot/dovecot-mysql.conf  

  driver = sql  

}   

service auth {  

  unix_listener auth-client {  

    group = exim  

    mode = 0660  

    user = exim  

  }  

  unix_listener auth-master {  

    group = exim  

    mode = 0600  

    user = exim  

  }  

  user = root  

}  

ssl = no  

userdb {  

  args = /etc/dovecot/dovecot-mysql.conf  

  driver = sql  

}  

verbose_proctitle = yes

protocol imap {  

  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep  

}  

protocol pop3 {  

  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh  

  pop3_uidl_format = %08Xu%08Xv  

}  

protocol lda {  

  auth_socket_path = /var/run/dovecot/auth-master  

  postmaster_address = info@site.com

}

Um den Datenbankzugriff zu konfigurieren, erstellen Sie eine separate Konfigurationsdatei dovecot-mysql.conf

# vi /etc/dovecot/dovecot-mysql.conf

und fügen Sie dort die folgenden Einstellungen ein:

## Dovecot database configuration

driver = mysql  

connect = host=localhost dbname=vexim user=vexim password=password  

default_pass_scheme = CRAM-MD5  

password_query = SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = '%n@%d' AND `active`='1'  

user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Exim-Installation

# yum -y install exim exim-mysql cyrus-sasl
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig
# vi /etc/exim/exim.conf

Ändern Sie die Standardkonfiguration und behalten Sie eine Sicherungskopie.

######################################################################

#                    MAIN CONFIGURATION SETTINGS                     #

######################################################################

primary_hostname = mail.site.com

hide mysql_servers = localhost/vexim/vexim/password  

domainlist local_domains = ${lookup mysql{SELECT `domain`   

                            FROM `domain` WHERE   

                            `domain`='${quote_mysql:$domain}' AND   

                            `active`='1'}}  

domainlist relay_to_domains = ${lookup mysql{SELECT `domain`   

                            FROM `domain` WHERE   

                            `domain`='${quote_mysql:$domain}' AND   

                            `active`='1'}}  

hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24

auth_advertise_hosts = *

acl_not_smtp = acl_not_smtp  

acl_smtp_rcpt = acl_check_rcpt  

acl_smtp_data = acl_check_data  

qualify_domain = site.com  

qualify_recipient = site.com

allow_domain_literals = true  

exim_user = exim  

exim_group = exim  

never_users = root  

rfc1413_query_timeout = 0s  

sender_unqualified_hosts = +relay_from_hosts  

recipient_unqualified_hosts = +relay_from_hosts  

ignore_bounce_errors_after = 45m  

timeout_frozen_after = 15d  

helo_accept_junk_hosts = 192.168.1.0/24  

auto_thaw = 1h  

smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"  

smtp_accept_max = 50  

smtp_accept_max_per_connection = 25  

smtp_connect_backlog = 30  

smtp_accept_max_per_host = 20  

split_spool_directory = true  

remote_max_parallel = 15  

return_size_limit = 70k  

message_size_limit = 64M  

helo_allow_chars = _  

smtp_enforce_sync = true  

log_selector =   

    +all_parents   

    +connection_reject   

    +incoming_interface   

    +lost_incoming_connection   

    +received_sender   

    +received_recipients   

    +smtp_confirmation   

    +smtp_syntax_error   

    +smtp_protocol_error   

    -queue_run  

syslog_timestamp = no  

######################################################################

#                       ACL CONFIGURATION                            #

#         Specifies access control lists for incoming SMTP mail      #

######################################################################

begin acl  

acl_not_smtp:  

        deny message = Sender rate overlimit - $sender_rate / $sender_rate_period  

        ratelimit = 50 / 1h / strict  

        accept  

acl_check_rcpt:  

  deny    message          = "Lookup failed"  

          condition = ${if eq{$host_lookup_failed}{1}}  

  accept  hosts = :  

  deny    message       = "incorrect symbol in address"  

          domains       = +local_domains  

          local_parts   = ^[.] : ^.*[@%!/|]  

  deny    message       = "incorrect symbol in address"  

          domains       = !+local_domains  

          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\.\./  

  accept  local_parts   = postmaster  

          domains       = +local_domains  

  deny    message       = "HELO/EHLO required by SMTP RFC"  

          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}  

  accept  authenticated = *   

  deny    condition     = ${if eq{$sender_helo_name}  

    {$interface_address}{yes}{no}}  

          hosts         = !127.0.0.1 : !localhost : *  

          message       = "My IP in your HELO! Access denied!"  

  deny    condition     = ${if match{$sender_helo_name}  

    {N^d+$N}{yes}{no}}  

          hosts         = !127.0.0.1 : !localhost : *  

          message       = "Incorrect HELO string"  

  warn  

        set acl_m0 = 30s  

  warn  

        hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts  

        set acl_m0 = 0s  

  warn  

        logwrite = Delay $acl_m0 for $sender_host_name   

[$sender_host_address] with HELO=$sender_helo_name. Mail   

from $sender_address to $local_part@$domain.  

        delay = $acl_m0  

  accept  domains       = +local_domains  

          endpass  

          message       = "No such user"  

          verify        = recipient  

  accept  domains       = +relay_to_domains  

          endpass  

          message       = "i don't know how to relay to this address"  

          verify        = recipient  

  deny    message       = "you in blacklist - $dnslist_domain n $dnslist_text"  

          dnslists      = opm.blitzed.org :   

                          cbl.abuseat.org :   

                          bl.csma.biz   

accept  hosts         = +relay_from_hosts  

deny    message       = "Homo hominus lupus est"  

acl_check_dаta:  

deny malware = */defer_ok  

message = "Your message contains viruses: $malware_name"  

accept  

######################################################################

#                      ROUTERS CONFIGURATION                         #

#               Specifies how addresses are handled                  #

######################################################################

#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #

# An address is passed to each router in turn until it is accepted.  #

######################################################################

begin routers  

dnslookup:  

  driver = dnslookup  

  domains = ! +local_domains  

  transport = remote_smtp  

  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8  

  no_more  

system_aliases:  

    driver      = redirect  

    allow_fail  

    allow_defer  

    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE   

            `address`='${quote_mysql:$local_part@$domain}' OR   

                `address`='${quote_mysql:@$domain}'}}  

dovecot_user:  

  driver = accept  

  condition = ${lookup mysql{SELECT `goto` FROM   

  `alias` WHERE   

  `address`='${quote_mysql:$local_part@$domain}' OR   

  `address`='${quote_mysql:@$domain}'}{yes}{no}}  

  transport = dovecot_delivery  

######################################################################

#                      TRANSPORTS CONFIGURATION                      #

######################################################################

#                       ORDER DOES NOT MATTER                        #

#     Only one appropriate transport is called for each delivery.    #

######################################################################

begin transports 

remote_smtp:  

  driver = smtp 

dovecot_delivery:  

  driver = pipe  

  command = /usr/libexec/dovecot/deliver -d $local_part@$domain  

  message_prefix =  

  message_suffix =  

  delivery_date_add  

  envelope_to_add  

  return_path_add  

  log_output  

  user = exim  

address_pipe:  

  driver = pipe  

  return_output  

address_reply:  

  driver = autoreply  

######################################################################

#                      RETRY CONFIGURATION                           #

###################################################################### 

begin retry  

*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h  

######################################################################

#                      REWRITE CONFIGURATION                         #

###################################################################### 

begin rewrite  

######################################################################

#                   AUTHENTICATION CONFIGURATION                     #

######################################################################  

begin authenticators  

auth_plain:  

     driver = dovecot  

     public_name = PLAIN  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1  

auth_login:  

     driver = dovecot  

     public_name = LOGIN  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1  

auth_cram_md5:  

     driver = dovecot  

     public_name = CRAM-MD5  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1

Postfix deinstallieren

# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix

Einrichten von Postfixadmin

Rufen Sie http://server_ip/postfixadmin/setup.php auf und folgen Sie den Installationsanweisungen. Nachdem Sie den Superadmin angelegt haben, erhalten Sie vom Installationsprogramm einen Passwort-Hash-Code:

Dieser sollte in der Datei config.inc.php (im Stammverzeichnis des postfixadmin-Verzeichnisses) anstelle dieser Zeile ersetzt werden:

Dann müssen Sie sich mit den erstellten Daten einloggen und die erforderlichen Domains und Mailboxen hinzufügen.

Roundcube-Installation

# yum -y install roundcubemail

Nach der Installation müssen Sie die Config zum Webserver hinzufügen, damit das Skript unter http://server_ip/roundcubemail/ geöffnet wird .

# vi /etc/httpd/conf.d/roundcubemail.conf

Speichern Sie die folgenden Daten:

#

# Round Cube Webmail is a browser-based multilingual IMAP client

#

Alias /roundcubemail /usr/share/roundcubemail

Alias /webmail /usr/share/roundcubemail

<Directory /usr/share/roundcubemail/>

        Options none

        AllowOverride Limit

        Require all granted

</Directory>

<Directory /usr/share/roundcubemail/installer>

        Options none

        AllowOverride Limit

        Require all granted

</Directory>

# Those directories should not be viewed by Web clients.

<Directory /usr/share/roundcubemail/bin/>

    Order Allow,Deny

    Deny from all

</Directory>

<Directory /usr/share/roundcubemail/plugins/enigma/home/>

    Order Allow,Deny

    Deny from all

</Directory>

Apache muss nach dem Schreiben neu gestartet werden:

# systemctl restart httpd.service

Für die weitere Installation legen Sie eine Datenbank an, verbinden Sie sich zu diesem Zweck mit MySQL:

# mysql -u root -p

und führen Sie Abfragen aus (geben Sie Ihre eigenen Daten an):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;

FLUSH PRIVILEGES;

quit

Als nächstes müssen Sie das Installationsprogramm http://server_ip/roundcubemail/installer öffnen und konfigurieren.

Damit ist die Konfiguration abgeschlossen, gehen Sie zu Roundcube http://server_ip/roundcubemail/, loggen Sie sich unter der zuvor erstellten (in Postfixadmin) Box ein, nehmen Sie Einstellungen vor und verwenden Sie.