- Автор темы
- Администратор
- Модер.
- Команда форума
- #1
Рассмотрим установку и настройку связки Dovecot и Exim без использования базы данных для хранения учетных записей пользователей. Аутентификация будет производиться проверкой текстовой пары логин и пароль при этом данные для аутентификации будут храниться в отдельном текстовом файле. Все описанные ниже действия проводились на ОС FreeBSD.
Как всегда, в FreeBSD есть два базовых варианта, установить из пакетов, установить из коллекции портов. Установка с помощью менеджера пакетов:
Установка из коллекции портов:
По умолчанию после установки конфигурационные файлы отсутствуют, но в папке
Правим файл конфигурации
В файле
Настраиваем расположение почтовых ящиков пользователей, их наименование и права доступа. Правим файл
Здесь UID и GID равны 144 что соответствует пользователю и группе dovenull, именно от имени этого пользователя осуществляется доступ к почтовому ящику.
Создаем папку, в которой будут располагаться почтовые ящики и устанавливаем на нее права доступа.
Настраиваем порты и выдаем доступ к сокетам аутентификации (будет использоваться Exim'ом для авторизации пользователей). Правим файл
Параметр
Предоставляем доступ к сервисам статистики, добавляем в файл
Указан пользователь mailnull т.к. от его имени запускается Exim. Если возникают проблемы с доступом к статистики, то в документации к dovecot рекомендуют установить mode = 0666.
Настройка SSL производится в файле
В полях ssl_cert и ssl_key указываем путь к сертификату и закрытому ключу. Можно использовать сертификаты выпущенные Let’s Encrypt. Здесь можно почитать как выпустить сертификаты и как их обновлять автоматически. Первым символом в указанном пути к файлу сертификата должен быть символ меньше, который указывает, что переменной присваивается не путь к файлу, а его содержимое.
В файле
Настройку Exim производим путем внесения изменений в файл
Устанавливаем Primary hostname - официальное имя почтового сервера, которым он будет представляться. Если данный параметр не указан, то будет подставляться значение возвращаемое функцией uname().
Указываем список доменов обслуживаемые этим (локальным) хостом, параметр «@» в списке указывает на имя локального хоста, значение этого параметра берется из значения primary_hostname, для доставки локальной почты. Если доставка локальной почты не требуется, то параметр «@» можно удалить. Список обслуживаемых доменов разделяется знаком двоеточия «:».
Если этот почтовый сервер является ретранслятором для какого-либо домена, то этот домен (или домены) необходимо указать в списке relay_to_domains, это позволит любому хосту ретранслировать почту через ваш хост на этот домен. Если ретранслировать почту далее не надо, то данный список остается пустым. Список ретранслируемых доменов разделяется знаком двоеточия «:».
Задаем список хостов использующие данный сервер как релей на любой узел в интернете. Здесь обычно указывается адрес интерфейса сервера и (или) локальная сеть. Список разделяется знаком двоеточия «:».
Указываем пути к сертификатам для TLS подключения, используем те же сертификаты что и для Dovecot.
Указываем порты для подключения и порт для шифрованного подключения TLS.
Т.к. в качестве базы данных пользователя будет использоваться текстовый файл, а в качестве логина указываться полный адрес электронной почты, то при отправке почты Exim может автоматически подставлять через @ к этому имени пользователя имя хоста указанное в primary_hostname. Чтобы этого не происходило перед разделами ACL добавляем следующие настройки.
Подразумеваем что все локальные пользователи почты будут храниться в Dovecot, поэтому, в разделе Routers Configuration в localusers отключаем проверку локальных пользователей, а в transport указываем dovecot_virtual_delivery.
В разделе Transports Configuration настраиваем доставку в почтовые ящики Dovecot (Документация).
Аутентификация будет производиться с помощью Dovecot, в разделе Authentification для этого вносим настройки.
Создаем зашифрованный пароль для пользователя командой doveadm.
Записываем в файл users данные для почтового ящика.
Запускаем сервисы и проверяем работу электронной почты.
Лог файл для вывода сообщений об ошибках.
Лог файл для вывода информационных сообщений. По умолчанию используется log_path.
Лог файл для вывода отладочной информации. По умолчанию используется info_log_path.
Запись в лог неудачные попытки аутентификации и причины, по которым так произошло.
Запись в лог информации о несовпадении пароля. Данная настройка может быть полезна для определения попытки подбора пароля методом перебора.
Ведение более подробного журнала отладки. Может показывать SQL запросы.
Ведение более подробного журнала отладки при несоответствии паролей. Включение этого параметра включает так же параметр auth_debug.
Для ведения логов по отдельным протоколам пути к лог файлам указываются на настройках протокола. Пример для протокола lda, файл 15-lda.conf.
Создаем папку под лог файлы и раздаем на нее права.
Логи Exim располагаются в /var/log/exim/, по умолчанию уровень логирования 5 из 6, чем меньше цифра, тем менее подробная информация пишется в лог. Уровень логирования задается параметром log_level от 0 до 6. Подробнее можно почитать в документации.
Установка Dovecot и Exim
Как всегда, в FreeBSD есть два базовых варианта, установить из пакетов, установить из коллекции портов. Установка с помощью менеджера пакетов:
Код:
pkg install dovecot
pkg install exim
Установка из коллекции портов:
Код:
cd /usr/ports/mail/dovecot
make install clean
cd /usr/ports/mail/exim
make install clean
Настройка Dovecot
По умолчанию после установки конфигурационные файлы отсутствуют, но в папке
example-config
находится полный набор файлов конфигурации для примера, их и будем использовать. Копируем всё содержимое папки /usr/local/etc/dovecot/example-config
в /usr/local/etc/dovecot/
.cp -R /usr/local/etc/dovecot/example-config/ /usr/local/etc/dovecot/
Правим файл конфигурации
/usr/local/etc/dovecot/dovecot.conf
. Указываем используемые протоколы, imap
и lmtp
, pop3
по желанию если очень необходим.protocols = imap lmtp
В файле
/usr/local/etc/dovecot/conf.d/10-auth.conf
включаем аутентификацию обычным текстом и использование текстового файла для хранения данных пользователей.
Код:
disable_plaintext_auth = no
auth_mechanisms = plain
!include auth-passwdfile.conf.ext
Настраиваем расположение почтовых ящиков пользователей, их наименование и права доступа. Правим файл
/usr/local/etc/dovecot/conf.d/10-mail.conf
.
Код:
mail_location = maildir:/var/vmail/%d/%n
mail_uid = 144
mail_gid = 144
first_valid_uid = 1
Здесь UID и GID равны 144 что соответствует пользователю и группе dovenull, именно от имени этого пользователя осуществляется доступ к почтовому ящику.
Создаем папку, в которой будут располагаться почтовые ящики и устанавливаем на нее права доступа.
Код:
mkdir /var/vmail
chown dovenull:dovenull /var/vmail/
chmod 770 /var/vmail/
Настраиваем порты и выдаем доступ к сокетам аутентификации (будет использоваться Exim'ом для авторизации пользователей). Правим файл
/usr/local/etc/dovecot/conf.d/10-master.conf.
Код:
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service auth {
unix_listener auth-userdb {
mode = 0777
}
unix_listener auth-client {
mode = 0660
user = mailnull
}
}
Параметр
unix_listener auth-client
может отсутствовать в конфиге по умолчанию. Данная настройка была откопана на форуме Exim в процессе разбирательств того, что dovecot не хотел принимать запросы от Exim на аутентификацию пользователей.Предоставляем доступ к сервисам статистики, добавляем в файл
/usr/local/etc/dovecot/conf.d/10-metrics.conf
следующие настройки:
Код:
service stats {
unix_listener stats-reader {
group = mailnull
mode = 0660
}
unix_listener stats-writer {
group = mailnull
mode = 0660
}
}
Указан пользователь mailnull т.к. от его имени запускается Exim. Если возникают проблемы с доступом к статистики, то в документации к dovecot рекомендуют установить mode = 0666.
Настройка SSL производится в файле
/usr/local/etc/dovecot/conf.d/10-ssl.conf
.
Код:
ssl = required
ssl_cert = ‹/usr/local/etc/letsencrypt/live/mybestserver.examle/fullchain.pem
ssl_key = ‹/usr/local/etc/letsencrypt/live/mybestserver.examle/privkey.pem
В полях ssl_cert и ssl_key указываем путь к сертификату и закрытому ключу. Можно использовать сертификаты выпущенные Let’s Encrypt. Здесь можно почитать как выпустить сертификаты и как их обновлять автоматически. Первым символом в указанном пути к файлу сертификата должен быть символ меньше, который указывает, что переменной присваивается не путь к файлу, а его содержимое.
В файле
/usr/local/etc/dovecot/conf.d/auth-passwdfile.conf.ext
указываем путь к файлу, в котором будет храниться список пользователей с паролями и схему шифрования паролей в разделе passdb, раздел userdb полностью комментируем.
Код:
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /usr/local/etc/dovecot/users
}
##userdb {
## driver = passwd-file
## args = username_format=%u /usr/local/etc/dovecot/users
## # Default fields that can be overridden by passwd-file
## #default_fields = quota_rule=*:storage=1G
## # Override fields from passwd-file
## #override_fields = home=/home/virtual/%u
##}
Настройка Exim
Настройку Exim производим путем внесения изменений в файл
/usr/local/etc/exim/configure
, необходимые параметры раскомментируем и указываем для них значения.Устанавливаем Primary hostname - официальное имя почтового сервера, которым он будет представляться. Если данный параметр не указан, то будет подставляться значение возвращаемое функцией uname().
primary_hostname = mail.mybestserver.examle
Указываем список доменов обслуживаемые этим (локальным) хостом, параметр «@» в списке указывает на имя локального хоста, значение этого параметра берется из значения primary_hostname, для доставки локальной почты. Если доставка локальной почты не требуется, то параметр «@» можно удалить. Список обслуживаемых доменов разделяется знаком двоеточия «:».
domainlist local_domains = @ : mybestserver.examle
Если этот почтовый сервер является ретранслятором для какого-либо домена, то этот домен (или домены) необходимо указать в списке relay_to_domains, это позволит любому хосту ретранслировать почту через ваш хост на этот домен. Если ретранслировать почту далее не надо, то данный список остается пустым. Список ретранслируемых доменов разделяется знаком двоеточия «:».
domainlist relay_to_domains =
Задаем список хостов использующие данный сервер как релей на любой узел в интернете. Здесь обычно указывается адрес интерфейса сервера и (или) локальная сеть. Список разделяется знаком двоеточия «:».
hostlist relay_from_hosts = localhost : 127.0.0.1
Указываем пути к сертификатам для TLS подключения, используем те же сертификаты что и для Dovecot.
Код:
tls_certificate = /usr/local/etc/letsencrypt/live/mybestserver.examle/fullchain.pem
tls_privkey = /usr/local/etc/letsencrypt/live/mybestserver.examle/privkey.pem
Указываем порты для подключения и порт для шифрованного подключения TLS.
Код:
daemon_smtp_ports = 25 : 465 : 587
tls_on_connect_ports = 465
Т.к. в качестве базы данных пользователя будет использоваться текстовый файл, а в качестве логина указываться полный адрес электронной почты, то при отправке почты Exim может автоматически подставлять через @ к этому имени пользователя имя хоста указанное в primary_hostname. Чтобы этого не происходило перед разделами ACL добавляем следующие настройки.
Код:
.ifndef MAIN_FORCE_SENDER
local_from_check = false
local_sender_retain = true
untrusted_set_sender = *
.endif
Подразумеваем что все локальные пользователи почты будут храниться в Dovecot, поэтому, в разделе Routers Configuration в localusers отключаем проверку локальных пользователей, а в transport указываем dovecot_virtual_delivery.
Код:
localuser:
driver = accept
## check_local_user ## Отключено для Dovecot Virtual Users
# local_part_suffix = +* : -*
# local_part_suffix_optional
## transport = local_delivery
transport = dovecot_virtual_delivery
cannot_route_message = Unknown user
В разделе Transports Configuration настраиваем доставку в почтовые ящики Dovecot (Документация).
Код:
dovecot_virtual_delivery:
driver = pipe
command = /usr/local/libexec/dovecot/dovecot-lda -d $local_part@$domain -f $sender_address
# v1.1+: command = /usr/local/libexec/dovecot/dovecot-lda -d $local_part@$domain -f $sender_address -a $original_local_part@$original_domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = dovenull
temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
Аутентификация будет производиться с помощью Dovecot, в разделе Authentification для этого вносим настройки.
Код:
LOGIN:
driver = plaintext
server_set_id = $auth1
server_prompts = <| Username: | Password:
server_condition = Authentication is not yet configured
server_advertise_condition = ${if def:tls_in_cipher }
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
Создание пользователей
Список пользователей и пароли будут храниться в файле /usr/local/etc/dovecot/users в формате пользователь:пароль. Имя пользователя будет соответствовать адресу электронной почты, пароль в зашифрованном виде.Создаем зашифрованный пароль для пользователя командой doveadm.
doveadm pw
Код:
Enter new password:
Retype new password:
{CRYPT}$2y$05$TKGOLEySAXqMuPIHbwxs6.b3QaPDgHg1DH/7oLh4AFW5FLzOFNw4W
Записываем в файл users данные для почтового ящика.
[email protected]:{CRYPT}$2y$05$TKGOLEySAXqMuPIHbwxs6.b3QaPDgHg1DH/7oLh4AFW5FLzOFNw4W
Запуск сервисов
Добавляем оба сервиса в автозагрузку.
Код:
# service dovecot enable
# service exim enable
Запускаем сервисы и проверяем работу электронной почты.
Код:
# service dovecot start
# service exim start
Логирование
Для получения развернутого отчета при возникновении каких-либо проблем в Dovecot необходимо настроить ведение журналов. Настройка производится в файле /usr/local/etc/dovecot/conf.d/10-logging.conf.
Лог файл для вывода сообщений об ошибках.
log_path = /var/log/dovecot/dovecot-errors.log
Лог файл для вывода информационных сообщений. По умолчанию используется log_path.
info_log_path = /var/log/dovecot/dovecot.log
Лог файл для вывода отладочной информации. По умолчанию используется info_log_path.
debug_log_path = /var/log/dovecot/dovecot-debug.log
Запись в лог неудачные попытки аутентификации и причины, по которым так произошло.
auth_verbose = yes
Запись в лог информации о несовпадении пароля. Данная настройка может быть полезна для определения попытки подбора пароля методом перебора.
auth_verbose_passwords = yes
Ведение более подробного журнала отладки. Может показывать SQL запросы.
auth_debug = yes
Ведение более подробного журнала отладки при несоответствии паролей. Включение этого параметра включает так же параметр auth_debug.
auth_debug_passwords = yes
Для ведения логов по отдельным протоколам пути к лог файлам указываются на настройках протокола. Пример для протокола lda, файл 15-lda.conf.
Код:
protocol lda {
log_path = /var/log/dovecot/dovecot-lda-errors.log
info_log_path = /var/log/dovecot/dovecot-lda.log
}
Создаем папку под лог файлы и раздаем на нее права.
Код:
# mkdir /var/log/dovecot/
# chown dovecot:dovecot /var/log/dovecot/
# chmod 777 /var/log/dovecot/
Логи Exim располагаются в /var/log/exim/, по умолчанию уровень логирования 5 из 6, чем меньше цифра, тем менее подробная информация пишется в лог. Уровень логирования задается параметром log_level от 0 до 6. Подробнее можно почитать в документации.