Dovecot - "выгребаем" почту из почтового ящика

Версия для печатиОтправить другуPDF version

Dovecot

Собственно говоря, прием почты настроили. Почта падает в каталоги пользователя на сервере и там хранится... А как же эту почту пользователю "забрать"? Для этого нам понадобится какой-то MDA (mail delivery agent). Свой выбор я остановил на MDA Dovecot. Описывать его преимущества и недостатки не буду - етой информации достаточно в Интернете.

Итак, есть MTA Exim, настроенный согласно этой статьи. Приступаем к установке и настройки Dovecot-а. "Топаем" в порты и даем команду установки:

# cd /usr/ports/mail/dovecot && make install clean && rehash

При конфигурировании я отметил такие опции установки:

Options for dovecot 1.2.17

[X] KQUEUE       kqueue(2) support
[X] SSL          SSL support
[X] MANAGESIEVE  ManageSieve support
[ ] GSSAPI       GSSAPI support
[ ] VPOPMAIL     VPopMail support
[ ] BDB          BerkleyDB support
[ ] LDAP         OpenLDAP support
[ ] PGSQL        PostgreSQL support
[X] MYSQL        MySQL support
[ ] SQLITE       SQLite support

По завершению установки можно приступать к редактированию конфигурационного файла. Путь к конфигурационному файлу следующий: /usr/local/etc/dovecot.conf. Взялся за перевод файла, потом забил на это дело и перевел только используемые в файле конфигурации параметры. Скачать dovecot.conf можно здесь (кодировка KOI8-R). Листинг файла следующий:

## Dovecot configuration file

# Каталог, гда хранятся временные данные.
base_dir = /var/run/dovecot/

# Протоколы, которые будут доступны для обслуживания клиентов.
protocols = imap pop3 imaps pop3s

# Список IP-адресов, на которых "слушать" запросы. Разделителем выступает
# пробел. Если указать "*", то запросы будут ожидаться на всех обнаруженных
# IPv4 интерфейсах. Чтобы слушать на всех IPv6 интерфейсах, необходимо
# указать "[::]". Чтобы слушать на всех IPv4 и IPv6 интерфейсах, необходимо
# установить значение в "*, [::]".
# Если хотите задать специфический порт для определенного сервиса, необходимо
# выполнять настройки в секции определенного протокола. Пример:
#   protocol imap {
#     listen = *:10143
#     ssl_listen = *:10943
#     ..
#   }
#   protocol pop3 {
#     listen = *:10100
#     ..
#   }
#   protocol managesieve {
#     listen = *:12000
#     ..
#   }
listen = 91.221.84.10

# Отключить команду 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 сертификат и секретный ключ. Они открываются
# перед удалением привилегий root, поэтому сделайте файл ключа нечитабельным
# для всех кроме root. Добавленный скрипт doc/mkcert.sh может использоваться
# для легкой генерации самоподписного сертификата, только не забудьте
# обновить домены в dovecot-openssl.cnf
ssl_cert_file = /etc/ssl/certs/mail.pem
ssl_key_file = /etc/ssl/certs/mail.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
##
## Размещение ящиков и пространство имен
##

# Размещение ящиков пользователей. Это похоже на старый параметр
# 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 [at] ispalternativa [dot] net [dot] ua
# Имя хоста, используемое в разных частях отправленного письма, например
# в Message-Id. По умолчанию используемся системное имя хоста
hostname = mail.ispalternativa.net.ua
# Формат, используемый для логирования доставки почты. Доступные переменные:
#  %$ - Статус доставки сообщения (например "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 10.08.2011

Перевод и конфигурирование dovecot.conf завершен... Следующий шаг - создание конфигурационного файла SQL (dovecot-sql.conf), путь к которому указан в dovecot.conf. Загрузить его можно по этой ссылке. А листинг его следующий:

driver = mysql
connect = host=localhost user=exim password=MySQL-pass-here 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 при запуске операционной системы:

# echo '# Dovecot' >> /etc/rc.conf
# echo 'dovecot_enable="YES"' >> /etc/rc.conf

Попытаемся запустить сервис:

 

# sh /usr/local/etc/rc.d/dovecot start

Проверим, на всякий случай, запустился ли Dovecot:

 

# ps -ax | grep dovecot
17253  ??  Ss     0:00,01 /usr/local/sbin/dovecot -c /usr/local/etc/dovecot.conf
17254  ??  S      0:00,01 dovecot-auth
17255  ??  I      0:00,01 dovecot-auth -w

Кажется все в порядке... Для проверки проведем POP3-сесию, воспользовавшись почтовым аккаунтом, созданным в этой статье:

 

# telnet mail.ispalternativa.net.ua 110
Trying 91.221.84.10...
Connected to mail.ispalternativa.net.ua.
Escape character is '^]'.
+OK Dovecot ready.
USER muff [at] ispalternativa [dot] net [dot] ua
+OK
PASS password-here
+OK Logged in.
STAT
+OK 7 86984
LIST
+OK 7 messages:
1 681
2 57545
3 3306
4 511
5 1447
6 19761
7 3733
.
RETR 1
+OK 681 octets
Return-path: <root [at] ispalternativa [dot] net [dot] ua>
Envelope-to: muff [at] ispalternativa [dot] net [dot] ua
Delivery-date: Tue, 09 Aug 2011 02:59:27 +0300
Received: from [127.0.0.1] (helo=mail.ispalternativa.net.ua)
        by mail.ispalternativa.net.ua with esmtp (Exim 4.76 (FreeBSD))
        (envelope-from <root [at] ispalternativa [dot] net [dot] ua>)
        id 1QqZiT-000OaC-M8
        for muff [at] ispalternativa [dot] net [dot] ua; Tue, 09 Aug 2011 02:59:27 +0300
To: muff [at] ispalternativa [dot] net [dot] ua
From: root [at] ispalternativa [dot] net [dot] ua
Subject: TestMail

Hi!
This is a test message.
.
DELE 1
+OK Marked to be deleted.
QUIT
+OK Logging out, messages deleted.
Connection closed by foreign host.

 "Последний штрих" - настройка ротации лога dovecot.log. Если этого не сделать (да еще и включить отладку), то очень скоро он "распухнет" до неимоверных размеров. Поэтому раз в неделю будем этот файл архивировать и очищать. Особенностью данного процесса есть то, что если не дать процессу Dovecot сигнал HUP, то он перестает писать в лог. Поэтому строка для добавления в файл newsyslog.conf будет такая:

/var/log/dovecot.log            600  7     *    $W6D0 JC   /var/run/dovecot/master.pid

Более подробно о ротации логов можно узнать в этой статье.

Кажется на этом все... Пора пить шампанское и бить в там-тамы - все работает. Хотя, наверное, для полного счастья необходимо будет "прицепить" какой-то из почтовых веб-интерфейсов.

Ваша оценка: Нет Средняя: 4.3 (8 голосов)

А про защиту от спама

А про защиту от спама планируется статья? =)

Прошу любить и жаловать....

Прошу любить и жаловать.... Вот ссылочка.

Re: Dovecot - "выгребаем" почту из почтового ящика

схема CRYPT возможно нужно перейти на более безопасную схему (количество символов в пароле)

Re: Dovecot - "выгребаем" почту из почтового ящика

Все же:

============

first_valid_uid = 26

first_valid_gid = 6

============
 
Если смотреть в /etc/group, то:
============

# grep mail /etc/group

mail:*:6:

mailnull:*:26:

============

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература