Лаборатория Maint, Настройка Dovecot 2.x для работы с LDAP и postfix
Maint Laboratory

Лаборатория Maint

 
  Главная     Программы     RPM пакеты     Библиотеки     Документация     Заметки     Услуги     Контакты  

 

Настройка Dovecot 2.x для работы с openldap и postfix.
Отличие от настройки dovecot версии 1.x.

  При смене версии dovecot на 2.x произошло изменение, как в некоторых параметрах конфигурации, так и прошел разнос конфигурации по отдельным файлам. В этом есть своя логика, но она затрудняет настройку по предыдущей статье.. Введено понятия include в файлы конфигурации, что упрощает поиск и настройку каждого отдельного компонента сервера, включая их содержимое в конфигурационный файл. Однако новая иерархия файлов конфигурации не запрещает использовать и один-два файла. Я буду описывать настройку согласно старой иерархии конфигурационных файлов, что бы не описывать параметры, которые не имеют никакого отношения к теме статьи.

Список обслуживаемыз протоколов:

protocols = imap pop3 lmtp

  Отличием от 1.х стало добавления протокола lmtp и исключение, в явном виде, описания, как отдельных протоколов imaps и pop3s (ssl соединение). Они вошли в описание протоколов imap и pop3, что вполне логично.
Новым параметром процесса аутентификации стал auth_username_chars. Он определяет, какие символы могут быть в имени пользователя.

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

  Видно, что присутствуют только латинские буквы и символы допустимые в адресе электронной почты. Я бы не рекомендовал, пока оставить как есть. Домены с именами на национальных языках до сих пор имеют запасной адрес на латинице. С которого, чаще всего и отправляется почта. Кроме того, обеспечивается.корректная работа при запросах в базы SQL и LDAP. Своеобразная защита баз данных.
Изменилось описание работы с базой. Убран параметр auth default. Параметры passdb (база паролей) и userdb(база сведений о пользователе) и выглядит таким образом:

passdb {
    args = /etc/dovecot/dovecot-ldap.conf
    driver = ldap
}
userdb {
    args = /etc/dovecot/dovecot-ldap.conf
    driver = ldap
}

Появилось новое понятие service.
Сервис аутентификации:

service auth {
    unix_listener /var/spool/postfix/private/dovecot-smtp-auth {
        group = postfix
        mode = 0660
        user = postfix
    }
    unix_listener auth-master {
        group = mail
        mode = 0660
        user = virtual
    }
    unix_listener auth-userdb {
    mode = 0600
    user = virtual
    group = mail
    }     user = virtual
}

Напомню, что пользователь virtual, это учетная запись, работающая с виртуальными почтовыми ящиками. unix_listener /var/spool/postfix/private/dovecot-smtp-auth - указывает, что данный сокет будет использовать SMTP сервер для аутентификации. Указывается пользователь, группа и права доступа к сокету. В нашем случае это postfix.

unix_listener auth-master - дать доступ dovecot LDA к userdb, для того, чтобы он мог найти информацию о месторасположении почтовых ящиков пользователей. Также использоваться для обычной аутентификации пользователей. ПРЕДУПРЕЖДЕНИЕ: Не давайте права доступа к этому сокету недоверенным пользователям. Это может привести к нарушению безопасности системы.

unix_listener auth-userdb - сокет к базе данных пользователей. Обычно его используют dovecot-lda, doveadm, возможно imap и т.д.

Сервисы доступа к почтовым ящикам по POP3 и IMAP.

service imap-login {
    inet_listener imap {
"         address = *
        port = 143
    }
    inet_listener imaps {
        address = *
        port = 993
    }
}

" service pop3-login {
    inet_listener pop3 {
        address = *
        port = 110
    }
    inet_listener pop3s {
        address = *
        port = 995
    }
}

  imaps и pop3s указывают на то, что может быть задействовано соединение по ssl. Остальное все достаточно прозрачно, с помощью параметра port указываем номер порта, который будет "слушать" служба. А параметром address, возможно ограничить круг запросов с адресов. У меня указано, для всех (*), а можно, например, ограничить диапазоном своей локальной сети.

Из необходимых для минимальной конфигурации параметров осталось описать только dovecot LDA (доставка писем в ящик пользователя)

protocol lda {
    hostname = example.ru
    mail_plugins = $mail_plugins
    postmaster_address = postmaster@example.ru
}

Задается имя почтового сервера, плагин и адрес, на который необхожимо отсылать ошибки.
Дополнительно, для более изысканной настройки, можно подключить файлы из каталога /etc/dovecot/conf.d. Например, для более точной настройки протоколоа lda.

!include conf.d/15-lda.conf

