Назад | Перейти на главную страницу

Доставляйте почту виртуальным пользователям с помощью sendmail и dovecot lda

Я пытаюсь перенести нашу почтовую систему на основе пользователей Linux на виртуальных пользователей.

у меня есть

Sendmail обрабатывает всю доставку почты в почтовые ящики пользователей, dovecot обрабатывает взаимодействие pop3 и imap с пользователями, все работает как шарм

Теперь мы начинаем внедрять активный каталог в глобальном масштабе, и я хочу отказаться от пользователей электронной почты системы Linux до пользователей виртуальных ldap.

Я включил sendmail ldap_routing

define(`confLDAP_DEFAULT_SPEC', `-h "10.1.0.1" -b "ou=portal,dc=univ,dc=priv" -d "cn=portal admin,ou=portal,dc=univ,dc=priv" -MLDAP_AUTH_SIMPLE -P/etc/mail/ldap_pass')dnl

LDAPROUTE_DOMAIN_FILE(`/etc/mail/ldap_route_domains')dnl

FEATURE(`ldap_routing', `null', `ldap -1 -T -v sAMAccountName -k (&(|(objectclass=user)(objectclass=group))(|(mail=%0)(proxyAddresses=smtp:%0)))',`passthru')dnl

создал простой файл псевдонимов для пользователей ldap через perl-скрипт. Файл изначально выглядел так

sAMAccountName1:    vmail
sAMAccountName2:    vmail
....
sAMAccountNameN:    vmail

включил dovecot-lda с помощью этого как

К сожалению, sendmail передает реальное системное имя пользователя (в моем случае "vmail") как аргумент -d, а не sAMAccountName виртуального пользователя с этой конфигурацией.

После этого я изменяю свой файл псевдонима примерно так (вдохновленный этим тема)

sAMAccountName1:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
sAMAccountName2:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"
....
sAMAccountNameN:    "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1"

Это решение не работает из-за проблемы с правильной системой, которую я не могу решить. Вот сообщения журнала

Неустранимая ошибка: setgid (5000 (vmail) из поиска userdb) завершился неудачно с euid = 8 (mail), gid = 12 (mail), egid = 12 (mail): Operation not allowed (этот двоичный файл, вероятно, следует вызывать с группой процессов, установленной на 5000 (vmail) вместо 12 (mail))

агент доставки dovecot, определенный в sendmail.cf с U = vmail: vmail

Mdovecot,      P=/usr/libexec/dovecot/dovecot-lda,
           F=l59DFMPhnu,
           S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
           M=51200000,
           U=vmail:vmail,
           T=DNS/RFC822/X-Unix,
           A=/usr/libexec/dovecot/dovecot-lda -d $u

У dovecot-lda тот же владелец и группа

-rwxr-x--- 1 vmail vmail 28512 апр.   5  2013 /usr/libexec/dovecot/dovecot-lda

Если я использую системную почту пользователя вместо vmail, все начинает работать нормально. Но эта конфигурация кажется мне менее безопасной, и я хочу использовать vmail пользователя с uid> 100 вместо почты пользователя.

Итак, доставка почты не удалась. Я ценю любую помощь в решении этой проблемы.

Я пытался настроить это сам и находил здесь и там фрагменты, но не полный рецепт. Вот как я это сделал.

Я использую FreeBSD 10.3-RELEASE, sendmail 8.15.2 и dovecot 2.2.29.

Вам нужен пользователь для файлов виртуальных пользователей:

# passwd
vmail:*:2025:2025:Dovecot Virtual Mail:/var/empty:/usr/sbin/nologin

# group
vmail:*:2025:

Голубятня проста, так что давайте сделаем это в первую очередь. Предполагая, что конфигурация dovecot работает, у вас уже будет хотя бы одна настройка userdb. Добавьте новый для виртуальных пользователей:

# Virtual users
userdb {
        driver = static
        args = uid=vmail gid=vmail home=/var/vmail/%u
}

Если у вас его еще нет, добавьте параметр passdb для статических учетных данных:

passdb {
        args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/imap-passwd
        driver = passwd-file
}

Создайте / var / vmail:

mkdir /var/vmail
chown vmail:vmail /var/vmail

и если вы не хотите вручную создавать каталоги для каждого нового виртуального пользователя, добавьте:

# Virtual users config
lda_mailbox_autocreate = yes

в dovecot.conf (признак того, что lda_mailbox_autocreate не включен и каталоги не существуют, - это ошибки EX_TEMPFAIL и сообщения, застрявшие в локальной очереди sendmail).

Используйте doveadm pw -s PLAIN-MD5 и добавьте строку для нового виртуального пользователя:

vfred:{PLAIN-MD5}912ec803b2ce49e4a541068d495ab570

Перезапустите dovecot, чтобы получить новую конфигурацию:

service dovecot restart

Теперь перейдем к sendmail. Если у вас нет почтовой таблицы, вам нужно добавить ее:

FEATURE(`mailertable')dnl

в sendmail.mc и:

vmail dovecot:dummy

в mailertable. Это говорит sendmail использовать локального агента доставки dovecot для * @ vmail.

В конце вашего sendmail.mc у вас, вероятно, будет что-то вроде:

MAILER(local)dnl
MAILER(smtp)dnl

Добавьте что-нибудь вроде:

dnl
dnl Dovecot virtual user delivery agent
dnl
LOCAL_CONFIG
Mdovecot,
    P=/usr/local/libexec/dovecot/dovecot-lda,
    F=l59DFMPhnu,
    S=EnvFromL/HdrFromL,
    R=EnvToL/HdrToL,
    M=51200000,
    U=vmail:vmail,
    T=DNS/RFC822/X-Unix,
    A=/usr/local/libexec/dovecot/dovecot-lda -d $u

сгенерируйте новый sendmail.cf и перезапустите sendmail:

service sendmail stop ; sleep 1 ; service sendmail start

("перезапуск службы sendmail" под FreeBSD немного забавен)

Наконец, добавьте своего виртуального пользователя в файл псевдонимов:

vfred: vfred@vmail

Запустите newaliases и test.

  1. Пропустите чтение, если не решились :-)

  2. Сделайте vmail особенным для sendmail (без поиска DNS для пункта назначения)

    LOCAL_CONFIG
    CPvmail
    
  3. Используйте FEATURE (ldap_routing), чтобы выбрать mailHost, а не mailRoutingAddress

  4. Используйте FEATURE (mailertable), чтобы выбрать способ доставки (mailer)

    почтовая таблица

    vmail  dovecot:dummy
    
  5. Не делайте dovecot локальной почтовой программой - FEATURE (local_procmail, ...)

  6. В определении почтовой программы dovecot используйте правила xSMTP, а не правила xL (локальные)

    http://wiki2.dovecot.org/LDA/Sendmail