Betaalmethoden Abuse

Mailserver op CentOS 7. Dovecot + Exim + Roundcube installeren

13.03.2023, 23:01

Het installeren van een mailserver op CentOS 7 kan op een aantal manieren, maar een van de meest voorkomende is het gebruik van een combinatie van Postfix en Dovecot.

Postfix is een afzendersoftware en is een van de populairste mailservers ter wereld. Dovecot daarentegen is een mailserver die wordt gebruikt om e-mail te ontvangen via het IMAP- of POP-protocol.

Wat is Exim?

Exim is een mail transfer agent (MTA) die vaak wordt gebruikt in Unix-achtige besturingssystemen. Exim is freeware gedistribueerd onder de voorwaarden van de GNU (General Public Licence) en is een veelzijdig en flexibel e-mailprogramma met uitgebreide functies voor het controleren van inkomende e-mail.

Wat is Dovecot?

Dovecot is een open source IMAP en POP3 mailserver voor Linux/UNIX-achtige systemen. Beveiliging is de hoeksteen van de focus van dit product op flexibiliteit en snelheid.

Wat is Roundcube ?

Roundcube is een webgebaseerde e-mailinterface die de mogelijkheid biedt om met je mailboxen te werken via IMAP en SMTP. De applicatie heeft krachtige functionaliteit en is qua mogelijkheden vergelijkbaar met desktop e-mailclients zoals Outlook Express of Mozilla Thunderbird.

Apache + MySQL + PHP installeren

Log in via SSH op je virtuele server.

Vervolgens moet je het systeem updaten, voer het commando in:

# sudo yum update -y

Na het updaten van het systeem verschijnt een bericht als dit.

Apache installeren

Om Apache op je virtuele server te installeren, voer je het volgende commando in:

# sudo yum install httpd -y

Start Apache na de installatie:

# sudo systemctl start httpd.service

Ga daarna naar - http://ServerIP/ en controleer of Apache goed werkt.

Als alles correct werkt, voer dan het commando in om Apache te autorunnen op de virtuele server:

# sudo systemctl enable httpd.service

MySQL (MariaDB) installeren

Gebruik het commando om te downloaden:

# sudo yum install mariadb-server mariadb -y

Nadat het downloaden en installeren is voltooid, moet u MariaDB uitvoeren:

# sudo systemctl start mariadb

Voer het beveiligde installatiescript uit, dat onveilige instellingen zal verwijderen:

# sudo mysql_secure_installation

Voer het root-wachtwoord in, aangezien u de database net hebt aangemaakt, is deze standaard leeg. Ga vervolgens akkoord met de instellingen, voer overal"Y" in. Voer een nieuw wachtwoord in, bevestig het en ga opnieuw akkoord met de"Y"-wijzigingen.

MariaDB is nu geïnstalleerd.

PHP installeren

Voer het commando in om PHP te installeren:

# sudo yum install php php-mysql -y

Herstart vervolgens Apache zodat het PHP kan uitvoeren:

# sudo systemctl restart httpd.service

Om te testen hoe PHP werkt, moet u een bestand maken, zoals index.php met dit commando:

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

Open nu de link in uw browser - http://ServerIP/index.php U zou een pagina met PHP-parameters moeten zien.

Vervolgens moet je het pakket installeren om MariaDB te ondersteunen in 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

Daarna herstart je Apache:

# sudo systemctl restart httpd.service

Klaar. Je hebt Apache, MySQL en PHP geïnstalleerd op de virtuele server.

Extra repositories verbinden

Je moet een extra repository aansluiten om alle componenten te installeren.

# sudo yum install epel-release

Een vexim-database aanmaken

Om een verbinding te maken tussen alle componenten van de keten is het nodig om één database te gebruiken. Maak verbinding met de MySQL server:

# mysql -u root -p

Maak een database aan, je moet je eigen wachtwoord opgeven:

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

Postfixadmin installeren

Als niet alle PHP-modules zijn geïnstalleerd, is een extra installatie nodig.

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

Download Postfixadmin en installeer het in de map /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

Bewerk het configuratiebestand config .inc.php:

Dovecot installeren

# yum -y install dovecot dovecot-mysql

Hernoem de standaardconfiguratie zodat we ernaar kunnen teruggrijpen indien nodig:

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

Sla de volgende items op in het configuratiebestand 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

}

Om database toegang te configureren, maak een apart config bestand dovecot-mysql.conf aan

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

en zet de volgende instellingen erin:

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

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

Pas de standaard configuratie aan en bewaar een reservekopie.

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

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

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

Postfixadmin instellen

Ga naar http://server_ip/postfixadmin/setup.php en volg de installatie-instructies. Na het aanmaken van de superadmin, zal de installer je een wachtwoord hash code geven:

Deze moet worden vervangen in het bestand config.inc.php (in de root van de postfixadmin directory) in plaats van deze regel:

Vervolgens moet je inloggen onder de aangemaakte gegevens, de nodige domeinen en mailboxen toevoegen.

Roundcube installatie

# yum -y install roundcubemail

Na de installatie moet je de config toevoegen aan de webserver zodat het script opent op http://server_ip/roundcubemail/.

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

Sla de volgende gegevens op:

#

# 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 moet opnieuw worden opgestart na het schrijven:

# systemctl restart httpd.service

Maak voor de verdere installatie een database aan, maak hiervoor verbinding met MySQL:

# mysql -u root -p

en voer query's uit (geef je eigen gegevens op):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

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

FLUSH PRIVILEGES;

quit

Vervolgens moet je het installatieprogramma http://server_ip/roundcubemail/installer openen en configureren.

Hiermee is de configuratie voltooid, ga naar Roundcube http://server_ip/roundcubemail/, log in onder de eerder aangemaakte (in Postfixadmin) box, maak instellingen en gebruik.