В статье мы расскажем, как настроить свой почтовый сервер с использованием Postfix и Dovecot.
Postfix и Dovecot: что это
Postfix — это ПО для создания почтового сервера с открытым исходным кодом. Изначально Постфикс создавался в качестве альтернативы Sendmail.
Postfix работает по протоколу исходящей почты SMTP и имеет следующий функционал:
- обработка заголовков писем,
- передача писем в промежуточную проверку,
- проверка отправителя на предмет спама,
- настройка лимитов на отправку писем,
- журналирование отправленных писем и др.
Dovecot — это свободное ПО для настройки почтового сервера. Dovecot работает с протоколами входящей почты: IMAP и POP3.
Основное назначение этого почтового сервера — безопасный доступ к письмам. Dovecot позволяет управлять почтовыми ящиками и гибко настраивать доступы к директориям электронной почты.
Связка Postfix + Dovecot необходима для корректной работы почты: в ней Postfix отвечает за отправку писем, а Dovecot — за их доставку.
Установка Postfix и Dovecot
Подготовка к установке
-
1
Подключитесь к серверу по SSH.
-
2
Обновите пакеты:
sudo apt update && sudo apt upgrade
-
3
Установите имя хоста:
sudo hostnamectl set-hostname test.ru
Вместо test.ru укажите ваше доменное имя.
-
4
Установите дополнительное ПО — оно необходимо для корректной работы Postfix и Dovecot:
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
-
5
Создайте системного пользователя почтового сервера:
sudo useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
-
6
Создайте почтовую директорию:
sudo mkdir -p /var/vmail
-
7
Измените права доступа к директории:
sudo chmod -R 770 /var/vmail
-
8
Разрешите пользователю работать с директорией:
sudo chown -R vmail:mail /var/vmail
Создание базы данных
-
1
Подключитесь к серверу по SSH.
-
2
Запустите консоль MySQL:
sudo mysql
-
3
Создайте базу данных:
CREATE DATABASE db_name;
Вместо db_name укажите название вашей базы данных.
-
4
Назначьте пользователя созданной базе данных:
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'PassWord';
Где:
- db_name — название базы данных,
- username — имя пользователя БД,
- PassWord — пароль пользователя БД.
-
5
Подтвердите изменения:
FLUSH PRIVILEGES;
Затем закройте консоль MySQL:
\q
Теперь вы можете приступить к установке.
Установка и настройка Postfix
-
1
Подключитесь к серверу по SSH.
-
2
Обновите пакеты:
sudo apt update && sudo apt upgrade
-
3
Установите Postfix:
sudo apt install postfix-mysql
-
4
Ознакомьтесь с представленной информацией и нажмите Ok:
-
5
Выберите Internet Site:
-
6
Укажите FQDN вашего сервера — как правило, он включает в себя доменное имя. Затем нажмите Ok:
Mail server
-
7
Создайте директорию для конфигурационных файлов Postfix:
sudo mkdir -p /etc/postfix/sql
-
8
Создайте файл mysql_virtual_alias_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
9
Создайте файл mysql_virtual_domains_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
10
Создайте файл mysql_virtual_mailbox_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
11
Создайте файл mysql_virtual_alias_domain_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name 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'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
12
Создайте файл mysql_virtual_alias_domain_mailbox_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name 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'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
13
Создайте файл mysql_virtual_mailbox_limit_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
14
Создайте файл mysql_virtual_alias_domain_catchall_maps.cf:
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Добавьте в него строки:
user = username password = PassWord hosts = localhost dbname = db_name 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'
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
15
Откройте файл main.cf:
sudo nano /etc/postfix/main.cf
Добавьте в него строки:
myhostname = $(hostname -f) mydestination = localhost mynetworks = 127.0.0.0/8 inet_protocols = ipv4 inet_interfaces = all smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination virtual_transport = lmtp:unix:private/lmtp virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf 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 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
Затем сохраните изменения и закройте файл.
-
16
Отредактируйте файл master.cf:
sudo nano /etc/postfix/master.cf
Найдите блок с настройками SMTP и измените его содержимое на следующее:
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
Затем сохраните изменения и закройте файл.
Готово, вы установили Postfix.
Установка и настройка Dovecot
-
1
Подключитесь к серверу по SSH.
-
2
Обновите пакеты:
sudo apt update && sudo apt upgrade
-
3
Откройте файл 10-auth.conf:
sudo nano /etc/dovecot/conf.d/10-auth.conf
Измените строку auth_mechanisms на следующее значение:
auth_mechanisms = plain login
Закомментируйте строку с include auth-system.conf.ext и раскомментируйте строку с include auth-sql.conf.ext:
#!include auth-system.conf.ext !include auth-sql.conf.ext
Затем сохраните изменения и закройте файл.
-
4
Откройте файл dovecot-sql.conf.ext:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Добавьте в него строки:
driver = mysql connect = host=localhost dbname=db_name user=username password=PassWord 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'
Где:
- db_name — название базы данных,
- username — имя пользователя БД,
- PassWord — пароль пользователя БД.
Затем сохраните изменения и закройте файл.
-
5
Откройте файл 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
Затем сохраните изменения и закройте файл.
-
6
Откройте файл 10-master.conf:
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 }
Повторите действие с блоком auth-worker:
service auth-worker { user = vmail }
Затем сохраните изменения и закройте файл.
-
7
Присвойте права пользователю на работу с папкой:
sudo chown -R vmail:dovecot /etc/dovecot
Смените права на директорию:
sudo chmod -R o-rwx /etc/dovecot
Готово, вы установили Dovecot.
Установка PostfixAdmin
-
1
Подключитесь к серверу по SSH.
-
2
Перейдите в каталог /opt:
cd /opt
-
3
Загрузите программу с GitHub:
sudo git clone https://github.com/postfixadmin/postfixadmin.git
-
4
Перейдите в каталог /postfixadmin:
cd /opt/postfixadmin
-
5
Запустите установочный скрипт:
sudo bash install.sh
-
6
Измените права на директорию:
sudo chown -R www-data: /opt/postfixadmin
-
7
Создайте файл 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>
Затем сохраните изменения и закройте файл.
-
8
Перезагрузите Apache:
sudo systemctl reload apache2
-
9
Создайте файл config.local.php:
sudo nano /opt/postfixadmin/config.local.php
Добавьте в него строки:
<?php $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'username'; $CONF['database_password'] = 'PassWord'; $CONF['database_name'] = 'db_name'; $CONF['configured'] = true; ?>
Где:
- username — имя пользователя БД,
- PassWord — пароль пользователя БД,
- db_name — название базы данных.
Затем сохраните изменения и закройте файл.
-
10
Откройте браузер и в адресной строке введите адрес http://123.123.123.123/postfixadmin/setup.php. Вместо 123.123.123.123 укажите адрес вашего сервера.
-
11
Создайте пароль загрузки и сгенерируйте хэш:
Настройка почтового сервера
-
12
Скопируйте созданный хэш:
Затем добавьте его в конфигурационный файл. Для этого повторите шаг 9.
-
13
Обновите загрузочную страницу. Затем пролистайте ее до раздела Add Superadmin Account и заполните поля:
- Setup password — укажите пароль, который вы создали на шаге 14;
- Админ — введите электронную почту администратора. Ее можно найти в конфигурационном файле, в строке $CONF[«admin_email»];
- Пароль — создайте пароль суперпользователя;
- Пароль (еще раз) — повторите пароль суперпользователя.
Далее создайте учетную запись, нажав Добавить администратора:
-
14
В браузере откройте страницу http://123.123.123.123/postfixadmin/login.php. Вместо 123.123.123.123 укажите адрес вашего сервера.
-
15
Укажите email и пароль администратора. Затем кликните Войти:
Готово, вы установили и настроили PostfixAdmin.
Roundcube: что это и как его установить
Roundcube — это веб-интерфейс для работы с почтовыми ящиками и письмами. Он написан на языке PHP с использованием AJAX. Подробнее об этом клиенте вы можете узнать в инструкции.
Roundcube потребуется для входа в почтовые ящики, а также для отправки и получения писем.
Чтобы установить Roundcube:
-
1
Подключитесь к серверу по SSH.
-
2
Обновите пакеты:
sudo apt update && sudo apt upgrade
-
3
Установите почтовый клиент:
sudo apt install roundcube
-
4
Откройте конфигурационный файл roundcube.conf:
sudo nano /etc/apache2/conf-enabled/roundcube.conf
Раскомментируйте строку:
Alias /roundcube /var/lib/roundcube/public_html
Затем сохраните изменения и закройте файл.
-
5
Перезапустите Apache:
sudo systemctl restart apache2
-
6
Откройте файл config.inc.php:
sudo nano /etc/roundcube/config.inc.php
Замените строку $config['smtp_host'] = 'localhost:587'; на следующее значение:
$config['smtp_host'] = 'tls://%n:587';
Затем сохраните изменения и закройте файл.
-
7
Перейдите в веб-интерфейс Roundcube. Для этого в адресной строке введите http://123.123.123.123/roundcube. Вместо 123.123.123.123 укажите адрес вашего сервера.
Готово, вы установили Roundcube.
Как настроить записи DKIM, SPF и DMARC
Настройка DKIM
-
1
Подключитесь к серверу по SSH.
-
2
Обновите пакеты, поочередно выполнив команды:
sudo apt update sudo apt upgrade
-
3
Установите opendkim:
sudo apt install opendkim opendkim-tools -y
-
4
Запустите службу:
sudo systemctl start opendkim
Затем добавьте ее в автозагрузку:
sudo systemctl enable opendkim
-
5
Создайте директорию с ключами:
sudo mkdir -p /etc/opendkim/keys/test.ru
Вместо test.ru укажите ваш домен.
-
6
Сгенерируйте ключевую пару:
sudo opendkim-genkey --directory /etc/opendkim/keys/test.ru/ --domain test.ru --selector dkim
Вместо test.ru укажите ваш домен.
-
7
Скорректируйте права на директорию:
sudo chown -R opendkim:opendkim /etc/opendkim/keys/test.ru
Вместо test.ru укажите ваш домен.
-
8
Откройте конфигурационный файл:
sudo nano /etc/opendkim.conf
-
9
Добавьте строки:
AutoRestart Yes AutoRestartRate 10/1h Umask 002 Syslog yes SyslogSuccess Yes LogWhy Yes Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 UserID opendkim:opendkim Socket inet:8891@localhost
После этого сохраните изменения при помощи клавиш Ctrl + O и закройте файл комбинацией Ctrl + X.
-
10
Откройте файл TrustedHosts:
sudo nano /etc/opendkim/TrustedHosts
-
11
Добавьте строку:
*.test.ru
Вместо test.ru укажите ваш домен.
После этого сохраните изменения при помощи клавиш Ctrl + O и закройте файл комбинацией Ctrl + X.
-
12
Откройте файл KeyTable:
sudo nano /etc/opendkim/KeyTable
-
13
Добавьте строку:
dkim._domainkey.test.ru test.ru:dkim:/etc/opendkim/keys/test.ru/dkim.private
Вместо test.ru укажите ваш домен.
После этого сохраните изменения при помощи клавиш Ctrl + O и закройте файл комбинацией Ctrl + X.
-
14
Откройте файл SigningTable:
sudo nano /etc/opendkim/SigningTable
-
15
Добавьте строку:
*@test.ru dkim._domainkey.test.ru
Вместо test.ru укажите ваш домен.
После этого сохраните изменения при помощи клавиш Ctrl + O и закройте файл комбинацией Ctrl + X.
-
16
Откройте файл opendkim:
sudo nano /etc/default/opendkim
-
17
Добавьте строки:
SOCKET="inet:8891@localhost" milter_default_action=accept milter_protocol=2 smtpd_milters=inet:127.0.0.1:8891 non_smtpd_milters=inet:127.0.0.1:8891
После этого сохраните изменения при помощи клавиш Ctrl + O и закройте файл комбинацией Ctrl + X.
-
18
Поочередно перезапустите службы opendkim и postfix:
sudo systemctl restart opendkim sudo systemctl restart postfix
-
19
Выведите на экран содержимое файла открытого ключа: sudo cat /etc/opendkim/keys/test.ru/dkim.txt Публичный ключ будет иметь следующий вид:
dkim._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0gYwtTQCLzrWSUtQ7j77194kM4h3J7mOvsZoh50fzyYWItXC2CATVAjUq29Ki2FM/JOUYKBDxZIQltoaCYINNt6oLxbkPKfkwhMntwVzNxHS9jlS1rXjTyPGW04HM751tvUbxQ5Q5/aC6gkIiaHOywEqt1iec1YCAulHIjbG8caUSSYnNKSzZdoBRz6rtLUMkWkZl/aUDCBcR7" "GnKUy9HmsJPHfKv4MQtjUSQo+5XrQeFIwqBT8e+bDMuo2pOSUT5FgbJBdQOTvSqqk8wpPIqxfKX3e42oFAsLUihL1v2aX1w+kb6vt+bGDBPKkGK4HaNoXhHKQuueQXiVbiERqUGwIDAQAB" ) ; ----- DKIM key dkim for test.ru
Вместо test.ru будет указан ваш домен.
-
20
Добавьте получившуюся ресурсную запись по инструкции, которая подходит для вашего случая:
Если домен обслуживается в другой компании, запись необходимо добавлять на сайте поставщика услуги DNS.
Настройка SPF
-
1
Сформируйте запись SPF по следующему образцу:
v=spf1 ip4:123.123.123.123 a mx ~all
Вместо 123.123.123.123 укажите IP-адрес вашего сервера.
-
2
Добавьте запись TXT с содержимым из пункта выше. Для этого используйте инструкцию, подходящую для вашего случая:
Если домен обслуживается в другой компании, запись необходимо добавлять на сайте поставщика услуги DNS.
Настройка DMARC
-
1
Сформируйте запись DMARC по следующему образцу:
v=DMARC1; p=none; rua=mailto:dmarc-test@test.ru
Вместо test.ru укажите ваш домен.
-
2
Добавьте запись TXT с содержимым из пункта выше. Для этого используйте инструкцию, подходящую для вашего случая:
Если домен обслуживается в другой компании, запись необходимо добавлять на сайте поставщика услуги DNS.
После того как вы прописали ресурсные записи, настройка почтового сервера завершена. Вы установили все необходимые инструменты:
- Postfix в качестве агента пересылки почты;
- Dovecot как решение для настройки доступа к почте и почтовым директориям;
- Roundcube для того, чтобы авторизоваться в почтовом ящике и начать обмен письмами.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