исключив последнее описание в этой конфигурации.

  Появилось новое интересное понятие, словарь. С его помощью вы можете ограничить список имен и серверов. Но для минимальной конфигурации, описанного выше вполне достаточно. Описания в dovecot-ldap.conf не потерпели изменений. Окончательно файла конфигурации dovecot.conf для Fedora 15 будет выглядеть примерно так:

# /etc/dovecot/dovecot.conf
# Протоколы, которые мы хотим поддерживать: imap pop3
protocols = pop3 imap lmtp

##
## Logging
##

# Использовать этот log файл вместо syslog().
info_log_path = /var/log/dovecot/dovecot.log

# Сохранять информационные сообщения в этот файл
log_path = /var/log/dovecot/dovecot.log

##
## SSL settings
##
# Отключить поддержку SSL/TLS.
# no - поддержка SSL/TLS включена
# yes - поддержка SSL/TLS отключена
ssl = no
##
## Login processes
##
" # Сообщение приветствия для клиентов
login_greeting = Welcome to IMAP/POP3 server

# Месторасположение пользовательских почтовых ящиков. Это такой же параметр
# как и старый 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 = mbox:/var/spool/dovecot/%n:INBOX=/var/spool/mail/%n

##
## Mail processes
##
# Включает отладку, очень полезно при первоначальной настройке и поиске
# неисправностей. После настройки лучше отключать.
mail_debug = yes

# Допустимый интервал UID для пользователей, по умолчанию 500 и выше.
# Это сделано для того, чтобы быть увереным в том, что пользователи
# не смогут войти как демоны или другие системные пользователи.
# Примечание запрет входа root встроен в бинарник dove"cot и не может
# быть изменен, даже если установить first_valid_uid в 0.
# 2000 - uid и gid пользователя и группы virtual соответственно,
# которых мы создавали в Mail Howto
first_valid_uid = 500
last_valid_uid = 50000

# Допустимый интервал GID для пользователей
first_valid_gid = 12
last_valid_gid = 50000

# Пользователь и группа от которых будет работать dovecot
mail_gid = mail
mail_uid = virtual

##
## Authentication processes
##
# List of allowed characters in username. If the user-given username contains
# a character not listed in here, the login automatically fails. This is just
# an extra check to make sure user can't exploit any potential quote escaping
# vulnerabilities with SQL/LDAP databases. If you want to allow all characters,
# set this value to empty.
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

#
# Следующих три параметра следует использовать только во время настройки
# и отладки dovecot. После этого их лучше отключить.
#

# Более высокий уровень информативности. Полезно использовать при поиске
# ошибок, связанных с аутентификацией.
auth_verbose = yes

# Более высокий уровень информативности, используется в целях отладки.
# Например, показывает SQL запросы.
auth_debug = yes

# В случае несовпадения пароля, отображает пароли и испоьзуемую схему
# хранения пароля. Требует, чтобы был установлен auth_debug=yes.
auth_debug_passwords = yes

# Разделенный пробелами список, используемых механизмов аутентификации:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
auth_mechanisms = plain login

# База данных паролей используется для проверки паролей пользователей
# (и ничего более). Вы можете использовать множество passdbs и userdbs.
# Это полезно, если вы хотите позволить обоим - системным пользователям и
# (/etc/passwd) и виртуальным пользователям входить без необходимости
# делать дубликаты системных пользователей в БД виртуальных пользователей.

# Пользователи могут быть временно отключены с помощью добавления deny=yes
# в passdb. Если пользователь найден в БД, аутентификация потерпит неудачу.
# БД с отключенными пользователями всегда должна быть указана перед остальными,
# так как ее проверка идет первой.

# LDAP database
passdb {
args = /etc/dovecot/dovecot-ldap.conf
driver = ldap
}

#
# База данных пользователей указывает месторасположение почтовых ящиков
# и пользователя/группу владеющего этим ящиком.

# LDAP database
userdb {
     args = /etc/dovecot/dovecot-ldap.conf
     driver = ldap
}

service auth {
     unix_listener /var/spool/postfix/private/dovecot-smtp-auth {
         group = postfix
         mode = 0660
         user = postfix
     }
     unix_listener auth-master {
         group = mail
         mode = 0660
         user = virtual
     }
     unix_listener auth-userdb {
         mode = 0600
         user = virtual
         group = mail
     }
     user = virtual
}

service imap-login {
     inet_listener imap {
         address = *
         port = 143
     }
     inet_listener imaps {
         address = *
         port = 993
     }
}

service pop3-login {
     inet_listener pop3 {
         address = *
         port = 110
     }
     inet_listener pop3s {
         address = *
         port = 995
     }
}
protocol lda {
     hostname = example.ru
     mail_plugins = $mail_plugins
     postmaster_address = postmaster@example.ru
}


© Елохин И.Ю.