Ключевые слова:spam, sendmail, mail, (найти похожие документы)
From: Максим Захаров <maxime at sochi.net.ru>
Date: Mon, 11 Apr 2004 14:31:37 +0000 (UTC)
Subject: Блокирование unresolved IP и фильтрация по Received в sendmail
Оригинал: http://www.maxime.net.ru/doc/sendmailFEATURES.ru.shtml
Антиспамовские фичи к sendmail (http://www.sendmail.org/)
Максим Захаров
ДатаПарк (http://www.datapark.ru/)
_________________________________________________________________
Описание фич Sendmail (http://www.sendmail.org/m4/features.html).
datapark_unresolved
Отказывает в приёме почты с адресов, не имеющих обратной DNS
зоны. Если задан необязательный параметр, он использется для
замены стандартного сообщения об ошибке. Стандартное сообщение
об ошибке:
Rejected unresolved: IP-ADDRESS
где вместо IP-ADDRESS подставляется адрес удалёной машины. По
умолчанию, ошибки поиска в DNS игнорируются. Чтобы изменить это
поведение, используется второй необязательный параметр, который
может быть либо `t', либо целиком новым сообщением об ошибке.
datapark_dnsbl
Аналогична стандартной фичи dnsbl (http://www.sendmail.org/m4/features.html#dnsbl).
За исключением, что в блэк листе проверяются адреса, полученые
из Received: заголовков сообщений. И стандартное сообщение об
ошибке выглядит следующим образом:
Rejected: IP-ADDRESS Received header HEADER-IP-ADDRESS listed at SERVER
где вместо IP-ADDRESS, HEADER-IP-ADDRESS и SERVER подставляются
реальные данные. Принимает теже параметры, что и стандартная
фича dnsbl.
datapark_dnsbl.m4
divert(-1)
#
# Copyright (c) 2004 Datapark corp.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#
dnl 8.13: ifdef(`DP_DNSBL_MAP', `', `define(`DP_DNSBL_MAP', `dns -R A')')
ifdef(`DP_DNSBL_MAP', `', `define(`DP_DNSBL_MAP', `host')')
divert(0)
ifdef(`_DP_DNSBL_R_',`dnl',`dnl
VERSIONID(`$Id: datapark_dnsbl.m4,v 8.28 2004/04/08 21:22:40 maxime Exp $')
define(`_DP_DNSBL_R_',`')
LOCAL_CONFIG
Kdp_storage macro
HReceived: $>+dpCheckReceived
# map for DNS based blacklist lookups to check Received: headers
Kdp_dnsbl DP_DNSBL_MAP -T<TMP>ifdef(`DP_DNSBL_MAP_OPT',` DP_DNSBL_MAP_OPT')')
divert(-1)
define(`_DP_DNSBL_SRV_', `ifelse(len(X`'_ARG_),`1',`blackholes.mail-abuse.org',_ARG_)')dnl
define(`_DP_DNSBL_MSG_', `ifelse(len(X`'_ARG2_),`1',`"550 Rejected: " $`'&{client_addr} " Received header " $`'&{dpHeaderIP} " listed at '_DP_DNSBL_SRV_`"',`_ARG2_')')dnl
define(`_DP_DNSBL_MSG_TMP_', `ifelse(_ARG3_,`t',`"451 Temporary lookup failure of " $`'&{dpHeaderIP} " at '_DP_DNSBL_SRV_`"',`_ARG3_')')dnl
divert(0)
LOCAL_RULESETS
SdpCheckReceived
# DNS based IP address spam list _DP_DNSBL_SRV_
R$*[$-.$-.$-.$-]$* $: $2.$3.$4.$5
R$* $: $(dp_storage {dpHeaderIP} $@ $1 $) $1
R$-.$-.$-.$- $: <?> $(dp_dnsbl $4.$3.$2.$1._DP_DNSBL_SRV_. $: OK $)
R<?>OK $: OKSOFAR
ifelse(len(X`'_ARG3_),`1',
`R<?>$+<TMP> $: TMPOK',
`R<?>$+<TMP> $#error $@ 4.7.1 $: _DP_DNSBL_MSG_TMP_')
R<?>$+ $#error $@ 5.7.1 $: _DP_DNSBL_MSG_
divert(-1)
datapark_unresolved.m4
divert(-1)
#
# Copyright (c) 2004 Datapark corp.
# All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#
dnl 8.13: ifdef(`DPURB_MAP', `', `define(`DPURB_MAP', `dns -R A')')
ifdef(`DPURB_MAP', `', `define(`DPURB_MAP', `dns -R PTR -a<OK>')')
divert(0)
ifdef(`_DPURB_R_',`dnl',`dnl
VERSIONID(`$Id: datapark_unresolved.m4,v 1.00 2004/04/07 21:22:40 maxime Exp $')
define(`_DPURB_R_',`')
LOCAL_CONFIG
# map for DNS lookups for unresolved clients
Kdpurb DPURB_MAP -T<TMP>ifdef(`DPURB_MAP_OPT',` DPURB_MAP_OPT')')
divert(-1)
define(`_DPURB_MSG_', `ifelse(len(X`'_ARG_),`1',`"550 Rejected unresolved: " $`'&{client_addr} ',`_ARG_')')dnl
define(`_DPURB_MSG_TMP_', `ifelse(_ARG2_,`t',`"451 Temporary lookup failure of " $`'&{client_addr} ',`_ARG2_')')dnl
divert(8)
# DNS based IP address lookups
R$* $: $&{client_addr}
R$-.$-.$-.$- $: <?> $(dpurb $4.$3.$2.$1.IN-ADDR.ARPA. $: UNR $)
R<?>UNR $#error $@ 4.7.1 $: _DPURB_MSG_
ifelse(len(X`'_ARG2_),`1',
`R<?>$+<TMP> $: TMPOK',
`R<?>$+<TMP> $#error $@ 4.7.1 $: _DPURB_MSG_TMP_')
R<?>$+ $: OKSOFAR
divert(-1)