Установка почтового сервера Exim + Dovecot на CentOS 7

Введение

Почтовый сервер - это программное обеспечение, обеспечивающее отправку и получение электронной почты по протоколам SMTP, POP3 и IMAP. Под почтовым сервером чаще всего подразумевают агент пересылки, он же Mail Transfer Agent (MTA), он же SMTP-сервер. Однако, хоть MTA и является сердцем почтовой системы, для полноценного использования электронной почты одного его недостаточно, так как он обеспечивает пересылку сообщений только между серверами. Для получения электронной почты и доставки ее на почтовый ящик получателя используется агент доставки, он же Mail Delivery Agent (MDA), он же IMAP/POP-сервер. Пользователь же в свою очередь получает и отправляет электронную почту по средством почтового клиента, он же Mail User Agent (MUA).

Сегодня мы рассмотрим полную установку и настройку почтового сервера на операционной системе CentOS 7. В качестве Mail Transfer Agent будем использовать Exim, в качестве Mail Delivery Agent - Dovecot. В качестве клиентского ПО для отправки и получения почты будем использовать Roundcube. Для удобства создания почтовых ящиков и доменов будем использовать PostfixAdmin, для управления базами данных - phpMyAdmin. Так же помимо программ, обеспечивающих работу почтового сервера, необходимо установить и настроить стек LEMP для работы с веб-приложениями и базами данных. Если больше нравится LAMP, можно использовать и его. Большой разницы в этом нет.

Настройка DNS зоны

Для использования почтового сервера необходимо иметь настроенную DNS зону. Можно использовать свой собственный DNS-сервер или воспользоваться услугами DNS-хостинга. Чаще всего DNS-хостинг бесплатен у регистратора доменного имени. Для настройки зоны необходимо сделать две записи: A и MX.

Настройка доменной зоны

Настройка доменной зоны

Так же, для того что бы ваши письма не попадали в спам, не лишним будет создать PTR запись. Для этого необходимо обратится к провайдеру, с просьбой создать такую запись.

 

Настройка FirewallD

Перед тем как приступить к установке и настройке почтового сервера добавим разрешающие правила в брандмауэр:

$ firewall-cmd --zone=public --add-service=http
$ firewall-cmd --zone=public --add-service=pop3
$ firewall-cmd --zone=public --add-service=imap
$ firewall-cmd --zone=public--add-service=smtp
$ firewall-cmd --zone=public --add-service=http --permanent
$ firewall-cmd --zone=public --add-service=pop3 --permanent
$ firewall-cmd --zone=public --add-service=imap --permanent
$ firewall-cmd --zone=public --add-service=smtp --permanent

Установка и настройка NGINX

Как я уже писал выше, для работы с веб-частью и базами данных будем рассматривать стек LEMP. LEMP - это акроним, обозначающий:

Linux

Engine-X (NGINX)

MariaDB (MySQL)

PHP

NGINX - это очень популярный веб-сервер, изначально разрабатываемый для Unix-подобных операционных систем. Однако позже появилась версия и под Windows. Это быстрый и нетребовательный к ресурсам веб-сервер. В настоящее время текущей стабильной версией является версия 1.16, её и будем устанавливать. В репозиториях CentOS 7 содержится более старя версия, поэтому подключим репозиторий NGINX. Для этого сначала необходимо установить пакеты nano и yum-utils:

$ yum install yum-utils nano

Далее создаем файл репозитория NGINX:

$ nano /etc/yum.repos.d/nginx.repo

И заполняем его следующим содержимым и сохраняем:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

Теперь можно установить последнюю стабильную версию веб-сервера через пакетный менеджер:

$ yum install nginx
Установка NGINX

Установка NGINX

После окончания установки NGINX необходимо запустить и добавить в автозагруку:

$ systemctl start nginx
$ systemctl enable nginx

Для проверки работы в адресной строке браузера введите ip-адрес или доменное имя сервера.

Проверка работы NGINX

Проверка работы NGINX

Установка и настройка PHP

PHP - это язык программирования общего назначения, активно применяемый в веб-разработке. Для работы почтового сервера и веб-компонентов необходимо установить PHP-расширения. В репозиториях CentOS 7  доступен PHP 5.4. Это уже устаревшая версия, которую к тому же не поддерживает последняя версия Roundcube. Поэтому устанавливать мы будем PHP 7.2 из репозитория Remi. Для подключения Remi необходимо в начале подключить репозиторий EPEL. Делаем все необходимое и приступаем к установке:

