Вернуться назад

Настройка почтовых служб 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
Дата: 02 мая 2020 г. в 12:59:02

Автор: igel