O sendmail permite colocar restrições nas conversas TLS. Desejo 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, só quero verificar se o servidor para o qual estou enviando o e-mail é certificado como pertencente 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 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 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).
Esta não é exatamente uma resposta para a pergunta feita, mas parece-me que você está fazendo as coisas da maneira mais difícil.
A configuração do Sendmail foi escrita de forma a priorizar a facilidade e eficiência para o software que analisa essa configuração, não para fácil configuração e manutenção por humanos. Simplesmente não houve uma boa razão para fazer isso nas últimas décadas.
Sendmail era uma relíquia terrivelmente arcana 15 anos atrás. Algumas distribuições linux ainda o fornecem por padrão, e tudo bem se a configuração padrão funcionar para você, mas assim que você se pegar fazendo algo que demore mais do que alguns minutos, é melhor descartar o sendmail e instalar um MTA moderno .
Cerca de 15 anos atrás, o qmail ainda poderia ser um substituto sensato, mas por quase tanto tempo considerei o postfix uma escolha melhor. A documentação do site postfix.org é boa quando você encontra o bit de que precisa. No seu caso, você vai querer http://www.postfix.org/TLS_README.html para este problema.
Sei que você provavelmente já gastou algum tempo resolvendo alguns problemas no sendmail, mas em vez de gastar mais tempo nesse buraco, troque na primeira oportunidade. Se você olhar para trás, vai se encolher.
Faça o armazenamento sendmail.cf
${cn_subject}
com a parte do host removida em${cn1_subject}
.Isso torna o acabamento da implementação quase trivial.
entrada de acesso:
correção do sendmail.mc para suportar a entrada acima
Explicação:
Local_tls_rcpt
o armazenamento do conjunto de regras${cn_subject}
com a parte "antes do primeiro ponto" removida${cn1_subject}
${cn1_subject}
acionado pelo prefixo CN1 na "parte extra" doTLS_req
conjunto de regrasExemplo de script para testá-lo