$ yum install epel-release
$ yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
$ yum-config-manager --enable remi-php72
$ yum install php-fpm php-imap php-mbstring php-pdo php-mysql php-cli
Установка php

Установка php

После установки запускаем php-fpm и включаем его в автозагрузку:

$ systemctl start php-fpm
$ systemctl enable php-fpm

Теперь открываем для редактирования конфигурационный файл:

$ nano /etc/php-fpm.d/www.conf

И приводим его к следующему виду:

[www]
user = nginx
group = nginx
listen = /var/run/php-fpm/php7.2-fpm.sock
listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s;
pm.max_requests = 50
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache

Затем перезапускаем сервис:

$ systemctl restart php-fpm

И выставляем права на сокет:

$ chown -R nginx:nginx /var/run/php-fpm/php7.2-fpm.sock

Обратите внимание, что после перезапуска php-fpm может повторно понадобится установить права на сокет, в противном случае вы можете увидеть 502 ошибку.

Установка и настройка MariaDB

MariaDB - ответвление СУБД MySQL, распространяемое под лицензией GNU GPL. Для установки выполняем:

$ yum install mariadb mariadb-server
Установка MariaDB

Установка MariaDB

Затем запускаем и добавляем в автозагрузку:

$ systemctl start mariadb
$ systemctl enable mariadb

После этого запустим скрипт настройки безопасности:

$ mysql_secure_installation

Отвечаем утвердительно на все вопросы и задаем root пароль.

Настройка безопасности MariaDB

Настройка безопасности MariaDB

Установка и настройка phpMyAdmin

PHPMyAdmin - это веб-приложение с открытым исходным кодом, которое написано на языке PHP. Управление СУБД MySQL осуществляется через веб-интерфейс. Для начала изменим директорию веб-сервера по умолчанию. Для этого создаем новый каталог, который будет новой директорией:

$ mkdir /var/www

Затем перемещаем файлы начальной страницы NGINX:

$ mv /usr/share/nginx/html /var/www

Открываем для редактирования серверный блок по умолчанию:

$ nano /etc/nginx/conf.d/default.conf

И приводим его к виду:

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name ip-адрес сервера;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}location ~ /\.ht {
deny all;
}
}

Теперь веб-сервер готов к работе с PHP. Скачиваем phpMyAdmin:

$ wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

Распаковываем архив:

$ tar xf phpMyAdmin-4.9.0.1-all-languages.tar.gz

И перемещаем в каталог веб-сервера:

$ mv phpMyAdmin-4.9.0.1-all-languages /var/www/html/phpmyadmin

Устанавливаем права:

$ chown -R nginx:nginx /var/www/html
$ chown nginx:nginx /var/lib/php/session

Переходим в каталог с phpMyAdmin:

$ cd /var/www/html/phpmyadmin

Переименовываем конфигурационный файл:

$ mv config.sample.inc.php config.inc.php

И открываем его для редактирования:

$ nano config.inc.php

Заполняем строку $cfg['blowfish_secret'] 32-х значным паролем:

Задание blowfish_secret

Задание blowfish_secret

Сохраняем и пробуем зайти в phpMyAdmin.

Вход в phpMyAdmin

Вход в phpMyAdmin

Появилась страница входа, значит все в порядке, можно двигаться дальше. Создадим пользователя баз данных с правами администратора:

$ mysql -u root -p
> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'пароль';
> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
> FLUSH PRIVILEGES;

Теперь входим в phpMyAdmin  с только что созданной учетной записью. С большой долей вероятности в нижней части экрана после входа вы увидите следующие ошибки:

Ошибки phpMyAdmin

Ошибки phpMyAdmin

Первая говорит о том, что отсутствует системная база данных phpMyAdmin. Жмем Узнайте причину:

Создание базы phpmyadmin

Создание базы phpmyadmin

Затем нажимаем Создать. Первая ошибка исправлена, теперь исправляем вторую. Она говорит о том, что недоступен каталог tmp в папке с phpMyAdmin. Недоступен он потому, что его просто там нет. Создаем и задаем права:

$ mkdir /var/www/html/phpmyadmin/tmp
$ chown nginx:nginx /var/www/html/phpmyadmin/tmp/

Затем снова заходим в phpMyAdmin, ошибок быть не должно.

phpMyAdmin

phpMyAdmin

Установка и настройка Exim

Exim - это свободный Mail Transfer Agent для Unix-подобных операционных систем. Первый выпуск состоялся ещё в 1995 году. Перед тем как начать установку Exim, создадим базу данных с которой будет работать почтовый сервер. Проще всего это сделать через уже установленный phpMyAdmin. Переходим на вкладку Базы данных, вводим название базы, которую хотим создать и выбираем кодировку из списка utf8_general_ci.

