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