На кофе

Поиск

Поиск Яндекс

Вход

Почтовый сервер на Astra Linux

Поделиться статьей

Наконец-то мы добрались до развертывания почтового сервера на Astra Linux

postfix.admin postfix dovecot roundcube

 

Мы будем устанавливать связку из программного обеспечения с открытым исходным кодом:  Postfix, Dovecot, базу данных MariaDB, ну и добавим приятный веб-интерфейс от RoundCube для пользователей, и все это на отечественной операционной системе Astra Linux.

Предварительные настройки

1. В терминале (Alt+t) переходим под root
sudo su

Установим необходимые для работы пакеты

sudo apt -y install gnupg wget apt-transport-https ca-certificates
2. Добавим репозиторий Astra Linux 1.7:
cat << EOF > /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free
deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 astra-ce
EOF

Подразумеваем, что изначально ОС Astra Linux обновлена, если нет, то выполняем

apt update

astra-update -r -A

После обновления перегружаемся по требованию

sudo reboot

После обновления возможно криво переустановится графическое окружение fly, это фича Astra Linux

Переустановим на всякий случай:

sudo apt install --reinstall fly-all-main -fy

Удалим устаревшие и неиспользуемые пакеты:

sudo apt autoremove -fy

7. Вначале установим имя хоста системы на доменное имя (FQDN), которое мы будем использовать
hostnamectl set-hostname mail.entnet.ru

8. В файл hosts добавим имя хоста:

Определим ip адрес:

ifconfig | grep "inet" | grep "broadcast" |  awk '{print $2}'

Отредактируем /etc/hosts:

mcedit /etc/hosts

Установим имя нашего сервера в файле конфигурации hosts:
192.168.1.XXX   mail.entnet.ru    mail

где 192.168.1.XXX — IP-адрес нашего сервера; mail — имя сервера; entnet.ru — наш домен, если используется.

9. Рестартанем графическую сессию:
sudo systemctl restart fly-dm

10. Ищем подходящее ядро и устанавливаем:

apt search linux-5* | grep "linux-5"

В нашем случае доступна мажорная версия 5.15, установим ее:

sudo apt install linux-5.15 -fy

Выставим ядро 5.15-generic в grub, используемое по умолчанию при загрузке на 5.15, и перегружаемся.

Перегружаемся с ядром 5.15:

sudo reeboot

12. В качестве службы времени установим пакет chrony:

apt install chrony -fy

В зависимости от своего часового пояса, выставляем свою временную зону (командой timedatectl list-timezones можно узнать, как правильно должна будет указана именно ваша)

timedatectl set-timezone Europe/Moscow

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

systemctl enable chrony


Установка и настройка веб-сервера Nginx

12. Ну вот, собственно и приступаем к развертыванию: запускаем установку пакетов веб-сервера, который основан на связке nginx, php и MariaDB. Также удаляем все, что связано с Apache:

sudo su

sudo apt install dialog apt-transport-https gnupg2 nginx-full curl php php-fpm -fy

sudo apt purge apache* -fy

По завершении установки настроим конфигурационный файл нашего основного сайта путем правки файла  /etc/nginx/sites-enabled/default:

mcedit /etc/nginx/sites-enabled/default

В этом файле в секции server указываем приоритетным индексным файлом index.php

        index index.php ...

а также в этом же файле добавляем настройку для обработки запросов php (Внимательно смотрим на версию php-fpm)

        location ~ \.php$ {
                    set $root_path /var/www/html;
                    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
                    include fastcgi_params;
                    fastcgi_param DOCUMENT_ROOT $root_path;
                }

Ну и, после завершения настроек, перезапускаем демоны и службу:

systemctl restart nginx php7.3-fpm

Ну и также добавим их в автозапуск:

systemctl enable nginx

systemctl enable php7.3-fpm

 Проверить работоспособность веб-сервера мы можем командой, либо просто открыть в браузере ссылку или указать в адресной строке localhost

xdg-open http://$HOSTNAME

Для проверки работающей в данный момент версии PHP, создаем файл в директории сайта со следующим содержимым:

echo '<?php phpinfo(); ?>' > /var/www/html/info.php

