Betalingsmetoder Abuse

Mailserver på CentOS 7. Installation af Dovecot + Exim + Roundcube

  • Hjem
  • Videnbase
  • Mailserver på CentOS 7. Installation af Dovecot + Exim + Roundcube
13.03.2023, 23:01

Installation af en mailserver på CentOS 7 kan gøres på flere måder, men en af de mest almindelige er at bruge en kombination af Postfix og Dovecot.

Postfix er en afsender-software og er en af de mest populære mailservere i verden. Dovecot er på den anden side en mailserver, der bruges til at hente e-mail ved hjælp af IMAP- eller POP-protokollen.

Hvad er Exim?

Exim er en mail transfer agent (MTA), der ofte bruges i Unix-lignende operativsystemer. Exim er freeware, der distribueres i henhold til GNU (General Public Licence) og er et alsidigt og fleksibelt e-mail-værktøj med omfattende funktioner til kontrol af indgående e-mail.

Hvad er Dovecot?

Dovecot er en open source IMAP- og POP3-mailserver til Linux/UNIX-lignende systemer. Sikkerhed har været hjørnestenen i dette produkts fokus på fleksibilitet og hastighed.

Hvad er Roundcube?

Roundcube er en webbaseret e-mail-grænseflade, der giver mulighed for at arbejde med dine postkasser ved hjælp af IMAP og SMTP. Programmet har en stærk funktionalitet og kan sammenlignes med desktop-e-mail-klienter som Outlook Express eller Mozilla Thunderbird.

Installation af Apache + MySQL + PHP

Log ind via SSH på din virtuelle server.

Dernæst skal du opdatere systemet ved at indtaste kommandoen:

# sudo yum update -y

Efter opdatering af systemet vises en besked som denne.

Installer Apache

For at installere Apache på din virtuelle server skal du indtaste kommandoen:

# sudo yum install httpd -y

Start Apache efter installationen:

# sudo systemctl start httpd.service

Gå derefter til - http://ServerIP/ og tjek, at Apache fungerer korrekt

Hvis alt fungerer korrekt, skal du indtaste kommandoen for at starte Apache automatisk på den virtuelle server:

# sudo systemctl enable httpd.service

Installer MySQL (MariaDB)

Brug kommandoen til at downloade:

# sudo yum install mariadb-server mariadb -y

Når download og installation er afsluttet, skal du køre MariaDB:

# sudo systemctl start mariadb

Kør det sikre installationsscript, som fjerner usikre indstillinger:

# sudo mysql_secure_installation

Indtast root-adgangskoden, da du lige har oprettet databasen, er den tom som standard. Accepter derefter indstillingerne, skriv"Y" overalt. Indtast en ny adgangskode, bekræft den, og accepter igen "Y"-ændringerne.

MariaDB er nu installeret.

Installer PHP

For at installere PHP skal du indtaste kommandoen:

# sudo yum install php php-mysql -y

Genstart derefter Apache, så den kan køre PHP:

# sudo systemctl restart httpd.service

For at teste, hvordan PHP fungerer, skal du oprette en fil, f.eks. index.php, ved hjælp af denne kommando:

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

Åbn nu linket i din browser - http://ServerIP/index.php Du bør se en side med PHP-parametre.

Dernæst skal du installere pakken, der understøtter MariaDB i PHP:

# 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

Derefter genstarter du Apache:

# sudo systemctl restart httpd.service

Færdig. Du har installeret Apache, MySQL og PHP på den virtuelle server.

Tilslutning af yderligere repositorier

Du skal forbinde et ekstra repository for at installere alle komponenterne.

# sudo yum install epel-release

Oprettelse af en vexim-database

For at skabe en forbindelse mellem alle komponenterne i kæden er det nødvendigt at bruge en database. Opret forbindelse til MySQL-serveren:

# mysql -u root -p

Opret en database, du skal angive din egen adgangskode:

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

Installer Postfixadmin

Hvis ikke alle PHP-moduler er installeret, er det nødvendigt med en ekstra installation.

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

Download Postfixadmin, og installer det i mappen /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

Rediger konfigurationsfilen config .inc.php:

Installation af Dovecot

# yum -y install dovecot dovecot-mysql

Omdøb standardkonfigurationen, så vi kan vende tilbage til den, hvis det bliver nødvendigt:

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

Gem følgende poster i konfigurationsfilen 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

}

For at konfigurere databaseadgang skal du oprette en separat konfigurationsfil dovecot-mysql.conf

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

og sæt følgende indstillinger ind i den:

## 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

Ændr standardkonfigurationen, mens du beholder en sikkerhedskopi.

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

#                    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

Afinstallation af Postfix

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

Opsætning af Postfixadmin

Gå til http://server_ip/postfixadmin/setup.php og følg installationsvejledningen. Når du har oprettet superadmin, vil installationsprogrammet give dig en hashkode til adgangskoden:

Den skal udskiftes i filen config.inc.php (i roden af postfixadmin-biblioteket) i stedet for denne linje:

Derefter skal du logge ind under de oprettede data og tilføje de nødvendige domæner og postkasser.

Installation af Roundcube

# yum -y install roundcubemail

Efter installationen skal du tilføje konfigurationen til webserveren, så scriptet åbnes på http://server_ip/roundcubemail/.

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

Gem følgende data:

#

# 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 skal genstartes efter skrivning:

# systemctl restart httpd.service

For yderligere installation skal du oprette en database, til dette formål skal du oprette forbindelse til MySQL:

# mysql -u root -p

og udfør forespørgsler (angiv dine egne data):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

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

FLUSH PRIVILEGES;

quit

Dernæst skal du åbne installationsprogrammet http://server_ip/roundcubemail/installer og konfigurere.

Dette afslutter konfigurationen, gå til Roundcube http://server_ip/roundcubemail/, log ind under den tidligere oprettede (i Postfixadmin) boks, foretag indstillinger og brug.