Настройка почтовых служб postfix-dovecot (mysql) Ubuntu 18-04
Устанавливаем необходимые пакеты:
# apt install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mariadb-client mariadb-server
При выполнении установки зарпустится мастер настройки почтового сервера, необходимо в параметрах выбрать следующее:
1. Интернет сайт.
Дальше вам нужно ввести ваше доменное имя, например, losst.ru:
После завершения все сервисы запустятся автоматически, а мы можем перейти к дальнейшей настройке.
НАСТРОЙКА DNS ЗОНЫ
Вы не сможете заставить все это работать на локальной машине, без привязанного к ней домена. И на сервере со статическим IP нужно сначала правильно настроить доменную зону. Это очень важно.
Вам нужно чтобы A и MX записи вашего домена указывали на IP адрес вашего сервера. Обычно это можно настроить в панели управления доменом. На обновление доменной зоны может уйти 1-2 дня.
Дальше вам нужно правильно настроить доменное на вашем VPS. FQDN (Fully Qualified Domain Name) должно состоять из имени хоста и зарегистрированного доменного имени. Сначала установим имя хоста с помощью hostnamectl. Например:
sudo hostnamectl set-hostname vps
Затем нужно добавить строчку с именем домена FQDN в файл /etc/hosts. Здесь нужно указать ваш статический адрес, имя хоста и зарегистрированный домен:
sudo vi /etc/hosts
194.67.215.125 vps.losst.ru vps
Теперь у вас есть FQDN, который будет использоваться почтовым сервером. Переходим к установке ПО.
НАСТРОЙКА БАЗ ДАННЫХ
Подключитесь с помощью клиента к серверу баз данных (если не установлен пароль root для БД, команда такая):
mysql -u root
Подключитесь с помощью клиента к серверу баз данных (если установлен пароль root для БД, команда такая):
mysql -u root -p
Создадим новую базу данных:
> CREATE DATABASE EmailServer_db;
> USE EmailServer_db;
Затем создадим нового пользователя, который будет использоваться системой:
> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'пароль';
> GRANT ALL PRIVILEGES ON * .* TO 'dba'@'localhost';
> FLUSH PRIVILEGES;
Так мы даем пользователю все необходимые полномочия для доступа к базе данных dba. Создадим таблицу для настроек Postfix:
> CREATE TABLE `Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;
Дальше нам нужно создать таблицу, в которой будут храниться данные аутентификации пользователей нашего почтового сервера:
> CREATE TABLE `Users_tbl` (
`UserId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`password` VARCHAR(254) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`UserId`),
UNIQUE KEY `Email` (`Email`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
И таблицу, в которой будут находиться псевдонимы, дополнительные почтовые ящики для пользователей:
> CREATE TABLE `Alias_tbl` (
`AliasId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`Source` varchar(100) NOT NULL,
`Destination` varchar(100) NOT NULL,
PRIMARY KEY (`AliasId`),
FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
Сейчас у вас должна получиться такая структура базы данных:
Все действия можно выполнить в PhpMyAdmin, возможно, вам будет так проще.
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЕЙ
Дальше, перейдем к созданию пользователей, который смогут получать и отправлять письма. Создадим пользователя losst@losst.ru и admin@losst.ru. Для этого, нужно добавить две записи в таблицу Users_tbl, а также по записи в Domains_tbl и Aliases_tbl:
> INSERT INTO Domains_tbl (DomainName) VALUES ('losst.ru');
> INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('пароль1', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'losst@losst.ru');
> INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('пароль2', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@losst.ru');
> INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, 'info@losst.ru', 'losst@losst.ru');
Пользователи готовы, дальше рассмотрим как заставить все это работать в Dovecot и Postfix. У нас есть два пользователя, которые относятся к одному домену и один из них имеет один псевдоним.
НАСТРОЙКА POSTFIX
Все настройки почтового сервера Postfix находятся в каталоге /etc/postfix. Здесь они могут быть разделены на несколько файлов. Основные из них два файла:
- /etc/postfix/main.cf - основные настройки Postfix;
- /etc/postfix/master.cf - настройки сервиса Postfix;
Теперь рассмотрим как выполняется настройка postfix ubuntu. Имя хоста устанавливается переменными myhostname и mydestination в файле main.cf:
sudo vi /etc/postfix/main.cf
myhostname = losst.ru
mydestination = localhost localhost.localdomain
Вам нужно найти и добавить такие строки в main.cf для работы с dovecot и smtp. Все строки, которые совпадают с этими из оригинального конфигурационного файла нужно закомментировать:
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
<code>
local_transport = virtual
local_recipient_maps = $virtual_mailbox_map
</code>
Дальше добавим наши файлы с настройками для работы с ранее созданными таблицами в базе данных. По отдельному файлу на таблицу:
virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf
Вы можете выбирать и другие имена файлов, но старайтесь называть их так, чтобы потом могли понять о чем идет речь. Закройте этот файл и перейдем к созданию файлов настройки таблиц, вот они:
sudo vi /etc/postfix/mariadb-vdomains.cf
user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'
sudo vi /etc/postfix/mariadb-vusers.cf
user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'
sudo vi /etc/postfix/mariadb-valias.cf
user = dba
password = пароль
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'
Синтаксис каждого из файлов предельно простой. Мы указываем пользователя базы данных, его пароль, хост и имя базы. Последний параметр - запрос, которым postfix может получить простой список нужных ему данных - доменов, пользователей для домена, алиасов для пользователя.
Дальше установим правильные права на файлы:
sudo chmod 640 /etc/postfix/mariadb-vdomains.cf
$ sudo chmod 640 /etc/postfix/mariadb-vusers.cf
$ sudo chmod 640 /etc/postfix/mariadb-valias.cf
sudo chown root:postfix /etc/postfix/mariadb-vdomains.cf
$ sudo chown root:postfix /etc/postfix/mariadb-vusers.cf
$ sudo chown root:postfix /etc/postfix/mariadb-valias.cf
Мы сделали их доступными только для пользователя и группы, а также сменили группу на postfix. Дальше нужно изменить конфигурацию master.cf:
smtp inet n - y - - smtpd
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
#virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
Настройка Postfix почти завершена и вам осталось проверить ее корректность:
sudo postfix check
Если все прошло хорошо, можем идти дальше, если же нет - проверяйте настройки, возможно, где-то, что-то упустили. После этого откройте тот же файл и добавьте строчку:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
(вторая строка должна быть отодвинута от края на пару позиций, иначе получите ошибку).
sudo systemctl restart postfix
Еще нам нужно проверить имеет ли Postfix доступ к созданным базам данных. Для этого будем использовать команду postmap:
sudo postmap -q losst.ru mysql:/etc/postfix/mariadb-vdomains.cf
$ sudo postmap -q test.ru mysql:/etc/postfix/mariadb-vdomains.cf
$ sudo postmap -q losst@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q admin@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q none@losst.ru mysql:/etc/postfix/mariadb-vusers.cf
$ sudo postmap -q info@losst.ru mysql:/etc/postfix/mariadb-valias.cf
Необязательно использовать правильных пользователей. Мы просто проверяем может ли программа работать с базой данных. Если вы получаете ошибку, проверьте пользователя и пароль к базе данных.
НАСТРОЙКА DOVECOT
Установка Postfix Dovecot в связке используется чаще всего для веб-сайтов. Dovecot - это IMAP/POP3 сервер, который позволяет пользователям работать с почтой через такие клиенты, как Thunderbird. Для начала нам нужно создать группу и пользователя для обработки электронных адресов, поскольку наши ящики не привязаны к системе:
sudo groupadd -g 5000 vmail
$ sudo useradd -g vmail -u 5000 vmail -d /home/vmail -m
Настройки Dovecot распределены по нескольким файлам. Сначала приведите файл /etc/dovecot/dovecot.conf к такому виду:
sudo vi /etc/dovecot/dovecot.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf
Затем разрешим аутентификацию пользователей через базу данных MySQL в файле /etc/dovecot/conf.d/10-auth.conf:
sudo vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext
В следующем файле укажем параметры доступа к базе данных:
sudo vi /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
Мы будем сохранять почту в папке /home/vmail/домен/имя/Maildir. Вам нужно создать папку для домена, если она не существует:
mkdir /home/vmail/losst.ru
Дальше, скажем программе, что для каждого пользователя нужно создавать отдельные почтовые ящики:
sudo vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl
И наконец, приведите базовые настройки в 10-master.conf к такому виду:
sudo vi /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-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 {
user = vmail
}
service dict {
unix_listener dict {
}
}
Для шифрования будем использовать самоподписанный сертификат:
sudo vi /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
Сертификаты вам придется создать отдельно, для этого выполните команду:
openssl req -new -x509 -days 1000 -nodes -out "/etc/pki/dovecot/certs/dovecot.pem" -keyout "/etc/pki/dovecot/private/dovecot.pem"
Директории /etc/pki/dovecot/certs и private должны существовать, вы можете использовать другое расположение, но тогда вам нужно будет изменить адреса сертификатов в файлах настройки Postfix и Dovecot. Осталось указать пароль и другие параметры доступа к базе данных mysql:
sudo vi /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=пароль"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';
Еще нам может понадобиться информация из логов, поэтому:
sudo vi /etc/dovecot/conf.d/10-logging.conf
log_path = /var/log/dovecot.log
После этого необходимо выполнить команду
chown vmail:vmail dovecot.log
чтоб не было ошибок доступа к файлу лога.
После изменения конфигурации перезапустите dovecot:
sudo systemctl restart dovecot
ЗАВЕРШЕНИЕ НАСТРОЙКИ
Проверьте правильность настроек Postfix и Dovecot. Вы можете вывести их с помощью следующих команд:
sudo postconf –n
$ sudo postconf –M
А для Dovecot:
sudo doveconf –n
Установите правильные права для папки /home/vmail:
chown –R vmail:vmail /home/vmail
Разрешите все необходимые порты в брандмауэре (для текущей ОС это необязательно, если порты доступны извне после запуска служб, можно пропустить этот шаг):
$ sudo ufw allow 143
$ sudo ufw allow 25
$ sudo ufw allow 110
$ sudo ufw allow 587
Теперь осталось только проверить работу почтового сервера с помощью Thunderbird.
Поскольку мы использовали свой самоподписный сертификат, его нужно принять:
Дальше вы можете получать и отправлять почту:
Взято отсюда с правками из комментария АЛЕКСАНДР
Так как спам замучил, добавил в конфигурацию еще это:
Файл /etc/postfix/main.cf
smtpd_recipient_restrictions =
check_sender_access regexp:/etc/postfix/sender_blacklist,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unknown_client_hostname,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname,
reject_unverified_sender,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
Самые интересные параметры:
check_sender_access regexp:/etc/postfix/sender_blacklist
Необходимо создать файл
/etc/postfix/sender_blacklist
Содержимое файла:
/.*\.eu$/ REJECT Spam is blocked
#/^(|[^>].*)domain\.ru/ REJECT Spam is blocked
/.*\.tk$/ REJECT Spam is blocked
/.*\.nl$/ REJECT Spam is blocked
/.*\.art$/ REJECT Spam is blocked
При таком содержимом будут блокироваться все письма с доменов зон eu, tk, nl, art и письма всех отправителей с domain.ru
Если надо принять письма от кого-то, вместо REJECT ставим OK и убираем сообщение о причине "Spam is blocked".
После изменений файла надо выполнить команды:
postmap /etc/postfix/client_blacklist
systemctl reload postfix
Следующий параметр включает грейслистинг, что это, найдете в Сети. Перед его подключением необходимо установить postgrey:
check_policy_service inet:127.0.0.1:10023
Автор: igel