Metode de plată Abuse

Server de mail pe CentOS 7. Instalarea Dovecot + Exim + Roundcube

13.03.2023, 23:01

Instalarea unui server de e-mail pe CentOS 7 se poate face în mai multe moduri, dar unul dintre cele mai comune este utilizarea unei combinații de Postfix și Dovecot.

Postfix este un software de expediere și este unul dintre cele mai populare servere de e-mail din lume. Dovecot, pe de altă parte, este un server de e-mail care este utilizat pentru a primi e-mailuri utilizând protocolul IMAP sau POP.

Ce este Exim?

Exim este un agent de transfer de e-mail (MTA) utilizat în mod obișnuit în sistemele de operare de tip Unix. Exim este un freeware distribuit în conformitate cu termenii GNU (General Public Licence) și este un instrument de e-mail versatil și flexibil, cu funcții extinse de verificare a e-mailurilor primite.

Ce este Dovecot?

Dovecot este un server de e-mail IMAP și POP3 cu sursă deschisă pentru sistemele de tip Linux/UNIX. Securitatea a fost piatra de temelie a concentrării acestui produs pe flexibilitate și viteză.

Ce este Roundcube ?

Roundcube este o interfață de e-mail bazată pe web care oferă posibilitatea de a lucra cu cutiile poștale utilizând IMAP și SMTP. Aplicația are o funcționalitate puternică și este comparabilă în ceea ce privește capacitățile cu clienții de e-mail desktop precum Outlook Express sau Mozilla Thunderbird.

Instalarea Apache + MySQL + PHP

Conectați-vă prin SSH la serverul dvs. virtual.

Apoi trebuie să actualizați sistemul, introduceți comanda:

# sudo yum update -y

După actualizarea sistemului, va apărea un mesaj ca acesta.

Instalarea Apache

Pentru a instala Apache pe serverul dvs. virtual, introduceți comanda:

# sudo yum install httpd -y

După instalare, porniți Apache:

# sudo systemctl start httpd.service

După aceea, mergeți la - http://ServerIP/ și verificați dacă Apache funcționează corect

Dacă totul funcționează corect, introduceți comanda pentru a porni automat Apache pe serverul virtual:

# sudo systemctl enable httpd.service

Instalați MySQL (MariaDB)

Pentru descărcare, utilizați comanda:

# sudo yum install mariadb-server mariadb -y

După ce descărcarea și instalarea sunt finalizate, trebuie să rulați MariaDB:

# sudo systemctl start mariadb

Rulați scriptul de instalare securizată, care va elimina setările nesigure:

# sudo mysql_secure_installation

Introduceți parola rădăcină, deoarece tocmai ați creat baza de date, aceasta este goală în mod implicit. Apoi acceptați setările, introduceți"Y" peste tot. Introduceți o nouă parolă, confirmați-o și acceptați din nou modificările"Y".

MariaDB este acum instalată.

Instalarea PHP

Pentru a instala PHP, introduceți comanda:

# sudo yum install php php-mysql -y

Apoi, reporniți Apache astfel încât să poată rula PHP:

# sudo systemctl restart httpd.service

Pentru a testa modul în care funcționează PHP, introduceți trebuie să creați un fișier, cum ar fi index.php folosind această comandă:

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

Acum deschideți link-ul în browser - http://ServerIP/index.php Ar trebui să vedeți o pagină cu parametri PHP.

Apoi trebuie să instalați pachetul pentru a suporta MariaDB în 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

După aceea reporniți Apache:

# sudo systemctl restart httpd.service

Gata. Ați instalat Apache, MySQL și PHP pe serverul virtual.

Conectarea depozitelor suplimentare

Va trebui să conectați un depozit suplimentar pentru a instala toate componentele.

# sudo yum install epel-release

Crearea unei baze de date vexim

Pentru a crea o conexiune între toate componentele lanțului, este necesar să utilizați o bază de date. Conectați-vă la serverul MySQL:

# mysql -u root -p

Creați o bază de date, trebuie să specificați propria parolă:

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

Instalați Postfixadmin

În cazul în care nu sunt instalate toate modulele PHP, este necesară o instalare suplimentară.

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

Descărcați Postfixadmin și instalați-l în folderul /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

Modificați fișierul de configurare config .inc.php:

Instalarea Dovecot

# yum -y install dovecot dovecot-mysql

Redenumiți configurația implicită, astfel încât să putem reveni la aceasta dacă este necesar:

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

Salvați următoarele intrări în fișierul de configurare 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

}

Pentru a configura accesul la baza de date, creați un fișier de configurare separat dovecot-mysql.conf

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

și puneți următoarele setări în el:

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

Instalare Exim

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

Modificați configurația implicită păstrând în același timp o copie de rezervă.

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

#                    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

Dezinstalarea Postfix

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

Configurarea Postfixadmin

Mergeți la http://server_ip/postfixadmin/setup.php și urmați instrucțiunile de instalare. După crearea superadmin-ului, programul de instalare vă va oferi un cod hash de parolă:

Acesta trebuie înlocuit în fișierul config.inc.php (în rădăcina directorului postfixadmin) în locul acestei linii:

Apoi trebuie să vă conectați sub datele create, să adăugați domeniile și căsuțele poștale necesare.

Instalarea Roundcube

# yum -y install roundcubemail

După instalare, trebuie să adăugați configurația la serverul web, astfel încât scriptul să se deschidă la http://server_ip/roundcubemail/.

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

Salvați următoarele date:

#

# 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 trebuie repornit după scriere:

# systemctl restart httpd.service

Pentru instalarea ulterioară creați o bază de date, în acest scop conectați-vă la MySQL:

# mysql -u root -p

și executați interogări (specificați propriile date):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

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

FLUSH PRIVILEGES;

quit

În continuare trebuie să deschideți programul de instalare http://server_ip/roundcubemail/installer și să configurați.

Aceasta completează configurarea, mergeți la Roundcube http://server_ip/roundcubemail/, conectați-vă sub caseta creată anterior (în Postfixadmin), faceți setările și utilizați.