среда, 8 октября 2008 г.

Быстрая настройка mutt, fetchmail, procmail, spamassassin и exim4 с несколькими smarthost в Debian lenny или "Just For Fun"

Только вчера настроил эту связку. Зачем? На моем убитом ноуте icedove работает довольно нешустро. Кроме того, я использую dwm, а в нем удобно пользоваться программами, не требующими для своей работы мыши. В общем, некоторым людям это нравится. Не факт, кстати, что приведенная ниже схема оптимальна, но -- it works. Итак -- поехали.

Ставим exim4
dpkg-reconfigure exim4-config
Отвечаем на вопросы следующим образом:
1) Второй пункт (отправка через smarthost, прием по smtp или fetchmail);
2) localhost (имя системы);
3) 127.0.0.1 (слушать соединения на:);
4) пусто (другие места назначения);
5) пусто (IP адреса для которых разрешена релейная передача почты);
6) smtp.mail.ru::587 (или другой основной для вас smtp сервер);
7) нет (не скрывать имя в исходящей почте);
8) нет (минимум dns запросов?);
9) Maildir в домашнем каталоге;
10) да - разделить на конфигурационные файлы;

В результате, содержимое файла /etc/exim4/update-exim4.conf.conf выглядит примерно так:

dc_eximconfig_configtype='smarthost'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mail.ru::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'

Теперь создаем файл /etc/exim4/passwd.client с правами -rw-r----, root:Debian-exim.
В этот файл будут добавляться логины и пароли для smtp серверов. В случае с gmail.com в файл придется также добавить некоторые имена, которые не очевидны вначале, но информация о требуемой аутентификации к которым все-равно появилась бы у вас в /var/log/exim4/mainlog, так что делаем заранее, если пользуетесь gmail. Пример файла:

gmail-smtp-msa.l.google.com:login@gmail.com:password
gmail-smtp.l.google.com:login@gmail.com:password
*.google.com:login@gmail.com:password
smtp.gmail.com:login@gmail.com:password
smtp.mail.ru:login2:password2


Теперь у нас exim4 отправляет почту через один заданный smarthost, который вы выбрали при конфигурации exim4 вначале. Наша задача -- в зависимости от того, с какого адреса исходит почта -- выбирать нужный нам smarthost, например mail.ru или gmail.com (пароли к которым мы и прописали). Админ я посредственный, а про exim вообще ничего не знаю, поэтому содрал схему настройки отсюда.
В файл /etc/exim4/conf.d/router/200_exim4-config_primary перед smarthost: дописываете следующую конструкцию (я думаю вы можете создать файл 199_exim4-config_auto_smarthost с этим содержимым, но для простоты будем идти по проверенной дороге :)

smarthost_auto:
condition = ${extract{smart_host}{${lookup{$sender_address}lsearch{/etc/exim4/smtp_users}{$value}fail}}}
driver = manualroute
domains = ! +local_domains
route_list = "* ${extract{smart_host}{${lookup{$sender_address}lsearch{/etc/exim4/smtp_users}{$value}fail}}} byname"
transport = remote_smtp_smarthost

Хорошо, теперь создаем файл /etc/exim4/smtp_users с правами -rw-r---- root, Debian-exim.

login2@mail.ru: user=peter smart_host=smtp.mail.ru auth_name=login2 auth_pass=password2
login@gmail.com: user=peter smart_host=smtp.gmail.com auth_name=login@gmail.com auth_pass=password2

Как видим, две схемы немного секутся и в целом получилось коряво (пароли в двух местах), но в файле passwd.client у меня хранятся пароли только для gmail, так что оставил пока так.

Все -- теперь exim настроен.

Ставим fetchmail

Тут все просто -- fetchmail забирает нашу почту. Пример конфига .fetchmailrc:

poll pop.mail.ru proto pop3
user "login2" there is "peter" here has password "password2"
poll pop.gmail.com proto pop3
user "login@gmail.com" there is "peter" here has password "password" ssl

Права на файл: -rw-------. Можете повесить fetchmail на cron, я его запускаю в режиме демона: fetchmail -d60. Теперь вы можете проверить хождение почты от pop сервера в ваш каталог ~/Maildir. Осталась последняя миля. ;)

mutt -- дело мутное(c)

Ставим mutt. Из каталога /usr/share/doc/mutt/examples берем sample.muttrc.gz и распаковываем его как ~/.muttrc. Меняем/добавляем следующие строки:

