Установка Dovecot из портов во freeBSD
Dovecot — свободный IMAP- и POP3-сервер при этом наблюдается быстродействием и надежностью и к тому же просто настраивается. Подробно ознакомится можно на официальном сайте Dovecot. Последняя и стабильная версия — v2.2.12, но я буду ставить его из первой ветки ( последняя его версия — v1.2.17). Я расскажу как происходит «Установка Dovecot из портов во freeBSD» в связки Postfix, MySQL, SpamAssassin, Maia в FreeBSD, но для начала установим сервер:
# cd /usr/ports/mail/dovecot # make all install clean
НЕ ЗАБЫВАЕМ УСТАНОВИТЬ ОПЦИИ ДЛЯ УСТАНОВКИ «MYSQL». Будьте внимательны!
После того как сервер довекот установлен, добавим его в автозапуск системы, для этого добавим в /etc/rc.conf следующий текст:
# echo 'dovecot_enable="YES" ' >> /etc/rc.conf
Копируем конфигурационные файлы Dovecot:
# cp /usr/local/share/examples/dovecot/dovecot.conf /usr/local/etc/dovecot.conf # cp /usr/local/share/examples/dovecot/dovecot-sql.conf /usr/local/etc/dovecot-sql.conf
Для безопасного соединения я создам SSL/TLS сертификат, который будет лежать в /etc/ssl/dovecot/:
# mkdir -p /etc/ssl/dovecot # cd /etc/ssl/dovecot # openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 365
Редактируем конфигурационный файл dovecot.conf который лежит в /usr/local/etc/:
# ee /usr/local/etc/dovecot.conf
Выложу свой готовый конфиг, Вам придется сменить немного (ИП сервера, мыло и кое что еще)
dovecot.conf:
## Dovecot configuration file # Каталог, где хранятся временные данные. base_dir = /var/run/dovecot/ # Протоколы, которые будут доступны для обслуживания клиентов. protocols = imap pop3 imaps pop3s # Список IP-адресов, на которых "слушать" запросы. Разделителем выступает # пробел. Если указать "*", то запросы будут ожидаться на всех обнаруженных # IPv4 интерфейсах. Чтобы слушать на всех IPv6 интерфейсах, необходимо # указать "[::]". Чтобы слушать на всех IPv4 и IPv6 интерфейсах, необходимо # установить значение в "*, [::]". # Установка Dovecot из портов во freeBSD # Если хотите задать специфический порт для определенного сервиса, необходимо # выполнять настройки в секции определенного протокола. Пример: # protocol imap { # listen = *:10143 # ssl_listen = *:10943 # .. # } # protocol pop3 { # listen = *:10100 # .. # } # protocol managesieve { # listen = *:12000 # .. # } listen = 192.168.244.133 # Отключить команду LOGIN и другие LOGIN аутентификации за исключением, # когда используется SSL/TLS (совместимо с LOGINDISABLED). Если удаленный # IP совпадает с локальным IP (имеется ввиду соединение с этого же # компьютера), соединение считается защищенным и эта plaintext аутентификация # разрешается. disable_plaintext_auth = no # Уничтожать все IMAP и POP3 процессы, когда останавливается родительский # Dovecot процесс. Если установить в "no", то можно розконфигурировать # Dovecot без принудительного закрытия открытых клиентских подключений (это # может быть проблемой, например если обновление связано с устранением # какой-то уязвимости). Учтите, что если родительский процесс остановлен, # то дочерние процессы не могут писать свои действия в логи. shutdown_clients = yes ## ## Ведение логов ## # Путь к лог-файлу для сообщений, вместо syslog. Можно использовать # /dev/stderr для ведения логов. log_path = /var/log/dovecot.log # Лог-файл для информационных и отладочных сообщений. По умолчанию # такой же, как log_path. #info_log_path = # Префикс для каждой записи в лог-файл. Коды предоставлены в формате # strftime(3). log_timestamp = "%b %d %H:%M:%S " # Средства (facility) syslog, используемый для ведения логов через syslog. # Обычно, если по каким-либо причинам не хочется использовать средства # (facility) "mail", можно использовать local0..local7. Также другие # стандартные средства (facility) поддерживаются. #syslog_facility = mail ## ## SSL настройки ## # IP-адрес или же имя хоста для прослушивания SSL-соединений. Помните, что # необходимо добавить также в сессию imaps и/или pop3s протоколов. По умолчанию # принимает такое же значение, как "listen", если не задано. #ssl_listen = mail.ispalternativa.net.ua # PEM кодированный X.509 SSL/TLS сертификат и секретный ключ. Установка Dovecot из портов во freeBSD #Они открываются # перед удалением привилегий root, поэтому сделайте файл ключа нечитабельным # для всех кроме root. Добавленный скрипт doc/mkcert.sh может использоваться # для легкой генерации самоподписного сертификата, только не забудьте # обновить домены в dovecot-openssl.cnf ssl_cert_file = /etc/ssl/dovecot/cert.pem ssl_key_file = /etc/ssl/dovecot/key.pem # Если файл ключа защищен паролем, укажете его здесь. Как вариант, можно # запускать dovecot с параметром -p. #ssl_key_password = # Файл, содержащий доверенные центры сертификации. Используйте только вместо # использования ssl_verify_client_cert=yes. #ssl_ca_file = # Запрос клиента на отправку сертификата. Если хочешь использовать также # и эту опцию, необходимо установить также ssl_require_client_cert=yes в # секции авторизации. #ssl_verify_client_cert = no # Какое поле сертификата используется как username. commonName и # x500UniqueIdentifier используются как обычно. Необходимо также задать # параметр ssl_username_from_cert=yes. #ssl_cert_username_field = commonName # Как часто регенерировать файл с параметрами SSL. Генерация - довольно # интенсивно использует CPU. Значение в часах, 0 - отключает регенерацию. #ssl_parameters_regenerate = 168 # Набор символов, используемый SSL #ssl_cipher_list = ALL:!LOW:!SSLv2 # Отображать ошибки SSL на уровне протокола. #verbose_ssl = no ## ## Процесс аутентификации ## # <doc/wiki/LoginProcess.txt> # Каталог, где аутентификационный процесс размещает UNIX сокеты, которые # необходимы для дальнейшего соединения. Сокеты создаются от имени root, # поэтому не нужно беспокоиться о разрешениях. Имейте ввиду, что все что # было в этом каталоге - удаляется, когда Dovecot запускается. login_dir = /var/run/dovecot/login # chroot-ить процесс авторизации в login_dir. login_chroot = yes # Имя пользователя, которое используется в процессе аутентификации. # Создайте полностью нового пользователя для этого. Этот юзер должен также # принадлежать группе, которая имеет доступ только к аутентификационному # процессу. login_user = dovecot # Задайте максимальный размер процесса в мегабайтах. Если Вы не # используете login_process_per_connection, то необходимо увеличить # это значение. #login_process_size = 64 # Каждый процесс авторизации должен быть обработан своим процессом (yes), # или один процесс может обрабатывать несколько соединений (no). Yes - более # безопасно, особенно если используется SSL/TLS. No - работает быстрее, # поскольку нету необходимости плодить процессы на каждое соединение. login_process_per_connection = yes # Количество процессов авторизации, ожидающих новых соединений. login_processes_count = 3 # Максимальное количество создаваемых процессов авторизации. Количество # запущенных процессов обычно задается login_processes_count, но иногда # несколько пользователей запускают процесс авторизации одновременно, поэтому # может создаваться несколько большее количество процессов. Для предотвращения # fork-bombing проверка необходимости создания новых процессов выполняется раз # в секунду - если все используются, то их количество удваивается до предела, # указанного этим параметром. login_max_processes_count = 128 # Максимальное количество соединений, разрешенных в состоянии авторизации. # Эта опция используется только если login_process_per_connection=no. Когда # лимит достигнут, процесс уведомляет родительский, что он может создать # новый процесс авторизации. #login_max_connections = 256 # Приветственное сообщение для клиентов. login_greeting = Dovecot ready. # Список доверенных сетей, разделенных пробелом. Соединениям с этих IP-адресов # разрешено отвергать эти IP-адреса и порты (для авторизации и процесса # аутентификации). disable_plaintext_auth всегда игнорируется для этих сетей. # Обычно здесь задается IMAP-прокси сервер. #login_trusted_networks = # Список элементов для логирования, разделенный пробелом. Непустые элементы # будут объединены в строку через запятую. login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c # Формат лога авторизации. %$ содержит строку login_log_format_elements, %s # содержит данные, которые пишутся в лог. login_log_format = %$: %s ##Установка Dovecot из портов во freeBSD ## Размещение ящиков и пространство имен ## # Размещение ящиков пользователей. Это похоже на старый параметр # default_mail_env. По умолчанию пустой, тогда Dovecot пытается найти ящики # автоматически. Не сработает, если пользователь еще не имеет почты, поэтому # необходимо указать Dovecot полное размещение. # # Если используется mbox, указать путь к INBOX файлу (например /var/mail/%u) # недостаточно. Необходимо будет указать Dovecot где другие ящики размещены. # Это называется "root mail directory", и это должен быть первый путь, # заданный в настройках mail_location. # # Несколько переменных, которые можно использовать. # # %u - имя пользователя # %n - пользовательская часть в user@domain, то же, что и %u если домен # не указан # %d - доменная часть в user@domain, пустая, если домен не указан # %h - домашний каталог # # Несколько примеров: # # mail_location = maildir:~/Maildir # mail_location = mbox:~/mail:INBOX=/var/mail/%u # mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n # mail_location = maildir:/var/exim/%Ld/%Ln # Системные пользователь и группа, которые используются для доступа к почте. # Если используется несколько, userdb может отвергать возвращенные поля # uid или gid. Можно использовать номера или имена. mail_uid = mailnull mail_gid = mail # Группа, назначаемая временно для привилегированных операций. На данный # момент используется только с INBOX, когда также инициируется создание # или dotlock файлов. # Обычно задается как "mail", чтобы иметь доступ к /var/mail. mail_privileged_group = mail ## ## Почтовые процессы ## # Показывать больше отладочной информации (в ps). На данный момент # отображается имя пользователя и IP-адрес. Может пригодиться при # просмотре кто фактически использует IMAP процессы (например общие # почтовые ящики или если один uid используется несколькими аккаунтами. verbose_proctitle = yes # Разрешенный диапазон UID для пользователей, по умолчанию 500 и выше. # Это дает уверенность в том, что пользователи не залогинятся как # демоны либо другие системные пользователи. Имейте ввиду, что запрет # авторизации под root жестко определен в бинарниках и не сработает, # даже если first_valid_uid задать 0. first_valid_uid = 25 #last_valid_uid = 0 # Разрешенный диапазон GID для пользователей, по умолчанию не root # или wheel. Пользователям, имеющим неразрешенный GID как ID первичной # группы, вход запрещен. Если пользователь принадлежит к дополнительной # группе с неразрешенным GIDs, эта группа не задается. first_valid_gid = 5 #last_valid_gid = 0 ## ## Специфические настройки IMAP ## protocol imap { # Размещение исполняемого файла авторизации. login_executable = /usr/local/libexec/dovecot/imap-login # Размещение исполняемого файла IMAP. Изменение разрешит выполнять # другие бинарники до запуска процесса imap. mail_executable = /usr/local/libexec/dovecot/imap # Поддержка динамически подгружаемых расширений. mail_plugins - список # расширений для загрузки, разделенный пробелами. mail_plugins = quota imap_quota #mail_plugin_dir = /usr/local/lib/dovecot/imap # Обработка клиентских ошибок: # delay-newmail: # Отравлять EXISTS/RECENT уведомления о новой почте только как ответ на NOOP # и CHECK команды. Некоторые клиенты игнорируют их, например OSX Mail # (<v2.1). Outlook Express прерывается хуже, без этого может показать # пользователям ошибку "Message no longer in server". Имейте ввиду, что OE6 # до сих пор выдает ошибку, когда установлена синхронизация "Headers Only". # netscape-eoh: # Netscape 4.x прерывается, если заголовки сообщения не заканчиваются пустой # линией "end of headers". Обычно все сообщения имеют ее, однако эта настройка # проверяет наличие разрыва и добавляет его в случае отсутствия. Это # исполняется только для команды FETCH BODY[HEADER.FIELDS..]. Имейте ввиду, # что согласно RFC этого делать не нужно. # tb-extra-mailbox-sep: # При типе хранения mbox почтовые ящики могут содержать почту либо почтовые # подкаталоги, но не то и другое одновременно. Thunderbird разделяет их, # вынуждая сервер принять '/' в имени почтовых ящиков в списке подписок. # Этот список разделяется пробелом. imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep } ## ## Специфические настройки POP3 ## protocol pop3 { # Размещение исполняемого файла авторизации. login_executable = /usr/local/libexec/dovecot/pop3-login # Размещение исполняемого файла POP3. Рассматривай IMAP's mail_executable # как пример. mail_executable = /usr/local/libexec/dovecot/pop3 # Используемый формат POP3 UIDL (unique mail identifier). Доступны # следующие переменные. # # %v - Mailbox's IMAP UIDVALIDITY # %u - Mail's IMAP UID # %m - Сумма MD5 заголовков почтового ящика в hex (только mbox) # %f - имя файла (только maildir) # # Если необходима совместимость UIDL с другими POP3-серверами, используйте: # UW's ipop3d : %08Xv%08Xu # Courier : %f or %v-%u (оба могут быть использованы) # Cyrus (<= 2.1.3) : %u # Cyrus (>= 2.1.4) : %v.%u # Dovecot v0.99.x : %v.%u # tpop3d : %Mf # # Имейте ввиду, что Outlook 2003 имеет проблемы с форматом %v.%u, который # является для Dovecot форматом по умолчанию, и если настраивается новый # сервер, то было бы неплохо изменить этот параметр. pop3_uidl_format = %08Xu%08Xv # Поддержка динамически подгружаемых расширений. mail_plugins - список # расширений для загрузки, разделенный пробелами. mail_plugins = quota #mail_plugin_dir = /usr/local/lib/dovecot/pop3 # Обработка некоторых клиентских ошибок: # outlook-no-nuls: # Outlook и Outlook Express зависают, если сообщение содержит NUL # символы. Этот параметр заменяет их символами 0x80. # oe-ns-eoh: # Outlook Express и Netscape Mail прерываются, если повреждена линия # конца заголовка. Этот параметр отправляет ее, при повреждении. # Этот список разделяется пробелом. pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } ## ## Специфические настройки LDA ## protocol lda { # Адрес используется для отправки отброшенных писем. postmaster_address = postmaster@ispalternativa.net.ua # Имя хоста, используемое в разных частях отправленного письма, например # в Message-Id. По умолчанию используемся системное имя хоста #hostname = mail.ispalternativa.net.ua hostname = 192.168.244.133 # Формат, используемый для логирования доставки почты. Доступные переменные: # %$ - Статус доставки сообщения (например "saved to INBOX") # %m - Message-ID # %s - Тема # %f - С какого адреса deliver_log_format = msgid=%m %f: %$ # Бинарник, используемый для отправки сообщений. sendmail_path = /usr/sbin/sendmail } ## ## Процесс авторизации ## # Логировать неуспешные попытки авторизации и причины ошибок. auth_verbose = yes # Более расширенная информация о авторизации для отладки. Отображает, # например, SQL-запросы. auth_debug = no # В случае, если пароли не совпадают. логировать пароль и пользовательскую # схему, что дает возможность отладки. Включая эту опцию также необходимо # включить auth_debug. auth_debug_passwords = no auth default { # Список разделенных пробелом механизмов авторизации: # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey # gss-spnego mechanisms = plain # База данных для проверки паролей пользователей (и ничего больше). Можно # использовать несколько баз паролей и пользователей. Это нужно, если # необходимо разрешить одновременно и системных пользователей (/etc/passwd) # и виртуальных пользователей без дублирования системных пользователей # в виртуальной базе данных. # SQL database passdb sql { # Путь к конфигурационному файлу SQL. args = /usr/local/etc/dovecot-sql.conf } # Назад данных пользователей, определяющая, где расположена почта и где # какие UID и GID имеют доступ. Для single-UID используйте "static". # SQL database userdb sql { # Путь к конфигурационному файлу SQL. args = /usr/local/etc/dovecot-sql.conf } # Пользователь, от имени которого работает процесс. Этому пользователю # необходим доступ только к базе пользователей и паролей, ничего больше. # Только shadow и pam аутентификация требуют прав root-а, иначе можно # использовать любого, если это возможно. Имейте ввиду, что passwd # аутентификация с внутренним обращением BSD к теневым файлам, также # требует права root. Имейте ввиду, что пользователь НЕ используется # для доступа к почте. Этот пользователь задается только для доступа к # базам данным, как уже говорилось выше. user = mailnull } ## ## Настройки словаря сервера ## # Словарь может быть использован расширениями для сохранения списка # ключ=значение, таких как квота, срок действия и списки контроля # доступа. Словарь может быть использован напрямую, либо же через # сервер словарей. dict { #quota = mysql:/usr/local/etc/dovecot-dict-quota.conf #expire = db:/var/db/dovecot/expire.db } ## ## Настройка расширений ## plugin { # Тут можно задать некоторые определенные переменные для почтовых # процессов. Обычно это используется для параметров расширений. # Расширение %variable выпольнено для всех значений. # Quota plugin. quota = maildir }
Скачать dovecot.conf можно у меня на сайте, перейдя по ссылке
Редактируем конфигурационный файл /usr/local/etc/dovecot-sql.conf, я выложу свой готовый и рабочий конфиг:
# ee /usr/local/etc/dovecot-sql.conf
driver = mysql connect = host=localhost user=root password=root dbname=exim default_pass_scheme = CRYPT password_query = SELECT password FROM users WHERE login = '%n' AND domain = '%d' AND status = '1' user_query = SELECT uid, gid FROM users WHERE login = '%n' AND domain = '%d'
Скачать dovecot-sql.conf можно у меня на сайте, перейдя по ссылке
Стартуем dovecot- сервис:
# service dovecot start
Проверим стартанул ли он, выполнив команду:
# ps -aux | grep dovecot
Проверим как это все работает, на примере POP3 сессии:
Видим что я подключился к серверу почты, затем нужно ввести логин и пароль, и можно отправить любое письмо.
Установка Dovecot из портов во freeBSD — ЗАВЕРШЕНА ))