Как установить почтовый сервер Postfix + Dovecot на Ubuntu 24.04

В этом руководстве мы покажем, как установить и настроить почтовый сервер на Ubuntu 24.04 Используя почтовый сервер, можно тщательно контролировать весь почтовый трафик. Кроме того, гибкость настроек позволяет создать четкую и организованную службу электронной почты. Хотя существуют различные варианты настройки почтового сервера Linux, мы остановимся на Postfix и Dovecot. Есть альтернатива уже готового почтового сервера из коробки – iRedMail

Шаг 1. Установите имя хоста

Имя хоста – это метка, используемая для идентификации машины, которая поможет вам отличить ваши серверы от других. Вам нужно будет создать A-запись DNS для имени хоста, потому что имя хоста сервера должно быть FQDN (Fully Qualified Domain Name). Например, в этом руководстве мы будем использовать ubuntu yourdomain.com в качестве имени хоста сервера. Затем выполните следующую команду:

sudo hostnamectl set-hostname ubuntu.yourdomain.com

Убедитесь, что вы заменили ubuntu.yourdomain.com своим собственным поддоменом, указывающим на IP-адрес вашего сервера

Шаг 2. Установка зависимостей

На этом шаге мы установим веб-сервер Apache, PHP с его расширениями и MariaDB в качестве сервера баз данных. Выполним следующую команду.

sudo apt install apache2 git mariadb-server php-{xml,pear,imap,intl,common,json,curl,mbstring,mysql,gd,imagick,zip,opcache,sqlite3} libapache2-mod-php

Шаг 3. Создание пользователя системы

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

sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
sudo mkdir -p /var/vmail
sudo chmod -R 770 /var/vmail
sudo chown -R vmail:mail /var/vmail

Шаг 4. Создайте базу данных

Далее давайте создадим базу данных. По умолчанию вы можете войти в оболочку MySQL без пароля.

sudo mysql

Войдя в систему, выполним следующие команды.

MariaDB [(none)]> CREATE DATABASE postfixadmin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'M0d1fyth15';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

Шаг 5. Установите Postfix

Установите почтовый сервер Postfix из стандартного репозитория Ubuntu с помощью этой команды:

sudo apt install postfix-mysql

Данные, связанные с почтовым сервером, будут храниться в базе данных MySQL. После завершения установки пакета postfix-mysql нам необходимо создать несколько конфигурационных файлов для связи Postfix с базой данных.

sudo mkdir -p /etc/postfix/sql

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

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = M0d1fyth15
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Теперь мы можем выполнить приведенные ниже команды, чтобы отредактировать файл postfix main.cf.

sudo postconf -e "myhostname = $(hostname -f)"
sudo postconf -e "mydestination = localhost"
sudo postconf -e "mynetworks = 127.0.0.0/8"
sudo postconf -e "inet_protocols = ipv4"
sudo postconf -e "inet_interfaces = all"
sudo postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem"
sudo postconf -e "smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key"
sudo postconf -e "smtpd_use_tls = yes"
sudo postconf -e "smtpd_tls_auth_only = yes"
sudo postconf -e "smtpd_sasl_type = dovecot"
sudo postconf -e "smtpd_sasl_path = private/auth"
sudo postconf -e "smtpd_sasl_auth_enable = yes"
sudo postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
sudo postconf -e "virtual_transport = lmtp:unix:private/lmtp"
sudo postconf -e "virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
sudo postconf -e "virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
sudo postconf -e "virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"

После этого мы можем продолжить редактирование файла /etc/postfix/master.cf:

sudo nano /etc/postfix/master.cf

Измените или добавьте следующие строки в файл.

smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n -   y       -       -       smtpd
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
 -o smtpd_tls_auth_only=yes
 -o local_header_rewrite_clients=static:all
 -o smtpd_reject_unlisted_recipient=no
    Instead of specifying complex smtpd_<xxx>_restrictions here,
    specify "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
    here, and specify mua_<xxx>_restrictions in main.cf (where
    "<xxx>" is "client", "helo", "sender", "relay", or "recipient").
 -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_relay_restrictions=
 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Шаг 6. Установите Dovecot

Выполните эту команду, чтобы установить Dovecot.

sudo apt install dovecot-mysql dovecot-imapd dovecot-pop3d

После установки Dovecot мы можем приступить к следующим шагам и отредактировать некоторые конфигурационные файлы.

Откройте файл /etc/dovecot/conf.d/10-auth.conf

sudo nano /etc/dovecot/conf.d/10-auth.conf

Затем найдите эту строку

auth_mechanisms = plain

и замените ее на эту:

auth_mechanisms = plain login

Затем нам нужно закомментировать !include auth-system.conf.ext и убрать строку !include auth-sql.conf.ext

Это должно выглядеть следующим образом:

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

Все еще в файле 10-auth.conf мы включаем auth-sql.conf.ext. Итак, давайте отредактируем файл, чтобы он выполнялся.

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Вставьте в файл следующие строки:

driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=M0d1fyth15
default_pass_scheme = BLF-CRYPT
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/var/vmail/%d/%u' as home, 'maildir:/var/vmail/%d/%u' as mail, 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