set folder=~/Mail # where i keep my mailboxes
set spoolfile=~/Maildir
mailboxes =inbox
mailboxes =sent
set mbox=+inbox
set mbox_type="Maildir"
set assumed_charset="koi8-r:cp1251:utf-8"
set send_charset="koi8-r"
set editor=vim #ваш любимый редактор
set from="login2@mail.ru" # ваше from по-умолчанию
set use_from=yes
set envelope_from=yes
set alias_file=~/.mail_aliases # where I keep my aliases
set allow_8bit=yes # never do Q-P encoding on legal 8-bit chars
set ascii_chars=yes
set record=+sent # default location to save outgoing mail
set copy=yes # always save a copy of outgoing messages
set delete=yes
set move=no
set edit_headers
alternative_order text/enriched text/plain text/html.
set thorough_search=yes # поиск в теле письма если кодировка письма и системы не совпадают
set auto_tag

Для данной конфигурации (spool и есть mbox) необходимо сделать символьную ссылку inbox: cd ~/Mail; ln -s ../Maildir inbox. Теперь у вас в каталоге ~Mail будут следующие ящики: inbox (входящая почта -- как ссылка на Maildir), sent -- посланные письма. Другая конфигурация -- это когда письма из спула (Maildir) перемещаются в ящик прочитанных писем (mbox). Для этой схемы необходимо удалить ссылку, и переопределить set move=yes. Все -- дальше если вы войдете во вкус, сами расширите свой конфигурационный файл, разобъете его на несколько частей, добавите ящики, настроите сортировку писем и т.д. и т.п. Главное, что теперь можно попробовать послать письмо и проследить его путь. :)

Быстрый старт
m -- написать сообщение;
c -- выбрать ящик (например, sent);
d -- удалить;
s -- переместить в другой ящик;
g -- ответить всем;
r -- ответить;
t -- пометить сообщение;
q -- выйти;
вверх/вниз -- ходим по письмам;
пробел/ "-" -- смотрим длинное письмо вперед/назад;
q -- выход;

procmail
Теперь предположим, вы подписаны на списки рассылки и хотите, чтобы каждая рассылка хранилась в своем ящике. Нет ничего проще! ;) Ставим procmail. Создаем файл ~/.procmailrc (по мотивам этой статьи).

LINEBUF=4096
VERBOSE=off
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/inbox/
FORMAIL=/usr/bin/formail
SENDMAIL=/usr/sbin/sendmail
PMDIR=$HOME/.procmail
LOGFILE=$PMDIR/log
INCLUDERC=$PMDIR/rc.maillists

Создаем каталог .procmail. В нем файл -- rc.maillists. Например:

:0:
* ^TOdwm@suckless.org
dwm/

Создаем каталог: mkdir ~/Mail/dwm и письма рассыли dwm сыпятся в dwm. Если что-то не так, смотрим log в .procmail.

spamassassin -- боремся со спамом!
В каталоге ~/.procmail/ создаем файл rc.spam.

:0fw
#* < 256000
| spamassassin

:0
* ^X-Spam-Status: Yes
junk/

В .procmailrc дописываем строчку:

INCLUDERC=$PMDIR/rc.spam

Создаем каталог со спамом: mkdir ~/Mail/junk. В .muttrc дописываем следующие строки:

macro index S "|/usr/bin/spamassassin -r"
macro index H "|/usr/bin/sa-learn --ham --no-sync --single"
macro index R "!/usr/bin/sa-learn --sync"

На сообщениях, для которых spamassassin дал ошибку, в mutt будем нажимать H. На тех, которые пропустил: S. После первого же письма в домашнем каталоге будет создан каталог .spamassassin. В нем будет лежать файл user_prefs, который при необходимости можно посмотреть и отредактировать.

Ну и для полного счастья можно поставить rss2email и настроить чтение RSS-новостей через mutt.

P.S. А вообще-то, весь этот процесс, который мы наблюдаем выше, можно объяснить проще -- это игра. Just For Fun(с) как говорится. И без всяких 3D аккселераторов... ;) Иначе имеем подмену цели на средство к ее достижению - а это уже клиника... В общем, я предупредил... :)

2 комментария:

Ilja комментирует...

Настройку принтера пажалуйста ) у тебя так шустро все получается )

gl00my комментирует...

Принтера у меня нет. :)

Архив блога