Собственно говоря, прием почты настроили. Почта падает в каталоги пользователя на сервере и там хранится... А как же эту почту пользователю "забрать"? Для этого нам понадобится какой-то 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 |
Попытаемся запустить сервис:
# sh /usr/local/etc/rc.d/dovecot start |
Проверим, на всякий случай, запустился ли Dovecot:
# ps -ax | grep dovecot |
Кажется все в порядке... Для проверки проведем POP3-сесию, воспользовавшись почтовым аккаунтом, созданным в этой статье:
# telnet mail.ispalternativa.net.ua 110 Hi! |
"Последний штрих" - настройка ротации лога dovecot.log. Если этого не сделать (да еще и включить отладку), то очень скоро он "распухнет" до неимоверных размеров. Поэтому раз в неделю будем этот файл архивировать и очищать. Особенностью данного процесса есть то, что если не дать процессу Dovecot сигнал HUP, то он перестает писать в лог. Поэтому строка для добавления в файл newsyslog.conf будет такая:
/var/log/dovecot.log 600 7 * $W6D0 JC /var/run/dovecot/master.pid |
Более подробно о ротации логов можно узнать в этой статье.
Кажется на этом все... Пора пить шампанское и бить в там-тамы - все работает. Хотя, наверное, для полного счастья необходимо будет "прицепить" какой-то из почтовых веб-интерфейсов.
А про защиту от спама
А про защиту от спама планируется статья? =)
Прошу любить и жаловать....
Прошу любить и жаловать.... Вот ссылочка.
Re: Dovecot - "выгребаем" почту из почтового ящика
схема CRYPT возможно нужно перейти на более безопасную схему (количество символов в пароле)
Re: Dovecot - "выгребаем" почту из почтового ящика
Все же:
============
first_valid_uid = 26
first_valid_gid = 6
# grep mail /etc/group
mail:*:6:
mailnull:*:26:
============