[Карта]
[Начало]
[Sendmail-ссылки]
[Синтаксис]
[Типовые задачки]
[Задачки по маршрутизации]
[Задачки по маcкарадингу]
[SendmailACL]
[Spamooborona]
[VadeRetro]
[Regex]
[Тонкости]
[Недок.особен.]
[Несущ.юзеры]
[Прячемся!]
[RFC1893.Цитаты]
[ТП.Эмоции]
[Антиспам&Разум]
[Экзерсисы]
Как из sendmail.cf получить sendmail.mc.
Привожу ссылку на мой комментарий на тот случай,
если потом кто-нибудь допишет что-либо толковое по данной теме.
1. Переписать все модули, с которыми собран данный конфиг. Они указаны в начале sendmail.cf в первых строках, например, строка
##### $Id: dnsbl.m4
означает, что конфиг собран с поддержкой dnsbl-баз (FEATURE(`dnsbl',`the value', `the value')),
##### $Id: greet_pause.m4
означает, что наложены ограничения на этап HELO smtp-сессии с помощью FEATURE(`greet_pause',`the value')
2. Посмотреть, заполнена ли секция MAIL FILTER DEFINITION.
Например, я использую VadeRetro & DrWeb, поэтому в моем sendmail.cf есть такое:
# Input mail filters
O InputMailFilters=drweb-filter
# Milter options
O Milter.LogLevel=8 <=> define(`confMILTER_LOG_LEVEL',`8')
O Milter.macros.connect=j, _, {daemon_name}, {if_name}, {if_addr}
O Milter.macros.helo={tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}
O Milter.macros.envfrom=i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host},
{mail_addr}
O Milter.macros.envrcpt={rcpt_mailer}, {rcpt_host}, {rcpt_addr}
O Milter.macros.eom={msg_id}
И такой раздел:
######################################################################
######################################################################
#####
##### MAIL FILTER DEFINITIONS
#####
######################################################################
######################################################################
Xdrweb-filter, S=local:/var/drweb/ipc/drweb-milter.sock, T=C:10m;S:8m;R:8m;E:10m
Это означает, что в sendmail.mc есть строка
INPUT_MAIL_FILTER(`drweb-filter',`S=local:/var/drweb/ipc/drweb-milter.sock, T=C:10m;S:8m;R:8m;E:10m')
3. Посмотреть секцию MAILER DEFINITIONS и соотнести ее с подходящими строками в начале sendmail.cf.
Например, у меня в этой секции написано следующее:
######################################################################
######################################################################
######################################################################
#####
##### MAILER DEFINITIONS
#####
######################################################################
######################################################################
##################################################
### Local and Program Mailer specification ###
##################################################
##### $Id: local.m4,v 8.59 2004/11/23 00:37:25 ca Exp $ #####
[skip]
...
[skip]
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u
Mprog, P=/usr/libexec/smrsh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
T=X-Unix/X-Unix/X-Unix,
A=smrsh -c $u
а в начале конфига упомянуты следующие файлы:
##### $Id: linux_procmail.m4,v 8.13 1999/04/24 05:37:43 gshapiro Exp $ #####
##### $Id: local_procmail.m4,v 8.22 2002/11/17 04:24:19 ca Exp $ #####
##### $Id: smrsh.m4,v 8.14 1999/11/18 05:06:23 ca Exp $ #####
Все это есть следствие заданных опций в конфиге
MAILER(`local')
ifdef(`PROCMAIL_MAILER_PATH',,
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail'))
FEATURE(local_procmail)
FEATURE(`smrsh')
В поле F=lsDFMAw5:/|@qSPfhn9 перечислены флаги, с которыми запускается локальный мэйлер. По умолчанию (для procmail) используется именно такой набор флагов.
Если какой-либо флаг добавляется или удаляется с.п. опции sendmail.mc, то это выглядит так (пример для mailer'a mail.local):
dnl turn on S flag for local mailer
MODIFY_MAILER_FLAGS(`LOCAL', `+S')dnl
Ну а так задается путь к mailer'у:
define(`LOCAL_MAILER_PATH', `/bin/mail.local')dnl
Использование MAILER(`smtp') повлечет за собой появление в конфиге следующего блока:
#####################################
### SMTP Mailer specification ###
#####################################
##### $Id: smtp.m4,v 8.65 2006/07/12 21:08:10 ca Exp $ #####
[skip]
...
[skip]
Msmtp, P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h
Mesmtp, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h
Msmtp8, P=[IPC], F=mDFMuX8, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h
Mdsmtp, P=[IPC], F=mDFMuXa%, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h
Mrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSMTP, E=\r\n, L=2040,
T=DNS/RFC822/SMTP,
A=TCP $h
4. Приведу список остальных соответствий для своего конфига. Жирным шрифтом выделены опции конфига sendmail.mc.
Обычным шрифтом обозначены опции в sendmail.cf.
C{TrustAuthMech}LOGIN PLAIN
# list of authentication mechanisms
O AuthMechanisms=LOGIN PLAIN
<=>
TRUST_AUTH_MECH(`LOGIN PLAIN')
define(`confAUTH_MECHANISMS',`LOGIN PLAIN')
# maximum message size
O MaxMessageSize=125000000 <=> define(`confMAX_MESSAGE_SIZE', `125000000')dnl
# log level
O LogLevel=9 <=> define(`confLOG_LEVEL',`9')
# privacy flags
O PrivacyOptions=goaway,nobodyreturn,noetrn <=> define(`confPRIVACY_FLAGS', `goaway,nobodyreturn,noetrn')
O Timeout.ident=0s <=> define(`confTO_IDENT', `0s')dnl
O Timeout.command=5m <=> define(`confTO_COMMAND', `5m')dnl
O Timeout.queuereturn=1d <=> define(`confTO_QUEUERETURN', `1d')dnl
# maximum number of recipients per SMTP envelope
O MaxRecipientsPerMessage=100 <=> define(`confMAX_RCPTS_PER_MESSAGE', `100')dnl
# Maximum length of the sum of all headers
O MaxHeadersLength=32768 <=> define(`confMAX_HEADERS_LENGTH', `32768')dnl
# maximum hop count
O MaxHopCount=20 <=> define(`confMAX_HOP', `20')dnl
# privacy flags
O PrivacyOptions=goaway,nobodyreturn,noetrn <=> define(`confPRIVACY_FLAGS', `goaway,nobodyreturn,noetrn')dnl
# maximum number of children we allow at one time
O MaxDaemonChildren=320 <=> define(`confMAX_DAEMON_CHILDREN', `320')dnl
# load average at which we just queue messages
O QueueLA=140 <=> define(`confQUEUE_LA', `140')dnl
# load average at which we refuse connections
O RefuseLA=220 <=> define(`confREFUSE_LA', `220')dnl
# where do errors that occur when sending errors get sent?
O DoubleBounceAddress=double-b <=> define(`confDOUBLE_BOUNCE_ADDRESS',`double-b')
# Width of the window
O ConnectionRateWindowSize=60 <=> define(`confCONNECTION_RATE_WINDOW_SIZE',`60')
# this is equivalent to setting class "t"
#Ft/etc/mail/trusted-users
Troot
Tdaemon
TDrWEB-DAEMON <=> define(`confTRUSTED_USERS',`DrWEB-DAEMON')
FEATURE(`redirect')dnl <=> ##### $Id: redirect.m4,v 8.15 1999/08/06 01:47:36 gshapiro Exp $ #####
+ рулсет.
FEATURE(`no_default_msa') <=> ##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####
<=> отсутствию строки
O DaemonPortOptions=Port=587, Name=MSA, M=E
FEATURE(`dnsbl', `cbl.abuseat.org', `"550 Mail from " $&{client_addr} " rejected - see
cbl.abuseat.org/lookup.cgi?ip="$&{client_addr}')
<=>
##### $Id: dnsbl.m4,v 8.33 2007/01/05 18:49:29 ca Exp $ #####
# map for DNS based blacklist lookups
Kdnsbl dns -R A -T
# DNS based IP address spam list cbl.abuseat.org
R$* $:
$&{client_addr}
R$-.$-.$-.$- $:
> $(dnsbl $4.$3.$2.$1.cbl.abuseat.org. $: OK $)
R>OK $:
OKSOFAR
R>$+ $:
TMPOK
R>$+ $#error
$@ 5.7.1 $: "550 Mail from " $&{client_addr} " rejected - see cbl.abuseat.org/lookup.cgi?ip="$&{client_addr}
FEATURE(`use_cw_file')dnl <=> ##### $Id: use_cw_file.m4,v 8.11 2001/08/26 20:58:57 gshapiro Exp $ #####
Cwlocalhost
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names
FEATURE(`access_db')dnl <=>##### $Id: access_db.m4,v 8.27 2006/07/06 21:10:10 ca Exp $ #####
# Access list database (for spam stomping)
Kaccess hash -T /etc/mail/access
+ несколько рулсетов
FEATURE(`blacklist_recipients')dnl <=> ##### $Id: blacklist_recipients.m4,v 8.13 1999/04/02 02:25:13 gshapiro
Exp $ #####
+ ruleset in Rcpt_ok
5. egrep "(^S(Local_check_|check_eoh))" sendmail.cf.
Вы можете обнаружить SLocal_check_relay, SLocal_check_mail, SLocal_check_rcpt, Scheck_eoh и возможно что-то еще.
В этом случае нуждо добавить в конце sendmail.mc следующий раздел
LOCAL_CONFIG
LOCAL_RULESETS
SLocal_check_* сюда скопировать как есть
В локальном наборе правил могут использоваться спец. преобразования, пользовательские макросы.
Поэтому нужно внимательно просмотреть найденные локальные рулсеты на наличие "\$\([a-z]+ .+ \$\) ,например, это могут быть
R$* $| <e s> $|
<i> $:
$(storage {Sender} $@ $1 $) $1
R$* $:
$(syslog syslog:PrCon:6: $1 $) $1
R<$+><$+> $:
<$(arith + $@ $1 $@ $2 $)>
И на наличие $={.+}, $&{.+}, ${.+} , например, у меня есть:
R<$={Smtp_Auth}> $@
OK
R@NOLIST1 $|
$+ $: $(storage
{Spam_Check} $@ $&{No_Check} $) @NOLIST1 $| $1
R$* $:
<$&{Spam_Check}>
R<$={Accept}> <$*> $: $1
При обнаружении того или другого нужно найти определения срец. преобразований и макросов в sendmail.cf (у меня они находятся находятся сразу за строками
# my name for error messages
DnMAILER-DAEMON
CPREDIRECT
)
и добавить после LOCAL_CONFIG и до LOCAL_RULESETS.
То есть в моем случае, LOCAL_CONFIG должен выглядеть так:
LOCAL_CONFIG
F{Smtp_Auth}/etc/mail/smtp_auth_users
D{Spam_Check}1
D{No_Check}0
C{Accept}OK RELAY
# arithmetic map
Karith arith
# macro storage map
Kstorage macro
# system logging map (/var/log/maillog)
Ksyslog syslog
LOCAL_RULESETS
[skip]
R$* $| <e s> $|
<i> $:
$(storage {Sender} $@ $1 $) $1
[skip]
R$* $:
$(syslog syslog:PrCon:6: $1 $) $1
[skip]
R<$+><$+> $:
<$(arith + $@ $1 $@ $2 $)>
[skip]
R<$={Smtp_Auth}> $@
OK
[skip]
R@NOLIST1 $|
$+ $: $(storage
{Spam_Check} $@ $&{No_Check} $) @NOLIST1 $| $1
[skip]
R$* $:
<$&{Spam_Check}>
[skip]
R<$={Accept}> <$*> $: $1
6. egrep "H[a-zA-Z]+:\T\$\>[A-Za-z].+" sendmail.cf
Это мы ищем строки, подобные этой:
HSubject: $>Check_Subject
Здесь для проверки заголовка "Тема" вызывается набор правил Check_Subject.
Надо его найти в sendmail.cf и записатьв sendmail.mc:
HSubject: $>Check_Subject
SCheck_Subject
А сюда скопировать набор из sendmail.cf.
7. Собрав все модули, сформировать test_sendmail.mc, далее из него получить test_sendmail.cf.
m4 path_to_cf.m4/cf.m4 test_sendmail.mc >test_sendmail.cf
8. diff sendmail.cf test_sendmail.cf
Далее придется думать.
Если изменения предшественником вносились прямо в sendmail.cf, то придется сделать то же самое.
В общем, работа не из легких.
2.
Обратная связь
Страница создана 27 января 2010г. Последнее обновление - 1 февраля 2010г.