Строки выше содержат учетные данные базы данных. Убедитесь, что они совпадают с теми, которые вы создали на предыдущем шаге. Сохраните файл и выйдите

Далее откройте файл /etc/dovecot/conf.d/10-mail.conf и измените следующие значения:

sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/vmail/%d/%n
mail_uid = vmail
mail_gid = mail
mail_privileged_group = mail
first_valid_uid = 150
last_valid_uid = 150

Сохраните файл и выйдите. Теперь перейдем к редактированию других конфигурационных файлов dovecot.

sudo nano /etc/dovecot/conf.d/10-master.conf

В этом файле необходимо сделать несколько изменений.

Найдите раздел service lmtp и измените его на следующий:

service lmtp {
    unix_listener /var/spool/postfix/private/lmtp {
    mode = 0600
    user = postfix
    group = postfix
    }
}

Найдите раздел service auth и измените его на:

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

Измените раздел service auth-worker на следующий:

service auth-worker {
  user = vmail
}

Не забудьте сохранить файл и выйти. А теперь настало время исправить разрешения.

sudo chown -R vmail:dovecot /etc/dovecot
sudo chmod -R o-rwx /etc/dovecot

Шаг 7. Установите PostfixAdmin

На этом шаге мы загрузим PostfixAdmin с Github и сохраним его в каталоге /opt.

sudo cd /opt
sudo git clone https://github.com/postfixadmin/postfixadmin.git
sudo cd /opt/postfixadmin
sudo bash install.sh

Давайте исправим разрешение.

sudo chown -R www-data: /opt/postfixadmin

Добавьте /etc/apache2/conf-enabled/postfixadmin.conf

sudo nano /etc/apache2/conf-enabled/postfixadmin.conf

Вставьте эти строки в этот файл.

Alias /postfixadmin /opt/postfixadmin/public
<Directory "/opt/postfixadmin/public">
        AllowOverride All
        Options +FollowSymLinks
        Require all granted
</Directory>

Затем нам нужно перезагрузить Apache.

sudo systemctl reload apache2

Далее создадим файл config.local.php

sudo nano /opt/postfixadmin/config.local.php

и вставим следующие строки

<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'M0d1fyth15';
$CONF['database_name'] = 'postfixadmin';
$CONF['configured'] = true;
?>

Сохраните файл и выйдите из редактора.

Перейдите по адресу http://YOUR_IP_ADDRESS/postfixadmin/setup.php и создайте пароль для настройки. Если на вашем сервере уже есть веб-сайт, вы также можете получить доступ к postfixadmin по адресу http://yourdomain.com/postfixadmin/setup.php.

Дважды введите свой установочный пароль и нажмите на кнопку Generate setup_password hash.

Вы увидите строку, содержащую пароль настройки, и вам нужно скопировать ее в config.local.php, примерно так:

$CONF['setup_password'] = '$2y$10$YpUXiIQAP47pudUDz0n3leljN2ap5xBq/O1ntFmgAtU0WArEXy84y';

После добавления строки в файл config.local.php вы можете обновить страницу, чтобы войти в систему и создать суперадмина.

Прокрутите страницу вниз, чтобы создать учетную запись суперадмина. Для создания суперадмина требуется пароль настройки, который вы создали ранее. В поле «Администратор» нужно ввести адрес электронной почты, он должен выглядеть следующим образом:

Теперь, когда суперадмин создан, вы можете использовать его учетные данные для входа на сайт http://192.168.53.5/postfixadmin/login.php и добавления доменов, адресов электронной почты и т. д.

Шаг 8. Установите Webmail

На этом этапе ваш сервер может отправлять электронную почту. Чтобы получать электронные письма, убедитесь, что запись DNS MX вашего домена указывает на этот сервер. Вы можете использовать свой любимый почтовый клиент для отправки писем или воспользоваться веб-почтой. Давайте установим Roundcube.

sudo apt install roundcube

Далее отредактируем файл конфигурации rouncube по адресу /etc/apache2/conf-enabled/roundcube.conf

sudo nano /etc/apache2/conf-enabled/roundcube.conf

Откомментируйте эту строку

Alias /roundcube /var/lib/roundcube/public_html

И все должно выглядеть так:

Alias /roundcube /var/lib/roundcube/public_html

Сохраните файл, выйдите, затем перезапустите apache

sudo systemctl restart apache2

Следующим шагом будет редактирование другого файла конфигурации Rouncube, этот находится по адресу /etc/roundcube/config.inc.php

sudo nano /etc/roundcube/config.inc.php

Найдите эту строку:

$config['smtp_host'] = 'localhost:587';

и замените ее на эту:

$config['smtp_host'] = 'tls://%n:587';

Вы успешно установили сервер электронной почты на Ubuntu 24.04

Теперь вы можете перейти на сайт http://YOUR_SERVER_IP_ADDRESS/roundcube и войти в систему, используя учетные данные, созданные на предыдущем шаге. Войдя в систему, вы можете попробовать отправить письмо.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.rosehosting.com

Похожие статьи

Комментарии (0)