Betalningsmetoder Abuse

Mailserver på CentOS 7. Installera Dovecot + Exim + Roundcube

  • Hem
  • Kunskapsbas
  • Mailserver på CentOS 7. Installera Dovecot + Exim + Roundcube
13.03.2023, 23:01

Att installera en e-postserver på CentOS 7 kan göras på flera olika sätt, men ett av de vanligaste är att använda en kombination av Postfix och Dovecot.

Postfix är en avsändarprogramvara och är en av de mest populära e-postservrarna i världen. Dovecot, å andra sidan, är en e-postserver som används för att ta emot e-post med IMAP- eller POP-protokoll.

Vad är Exim?

Exim är en postöverföringsagent (MTA) som vanligtvis används i Unix-liknande operativsystem. Exim är ett gratisprogram som distribueras enligt villkoren i GNU (General Public Licence) och är ett mångsidigt och flexibelt e-postverktyg med omfattande funktioner för kontroll av inkommande e-post.

Vad är Dovecot?

Dovecot är en IMAP- och POP3-postserver med öppen källkod för Linux/UNIX-liknande system. Säkerhet har varit hörnstenen i den här produktens fokus på flexibilitet och snabbhet.

Vad är Roundcube?

Roundcube är ett webbaserat e-postgränssnitt som ger möjlighet att arbeta med dina brevlådor med hjälp av IMAP och SMTP. Applikationen har kraftfull funktionalitet och kan jämföras med stationära e-postklienter som Outlook Express eller Mozilla Thunderbird.

Installera Apache + MySQL + PHP

Logga in via SSH på din virtuella server.

Därefter måste du uppdatera systemet, ange kommandot:

# sudo yum update -y

Efter uppdatering av systemet kommer ett meddelande som detta att visas.

Installera Apache

För att installera Apache på din virtuella server, ange kommandot:

# sudo yum install httpd -y

Efter installationen startar du Apache:

# sudo systemctl start httpd.service

Gå sedan till - http://ServerIP/ och kontrollera att Apache fungerar som det ska

Om allt fungerar som det ska skriver du in kommandot för att starta Apache automatiskt på den virtuella servern:

# sudo systemctl enable httpd.service

Installera MySQL (MariaDB)

För att ladda ner, använd kommandot:

# sudo yum install mariadb-server mariadb -y

När nedladdningen och installationen är klar måste du köra MariaDB:

# sudo systemctl start mariadb

Kör det säkra installationsskriptet, som tar bort osäkra inställningar:

# sudo mysql_secure_installation

Ange root-lösenordet, eftersom du just har skapat databasen är den tom som standard. Nästa samtycker till inställningarna, ange"Y" överallt. Ange ett nytt lösenord, bekräfta det och godkänn återigen ändringarna med"Y".

MariaDB är nu installerat.

Installera PHP

För att installera PHP, ange kommandot:

# sudo yum install php php-mysql -y

Starta sedan om Apache så att den kan köra PHP:

# sudo systemctl restart httpd.service

För att testa hur PHP fungerar måste du skapa en fil, till exempel index.php med det här kommandot:

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

Öppna nu länken i din webbläsare - http://ServerIP/index.php Du bör se en sida med PHP-parametrar.

Därefter behöver du installera paketet för att stödja 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

Efter det startar du om Apache:

# sudo systemctl restart httpd.service

Klart. Du har installerat Apache, MySQL och PHP på den virtuella servern.

Ansluta ytterligare repository

Du måste ansluta ytterligare en lagringsplats för att installera alla komponenter.

# sudo yum install epel-release

Skapa en vexim-databas

För att skapa en anslutning mellan alla komponenter i kedjan är det nödvändigt att använda en databas. Anslut till MySQL-servern:

# mysql -u root -p

Skapa en databas, du måste ange ditt eget lösenord:

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

Installera Postfixadmin

Om inte alla PHP-moduler är installerade krävs en ytterligare installation.

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

Ladda ner Postfixadmin och installera 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

Redigera konfigurationsfilen config .inc.php:

Installera Dovecot

# yum -y install dovecot dovecot-mysql

Byt namn på standardkonfigurationen så att vi kan återgå till den vid behov:

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

Spara följande 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

}

Om du vill konfigurera databasåtkomst skapar du en separat konfigurationsfil dovecot-mysql.conf

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

och lägg in följande inställningar 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'

Installation av Exim

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

Ändra standardkonfigurationen samtidigt som du sparar en säkerhetskopia.

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

#                    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

Avinstallera Postfix

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

Installera Postfixadmin

Gå till http://server_ip/postfixadmin/setup.php och följ installationsanvisningarna. När du har skapat superadmin kommer installationsprogrammet att ge dig en hashkod för lösenordet:

Den ska ersättas i filen config.inc.php (i roten av postfixadmin-katalogen) istället för den här raden:

Då måste du logga in under de skapade uppgifterna, lägga till nödvändiga domäner och brevlådor.

Installation av Roundcube

# yum -y install roundcubemail

Efter installationen måste du lägga till konfigurationen till webbservern så att skriptet öppnas på http://server_ip/roundcubemail/.

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

Spara följande 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 måste startas om efter skrivning:

# systemctl restart httpd.service

För vidare installation skapa en databas, för detta ändamål anslut till MySQL:

# mysql -u root -p

och kör frågor (ange dina egna data):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

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

FLUSH PRIVILEGES;

quit

Därefter måste du öppna installationsprogrammet http://server_ip/roundcubemail/installer och konfigurera.

Detta slutför konfigurationen, gå till Roundcube http://server_ip/roundcubemail/, logga in under den tidigare skapade (i Postfixadmin) rutan, gör inställningar och använd.