главная - Статьи - Почта - Sendmail
SENDMAIL: Копирование исходящей почты со всех компьютеров локальной сети, за исключением явно указанных компьютеров, копирование исходящей почты которых не должно производиться.
Теги: sendmail Защита почты Почтовый сервер
Задача: необходимо копировать всю исходящую почту со всех компьютеров локальной сети, за исключением явно указанных компьютеров, копирование исходящей почты которых не должно производиться (например, это компьютер директора).
Имеем: FreeBSD 6.0, sendmail 8.13.6
Решение:
Проверить версию sendmail можно так:
в командной строке вводим (как root):
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> $v
8.13.6
>
Версию FreeBSD проверить можно так (как root): # uname –a
Не думаю, что необходимы именно такие (или не ниже) версии, но на всякий случай.
Итак, собственно решение.
Первое.
Создаем файл
в который пишем:
PUSHDIVERT(-1) ifdef(`COPYMAIL_MAILBOX',, `define(`COPYMAIL_MAILBOX', `postmaster')')dnl ifdef(`NOCOPY_USERS',, `define(`NOCOPY_USERS', `-o /etc/mail/nocopy-users')')dnl ifdef(`NOCOPY_CONFIG',, `errprint(`*** You must define NOCOPY_CONFIG for copymail mailer!!! ***')')dnl POPDIVERT ######################################### ### COPYMAIL Mailer specification ### ######################################### VERSIONID(`$Id: cpsendmail.html,v 1.2 2002/06/14 18:39:10 freeman Exp $')dnl LOCAL_CONFIG F{NOCOPY}NOCOPY_USERS LOCAL_RULE_0 # Send all mail (except $={NOCOPY}) to copymail mailer R$* < @ $+ . > $* $: $1 < @ $2 . > $3 $| $1 @ $2 R$* < @ $+ . > $* $| $={NOCOPY} $@ $1 <@ $2 . > $3 R$* < @ $+ . > $* $| $* $: $1 <@ $2 . > $3 $| $&{client_addr} R$* < @ $+ . > $* $| $={NOCOPY} $@ $1 <@ $2 . > $3 R$* < @ $+ . > $* $| $* $: $1 <@ $2 . > $3 $| $&f R$* < @ $+ . > $* $| <$*> $: $1 <@ $2 . > $3 $| $4 R$* < @ $+ . > $* $| $={NOCOPY} $@ $1 <@ $2 . > $3 R$* < @ $+ . > $* $| $* $#copymail $@ localhost $: $1 < @ $2 . > $3 # Send message to original recipient + additional mailbox: COPYMAIL_MAILBOX Mcopymail, P=/usr/sbin/sendmail, F=fmSDFMu, S=0, R=0, A=sendmail -N never -C NOCOPY_CONFIG COPYMAIL_MAILBOX $u
2. Редактируем sendmail.copy.mc
Скопируйте ваш sendmail.mc (конфигурационный файл) как sendmail.copy.mc
В конец нового файла sendmail.copy.mc добавте следующие строки:
define(`COPYMAIL_MAILBOX',`user@domen') define(`NOCOPY_CONFIG',`/etc/mail/sendmail.cf') MAILER(copymail)
В итоге мой файл sendmail.copy.mc (точнее, его конец) стал вот такого вида:
define(`COPYMAIL_MAILBOX',`user@localhost') define(`NOCOPY_CONFIG',`/etc/mail/sendmail.cf') MAILER(local) MAILER(copymail) MAILER(smtp)
где user@localhost – адрес локального пользователя, на который будут приходить копии отправленных писем.
3. Компилируем cf
Необходимо скомпилировать этот самый sendmail.copy.mc в sendmail.copy.cf
Для этого делаем следующее:
(это если у вас FreeBSD. Подробнее о компиляции .cf файлов для sendmail смотри здесь: http://www.sendmail.org/m4/intro.html)
Теперь у вас появился файл sendmail.copy.cf по адресу:
4. Кому не копируем почту
Создаем собственно файл, в котором будут указаны те пользователи, почту которых копировать не надо. Будьте внимательны!
# touch /etc/mail/nocopy-users
Следует поместить почтовые адреса (в виде user@FQDN-domen ) или IP адреса (в форме X.X.X.X) в этот файл. Почтовые сообщения приходящие на почтовые адреса¹, перечисленные в /etc/mail/nocopy-users или отправлямые от почтового адреса² или с IP адреса, перечисленных в /etc/mail/nocopy-users, не будут копироваться.
5. Проверяем
Собственно, все готово для тестирования того, что мы сделали.
# killall sendmail # /usr/sbin/sendmail -bd -C /etc/mail/sendmail.copy.cf # /usr/sbin/sendmail -q30m -C /etc/mail/sendmail.cf
Такой запуск sendmail необходим для того, что бы письмо, находящееся в очереди не копировалось каждые N минут, при каждой попытке доставки. Первая копия (-bd) работает как SMTP daemon, принимая письма (и копируя их). Вторая копия (-q30) работает обработчиком (queueing) очереди, доставляя письма находящиеся в очереди (и не копируя их, так как перед тем как попасть в очередь письма уже были скопированы).
Можете проверять систему. С клиентской машины отправляете письмо (естественно, рассылка писем до наших экспериментов должна быть настроена), и проверяете, получил ли локальный пользователь user письмо. Проверить можно, например, так:
Удачи!
Данный вопрос также рассмотрен в статье по адресу: http://www.vnc.org.ua/copymail/cpsendmail.html
Вышеизложенный материал не претендует на полноту, четкость, ясность или достоверность изложения и предоставляется автором "КАК ЕСТЬ". Автор не несет никакой отвественности за любое использование данного материала. Любое использование, копирование, цитирование, полностью или частично должно включать данный текст, ссылку на данный ресурс, а так же следующию строку без изменений: 2001-2002, O. Koreshkov
Авторизуйтесь для добавления комментариев!