Наконец-то мы добрались до развертывания почтового сервера на Astra Linux.
postfix.admin | postfix | dovecot | roundcube |
Мы будем устанавливать связку из программного обеспечения с открытым исходным кодом: Postfix, Dovecot, базу данных MariaDB, ну и добавим приятный веб-интерфейс от RoundCube для пользователей, и все это на отечественной операционной системе Astra Linux.
Предварительные настройки
1. В терминале (Alt+t) переходим под rootsudo su
Установим необходимые для работы пакеты
sudo apt -y install gnupg wget apt-transport-https ca-certificates
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
Логинимся созданной учетной записью и пытаемся отправить письмо как минимум самому себе.
Если это произошло - поздравляем, почтовый сервер работает.
Продолжение следует...
В планах антиспам и антивирус