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

Предварительные условия

  • Сервер под управлением Ubuntu 24.04 или любой другой ОС Linux.
  • Привилегии пользователя: пользователь root или не root с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя

Шаг 1. Обновите систему

Мы предполагаем, что у вас установлена ​​новая версия Ubuntu 24.04. Нам необходимо обновить системные пакеты до последних доступных версий. Для этого выполните следующие команды:

1
$ sudo apt update -y && sudo apt upgrade -y

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

Имя хоста — это метка, используемая для идентификации машины и которая поможет вам отличить ваши серверы от других. Вам потребуется создать запись DNS A для вашего имени хоста, поскольку имя хоста сервера должно быть полным доменным именем (полное доменное имя). Например, в этом руководстве мы будем использовать mail.yourdomain.com в качестве имени хоста сервера. После этого выполните следующую команду:

1
$ sudo hostnamectl set-hostname mail.yourdomain.com

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

Шаг 3. Установите зависимости

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

1
$ 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

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

На этом этапе мы создадим нового системного пользователя для хранения электронных писем на сервере. Давайте вызовем команду ниже.

1
2
3
4
$ 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

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

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

1
$ sudo mysql

После входа в систему давайте выполним эти команды.

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

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

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

1
$ sudo apt install postfix-mysql

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

1
$ sudo mkdir -p /etc/postfix/sql

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

1
$ sudo vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
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'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
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'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
1
$ sudo vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
1
2
3
4
5
user = postfixadmin
password = Uy0rg2qVcf
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'

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ 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:

1
$ sudo vim /etc/postfix/master.cf

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

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

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

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

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

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

1
$ sudo vim /etc/dovecot/conf.d/10-auth.conf

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

1
auth_mechanisms = plain

и замените строку на эту:

1
auth_mechanisms = plain login

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

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

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

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

1
$ sudo vim /etc/dovecot/dovecot-sql.conf.ext

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

1
2
3
4
5
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=Uy0rg2qVcf
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 и измените следующие значения:

1
$ sudo vim /etc/dovecot/conf.d/10-mail.conf
1
2
3
4
5
6
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.

1
$ sudo vim /etc/dovecot/conf.d/10-master.conf

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

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

1
2
3
4
5
6
7
service lmtp {
    unix_listener /var/spool/postfix/private/lmtp {
    mode = 0600
    user = postfix
    group = postfix
    }
}

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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
}

Измените раздел службы auth-worker на следующее:

1
2
3
service auth-worker {
user = vmail
}

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

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

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

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

1
2
3
4
$ sudo cd /opt
$ sudo git clone https://github.com/postfixadmin/postfixadmin.git
$ sudo cd /opt/postfixadmin
$ sudo bash install.sh

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

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

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

1
$ sudo vim /etc/apache2/conf-enabled/postfixadmin.conf

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

1
2
3
4
5
6
7
Alias /postfixadmin /opt/postfixadmin/public

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

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

1
$ sudo systemctl reload apache2

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

1
$ sudo vim /opt/postfixadmin/config.local.php

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

1
2
3
4
5
6
7
8
9
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'Uy0rg2qVcf';
$CONF['database_name'] = 'postfixadmin';
$CONF['configured'] = true;

?>

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

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

Дважды введите пароль установки и нажмите кнопку «Создать хэш setup_password».

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

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

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

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

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

Шаг 9. Установите веб-почту

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

1
$ sudo apt install roundcube

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

1
$ sudo vim /etc/apache2/conf-enabled/roundcube.conf

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

1
# Alias /roundcube /var/lib/roundcube/public_html

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

1
Alias /roundcube /var/lib/roundcube/public_html

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

1
$ sudo systemctl restart apache2

Следующий шаг — отредактировать еще один файл конфигурации Rouncube, на этот раз /etc/roundcube/config.inc.php.

1
$ sudo vim /etc/roundcube/config.inc.php

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

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

и замените его на этот:

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

Завершение

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

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

Если вам понравился этот пост о том, как установить почтовый сервер на Ubuntu 24.04. Вы также можете поделиться этим постом с друзьями в социальных сетях, кому эта статья может быть интересна или просто оставьте комментарий ниже. Спасибо.