Установка и настройка почтового сервера на связке 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. Подробнее можно почитать в документации.