Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
- Сервер с готовой конфигурацией. Например, можно заказать его на Simple-Server.
- Учетная запись с правами
sudo.
- Учетная запись с правами
В этом руководстве мы построим Mail Server на основе Ubuntu 20.04. Для хранения данных подключим базу данных MySQL.
Создание отдельного пользователя
Запустите терминал Ubuntu и создайте нового пользователя:
Выдайте новому пользователю права sudo:
Создаем учётную запись, от которой будут выполняться задачи чтения и записи почтовых ящиков в каталоге на сервере. Мы создадим пользователя vmail с одноимённой группой и UID и GID 1024:
groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail
mkdir /home/mail
chown vmail:vmail /home/mailМы будем хранить всю почту пользователей в каталоге /home/mail.
MySQL нужен для решения двух задач. Первая — хранение данных пользователей, вторая — хранение конфигурации Roundcube.
Установите MySQL, PHP и Apache:
sudo apt install mysql-server mysql-client apache2 libapache2-mod-php php php-imap php-mysql php-mbstringЗапустите и добавьте в автозагрузку базу данных и веб-сервер:
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl start mysql
sudo systemctl enable mysqlЗадайте пароль для учётной записи root, а также создайте БД для Postfix и Roundcube:
sudo mysql -u root -p
alter user root@localhost identified by ‘password’;
create database postfix;
use postfix;
create user postfix@localhost identified by 'password';
grant all privileges on *.* to postfix@localhost;
create database roundcube;
use roundcube;
create user roundcube@localhost identified by 'password';
grant all privileges on *.* to roundcube@localhost;
flush privileges;
exit;PostfixAdmin — интерфейс администрирования, который нужен для управления почтовым сервером.
Загрузите PostfixAdmin и перенесите его исполняемые файлы в папку usr:
Измените владельца каталога на www-data, чтобы PostfixAdmin мог с ней работать:
sudo chown -R www-data:www-data /usr/share/postfixadmin/Добавьте символическую ссылку из каталога веб-сервера:
sudo ln -s /usr/share/postfixadmin/public/ /var/www/html/postfixadminОткройте файл конфигурации PostfixAdmin:
sudo nano /usr/share/postfixadmin/config.local.phpОтредактируйте его содержимое:
Откройте браузер и перейдите по адресу http://<адрес сервера>/postfixadmin/setup.php. Здесь вы сможете задать пароль. Введите его дважды и нажмите «Generate password hash». После обновления страницы будет отображен хэш пароля. Скопируйте его и пропишите в конфигурационном файле config.local.php, который мы рассматривали выше, в строке $CONF['setup_password'].
Теперь перезагрузите страницу, на которой получили хэш, и появится возможность создать администратора.
После авторизации откроется интерфейс, через который можно управлять пользователями и почтовыми ящиками, отправлять и получать письма. Можно даже попробовать послать сообщение. Правда, велика вероятность, что оно не дойдет или окажется в спаме, так как почтовые сервисы доверяют не всем доменам. Следить за репутацией почтового домена помогает Постмастер Майл и другие подобные инструменты, но их изучение выходит за рамки этого руководства.
Установка и настройка Postfix
Установите Postfix Ubuntu и postfix-mysql для соединения с базой данных:
sudo apt install postfix postfix-mysql -yПосле завершения установки в терминале отобразится графический интерфейс. Настройка:
- Выберите Internet Site.
- Укажите FQDN сервера, на котором запущен почтовый сервер Linux.
Если впоследствии появится необходимость изменить эти параметры, сделать это можно с помощью утилиты dpkg-reconfigure:
sudo dpkg-reconfigure postfixПереходите к настройке Postfix. Откройте главный файл конфигурации:
sudo nano /etc/postfix/main.cfЗакомментируйте несколько строк:
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_tls_security_level=may
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)Добавьте следующие строки:
virtual_transport=lmtp:unix:private/dovecot-lmtp
relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base=/var/mail/vmail/
local_recipient_maps=$virtual_mailbox_maps
smtpd_sasl_auth_enable=yes
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
broken_sasl_auth_clients=yes
smtpd_sasl_security_options=noanonymous
smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/postfix/certs/cert.pem
smtpd_tls_key_file=/etc/postfix/certs/key.pem
smtpd_sasl_tls_security_options=noanonymous
smtpd_tls_auth_only=yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain
smtpd_banner=$myhostname ESMTP
strict_rfc821_envelopes=yes
disable_vrfy_command=yes
smtpd_helo_required=yesЗатем откройте для редактирования файл master.cf:
sudo nano /etc/postfix/master.cf
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o syslog_name=postfix/submission
-o smtpd_tls_wrappermode=no
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
-o milter_macro_daemon_name=ORIGINATING
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}Создайте конфигурационные файлы, которые определят порядок обращений Postfix к БД MySQL.
sudo mkdir /etc/postfix/mysqlОткройте файл relay_domains.cf:
sudo nano /etc/postfix/mysql/relay_domains.cf
hosts = localhost
user = postfix
password = password
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'Откройте файл virtual_alias_domain_maps.cf:
sudo nano /etc/postfix/mysql/virtual_alias_domain_maps.cf
hosts = localhost
user = postfix
password = password
dbname = postfix
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Откройте файл virtual_alias_maps.cf:
sudo nano /etc/postfix/mysql/virtual_alias_maps.cf
hosts = localhost
user = postfix
password = password
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'Откройте файл virtual_mailbox_domains.cf:
sudo nano /etc/postfix/mysql/virtual_mailbox_domains.cf
hosts = localhost
user = postfix
password = password
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'Откройте файл virtual_mailbox_maps.cf:
sudo nano /etc/postfix/mysql/virtual_mailbox_maps.cf
hosts = localhost
user = postfix
password = password
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'Напоследок сгенерируйте самоподписной сертификат.
sudo mkdir /etc/postfix/certs
sudo openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pemПри генерировании сертификата появится несколько вопросов, ответы на них могут быть любыми.
После завершения настройки перезапустите Postfix:
sudo postfix check
sudo systemctl restart postfixDovecot — сервер, который мы будем использовать для авторизации пользователей по протоколу SMTP.
Установите Dovecot вместе с плагином для работы с MySQL:
apt-get install dovecot-imapd dovecot-pop3d dovecot-mysqlЗатем настройте способ хранения писем. Для этого откройте файл конфигурации с помощью встроенного редактора nano:
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/%d/%u/Это строка указывает, что сообщения необходимо хранить в папке MailDir.
Затем настройте слушателя для аутентификации. Откройте другой файл конфигурации:
sudo nano /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
}
}Здесь идут два слушателя: /var/spool/postfix/private/auth нужен, чтобы Постфикс мог проводить авторизацию через Dovecot, а auth-userdb — это сокет авторизации через dovecot-lda.
Затем добавьте в этот же файл конфигурации:
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}Теперь переходите к настройке самой аутентификации. Откройте файл 10-auth.conf:
sudo nano /etc/dovecot/conf.d/10-auth.conf
#!include auth-system.conf.ext
!include auth-sql.conf.extЗатем откройте файл 10-ssl.conf:
sudo nano /etc/dovecot/conf.d/10-ssl.confНастройте в нем шифрование:
ssl = required // требование шифрования
ssl_cert = </etc/ssl/mail/public.pem // путь к открытой части сертификата
ssl_key = </etc/ssl/mail/private.key // путь к приватному ключуНастройте автоматическое создание каталогов в файле 15-lda.conf. Откройте его:
sudo nano /etc/dovecot/conf.d/15-lda.conf:
lda_mailbox_autocreate = yesНастройте подключение к БД. Откройте файл конфигурации:
sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
…
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
…
args = /etc/dovecot/dovecot-sql.conf.ext
}Здесь нужно указать файлы, в которых описываются правила получения пользователей и паролей из базы данных. Их тоже нужно добавить самостоятельно. Откройте файл:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix123
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'Это полностью сконфигурированный запрос, который позволит получать данные из БД. Осталось задать интерфейс, который будет слушать Dovecot. Откройте файл:
sudo nano /etc/dovecot/dovecot.confЧтобы все заработало, разрешите запуск Dovecot:
systemctl restart dovecotНастройка почтового сервера практически завершена.
Настройка Postfix для работы с Dovecot
После настройки Dovecot измените конфигурацию Postfix. Откройте файл main.cf:
sudo nano /etc/postfix/main.cf
smtp_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/authЗакомментируйте несколько параметров, которые теперь не нужны:
#virtual_mailbox_base = /home/vmail
#virtual_mailbox_maps = hash:/etc/postfix/vmaps
#virtual_minimum_uid = 1000
#virtual_uid_maps = static:5000
#virtual_gid_maps = static:5000Вместо закомментированных параметров добавьте:
virtual_transport = lmtp:unix:private/dovecot-lmtpИзмените файл master.cf. Откройте его:
sudo nano /etc/postfix/master.cf
submission inet n - y - - smtpdПосле изменения конфигурации перезагрузите Postfix и Dovecot:
sudo systemctl restart postfix
sudo systemctl restart dovecotТеперь у вас есть свой почтовый сервер.
Тестирование почты и настройка брандмауэра
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
echo "Test mail" | mail -s "Test mail" admin@site.ruСообщение должно появиться в папке /home/vmail/site.ru/admin/new/. Если письма нет, проверьте лог Postfix:
tail -f /var/log/mail.logЧтобы почтовый сервер был доступен из интернета, необходимо открыть несколько портов.
sudo ufw allow 110
sudo ufw allow 995Затем откройте IMAP и IMAPS:
sudo ufw allow 143
sudo ufw allow 993И напоследок — доступ к Ubuntu SMTP Server:
sudo ufw allow 25
sudo ufw allow 465
sudo ufw allow 587Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.