postfix + Dovecot в качестве lda и cyrus-auth сервера + spf раскладывание почты по поддирам средствами lda

ЭТО НЕ РУКОВОДСТВО К ДЕЙСТВИЮ, А СКОРЕЕ - КРАТКОЕ ОПИСАНИЕ МОИХ ПОПЫТОК. с благодарностью выслушаю подсказки “где ошибся” и “как лучше/правильно”

Пробую сделать как тут
http://ru.gentoo-wiki.com/wiki/Настройка_почтового_сервера_(Postfix,_Dovecot,_DSpam,_SQLGrey,_DomainKeys,_SPF)

А именно:
# Прикрутить к postfix smtp-аутентификацию через dovecot-sasl
# Использование в качестве lda не procmail а deliver из пакета dovecot
# Предидущий пункт нужен чтоб раскладывать почту по папкам средствами sieve
# Доступ к почте из локалки через roundcube
# Теперь по мелочи:

  • Прикрутить проверку по spf входящей почты (читая логи убедился что львиная доля спама отрезается на этой стадии)
  • Подумываю прикрутить DKIM - подпись почты
  • В перспективе - хочу настроить копирование всей “Исходящей почты” сотрудника - его начальнику(этакий контроль по вертикали).

Часть из этих задач мне необходима (roundcube в качестве mail-client-а ибо в офисе компы слабые и перегружать их лишним загруженным приложением считаю нецелесообразным, smtp-auth чтоб позволить доступ к почте извне ИЗБРННЫМ юзерам)
Часть - просто если можно - почему бы и нет(spf, dkim, контроль по вертикали)

Итак попорядку:

Первым делом уточню - все мои попытки сохранить права на почтовые директории пользователей за этими пользователями - не увенчались успехом. Пришлось делать как предлагают во всех хаутушках - создавать отдельного юзера и всю почту хранить от его имени. У этого подхода есть и плюсы и минусы - огромный минус - это то что теперь задавать квоты средствами fs - не получится, придется немного изменять структуру ldap-базы(добавлять ключ вроде mailQuota)/ зато отпадает необходимость вводить этих юзеров в unix таблицу - и разрешать им логиниться, это убирает некоторые потенциальные уязвимости(к примеру у этих всех юзеров в качестве шелла стоит /bin/bash - что сам по себе не очень хорошо)

Очень хотелось бы узнать мнение разработчиков calculate на этот счет.

Итак - создаем пользователя для хранения почты:

Для того чтоб этот юзер выделялся на общем фоне и ни с кем не персекался - я решил присвоить ему uid=gid=899

cl-groupadd -g 899 -c "For storage of local mail" vmail unix
cl-useradd -u 899 -s /bin/false -d /var/calculate/server-data/mail -c "For storage of local mail" -g vmail vmail unix
 # смотрим что  у нас получилось
id vmail
    uid=899(vmail) gid=899(vmail) группы=899(vmail)
getent passwd vmail
    vmail:x:899:899:For storage of local mail:/var/calculate/server-data/mail:/bin/false

Настраиваем USE флаги и пересобираем систему

echo 'USE="${USE} vhosts"' >> /etc/make.conf
## все web-apps должны быть доступны лишь если я разрешу'
echo 'USE="${USE} sasl"' >> /etc/make.conf
## тут я использую его лишь в postfix, но думаю это нигде не помешает
echo 'USE="${USE} syslog"' >> /etc/make.conf
## небольшой оффтоп - мне кажется, что гораздо правильней логи вести именно через syslog
echo 'net-mail/dovecot managesieve sieve' >> /etc/portage/package.use/using
## собственно # grep -E '^net-mail/dovecot:(manage|)sieve ' /usr/portage/profiles/use.local.desc
echo 'mail-mta/postfix dovecot-sasl' >> /etc/portage/package.use/using

echo 'www-servers/lighttpd fastcgi php' >> /etc/portage/package.use/using
echo 'dev-lang/php -apache2 cgi ctype curl gd hash -mysql pdo postgres' >> /etc/portage/package.use/using
## это если использовать в качестве вебсервера лайти