Чтобы проверить версию, мы также можем в адресной строке написать localhost/info.php , если все сделано правильно, Вы увидите аналогичную картину:


13. Устанавливаем и настраиваем базу данных MariaDB

apt install mariadb-server -fy

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

systemctl enable mariadb

Задаем пароль для пользователя sql root (Категорически рекомендую записать) :

mysqladmin -u root password


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

14. Устанавливаем и настраиваем postfix

Установим дополнительные необходимые для работы postfix пакеты:

apt install php-mysql php-mbstring php-imap uw-mailutils astrase-fix-maildir -fy

Применим 

systemctl restart php7.3-fpm

Переходим к скачиванию и распаковке архива postfixadmin - инструмента администрирования почтовых ящиков

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

Создадим в основном каталоге сайтов папку для этого инструмента, и распакуем в него скачанный архив:

mkdir /var/www/html/postfixadmin

tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1

Для корректной установки,создадим папку с шаблонами внутри каталога postfixadmin

mkdir /var/www/html/postfixadmin/templates_c

ну и отдадим владение этой папкой пользователю www-data

chown -R www-data:www-data /var/www/html/postfixadmin

Теперь нам необходимо создать базу данных, и, соответственно, пользователя к ней. Переходим в базу данных, используя созданный и записанный ранее пароль пользователя root базы данных: 

mysql -u root -p

Внутри же базы данных:

mysql> CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'ПАРОЛЬ';
mysql> FLUSH PRIVILEGES;
mysql> quit;

После выхода из настроек базы данных, сконфигурируем postfixadmin:

mcedit /var/www/html/postfixadmin/config.local.php

Добавляем в этот вновь созданный файл следующие настройки:

<?php

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'ПАРОЛЬ';
$CONF['emailcheck_resolve_domain'] = 'NO';

?>

Перезапустим все службы для применения настройки:

systemctl restart mysql nginx php7.3-fpm


Настройки в административной панели PostfixAdmin

В браузере вводим адрес http://localhost/postfixadmin/public/setup.php и приступим к установке PostfixAdmin из фронтенда:

Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash:

Затем  сформированный хэш также добавляем в файл конфигурации /var/www/html/postfixadmin/config.local.php:

$CONF['setup_password'] = '$2y$...........';

Снова применим настройки перезагрузив службы

systemctl restart mysql nginx php7.3-fpm

Перегрузим страницу http://localhost/postfixadmin/public/setup.php , вводим в ней пароль, который мы указывали при формировании хэша.

По завершении установки вы сможете увидеть форму для добавления самого главного администратора - суперпользователя (в качестве логина необходимо указать адрес e-mail!):

Система сообщит нам, что администратор создан и теперь Вы можете зайти в админку, нажав на ссылку login to Postfixadmin или просто  запустив

xdg-open http://$HOSTNAME/postfixadmin/public/login.php


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

15. Установка, собственно postfix

apt install postfix postfix-mysql -fy

В процессе установки появится окно с выбором, оставляем Интернет-сайт

В следующем окне выйдет запрос имени сервера, пропишем нашу FQDN запись:

Для работы с каталогом виртуальных ящиков нам будет необходима системная ученая запись. Создадим ее:

Сначала добавим группу 

groupadd -g 1022 vmail

Затем добавим пользователя, заведомо указав ему домашний каталог /var/mail

useradd -d /var/mail -g 1022 -u 1022 vmail -m

Ну и назначим его владельцем:

chown vmail:vmail /var/mail


Создадим папку для ключей ssl

mkdir -p /etc/ssl/mail

В нее мы положим уже имеющиеся (если есть) либо выпустим бесплатные сертификаты, как в статье Устанавливаем и автоматически продлеваем сертификаты ssl при помощи Lets Encrypt и Certbot на Astra Linux


Приступаем к конфигурированию нашего почтового сервера! Откроем основной файл на редактирование:

mcedit /etc/postfix/main.cf

В нем мы меняем следующее:

mydestination = localhost.$mydomain, localhost, localhost.localdomain
...
inet_protocols = ipv4
...
smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key

То есть указываем путь, протокол, путь к открытому и закрытому ключу.