Создание базы данных

Создание базы данных

База создана. Жмем Проверить привилегии.

Список баз данных

Список баз данных

Теперь создадим пользователя базы данных. Выбираем Добавить учетную запись пользователя.

Проверка привилегий базы данных

Проверка привилегий базы данных

Указываем имя пользователя и пароль.

Создание пользователя базы данных

Создание пользователя базы данных

Затем нажимаем Вперед и проверяем привилегии еще раз.

Привилегии к базе exim

Привилегии к базе exim

База с пользователям созданы, можно начинать установку Exim. Выполняем:

$ yum install exim exim-mysql cyrus-sasl
Установка Exim

Установка Exim

Затем запускаем и добавляем в автозагрузку:

$ systemctl start exim
$ systemctl enable exim

Теперь необходимо отредактировать конфигурационный файл Exim. Открываем его для редактирования:

$ nano /etc/exim/exim.conf

И заполняем по образцу:

######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################
 
primary_hostname = hostname
hide mysql_servers = localhost/exim/exim/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.1
auth_advertise_hosts = *
 
acl_not_smtp = acl_not_smtp  
acl_smtp_rcpt = acl_check_rcpt  
acl_smtp_data = acl_check_data  
 
qualify_domain = почтовый домен  
qualify_recipient = почтовый домен
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  
  
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  
          
        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_data:  
 
   
 
  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.1 
  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

После внесения изменений перезапускаем Exim.

$ systemctl restart exim

Установка и настройка Dovecot

Dovecot - это Mail Delivery Agent (POP/IMAP-сервер). Является гибким и безопасным программным продуктом. Первый выпуск состоялся в 2002 году.

Для начала создадим каталог для почтовых ящиков:

$ mkdir /var/vmail

И установим права на него:

$ chown exim:exim -R /var/vmail

Теперь установим Dovecot:

$ yum install dovecot dovecot-mysql
Установка Dovecot

Установка Dovecot

Запускаем и добавляем в автозагрузку:

$ systemctl start dovecot
$ systemctl enable dovecot

Теперь открываем для редактирования конфигурационный файл:

$ nano /etc/dovecot/dovecot.conf

И заполняем по образцу:

## Dovecot configuration file

base_dir = /var/run/dovecot/
auth_default_realm = почтовый домен
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 = почтовый адрес администратора
}

Далее создадим конфигурационный файл для работы с базой данных:

$ nano /etc/dovecot/dovecot-mysql.conf

Заполняем:

# Dovecot database configuration

driver = mysql
connect = host=localhost dbname=exim user=exim password=passwd
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'

Затем перезапускаем Dovecot:

$ systemctl restart dovecot

Установка и настройка PostfixAdmin

Для управления почтовыми доменами, ящиками и алиасами очень удобно использовать PostfixAdmin. PostfixAdmin - это веб-приложение для работы с почтовыми серверами. Оно очень упрощает работу, избавляя от создания почтовых ящиков в ручную. Для установки скачиваем последнюю версию продукта:

$ wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz

Распаковываем архив:

$ tar xf postfixadmin.tar.gz

Переименовываем и перемещаем каталог с PostfixAdmin в каталог веб-сервера:

$ mv postfixadmin-3.2 /var/www/html/postfixadmin

Создаем необходимый для работы каталог:

$ mkdir /var/www/html/postfixadmin/templates_c

Задаем разрешения:

$ chown -R nginx:nginx /var/www/html

Теперь необходимо отредактировать файл конфигурации:

$ nano /var/www/html/postfixadmin/config.inc.php

Находим указанные строки и заполняем их по образцу:

$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'exim';
$CONF['database_password'] = 'passwd';
$CONF['database_name'] = 'exim';
$CONF['default_language'] = 'ru';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";

Для запуска установки необходимо перейти по адресу http://домен или ip-адрес/postfixadmin/public/setup.php

Установка PostfixAdmin

Установка PostfixAdmin

Создаем установочный пароль и нажимаем: Generate password hash.

Создание хеша пароля

Создание хеша пароля

Создание администратора

Создание администратора

Хеш пароля необходимо прописать в конфигурационном файле.

$ nano /var/www/html/postfixadmin/config.inc.php

И вставляем в строку setup password.

Вставка хеша пароля

Вставка хеша пароля

Далее вводим только созданный пароль и создаем учетную запись почтового администратора.

Создание почтового администратора

Создание почтового администратора

Администратор был добавлен

