Настройка системы приема и обработки электронной почты

для малого офиса или домашней сети во FreeBSD


Задача:

Настройка системы приема и обработки почты маленького офиса или домашней сети с антиспам фильтром и уведомлениями о новых входящих письмах. Раздаваться обработанная почта будет локальным пользователям. Ориентированна такая система на малые группы, которым нет смысла покупать домен и настраивать полноценный почтовый сервер.


Необходимый софт:

fetchmail - забирает сообщения с удаленных серверов
procmail - обрабатывает
spamassassin - обнаружитель спама
centericq - применим для рассылки уведомлений о новой входящей почте пользователям, в моем случае по jabber протоколу
screen - консольный оконный менеджер, в данном контексте я его использовал для запуска centericq в фоне
qpopper - простенький в pop3 сервер для раздачи сообщений локальным юзерам

Все программы устанавливались из портов:


/usr/ports/mail/p5-Mail-SpamAssassin
/usr/ports/mail/fetchmail
/usr/ports/mail/procmail
/usr/ports/mail/qpopper
/usr/ports/net/centericq
/usr/ports/misc/screen


Настройка

Я создал юзера "nospam", от имени которого будут работать программы
(дальше по тексту путь "~/" подразумевает домашнюю дирректорию юзера nospam)

Принимаем почту:


Для этой цели создадим файл настройки ~/.fetchmailrc следующего содержания:
#куда писать лог
set logfile /home/nospam/fetchmail.log
#параметры запросов к удаленным серверам
poll mail.server.com proto pop3 user 'username' pass 'password'

запуск fetchmail произвожу каждые 10 минут по крону строкой:

*/10 * * * * nospam /usr/local/bin/fetchmail -a -m /usr/local/bin/procmail

ключи:
-a - забирать с сервака всю почту, а не только новую
-m /usr/local/bin/procmail - передаст почту программе procmail

обрабатываем почту
создадим файл настройки ~/.procmailrc следующего содержания:
MAILDIR=/var/mail
DEFAULT=$MAILDIR/nospam
LOGFILE=/home/nospam/procmail.log

# uafug
:0
* ^List-Id.*freebsd.FreeBSDDiary.org.ua
! phantom@serv.prog.net

# frenzy
:0
* ^List-Id.*comp.soft.othos.frenzy.subscribe.ru
! phantom@serv.prog.net

### NO SPAM ###
:0fw
| /usr/local/bin/spamassassin

###================== phantom =================
:0fw
* ^To.*andreyka_lier@front.ru
| /home/nospam/notify.pl andrey

:0
* ^To.*andreyka_lier@front.ru
! phantom@serv.prog.net


правила не являются панацеей, это лиш пример реализации...
таким образом почта из двух рассылок отдается пользователю без проверки ее антиспам фильтром, вся остальная проверяется,
замечу что сообщения опознанные как spam я не удаляю, а пересылаю пользователям так-же как и остальные, сами пользователи настраивают фильтры своих почтовых программ как хотят, просматривать свой спам или сразу удалять - их дело
сообщения содержащие заголовок "To: andreyka_lier@front.ru" дополнительно передаются скрипту рассылки уведомлений для обработки
при написании правил с уведомлением, скрипту notify.pl в качестве аргумента нужно указывать имя адресата,
в данном случае уведомление будет отправленно пользователю с jabber-акаунтом andrey@prog.net
причем в уведомлении будет указанна тема сообщения и отправитель

собственно листинг скрипта рассылки уведомлений:
#!/usr/bin/perl -w

chomp($name="$ARGV[0]");

while ($stdin = <STDIN>){
print "$stdin";
if ($stdin =~ m/^Subject:/ig){
$subj = $stdin;
}
if ($stdin =~ m/^From:/ig){
$from = $stdin;
}
}

`echo "new mail $from $subj "|/usr/local/bin/centericq -s msg -p jab -t $name@prog.net`;

при работе скрипта уведомлений centericq должна быть запущенна. я это делаю из сценария помещенного в /usr/local/etc/rc.d/ :
#!/bin/sh
su nospam -c '/usr/local/bin/screen -D -m /usr/local/bin/centericq &'

qpopper не настраивал, он по дефолту отдает мыло с настройками учетных записей локальных пользователей вот пожалуй и все, может что-то получилось суховато... дополняйте...

http://wiki.bsdportal.ru/doc:fetchmail_agent

Обновлено: 12.03.2015