Настройка почтового сервера
DOVECOT + POSTFIX + OPENSSL + MySQL
Часть 2. Настройка Dovecot
root@poligon:~# lsb_release -d -r -c Description: Ubuntu 10.04 LTS Release: 10.04 Codename: lucid root@poligon:~# uname -a Linux poligon 2.6.18-194.8.1.el5.028stab070.2 #1 SMP Tue Jul 6 15:26:41 MSD 2010 i686 GNU/Linux
Так как в основном настройка Dovecot заключается в конфигурировании с помощью текстового файла, то я просто приведу обильно прокомментированный файл конфигурации на этом этапе.
Очень много комментариев я взял отсюда
Вообще, файл конфигурации Dovecot из начальной поставки очень хорошо прокомментирован, да и весь проект богат документацией. Так что сохраните его куда-нибудь, поразбирайтесь.
root@poligon:~/ssl# cat /etc/dovecot/dovecot.conf # Базовая директория для хранения всех данных во время выполнения #base_dir = /var/run/dovecot # Доступные протоколы. s - SSL protocols = imap pop3 imaps pop3s # Отключить авторизацию простым текстом, если соединение не надежно disable_plaintext_auth = no # Файл и формат лога log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot-info.log log_timestamp = " [%H:%M:%S] %d.%m.%Y" # Пути к сертификатам - те же, что и у Postfix ssl_cert_file = /root/ssl/certs/poligon.scaytrase.ru.crt ssl_key_file = /root/ssl/keys/poligon.scaytrase.ru.key ssl_key_password = /root/ssl/ca/rootCA.crt # Расположение почты # Месторасположение пользовательских почтовых ящиков. Это такой же параметр # как и старый default_mail_env. Значение по умолчанию отсутствует, это # означает, что Dovecot попытается найти ящики автоматически. Это не будет # работать, если у пользователя до сих пор нет никакой почты, поэтому вы # должны непосредственно указать Dovecot полный путь к ящику. # # Если вы используете mbox, указание пути к INBOX файлу (например, /var/mail/%u) # недостаточно. Вам также необходимо указать Dovecot где находятся другие ящики # и где Dovecot может расположить файлы с индексами. Это называется "корневая # почтовая директория", и она должна быть указана первой в параметре mail_location. # # Существует несколько специальных переменных, которые вы можете использовать: # # %u - имя пользователя # %n - пользовательская часть в user@domain, то же самое что и %u # если не задана доменная часть # %d - доменая часть в user@domain, пустая, если не указан домен # %h - домашняя директория # # Смотрите doc/variables.txt для полного списка переменных. # # Некоторые примеры: # 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:/home/vmail/%d/%n # Настройка пространства имен почтового ящика # Указывает разделитель в пути, префикс для всех папок, и наличие отдельной папки Входящие namespace private { separator = / prefix = [TESTMAIL]/ inbox = yes } # Группа unix для работы с почтой - таже что и в Postfix mail_privileged_group = vmail # Допустимый интервал UID для пользователей, по умолчанию 500 и выше. # Это сделано для того, чтобы быть увереным в том, что пользователи # не смогут войти как демоны или другие системные пользователи. # Примечание запрет входа root встроен в бинарник dovecot и не может # быть изменен, даже если установить first_valid_uid в 0. first_valid_uid = 241 last_valid_uid = 241 # Valid GID range for users, defaults to non-root/wheel. Users having # non-valid GID as primary group ID aren't allowed to log in. If user # belongs to supplementary groups with non-valid GIDs, those groups are # not set. first_valid_gid = 241 last_valid_gid = 241 # Настройки протокола IMAP # Тут я указываю только использование плагина autocreate, который поидее должен автоматически # создавать нужные папки в пространстве имен. До сих пор не уверен, что он работает. protocol imap { mail_plugins = autocreate } # Настройка протокола POP protocol pop3 { pop3_uidl_format = %08Xu%08Xv } # Протокол managesieve мы не используем, хотя есть мнение, что стоит научиться protocol managesieve { } # Настройка протокола LDA. Вроде тоже не пользуюсь, так как протокол авторизации - через mysql protocol lda { log_path = /home/vmail/dovecot-deliver.log auth_socket_path = /var/run/dovecot/auth-master postmaster_address = postmaster@scaytrase.ru mail_plugins = sieve mail_plugins = autocreate global_script_path = /home/vmail/globalsieverc } # Настройки механизмов авторизации auth default { # Разделенный пробелами список, используемых механизмов аутентификации: # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi mechanisms = plain login # # База данных паролей используется для проверки паролей пользователей # (и ничего более). Вы можете использовать множество passdbs и userdbs. # Это полезно, если вы хотите позволить обоим - системным пользователям и # (/etc/passwd) и виртуальным пользователям входить без необходимости # делать дубликаты системных пользователей в БД виртуальных пользователей. # # http://wiki.dovecot.org/PasswordDatabase # # Пользователи могут быть временно отключены с помощью добавления deny=yes # в passdb. Если пользователь найден в БД, аутентификация потерпит неудачу. # БД с отключенными пользователями всегда должна быть указана перед остальными, # так как ее проверка идет первой. passdb sql { args = /etc/dovecot/dovecot-sql.conf } # SQL database # # База данных пользователей указывает месторасположение почтовых ящиков # и пользователя/группу владеющего этим ящиком. # # http://wiki.dovecot.org/UserDatabase # # SQL database # http://wiki.dovecot.org/AuthDatabase/SQL userdb static { args = uid=241 gid=241 home=/home/vmail/%d/%n allow_all_users=yes } socket listen { # Данный сокет обычно используется, чтобы дать доступ dovecot LDA # к userdb, для того, чтобы он мог найти информацию о месторасположении # почтовых ящиков пользователей. Данный сокет может также использоваться # для обычной аутентификации пользователей. # ПРЕДУПРЕЖДЕНИЕ: Не давайте права доступа к этому сокету недоверенным # пользователям. Это может привести к нарушению безопасности системы. # По возможности ограничьте доступ к данному сокету. master { path = /var/run/dovecot/auth-master mode = 0600 user = vmail } # Обычно безопасно давать полный доступ к данному сокету. # Как правило, данный сокет используют SMTP сервера для того, чтобы # производить smtp аутентификацию. client { path = /var/spool/postfix/private/auth mode = 0777 user = postfix group= postfix } } } dict { } # Настройки того самого плагина Autocreate plugin { autocreate = Sent autosubscribe = Sent autocreate2 = Trash autosubscribe2 = Trash autocreate3 = Drafts autosubscribe3 = Drafts autocreate4 = Templates } # Список символов, разрешенных к применению в имени пользователя auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
Так как в наших настройках нет реальных юникосвых пользователей, то настройка значительно упростилась.
Теперь нам надо создать упомянутый в настройках файл /etc/dovecot/dovecot-sql.conf (он тоже есть, сохраните почитать).
root@poligon:~/ssl# cat /etc/dovecot/dovecot-sql.conf driver = mysql connect = host=localhost dbname=mail user=mail password=mail_password default_pass_scheme = PLAIN-MD5 password_query = SELECT email as user, password FROM view_users WHERE email='%u'
В оригинальных конфигах было host=127.0.0.1, но почему то он отказывался соединяться через TCP\IP, поэтому я заменил на localhost, тогда он стал бегать нормально, кажется через сокеты.
Можем смело рестартить Dovecot:
root@poligon:~# tail -f /var/log/dovecot-info.log [20:49:47] 10.07.2011dovecot: Info: Dovecot v1.2.9 starting up (core dumps disabled) [20:49:47] 10.07.2011auth-worker(default): Info: mysql: Connected to localhost (mail)
Dovecot рапортует об успешном запуске и подключении к базе данных.
Теперь попробуем провести аутентификацию, которая не получилась у нас в прошлой части:
scaytrase@st-Laptop ~ $ openssl s_client -starttls smtp -crlf -connect poligon.scaytrase.ru:25 CONNECTED(00000003) depth=0 /C=RU/ST=Russia/O=ScayTrase Personal/OU=Security Team/CN=poligon.scaytrase.ru/emailAddress=pavel.batanov@scaytrase.ru <... Куча технических данных подключения...> --- 250 DSN EHLO localhost 250-poligon.scaytrase.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Ура, как мы видим — есть коннект
Пробуем авторизоваться. Весь обмен данными идет в Base64. Я, чтобы не заморачиваться, использую этот онлайн сервис
AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdHVzZXJAcG9saWdvbi5zY2F5dHJhc2UucnU= 334 UGFzc3dvcmQ6 c2VjcmV0 235 2.7.0 Authentication successful
Как мы видим, авторизация прошла успешно. Попробуем отправить письмо. Как показала практика, не пишите RCPT TO большими буквами, и вообще, не пишите R в начале, только r, если надо. А то будут фантомные глюки, которых на самом деле нет.
mail from:<testuser@poligon.scaytrase.ru> 250 2.1.0 Ok rcpt to:<pavel.batanov@scaytrase.ru> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> hello, test mail! . 250 2.0.0 Ok: queued as 7F13422C0D0 quit 221 2.0.0 Bye
Успех, письмо пришло. Осталось проверить IMAP. для этого берем какой нить thunderbird и пробуем пользоваться. Только не забудьте добавить сертификат в доверенные.
ВОбщем то все работает. Сделайте chmod 770 на файлы логов. А то пока тестировал — не приходили письма из-за того, что один из них не мог туда записать.