В этом руководстве я покажу вам, как установить и настроить почтовый сервер на 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
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. Вы также можете поделиться этим постом с друзьями в социальных сетях, кому эта статья может быть интересна или просто оставьте комментарий ниже. Спасибо.