The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Решение часто возникающих задач в sendmail (mail sendmail faq mta)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: mail, sendmail, faq, mta,  (найти похожие документы)
From: sciurus <sciurus@mail.ru.> Date: Mon, 20 Dec 2004 18:21:07 +0000 (UTC) Subject: Решение часто возникающих задач в sendmail Оригинал: http://linux.ufaras.ru/sendmail.html > 1.Если необходимо перенаправить исходящую почту, посланную на > определенный адрес или домен, то можно пойти двумя путями. Перенаправят почту в локальный ящик вот эти 2 правила: R123$* $#local $: postmaster R$* < @ $*elki-palki.ru. > $#local $: postmaster За пределы локального домена: R123$* $#{mailer} $@ ext_domain.net $: ext_user < @ ext_domain.net. > R$* < @ $*elki-palki.ru. > $#{mailer} $@ ext_domain.net $: ext_user < @ ext_domain.net. > Во-первых, можно напрямую отредактировать sendmail.cf, вставив эти правила сразу за SParse1 (в Ruleset 0). Должно получиться следующее: # # Parse1 -- the bottom half of ruleset 0. # SParse1 R123$* $#local $: postmaster R$* < @ $*elki-palki.ru. > $#local $: postmaster Но тогда придется каждый раз при пересборке вручную править sendmail.cf. Второй способ заключается в редактировании файла /usr/src/sendmail-XXX/cf/m4/proto.m4 В нем нужно найти все тот же SParse1 и вставить сразу после него указанные выше правила. Теперь эти правила будут автоматически включатся в конфиг при пересборке. > 2. Итак, запрещаем локальным пользователям посылать почту на > определенный домен и его поддомены. При этом получать почту с этих доменов юзеры смогут. В check_rcpt (или local_check_rcpt) С{baddom} domain1.ru domain2.ru R$* $: $>Parse0 $>3 $1 R$* <$* $={baddom}.> $# error $@5.7.1 $:"You must not send mail to this address." Зачем это нужно? Однажды некий админ, в ответ на сканирование моим юзером его сети, заблокировал мою сетку так, что почта с его домена ко мне приходила, но обратного движения не наблюдалось, лог исправно заполнялся отлупами с того сервера. Поскольку админ на контакт упорно не шел, а maillog прилично забивался отлупами, пришлось пойти на военную хитрость. > 3.Как разрешить пользователю принимать почту только с определенного > IP-адреса. Предположим, Вы создали список рассылки и хотите, чтобы сообщения на него можно было посылать только с конкретных ip-адресов. Можно поступить так: Добавляем в sendmail.mc след. строки LOCAL CONFIG #В этом файле перечисляем разрешенные IP-адреса: KADDR_LIST hash /etc/mail/addrlist KCheckRcpt2 regex -n -a@NOLIST2 ^ < list@(.*yourdomain.ru|\[k\.l\.m\.n\]| \[127\.0\.0\.1\]|localhost|localhost.localdomain|alias_domainname.ru)>$ (последняя строка - продолжение предпоследней) , где [k.l.m.n] - ip-адрес почтового сервера. SLocal_check_rcpt # Является ли адрес получателя списком рассылки? R$+ $: $(CheckRcpt2 $1 $:$1 $) Если нет - пропускаем его и завершаем работу набора правил. R@NOLIST2 $@ OK Если да, смотрим IP-адрес отправителя письма. R$* $: $&{client_addr} R$-.$-.$-.$- $: $(ADDR_LIST $1.$2.$3.$4 $) Если IP-адрес включен в файл /etc/mail/addrlist, то принимаем письмо: ROK $@ OK Если нет - даем отлуп. R$* $#error $: 553 Sorry, you can not send letter to this list. Формат файла /etc/mail/addrlist: 127.0.0.1 OK Не забываем про команду: makemap hash addrlist < addrlist Пересобираем sendmail.cf и перезапускаем sendmail. > 4. Как разрешить пользователю принимать почту только с определенного > e-mail адреса. Добавляем в sendmail.mc след. строки LOCAL CONFIG #Разрешенный отправитель: KSnd regex -a@LIST1 <someuser@somedomain.ru.> #Все получатели кроме того, кто может получать почту только от указанного выше отправителя : KRcp regex -n -a@NOLIST2 <youruser@(.*yourpostdomain.ru|\[k\.l\.m\.n\]| \[127\.0\.0\.1\]|localhost|localhost.localdomain|alias_of_postdomain.ru)> (последняя строка - продолжение предпоследней) , где [k.l.m.n] - ip-адрес почтового сервера. Scheck_compat R$* $| $* $: $(syslog $1 $2 $) $1 $| $2 #Проверяем, является ли получатель тем самым юзером, к-й ограничен в правах: R$+ $| $+ $: $1 $| $(Rcp $2 $:$2 $) #Нет - завершаем работу набора правил R$+ $| @NOLIST2 $@ OK #Да - проверяем, кто отправитель: R$+ $| $+ $: $(Snd $1 $:$1 $) $| $2 #Если тот, которому все можно - завершаем работу набора правил R@LIST1 $| $+ $@ OK #Нет - даем отлуп R$* $#error $: 553 Sorry, you can not send letter to this list. Пересобираем sendmail.cf и перезапускаем sendmail. > 5. Как отвергать почту, приходящую с локальных административных > адресов, но не с локальных ip-адресов. В последнее время мне то и дело сыпятся уведомления от антивирусов различных почтовых систем, что с адм. адресов моего домена adm, postmaster, MAILER-DAEMON, etc приходят вирусы. Кроме того, с этих же электронных адресов стали приходить вирусы и моим пользователям, естественно, из чужих сетей. Попробуем справиться с этим так. Добавляем в sendmail.mc след. строки LOCAL CONFIG KADM_ADDR_LIST hash /etc/mail/admaddrlist KADMADR regex -n -a@NOADMLIST ^(root|postmaster|adm|mailer-daemon|hostmaster|webmaster)<@.*yourdomain.ru.>$ R<@> $@ OK R$+<@$+> $: $(ADMADR $1<@$2> $: $1<@$2> $) R@NOADMLIST $@ OK R$* $: $&{client_addr} R$-.$-.$-.$- $: $(ADM_ADDR_LIST $1.$2.$3.$4 $) ROK $@ OK R$* $#discard $: discard Формат файла /etc/mail/admaddrlist, в котором содержатся ip-адреса, с которых разрешено приходить административной почте: 127.0.0.1 OK и т.д. Не забываем про команду: makemap hash admaddrlist < admaddrlis Пересобираем sendmail.cf и перезапускаем sendmail. > 6. Как прописать жесткое соответствие между e-mail-адресом и локальным > ip-адресом для отправки сообщений локальными пользователями. Создаем файл /etc/mail/open: user1<@somedomain.ru>192.168.0.1 YES user2<@somedomain.ru>192.168.0.2 YES user3<@somedomain.ru>192.168.0.3 YES user4<@somedomain.ru>192.168.0.4 YES В командной строке: makemap hash open < open В конец стандартного sendmail.mc добавляем: LOCAL CONFIG Определяем специальное преобразование OPEN: KOPEN hash /etc/mail/open LOCAL_RULESETS SLocal_check_mail R$* $: $>Parse0 $>3 $1 Если адрес отправителя локальный, отправляем на проверку соответствия между электронным адресом и IP-адресом. R$+<@$=w> $: $>CheckLocalMail $1<@$2> Если нет, то пропускаем такую почту. R$* $@ OK SCheckLocalMail На вход набору правил CheckLocalMail подан e-mail-адрес, добавляем к нему IP-адрес хоста, установившего smtp-соединение: R$* $: $1 $&{client_addr} Проверяем, соотвествует ли полученная комбинация какой-либо записи в файле /etc/mail/open: R$+$-.$-.$-.$- $: $(OPEN $1$2.$3.$4.$5 $: $1$2.$3.$4.$5 $) Да - пропускаем почту. RYES $@ OK Нет - блокируем R$* $#error $: 553 Sorry, you cannot send a mail from this ip-address. Please, contact to postmaster. Пересобираем sendmail.cf и перезапускаем sendmail. > 7. Как запретить ОПРЕДЕЛЕННОМУ локальному пользователю посылать > сообщения за пределы локального домена. (Решение задачи ограничения ВСЕХ локальных пользователей пересылкой собщений только в локальный домен - здесь http://www.sendmail.org/~ca/email/restrict.html ). В конец стандартного sendmail.mc добавляем: LOCAL CONFIG Определяем специальное преобразование Sender: KSender regex -a@LIST restricted_user LOCAL_RULESETS Scheck_compat Исходные данные для этого набора правил имеют вид $1 $| $2, где $1 - отправитель, $2 - получатель в виде <user@domain.ru.> Если отправитель - тот пользователь, который ограничен в правах, - отправляем его на проверку в набор правил CheckLocalMail, причем передаем в этот набор для дальнейшей проверки только адрес получателя (ведь с отправителем мы уже разобрались ?) R<$+ @ $+> $| $+ $: <$(Sender $1 $)@ $2> $| $3 R<LIST @ $=w> $| $+ $: $>CheckLocalMail $2 Почту от любого друго отправителя пропускаем. R$* $| $* $@ OK SCheckLocalMail На вход набору правил CheckLocalMail подан e-mail-адрес получателя в виде <user@domain.ru.>. Делаем разбор доменной части электр. адреса, если она локальная - пропускаем: R<$+@$=w> $@ OK Нет - блокируем R$* $#error $: 553 Sorry, you cannot send a mail to non-local address. Please, contact to postmaster. Пересобираем sendmail.cf и перезапускаем sendmail. > 8.Если соединение с smtp портом идет слишком долго, то причиной этому > могут быть несколько факторов. "Задумчивость" почтовика может появиться после подключения FEATURE(dnsbl). Дело в том, что в случае падения сети и недоступности Интернета ни одно письмо не сможет быть вами отправлено с локальных ip-адресов (в том числе и с самого почтовика), потому что dnsbl-сервера будут недоступны. Вообще говоря, проверка локальных ip-адресов на принадлежность dnsbl-базам излишня, поэтому, вооружившись следующим из /usr/src/sendmail/cf/README: '' ...Notice: to avoid checking your own local domains against those blacklists, use the access_db feature and add: Connect:10.1 OK Connect:127.0.0.1 RELAY ...'' редактируем файл /etc/mail/access: CONNECT:127.0.0.1 OK CONNECT:i.k.l OK CONNECT:x.y.z.w OK CONNECT:a.b.c.d OK Затем makemap hash access < access Также можно настроить FEATURE(`delay_checks') (см ../cf/README) (http://www.opennet.ru/openforum/vsluhforumID1/41191.html) Еще 3 возможные причины задержки при установлении smtp-соединения - неправильно настроенный Firewall, некорректный /etc/resolv.conf (перечисленные в нем DNS-сервера должны быть доступны, и вашему почтовику должно быть разрешено делать запросы) и большой timeout параметра IDENT (http://www.sendmail.org/faq/section3.html#3.12) Можно также включить в iptables (ipchains, etc) полное логирование всех исходящих пакетов и таким образом обнаружить, куда (ip, port) так долго стучится почтовик.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor