[Карта]                [Начало]                [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 $)
ROK                           $: 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г.