URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 57258
[ Назад ]

Исходное сообщение
"Чтобы Sendmail принимал только если IP является MX зоны обра..."

Отправлено xOr , 09-Июн-05 18:43 
На сервер приходит очень много спама. Борюсь с ним разными методами.
Настроил несколько систем блокировки на основе баз открытых релеев, но некоторое количество спама всё равно проходит.
Практически у всех таких писем адрес в MX домена обратного адреса не совпадает с адресом, с которого идёт отправка (обратный адрес подделан), а также часто по IP адресу не выдаётся доменное имя.

Подскажите пожалуйста, как настроить Sendmail, чтобы он не принимал письма, если IP адрес отправителя не соответствует ip адресу хоста, указанного как SMTP сервер в MX записи домена из обратного адреса.
Также хочется, чтобы Sendmail делал ту же самую проверку для доменного имени, получаемого обратным DNS из адреса отправителя. А письма, отправленные от адресов без имени (обратного DNS) вообще не принимал.


Содержание

Сообщения в этом обсуждении
"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено lavr , 09-Июн-05 19:17 
>На сервер приходит очень много спама. Борюсь с ним разными методами.
>Настроил несколько систем блокировки на основе баз открытых релеев, но некоторое количество
>спама всё равно проходит.
>Практически у всех таких писем адрес в MX домена обратного адреса не
>совпадает с адресом, с которого идёт отправка (обратный адрес подделан), а
>также часто по IP адресу не выдаётся доменное имя.
>
>Подскажите пожалуйста, как настроить Sendmail, чтобы он не принимал письма, если IP
>адрес отправителя не соответствует ip адресу хоста, указанного как SMTP сервер
>в MX записи домена из обратного адреса.
>Также хочется, чтобы Sendmail делал ту же самую проверку для доменного имени,
>получаемого обратным DNS из адреса отправителя. А письма, отправленные от адресов
>без имени (обратного DNS) вообще не принимал.

http://www.cs.niu.edu/~rickert/cf/


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено xOr , 09-Июн-05 19:39 
>http://www.cs.niu.edu/~rickert/cf/

Спасибо!
Но вот только как это прикрутить?
Директивы из этих файлов вставлять в свой главный .mc файл, или как-то ссылки в него добавлять?

HACK(`reject_bad_from') загрузит файл reject_bad_from.m4 из директории /etc/mail  ?  ( у меня FreeBSD)

И отвержение писем с адреса без имени там есть. А вот на счет проверки MX записи не понял - вроде там этого нет.


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено lavr , 14-Июн-05 12:31 
>>http://www.cs.niu.edu/~rickert/cf/
>
>Спасибо!
>Но вот только как это прикрутить?
>Директивы из этих файлов вставлять в свой главный .mc файл, или как-то
>ссылки в него добавлять?
>
>HACK(`reject_bad_from') загрузит файл reject_bad_from.m4 из директории /etc/mail  ?  ( у
>меня FreeBSD)
>
>И отвержение писем с адреса без имени там есть. А вот на
>счет проверки MX записи не понял - вроде там этого нет.
>

http://www.cs.niu.edu/~rickert/cf/ :

HACK(`require_rdns') -- reject mail from sites without valid reverse DNS. Access entries allow individual override. I don't recommend this. The amount of collateral damage is excessive. (pgp signature)

сам переведешь верхнее?

[unix1]~ > grep rdns /etc/mail/unix1.mc
HACK(require_rdns, `REJECT')
[unix1]~ >

так память у меня девичья, то обычно коротенько сам себе расписываю:

require_rdns.m4 - это макрос для проверки наличия реверса и выдачи отлупа
sendmail'ом - клиенту.

Может использоваться с sendmail 8.1[3|2].x и 8.10/11x, последние требуют
дополнительных действий, они описаны в самом макросе.


Использование: положить require_rdns.m4 в /path/sendmail/cf/hack,
затем в sendmail.mc вставить

HACK(require_rdns)

может быть использовано без параметров, или со вторым параметром:

HACK(require_rdns, `OK')
или
HACK(require_rdns, `REJECT')

при использовании второго параметра, действия принимаются на основе карты
access!!!
Если HACK задан с двумя параметрами и получатель отсутствует в access,
то by default используется ВТОРОЙ заданный параметр: OK либо REJECT.

Прим: второй аргумент в HACK не будет иметь эффекта в случае использования
FEATURE(`delay_checks')! Поэтому лучше использовать FEATURE(`delay_checks')
первым, те до HACK:

...
FEATURE(`delay_checks')
...
HACK(require_rdns, `REJECT')
...

Базовые правила: выдается сообщение reject с кодом 5xx если resolve-ip
не сработал, но если это временная ошибка, будет выдан код 4xx или когда
резолвер отработал, но выдал поддельную запись.

ИСКЛЮЧЕНИЯ:

основаны на записях в access, любой IP соответствующий $=R (файл relay-domains)
исключается из проверки, так как мы позволяем релеить хосты на основе ip,
то должны исключить их из проверки rDNS.

Филосовское отступление, так как многие пользователи не могут управлять
своим rDNS, то они должны отсылать почту через своего ISP.

Если `delay_checks' включено в sendmail.mc (рекомендуется), тогда пользователь
авторизующийся через access-map тоже будет исключен из проверки (пример access):

rdns:user       OK

значение может быть OK или REJECT, если OK - почтовый адрес пользователя
НЕ БЛОКИРУЕТСЯ, если REJECT - проверяется правилами rDNS. Как уже было
сказано, второй аргумент в HACK() включает указанное правило и выставляет
default'ное значение.

Примечание: значение user в rdns:user - это только значение user после
разбора трех-частичного значение mail-address. Для виртуальных адресов -
user+detail - всегда берется только часть user после разбора, часть detail
отбрасывается перед проверкой.
Если получатель находится на другом хосте, то формат для проверки:

"rdns:@host."

где host будет пунктом назначения для отправки почты, host должен завершаться
точкой!

FreeBSD:

если используется родной sendmail:

в /etc/mail/sendmail.mc добавляем:

HACK(require_rdns)
или
HACK(require_rdns, `REJECT')
или кому как нравится

макрос require_rdns.m4 кладем в SENDMAIL_CF_DIR/hack, если посмотрим
/etc/mail/Makefile:
...
.if exists(/usr/share/sendmail/cf)
SENDMAIL_CF_DIR?=       /usr/share/sendmail/cf
.elif exists(/usr/src/contrib/sendmail/cf)
SENDMAIL_CF_DIR?=       /usr/src/contrib/sendmail/cf
.endif
...

так что можно положить в обе директории:
/usr/share/sendmail/cf/hack
и в
/usr/src/contrib/sendmail/cf/hack

почему в обе? потому что я не помню какая используется при make installworld,
наверное contrib

Если же sendmail установлен из портов, то все m4 находятся в:
/usr/local/share/sendmail/cf
значит для rdns: /usr/local/share/sendmail/cf/hack
и в /etc/make.conf:
...
SENDMAIL_CF_DIR=/usr/local/share/sendmail/cf
...
ну и там же можно свои .mc определить, чтобы не мучаться при апгрейдах через
cvsup и make installworld
...
SENDMAIL_MC=/etc/mail/sendmail.mc
SENDMAIL_SUBMIT_MC=/etc/mail/submit.mc

# cd /etc/mail
# make cf && make install

собственно:

# less /etc/mail/Makefile (там все понятно и прозрачно)


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено _DVS_ , 14-Июн-05 10:09 
>Подскажите пожалуйста, как настроить Sendmail, чтобы он не принимал
письма, >если IP
>адрес отправителя не соответствует ip адресу хоста, указанного как SMTP сервер
>в MX записи домена из обратного адреса.
>Также хочется, чтобы Sendmail делал ту же самую проверку для доменного имени,
>получаемого обратным DNS из адреса отправителя.

Т.е. ты хочешь принимать почту только от MX и ни от кого больше? Готовых решений я не встречал, но реализовать несложно. Только нужно ли это?


>А письма, отправленные от адресов
>без имени (обратного DNS) вообще не принимал.

Можно в mc добавить:

FEATUDE(`delay_checks', `friend')dnl
LOCAL_RULESETS
checkrelay
R<TEMP>         $#error $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<FORGED>      $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_addr}
R<FAIL>         $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_addr}

а в access:

To:abuse@        SPAMFRIEND
To:postmaster@   SPAMFRIEND

Это заставит sendmail отбрасывать сообщения исходящие от нерезольвящихся IP и от IP с противоречевыми A и PTR записями. Но на postmaster и abuse будут пропускаться все сообщения, так требует RFC.


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено _DVS_ , 15-Июн-05 08:58 
>Можно в mc добавить:
>
>FEATUDE(`delay_checks', `friend')dnl
>LOCAL_RULESETS
>checkrelay
>R<TEMP>         $#error $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
>R<FORGED>      $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_addr}
>R<FAIL>         $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_addr}

Ошибочка :-(, надо так:

FEATUDE(`delay_checks', `friend')dnl
LOCAL_RULESETS
checkrelay
R$*        $: <$&{client_resolve}>
R<TEMP>         $#error $@ 4.7.1 $: "450 Relaying temporarily denied. Cannot resolve PTR record for " $&{client_addr}
R<FORGED>      $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged " $&{client_addr}
R<FAIL>         $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed " $&{client_addr}


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено Swap , 14-Июн-05 12:52 
http://dz.dn.ua/spam/antispam.html

рекомендую.



"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено xOr , 14-Июн-05 13:49 
Большое всем спасибо за разъяснение.

>Т.е. ты хочешь принимать почту только от MX и ни от кого больше? >Готовых решений я не встречал, но реализовать несложно. Только нужно ли это?

Да, это я хотел. А разве часто письма отправляются не с MX? Да, вообще
это возможно в мощных распределённых почтовых системах.
Вообще конечно меня убедили, что проверки PTR и A записей достаточно.

Но интересно было бы попробовать и этот метод.
А реализовать это можно с помошью настроек Sendmail, или придётся писать свою дополнительную программу?


"Чтобы Sendmail принимал только если IP является MX зоны обра..."
Отправлено _DVS_ , 15-Июн-05 09:09 
>Да, это я хотел. А разве часто письма отправляются не с MX?
>Да, вообще
>это возможно в мощных распределённых почтовых системах.
>Вообще конечно меня убедили, что проверки PTR и A записей достаточно.

Письма, не являющиеся спамом, довольно часто отправляются не с MX и даже с хостов не имеющих A и PTR-записей. Причины самые разные. Например у моего почтового сервера нет PTR-записи потому, что провайдер не хочет(не может? ленится?) настроить реверс.

>Но интересно было бы попробовать и этот метод.
>А реализовать это можно с помошью настроек Sendmail, или придётся писать свою
>дополнительную программу?

Придется править cf. Думаю, что такую проверку можно реализовать при помощи map bestmx. Попробую набросать на досуге, сейчас совсем нет времени.