Если у Вас имеется корневой сертификат например в формате crl  то его можно преобразовать командой, естественно предварительно переместившись в каталог с этим файлом:

openssl x509 -in entnet.crt -out entnet.pem -outform PEM

Также, в конец основного конфигурационного файла /etc/postfix/main.cf допишем

virtual_mailbox_base = /var/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains = proxy:mysql:/etc/postfix/mysql_virtual_alias_domains.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1022
virtual_uid_maps = static:1022
virtual_gid_maps = static:1022
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes

Также нам необходимо настроить конфиг с настройками обращений к базе с алиасами для почтовых ящиков

mcedit /etc/postfix/mysql_virtual_alias_maps.cf

В нем добавляем

user = postfix
password = ПАРОЛЬ
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Для доменов также необходимо провести аналогичную процедуру:

mcedit /etc/postfix/mysql_virtual_alias_domains.cf

В нем добавляем

user = postfix
password = ПАРОЛЬ
hosts = localhost
dbname = postfix
query = SELECT alias.goto FROM alias,domain WHERE alias.address='%s' AND alias.domain='%d' AND alias.domain=domain.domain AND alias.active=1 AND domain.backupmx=0 AND domain.active=1

Для того, чтобы получать данные по витуальным именам, нам нужно поправить

mcedit /etc/postfix/mysql_virtual_domains_maps.cf

ну и, соответственно, присваиваем следующие инструкции:

user = postfix
password = ПАРОЛЬ
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'

Ну и, наконец, правим файл с почтовыми ящиками:

mcedit /etc/postfix/mysql_virtual_mailbox_maps.cf

Содержимое:

user = postfix
password = ПАРОЛЬ
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Ну и в конце основного файла конфигурации допишем:

mcedit /etc/postfix/master.cf

добавим в самом низу:

submission   inet  n  -  n  -  -  smtpd
  -o smtpd_tls_security_level=may
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname

smtps   inet  n  -  n  -  -  smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

dovecot   unix  -  n  n  -  -  pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

По завершении всех настроек, добавляем также в автозапуск службу postfix и перезапускаем ее.

systemctl enable postfix

systemctl restart postfix


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

Приступаем к настройке Dovecot

Для начала необходимо установить компоненты для работы с базой данных

apt install dovecot-imapd dovecot-pop3d dovecot-mysql -fy

Настроим способ хранения сообщений

mcedit /etc/dovecot/conf.d/10-mail.conf

В этом файле укажем механизм формирования каталогов:

mail_location = maildir:/var/mail/%d/%u/

Настроим аутентификацию:

mcedit /etc/dovecot/conf.d/10-master.conf

В данном файле укажем

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
}

и добавим в него

service stats {
    unix_listener stats-reader {
        user = vmail
        group = vmail
        mode = 0660
    }
    unix_listener stats-writer {
        user = vmail
        group = vmail
        mode = 0660
    }
}

Настроим аутентификацию в Dovecot

mcedit /etc/dovecot/conf.d/10-auth.conf

Закомментируем/Раскомментируем следующие строки

#!include auth-system.conf.ext
!include auth-sql.conf.ext

Ну и настроим шифрование ssl

mcedit /etc/dovecot/conf.d/10-ssl.conf

в данном файле установим требование и пропишем пути к существующей паре открытых/закрытых ключей:

ssl = required
...
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key

Кроме того, нам удобнее, когда каталоги пользователей создаются автоматически при первом подключении пользователя к ящику. Правим 

mcedit /etc/dovecot/conf.d/15-lda.conf

Прописываем следующую строку:

lda_mailbox_autocreate = yes

Настроим, наконец, подкючение Dovecot к базе данных:

mcedit /etc/dovecot/conf.d/auth-sql.conf.ext

В данном файле укажем следующие параметры

passdb {
  …
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  …
  args = /etc/dovecot/dovecot-sql.conf.ext
}

Кроме того, настроим работу с mysql

mcedit /etc/dovecot/dovecot-sql.conf.ext

добавим после всего 

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=ПАРОЛЬ
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1022 AS uid, 1022 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/var/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1022 AS uid, 1022 AS gid FROM mailbox WHERE username = '%u'

Ну и настроим интерфейс прослушивания dovecot