echo 'mail-client/roundcube postgres' >> /etc/portage/package.use/using
echo 'net-nds/phpldapadmin' >> /etc/portage/package.keywords/using
## а это то - для чего вебсервер нужен

emerge -DNuavt world
emerge -avt mail-filter/pypolicyd-spf

emerge -avt www-servers/lighttpd mail-client/roundcube
## собственно mail-client
emerge -avt net-nds/phpldapadmin dev-db/phppgadmin
## просто полезные утлиты

Готовимся к изменению конфигов

От греха подальше отсанавливаем почтарь

/etc/init.d/postfix stop
/etc/init.d/dovecot stop

Для большего душевного спокойствия делаем cl-backup
далее etc-update и со спокойной душой перезатираем конфиги postfix и dovecot. В принципе перезатирать необязательно, лучше совместить новый конфиг с настроенным. Дело в том что с новыми USE ключами появились новые пункты в конфигах и комментарии к ним.

Итак, приступаем к настройке dovecot-а

Мальенькое лирическое отступление. Из текстовых редакторов я предпочитаю nano. Тем кто незнает подскажу - что nano умеет подсвечивать синтаксис. Для этого надо раскомментировать в /etc/nanorc строки типа include “/usr/share/nano/sh.nanorc”. Подсветка синтаксиса работает автоматически в зависимости от расширения файла. Но ее можно указать явно ключем -Y

Итак редактируем, в этом и последующих файлах подходит подсветка sh
nano -Ysh /etc/dovecot/dovecot.conf

 # я буду указывать лишь измененные/раскомментированные строки
protocols = imap imaps managesieve
syslog_facility = mail
first_valid_uid = 5000
 # у меня все юзеры в ldap начинаются с 5000 - чтоб не перемешивались с локальными.
protocol imap {
  mail_plugins = fts fts_squat zlib
   # применяем сжатие squat ибо поддерживает поиск в сжатом
  mail_plugin_dir = /usr/lib/dovecot/imap
 protocol managesieve {
}
protocol lda {
  postmaster_address = postmaster@#-domain-#
  mail_plugins = fts fts_squat zlib
  mail_plugin_dir = /usr/lib/dovecot/imap
  deliver_log_format = msgid=%m: %$
  auth_socket_path = /var/run/dovecot/auth-master
  syslog_facility = mail
  log_path =
  info_log_path =
  #mail_debug = yes
}
auth_verbose = yes
 # просто хочу видеть в логах все входы/выходы
auth default {
 mechanisms = plain login
  passdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
     # в точности как в кальке
  }
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0660
      user = dovecot
      group = dovecot
       # этот сокет должен использоваться lda
    }
    client {
      path = /var/spool/postfix/private/dovecot-sasl
      mode = 0600
      user = postfix
      group = postfix
       # этот сокет используется postfix-ом для авторизации
    }
  }
}
plugin {
  sieve=/var/calculate/server-data/mail/%u/.dovecot.sieve
}

Приступаем к настройке postfix-а:
дописываем в конец /etc/postfix/master.cf следующие строки

spf       unix  -       n       n       -       0       spawn
 user=nobody argv=/usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf
 # Прикручиваем Sender Policy Framework через policyd-spf

 # Dovecot LDA
deliver   unix  -       n       n       -       -       pipe
 flags=DRhu user=${user}:dovecot argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}
 # flags=DRhu user=dovecot:dovecot argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
 # ^--- эту строку взял из конфига но она работать не будет ТОЧНО ибо прав у dovecot нет почту ложить куда надо а у юзера права есть на собственную диру, так-что user=${user}:dovecot
 # -d {recipient} сменил на -d {user} ибо, как я понимаю recipient - это мыло а user - это userName.
 # в любом случае ПОКА что эта связка работать не хочет, хотя deliver с подобными ключами запущенный из под юзера - отрабатывает нормально.
 # скорей всего у меня проблема в main.cf, пока я ее ищу.

скоро выложу main.cf и остальные конфиги, пока не успеваю

main.cf в студию :slight_smile: