Но тогда придется каждый раз при пересборке вручную править
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-адрес включен в файл /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-адресом для отправки сообщений локальными пользователями.
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 ).
Исходные данные для этого набора правил имеют вид $1 $| $2, где $1 -
отправитель, $2 - получатель в виде <user@domain.ru.>
Если отправитель - тот пользователь, который ограничен в правах, -
отправляем его на проверку в набор правил CheckLocalMail, причем
передаем в этот набор для дальнейшей проверки только адрес получателя
(ведь с отправителем мы уже разобрались ?)
На вход набору правил 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) так
долго стучится почтовик.
1076 Прочтений • [Решение часто возникающих задач в sendmail (mail sendmail faq mta)] [08.05.2012] [Комментариев: 0]