В этом руководстве мы продемонстрируем, как установить и настроить почтовый сервер в Ubuntu 24.04, поскольку крупные и средние компании могут значительно выиграть от наличия частного почтового сервера. Используя почтовый сервер, становится возможным внимательно отслеживать весь трафик электронной почты. Кроме того, гибкость настройки параметров позволяет создать четкую и организованную службу электронной почты. Хотя существуют различные варианты настройки почтового сервера Linux, мы специально сосредоточимся на Postfix и Dovecot.
Соглашения
# – данные команды должны выполняться с правами root либо непосредственно как пользователь root, либо с помощью команды sudo $ – данные команды должны выполняться как обычный пользователь
Имя хоста — это метка, используемая для идентификации компьютера и помогающая отличить ваши серверы от других. Вам потребуется создать запись DNS A для вашего имени хоста, потому что имя хоста сервера должно быть полным доменным именем. Например, мы будем использовать ubuntu.yourdomain.ru в качестве имени хоста сервера в этом руководстве. Впоследствии выполните следующую команду:
$ sudo hostnamectl set-имя хоста ubuntu.yourdomain.ru
Обязательно замените ubuntu.yourdomain.ru установите свой собственный поддомен, указывающий на IP-адрес вашего сервера
На этом шаге мы установим веб-сервер Apache, PHP с его расширениями и MariaDB в качестве сервера базы данных. Давайте выполним эту команду ниже.
$ sudo apt install apache2 git mariadb-сервер php-{xml, pear, imap, intl, common, json, curl, mbstring, mysql, gd, imagick, zip, opcache, sqlite3} libapache2-mod-php
На этом шаге мы создадим нового системного пользователя для хранения электронных писем на сервере. Давайте вызовем приведенную ниже команду.
$ 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
Далее давайте создадим базу данных. По умолчанию вы можете войти в MySQL shell без пароля.
$ 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
Установите почтовый сервер 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
Запустите эту команду, чтобы установить 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
Затем нам нужно прокомментировать !включите 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 { 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
На этом шаге мы загрузим 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 с поддержкой/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.ru/postfixadmin/setup.php
Дважды введите установочный пароль и нажмите на кнопку Сгенерировать хэш setup_password.
Вы увидите строку, содержащую установочный пароль, и вам нужно скопировать его в config.local.php, что-то вроде:
$CONF['setup_password'] = '$2y $10$YpUXiIQAP47pudUDz0n3leljN2ap5xBq/O1ntFmgAtU0WArEXy84y';
После добавления строки в файл config.local.php вы можете обновить страницу для входа в систему и создания суперадмина.
Прокрутите вниз, чтобы создать учетную запись администратора. Для создания администратора требуется созданный вами ранее установочный пароль. В поле администратора должен быть указан адрес электронной почты, он должен выглядеть следующим образом:
Теперь, когда создан суперадмин, вы можете использовать учетные данные для входа в систему http://192.168.53.5/postfixadmin/login.php и добавить домены, адрес электронной почты и т.д.
На этом этапе ваш сервер может отправлять электронные письма. Чтобы получать электронные письма, убедитесь, что запись 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';
Теперь вы можете перейти на свой http://YOUR_SERVER_IP_ADDRESS/roundcube и войти в систему, используя учетные данные, которые вы создали на предыдущем шаге. После входа в систему вы можете попробовать отправить электронное письмо.
PS. Если вам понравился этот пост, пожалуйста, поделитесь им со своими друзьями в социальных сетях или просто оставьте комментарий внизу в разделе комментариев. Спасибо.