Установка и настройка почтового сервера на связке Dovecot и Exim без БД в FreeBSD
Рассмотрим установку и настройку связки Dovecot и Exim без использования базы данных для хранения учетных записей пользователей. Аутентификация будет производиться проверкой текстовой пары логин и пароль при этом данные для аутентификации будут храниться в отдельном текстовом файле. Все описанные ниже действия проводились на ОС FreeBSD.
- Установка Dovecot и Exim
- Настройка Dovecot
- Настройка Exim
- Создание пользователей
- Запуск сервисов
- Логирование
Установка 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 данные для почтового ящика.
testuser@mybestserver.examle:{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. Подробнее можно почитать в документации.