Администратор был добавлен

Теперь по пути: http://домен или ip-адрес/postfixadmin/public можно переходить в сам PostfixAdmin. Для того, что бы при заходе в PostfixAdmin не надо было постоянно прописывать public, можно настроить редирект в файле index.php, который расположен в папке с PostfixAdmin.  Открываем его для редактирования:

$ nano /var/www/html/postfixadmin/index.php

И заполняем следующим содержимым:

<html>
<meta http-equiv="refresh" content="0; url=/postfixadmin/public/" />
</html>

Теперь в PostfixAdmin можно заходить просто прописав postfixadmin после имени домена: http://домен или ip-адрес/postfixadmin.

Вход в PostfixAdmin

Вход в PostfixAdmin

PostfixAdmin

PostfixAdmin

Создадим почтовый домен.

Создание домена

Создание домена

И почтовый ящик.

Создание почтового ящика

Создание почтового ящика

Установка и настройка Roundcube

Roundcube - это почтовый клиент с веб-интерфейсом. По своим возможностям не уступает популярным почтовым клиентам, таким как Thunderbird и Outlook. Для установки качаем актуальную версию программы:

$ wget https://github.com/roundcube/roundcubemail/releases/download/1.3.9/roundcubemail-1.3.9-complete.tar.gz

Распаковываем архив:

$ tar xf roundcubemail-1.3.9-complete.tar.gz

Перемещаем в каталог веб-сервера и переименовываем:

$ mv roundcubemail-1.3.9 /var/www/html/mail

Задаем права:

$ chown -R nginx:nginx /var/www/html

И запускаем  установку, перейдя по адресу: http://домен или ip-адрес/mail/installer.

Запуск установки Roundcube

Запуск установки Roundcube

Если не хватает каких либо компонентов для продолжения установки доставляем их:

$ yum install php-dom php-xml

Перезапускаем php-fpm:

$ systemctl restart php-fpm

И выставляем права на php сокет:

$ chown -R nginx:nginx /var/run/php-fpm/php7.2-fpm.sock

Перезагружаем страницу.

Исправление ошибок при установке Roundcube

Исправление ошибок при установке Roundcube

Теперь ошибок нет, можно продолжать. Создаем базу данных и пользователя базы данных для Roundcube через phpMyAdmin.

Создание базы данных Roundcube

Создание базы данных Roundcube

Создание пользователя базы данных Roundcube.png

Создание пользователя базы данных Roundcube

Указываем данные базы в установщике Roundcube.

Настройка базы данных Roundcube

Настройка базы данных Roundcube

Прокручиваем до низу и нажимаем на создание файла конфигурации. После того как файл создался жмем continue.

Настройка клиента Roundcube

Настройка клиента Roundcube

Завершение установки Roundcube

Завершение установки Roundcube

На этом установка Roundcube завершена. Войти в клиент можно по адресу: http://домен или ip-адрес/mail.

Тестирование почтового сервера

Установка и настройка почтового сервера завершены, можно приступать к тестированию. Для теста создадим еще один почтовый ящик с именем user2. На user зайдем через Roundcube, а на user2 через локальный почтовый клиент. В качестве локального клиента я буду использовать Claws Mail. Отправляем письмо с user на user2.

Отправка письма с user на user2

Отправка письма с user на user2

Проверяем почту на на user2. Письмо получено.

Получение письма на user2

Получение письма на user2

Теперь отправляем с user2 на user.

Отправка письма с user2 на user

Отправка письма с user2 на user

Переходим обратно в Roundcube и проверяем.

Получение письма на user

Получение письма на user

Все в порядке, почта работает исправно.

Защита SSL сертификатом

Для обеспечения защиты пересылаемой информации от перехвата можно использовать SSL-сертификат. Это не обязательный пункт настройки, сервер уже сейчас полностью настроен и готов к работе. Однако лишнем не будет точно. Сертификат можно приобрести за деньги или же получить бесплатный. Сейчас мы будем рассматривать установку бесплатного сертификата от Let’s Encrypt. Проще всего это сделать при помощи утилиты certbot. Выполняем установку:

$ yum install certbot-nginx
Установка certbot-nginx

Установка certbot-nginx

И получаем сертификат:

$ certbot --nginx -d домен.ru

В процессе нужно будет указать адрес электронной почты. Так же система спросит необходимо ли делать редирект с HTTP на HTTPS или нет. Отвечаем как вам необходимо.

Получение SSL сертификата

Получение SSL сертификата

Настройка редиректа

Настройка редиректа

