Como posso usar curingas para o sendmail TLS_Rcpt?

9

O sendmail permite restringir as conversas TLS. Quero verificar se as mensagens enviadas para example.com são enviadas para um servidor que possui um certificado * .messagelabs.com. Quero me proteger contra falsificação de DNS e MitM. Se o messagelabs tivesse apenas um servidor, seria fácil:

TLS_Rcpt:example.com VERIFY:256+CN:mx.messagelabs.com

No entanto, o messagelabs possui muitos servidores e clusters de servidores diferentes com IPs e certificados exclusivos para o mesmo nome. Tudo bem, eu só quero verificar se o servidor para o qual estou entregando o e-mail está certificado para pertencer a messagelabs.

eu tentei

TLS_Rcpt:example.com VERIFY:256+CN:messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:*.messagelabs.com
TLS_Rcpt:example.com VERIFY:256+CN:.*.messagelabs.com

mas eu recebo erros como

CN mail31.messagelabs.com does not match .*.messagelabs.com

Como posso fazer isso? Esta é uma solicitação recorrente para nós (principalmente para configurações como TLS_Rcpt: example.com VERIFY: 256 + CN: *. Example.com), então eu estaria pronto para modificar o sendmail.cf, mas não consigo entender

STLS_req
R $| $+         $@ OK
R<CN> $* $| <$+>                $: <CN:$&{TLS_Name}> $1 $| <$2>
R<CN:$&{cn_subject}> $* $| <$+>         $@ $>"TLS_req" $1 $| <$2>
R<CN:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match " $1
R<CS:$&{cert_subject}> $* $| <$+>       $@ $>"TLS_req" $1 $| <$2>
R<CS:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " Cert Subject " $&{cert_subject} " does not match " $1
R<CI:$&{cert_issuer}> $* $| <$+>        $@ $>"TLS_req" $1 $| <$2>
R<CI:$+> $* $| <$-:$+>  $#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1
ROK                     $@ OK

Sendmail 8.14.7 (atualizando para 8.15.2 em breve).

Lei29
fonte
Portanto, ainda não há respostas. Eu tentaria responder pessoalmente, mas não tenho certeza se um dia ou mais para integrar o capítulo 28 do livro do sendmail é tempo suficiente ou até daria a resposta.
Law29
2
Não tenho confiança suficiente para fornecer uma resposta definitiva, mas acho que os caracteres curinga não são suportados, de acordo com a seção "Limitação na implementação atual" desta postagem do blog: security-skywalker.blogspot.com/2013/01/…
Mike B
... e sim, estou ciente de que "caracteres curinga" são diferentes da funcionalidade de padrão de correspondência de caracteres curinga que você está procurando, mas o artigo destaca a natureza estática desse recurso. :-)
Mike B
Talvez a sua resposta não é definitiva, mas é o melhor que eu encontrei (por alguma razão eu não tinha encontrado que esse post, obrigado por trazê-lo para a minha atenção)
Law29
Deseja testar o suporte para a tag CNRE? Ele testaria $ & {cn_subject} em relação à sua expressão regular personalizada.
AnFi

Respostas:

1

Torne a loja sendmail.cf ${cn_subject}com a parte do host incluída ${cn1_subject}.
Torna o acabamento da implementação quase trivial.

AVISO: Peça opiniões news:comp.mail.sendmailantes de implantá-lo no ambiente de não teste. Pode funcionar, mas o sendmail evita "efeitos colaterais inesperados" MUITO MAIS meticuloso do que estou pronto para "investir". Eu "testei a seco" com o sendmail-8.15.2.

entrada de acesso:

TLS_Rcpt:example.com VERIFY:256+CN1:messagelabs.com

Correção sendmail.mc para suportar a entrada acima

AVISO: lembre-se de TAB (\ t) entre RHS e LHS em Rlinhas.
É uma implementação mais suja sendmail.mc apenas .

define(`_LOCAL_TLS_RCPT_')dnl
LOCAL_RULESETS
SLocal_tls_rcpt
R$*     $: $&{cn_subject}
R$-.$+  $@ $(macro {cn1_subject}  $@ $2 $)
R$*     $@ $(macro {cn1_subject}  $@ $)    

# Ruleset continued
STLS_req
R<CN1:$&{cn1_subject}> $* $| <$+>               $@ $>"TLS_req" $1 $| <$2>
R<CN1:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " CN-1 " $&{cn_subject} " does not match " $1
ROK                     $@ OK
divert(0)dnl

Explicação:

  1. Faça o Local_tls_rcptarmazenamento do conjunto de regras ${cn_subject}com a parte "antes do primeiro ponto" removida${cn1_subject}
  2. Adicione verificações de ${cn1_subject}disparado pelo prefixo CN1 na "parte extra" do TLS_reqconjunto de regras

Script de amostra para testá-lo

#!/bin/sh
# -C sendmail-test.cf -- use non standard cf file
# -d60.5 -- trace (access) map lookus
# -d21.12 -- trace R lines rewriting 
sendmail -C sendmail-test.cf -bt -d60.5 <<END
.D{verify}OK
.D{cn_subject}mail31.messagelabs.com
.D{server_name}mail31.messagelabs.com
tls_rcpt [email protected]
END
AnFi
fonte
Aceitei isso mesmo que ainda não o tenha testado; era exatamente o que eu acreditava ser possível, mas não conseguia descobrir como fazer.
precisa saber é o seguinte
1

Esta não é exatamente uma resposta à pergunta apresentada, mas parece-me que você está fazendo as coisas da maneira mais difícil.

A configuração do Sendmail foi escrita de uma maneira que prioriza facilidade e eficiência para o software que analisa essa configuração, não para fácil configuração e manutenção por seres humanos. Simplesmente não há boas razões para fazer isso nas últimas décadas.

Sendmail era uma relíquia terrivelmente misteriosa há 15 anos. Algumas distribuições linux ainda a fornecem por padrão, e isso é bom se a configuração padrão funcionar para você, mas assim que você se encontrar fazendo algo que leva mais do que alguns minutos, é melhor jogar o sendmail e instalar um MTA moderno .

Há cerca de 15 anos, o qmail ainda pode ter sido um substituto sensato, mas por quase tanto tempo considerei o postfix uma opção melhor. A documentação do site postfix.org é boa quando você encontra o que precisa. No seu caso, você desejará http://www.postfix.org/TLS_README.html para esse problema.

Sei que você provavelmente já gastou algum tempo resolvendo alguns problemas no sendmail, mas, em vez de gastar mais tempo nesse buraco, mude na primeira oportunidade. Se você olhar para trás, vai se encolher.

mc0e
fonte
Na verdade, administro o postfix há mais tempo do que o sendmail, por $ razões, e hoje tenho 16 servidores de sendmail principais em um ambiente passável e personalizado que não é tão fácil de mudar. A atualização para a última versão é uma questão de minutos, mas a mudança é outra questão. No entanto, você está certo de que usar um postfix "smtp_tls_policy_maps" contendo "example.com secure match = .messagelabs.com" parece fornecer a segurança que estou procurando. Esse caso de uso pode realmente me fornecer o motivo pelo qual preciso gastar o tempo necessário para mudar.
precisa