mcedit /etc/dovecot/dovecot.conf

Если не найдем строку с listen = *, то конечно добавим

listen = *

Добавим в автозагрузку наш Dovecot, ну и перезапустим все сервисы для кучи:

systemctl enable dovecot

systemctl restart postfix dovecot mysql nginx php7.3-fpm


Настройка почтового ящика

Под обычным пользователем перейдем в админ-анель во фронтенд postfixadmin

xdg-open http://$HOSTNAME/postfixadmin/public/

Добавим Новый домен

Параметры

Далее в Обзор > Создать ящик

Задаем параметры почтового ящика:

Жмем Создать ящик и в принципе можно пытаться настроить почтовый клиент.

Параметры для подключения:

  • Сервер: имя сервера или его IP-адрес (не желательно, так как сертификат выдается по доменному имени).
  • IMAP: 143 STARTTLS или 993 SSL/TLS
  • POP3: 110 STARTTLS или 995 SSL/TLS
  • SMTP: 25 STARTTLS или 465 SSL/TLS или 587 STARTTLS

Устанавливаем и настраиваем веб-фронтенд клиента RoundCube

Для начала, создадим базу данных для RoundCube для учетной записи roundcube с паролем ПАРОЛЬРАУНДКУБ

mysql -uroot -p

mysql> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> GRANT ALL ON roundcubemail.* TO 'roundcube'@'localhost' IDENTIFIED BY 'ПАРОЛЬРАУНДКУБ';
mysql> FLUSH PRIVILEGES;
mysql> quit;

На официальной странице скачивания RoundCube по адресу https://roundcube.net/download/ выбираем LTS (с длительной поддержкой) версию, и скачиваем ее, скопировав ссылку и вставив в следующую команду.

На 04.02.20024 было так:

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

Создадим папку (наименование на ваше усмотрение), куда мы распакуем содержимое сайта:

mkdir /var/www/html/mail

ну и распакуем в нее содержимое архива

tar -C /var/www/html/mail -xvf roundcubemail-*.tar.gz --strip-components 1

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

cp /var/www/html/mail/config/config.inc.php.sample /var/www/html/mail/config/config.inc.php

mcedit /var/www/html/mail/config/config.inc.php

Правим содержимое, внимательно с паролем

$config['db_dsnw'] = 'mysql://roundcube:ПАРОЛЬРАУНДКУБ@localhost/roundcubemail';
$config['enable_installer'] = true;

Ну и также допишем настройки папок

$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;

А также заведомо поправим:

$config['smtp_pass'] = '%p';  меняем на

$config['smtp_pass'] = '';

Ну и назначим владельца каталога также системного пользователя www-data:

chown -R www-data:www-data /var/www/html/mail

После этого нам необходимо загрузить данные в созданную базу данных:

mysql -uroot -p roundcubemail < /var/www/html/mail/SQL/mysql.initial.sql

Кроме того, нам необходимо установить дополнительные плагины, необходимые  для корректной работы RoundCube

apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl -fy

Также нам придется донастроить параметры php НАШЕЙ ВЕРСИИ

mcedit /etc/php/7.3/fpm/php.ini

Выставляем ограничения, какие пожелаете, тут мы выставляем временную зону и ограничения по 30 Мб на размер письма и вложения:

date.timezone = "Europe/Moscow"
...
post_max_size = 30M
...
upload_max_filesize = 30M

Также допилим Nginx

mcedit /etc/nginx/nginx.conf

Добавим в рездел http

http {
    ...
    client_max_body_size 30M;
    ...

#TODO Nginx ssl

Ну и перезапустим все службы нашего почтового сервера:

systemctl restart nginx mariadb php7.3-fpm postfix dovecot

В файле конфигурации RoundCube отключаем режим установки:

mcedit /var/www/html/mail/config/config.inc.php

Меняем статус на false

$config['enable_installer'] = false;

и удаляем установочную папку

rm -rf /var/www/html/mail/installer

 

Теперь мы можем пройти по адресу 

xdg-open http://$HOSTNAME/mail

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

Если это произошло - поздравляем, почтовый сервер работает.

 

Продолжение следует...

 

В планах антиспам и антивирус