По завершении на экран будет выведено расположение сертификата и файла закрытого ключа.

Сертификат получен

Сертификат получен

Теперь при заходе в веб-интерфейсы по доменному имени, на которое был выдан сертификат, подключение будет защищено. Проверяем.

HTTPS соединение с phpMyAdmin

HTTPS соединение с phpMyAdmin

HTTPS соединение с Rouncube

HTTPS соединение с Rouncube

HTTPS соединение с PostfixAdmin

HTTPS соединение с PostfixAdmin

Нажав на сертификат можно посмотреть его свойства. Сертификаты от Let’s Encrypt действительны 3 месяца. Certbot заблаговременно перевыпустит сертификат в автоматическом режиме, не дожидаясь окончания его срока действия.

Свойства SSL сертификата

Свойства SSL сертификата

Теперь нам необходимо настроить Exim и Dovecot на TLS/SSL соединение. Для это необходимо в файлах конфигураций добавить сведения о сертификате. Создадим каталог в который разместим сертификаты:

$ mkdir /etc/exim/ssl

Скопируем туда данные сертификата:

$ cp /etc/letsencrypt/live/домен.ru/fullchain.pem /etc/exim/ssl/
$ cp /etc/letsencrypt/live/домен.ru/privkey.pem /etc/exim/ssl/

И установим права:

$ chown -R exim:exim /etc/exim/ssl/

Обратите внимание, что certboot будет обновлять сертификаты только по стандартному пути, через 3 месяца сертификаты в папке /etc/exim/ssl/ станут неактуальными. Для того что бы этого не произошло процедуру копирования сертификатов в эту папку нужно будет повторить.

Теперь откроем для редактирования файл конфигурации Exim:

$ nano /etc/exim/exim.conf

И вставим в начало файла информации о сертификате:

# TLS/SSL
tls_advertise_hosts = *
tls_certificate = /etc/exim/ssl/fullchain.pem
tls_privatekey = /etc/exim/ssl/privkey.pem
daemon_smtp_ports = 25 : 465 : 587
tls_on_connect_ports = 465

Далее проделаем тоже самое, только для Dovecot:

$ nano /etc/dovecot/dovecot.conf

И вставляем:

ssl = yes
ssl_protocols = !SSLv3
ssl_cert = </etc/exim/ssl/fullchain.pem
ssl_key = </etc/exim/ssl//privkey.pem

Открываем порты по которым будет использоваться подключение:

$ firewall-cmd --zone=public --add-port=465/tcp
$ firewall-cmd --zone=public --add-port=993/tcp
$ firewall-cmd --zone=public --permanent --add-port=465/tcp
$ firewall-cmd --zone=public --permanent --add-port=993/tcp

Теперь необходимо настроить Roundcube на безопасное соединение. Переходим: http://домен или ip-адрес/mail/installer. Скорее всего увидите сообщение, о том что нужно включить установку в файле конфигурации.

Повторный запуск установки Roundcube

Повторный запуск установки Roundcube

Открываем для редактирования:

$ nano /var/www/html/mail/config/config.inc.php

И вставляем в конец файла строку:

$config['enable_installer'] = true;

Снова переходим: http://домен или ip-адрес/mail/installer и меняем имя хоста и порт как на скриншоте:

Настройка IMAP ssl в Rondcube

Настройка IMAP ssl в Rondcube

Настройка SMTP ssl в Roundcube

Настройка SMTP ssl в Roundcube

Затем внизу страницы жмем update config. После завершения настройки Roundcube для обеспечения безопасности папку Installer рекомендуется удалить или переименовать. Так же лучше удалить строку $config['enable_installer'] = true; из файла конфигурации.

Обновление конфигурации Roundcube

Обновление конфигурации Roundcube

Если используете локальный почтовый клиент, в нем тоже меняем порты:

Настройка почтового клиента

Настройка почтового клиента

Все, теперь передача электронной почты защищена SSL сертификатом.

Заключение

На этом установка и настройка почтового сервера завершены. Сервер полностью готов к работе и защищен SSL сертификатом. Почту можно получать и отправлять как через веб-интерфейс Roundcube, так и через любой почтовый клиент. Обратите внимание, что Exim и Dovecot достаточно гибкие программы и имеют большое количество настроек. Приведенное в настоящей статье содержание конфигурационных файлов не является единственно правильным. Это всего лишь пример, позволяющий начать использование сервера электронной почты. Окончательные настройки определяются исходя из тех или иных задач и могут отличаться от приведенного примера. Если остались вопросы, пишите в комментариях.

Читайте также:

Оставить комментарий