среда, 13 августа 2008 г.

postfix+fetchmail+dovecot

Связка связана с тем, что на одной компании стоял левый win 2k3 server ну и полетел native pop3 connector к exchange'у. А он потребовал 2300р. А люди жадные, 2 недели без забора почты.
Да и ... не заботятся эти люди о своей серверной, говорят единственную фразу "Это развод", хотя не шарят вообще... В качестве преамбулы сойдет.
Сгорел у них шлюз, кстати win2k3 сервер для шлюза на 10-ток машин - это тема. Решил поставить aka deb, ставил не я. Поставили настроили 3 строчки. И поехало. Поставил постфикс:
aptitude install postfix
далее dovecot:
aptitude install dovecot-common dovecot-imapd
и fetchmail:
aptitude install fetchmail

Попутно приценился к утилите fetchmailconf, конфиг сгенерить может, но долго если процесс уже известен и пользаков много.
Дано: 10 пользаков
Каждый пользователь должен получить почту и суметь передать её через почтовик ISP.
Почта находится на mail5.hc.ru (виртуальный домен другой)
Допустим 3 пользака(username:password):
user1@domain.com:123qwe
user2@domain.com:123qwe
user3@domain.com:123qwe

Вывод main.cf
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
relayhost = mail.domain.com
mynetworks = 10.0.0.0/24, 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = eth0 localhost
home_mailbox = Maildir/
inet_protocols = all

Из него видно главное:
локальная сеть 10.0.0.0/24, почта собирается в maildir, smtp сервер ISP = mail.domain.com, интерфесов 3, причем eth0 и localhost это записи в /etc/hosts, а третий не прописан (этого в конфиге не увидишь) Интерфесом наружу ничего не светит ,ибо не надо. Предрекая споры, что можно закрыть iptables, отвечу: "Программу нужно настраивать так что бы она работала без костылей".

Далее даю вывод sender_relay(username:passwd [smtp.server.of.isp]):
user1@domain.com:qwe123 [mail.domain.com]
user2@domain.com:qwe123 [mail.domain.com]
user3@domain.com:qwe123 [mail.domain.com]
и sasl_passwd(e-mail username:passwd):
user1@domain.com user1@domain.com:qwe123
user2@domain.com user2@domain.com:qwe123
user3@domain.com user3@domain.com:qwe123

Далее приступим к dovecot'у, вывод dovecot.conf:
protocols = imap imaps
listen= eth0 #eth0 это адрес прописанный в /etc/hosts, не путайтесь, прошу вас
default_mail_env = maildir:/home/%u/Maildir
disable_plaintext_auth = no
ssl_disable = yes
protocol imap {
}
auth default {
mechanisms = plain
passdb pam {
}
userdb passwd {
}
user = root
}
plugin {
}

Любим имап, кто бамбук не курит, тот пусть читает литературу. Аутентификация by pam, а соответственно системной записи. Просто любая система sql сожрет ресурсов больше для 10 пользаков, чем сможет принести реальную пользу(обычно жрется порядко 10 Mb оперативы, порождается 3-5 процессов, жрутся файловые дескрипторы, настройка обрастает сложностью, каждый запрос порождает подключение к БД - жуть). Поэтому plain pam. Не спешите гнобить за plain, TLS все равно включите.
А далее самое интересное:
fetchmail(/etc/fetchmailrc):

poll mail.domain.com with proto POP3
user 'user1@domain.com' there with password 'qwe123' is 'user1' here options nokeep
user 'user2@domain.com' there with password 'qwe123' is 'user2' here options nokeep
user 'user3@domain.com' there with password 'qwe123' is 'user3' here options nokeep
В /etc/default/fetchmail:
OPTIONS = "-d 60"
START_DAEMON = yes

забираем с сервера ISP mail.domain.com по протоколу pop3 трем юзверям, причем почту не оставлять (в начале рекомендую параметр nokeep заметь на keep, тогда не стремно потерять). Почта передается локальным юзверям, причем насколько вкурил через postfix. Что хорошо, правда перед этим много покурил и очень долго (с час) всё работало не так. Кстати -d 60 говорит, что забирать надо раз в минуту, а след. параметр, запускать как демон. Идея с кроном мне не нравится, ибо писать настройку на несколько символов дольше. Заводим пользаков:
useradd -m -s /bin/false user1 -p qwe123
useradd -m -s /bin/false user2 -p qwe123
useradd -m -s /bin/false user3 -p qwe123
Запускаем сервисы:
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/fetchmail start
Прописываем на машинах пользаков. Ура. Работает.
Если будут проблемы, то в комменты