Wie kann ich Platzhalter für sendmail TLS_Rcpt verwenden?

9

Mit sendmail können TLS-Konversationen eingeschränkt werden. Ich möchte überprüfen, ob an example.com gesendete Nachrichten an einen Server mit einem * .messagelabs.com-Zertifikat gesendet werden. Ich möchte mich vor DNS-Spoofing und MitM schützen. Wenn messagelabs nur einen Server hätte, wäre das einfach:

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

Messagelabs verfügt jedoch über viele Server und Cluster verschiedener Server mit eindeutigen IP-Adressen und Zertifikaten für denselben Namen. Alles in Ordnung, ich möchte nur überprüfen, ob der Server, an den ich die E-Mail sende, für Messagelabs zertifiziert ist.

Ich habe versucht

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

aber ich bekomme fehler wie

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

Wie kann ich das machen? Dies ist eine wiederkehrende Anfrage für uns (hauptsächlich für Konfigurationen wie TLS_Rcpt: example.com VERIFY: 256 + CN: *. Example.com), daher wäre ich bereit, sendmail.cf zu ändern, aber ich kann keinen Sinn daraus machen

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 (baldiges Upgrade auf 8.15.2).

Gesetz29
quelle
Also (noch?) Keine Antworten. Ich würde versuchen, es selbst zu beantworten, aber ich bin mir nicht sicher, ob ein Tag oder so, um Kapitel 28 des sendmail-Buches zu integrieren, genug Zeit ist oder sogar die Antwort liefern würde.
Law29
2
Ich habe nicht genug Vertrauen, um eine endgültige Antwort zu geben, aber ich glaube nicht, dass Platzhalter gemäß dem Abschnitt "Einschränkung in der aktuellen Implementierung" dieses Blogposts unterstützt werden: security-skywalker.blogspot.com/2013/01/…
Mike B
... und ja, ich bin mir bewusst, dass sich "Platzhalterzertifikate" von den Funktionen für Wildcard-Übereinstimmungsmuster unterscheiden, nach denen Sie suchen, aber der Artikel hebt die statische Natur dieser Funktion hervor. :-)
Mike B
Vielleicht ist Ihre Antwort nicht endgültig, aber es ist die beste, die ich gefunden habe (aus irgendeinem Grund hatte ich diesen Blog-Beitrag nicht gefunden, danke, dass Sie mich darauf aufmerksam gemacht haben)
Law29
Möchten Sie die Unterstützung für CNRE-Tags testen? Es würde $ & {cn_subject} gegen Ihren benutzerdefinierten regulären Ausdruck testen.
AnFi

Antworten:

1

Erstellen Sie den sendmail.cf-Speicher, ${cn_subject}in dem der Hostteil entfernt ist ${cn1_subject}.
Dies macht die Fertigstellung der Implementierung fast trivial.

WARNUNG: Fragen Sie news:comp.mail.sendmailvor der Bereitstellung in einer Testumgebung nach Meinungen . Es kann funktionieren, aber sendmail macht das Vermeiden von "unerwarteten Nebenwirkungen" VIEL mühsamer, als ich bereit bin, "zu investieren". Ich habe es mit sendmail-8.15.2 "trocken getestet".

Zugangseintrag:

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

sendmail.mc Fix zur Unterstützung des obigen Eintrags

WARNUNG: Denken Sie an TAB (\ t) zwischen RHS und LHS in RZeilen.
Es ist mehr schmutzige Implementierung sendmail.mc nur über .

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

Erläuterung:

  1. Erstellen Sie einen Local_tls_rcptRegelsatzspeicher, in dem der ${cn_subject}Teil "vor dem ersten Punkt" entfernt wurde${cn1_subject}
  2. Fügen Sie Überprüfungen des ${cn1_subject}durch das CN1-Präfix ausgelösten "zusätzlichen Teils" des TLS_reqRegelsatzes hinzu

Beispielskript zum Testen

#!/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
quelle
Akzeptierte dies, obwohl ich es noch nicht getestet habe; es war genau das, was ich für möglich hielt, aber nicht herausfinden konnte, wie es geht.
Law29
1

Dies ist nicht gerade eine Antwort auf die gestellte Frage, aber es sieht für mich so aus, als würden Sie die Dinge auf die harte Tour machen.

Die Sendmail-Konfiguration wurde so geschrieben, dass Benutzerfreundlichkeit und Effizienz für die Software, die diese Konfiguration analysiert, Priorität haben, nicht für die einfache Konfiguration und Wartung durch Menschen. In den letzten Jahrzehnten gab es einfach keinen guten Grund dafür.

Sendmail war vor 15 Jahren ein schrecklich arkanes Relikt. Einige Linux-Distributionen bieten es weiterhin standardmäßig an, und das ist in Ordnung, wenn die Standardkonfiguration für Sie funktioniert. Sobald Sie jedoch feststellen, dass Sie etwas tun, das länger als ein paar Minuten dauert, sollten Sie sendmail rauswerfen und einen modernen MTA installieren .

Vor ungefähr 15 Jahren war qmail vielleicht noch ein vernünftiger Ersatz, aber fast so lange habe ich Postfix als bessere Wahl angesehen. Die Dokumentation auf der Website postfix.org ist gut, sobald Sie das gewünschte Bit gefunden haben. In Ihrem Fall benötigen Sie http://www.postfix.org/TLS_README.html für dieses Problem.

Mir ist klar, dass Sie wahrscheinlich bereits einige Zeit damit verbracht haben, einige Probleme in sendmail zu lösen, aber anstatt mehr Zeit in dieses Loch zu werfen, wechseln Sie zum frühestmöglichen Zeitpunkt. Wenn Sie jemals zurückblicken, werden Sie zusammenzucken.

mc0e
quelle
Tatsächlich habe ich aus $ Gründen Postfix länger verwaltet als sendmail, und heute habe ich 16 Sendmail-Kernserver in einer passabel angepassten Umgebung, die nicht so einfach zu ändern ist. Das Upgrade auf die letzte Version ist eine Frage von Minuten, aber das Ändern ist eine andere Sache. Sie haben jedoch Recht, dass die Verwendung eines Postfixes "smtp_tls_policy_maps" mit "example.com Secure Match = .messagelabs.com" die Sicherheit bietet, die ich suche. Dieser Anwendungsfall könnte mir tatsächlich den Grund liefern, warum ich die für die Umstellung erforderliche Zeit aufwenden muss.
Law29