Spam und UCE - gültige Empfänger

Warum nehmen Sie Nachrichten für Mailadressen an, die es in ihrem System gar nicht gibt ? Die Frage hört sich so leicht an und trotzdem gibt es massenhaft Firmen, die erst mal JEDE Mail annehmen und dann mit einem NDR antworten. Vermutlich wissen viele Administratoren gar nicht, dass Sie damit zu einer "NDR-Schleuder" werden können, wie z.B. auf NDR-Filter und NDR-Spamming gut ersichtlich wird.

So funktioniert es

Sehr viele moderne Mailserver können mittlerweile Empfänger schon bei der SMTP-Verbindung überprüfen und bei Bedarf mit einem "Mailbox does not exist" ablehnen. Das ist ganz einfach und muss bei den meisten Mailservern nur konfiguriert werden.

550 User unknown

Wenn ihr Mailserver dies nicht unterstützt oder Sie ihren Mailserver nicht direkt an das Internet hängen wollten, dann müssen Sie ein System zwischen Internet und ihrem Mailserver einsetzen, welches eben ihren gewünschten Schutz sicherstellt, vielleicht noch Viren entsprechend erkennt und blockiert und irgendwie eine Liste der Benutzer vom internen Mailsystem erhält.

Einen anderen Ansatz habe ich mit NoSpamProxy, welcher als SMTP-Proxy agiert und damit die internen Funktionen zum Ablehnen unerwünschter Nachrichten weiterhin nutzbar macht.

Empfänger prüfen

Damit das erste System, welches die Mails annimmt überhaupt die Gültigkeit der Adressen prüfen kann, muss es natürlich eine vollständige Liste der gültigen internen Empfänger haben. Hierzu gibt es gleich mehrere Ansätze, wie ein Hersteller dies lösen kann.

Verfahren Vorteil Nachteil

Lernen der ausgehenden Nachrichten

  • Plug and Play Konfiguration
  • Keine Verbindung nach intern

  • Ausgehende Mails müssen ober das gleiche System geroutet werden.
  • Probleme bei mehreren Systemen (Hochverfügbarkeit, Abgleich)
  • Interner Sender muss mindestens einmal eine Mail senden, ehe er Nachrichten empfangen kann.
  • Interner Spam/Viren kann die Adresslisten schnell mit falschen Daten füllen

LDAP nach intern

  • Aktuelle Daten

  • Sicherheitsabschätzung erforderlich, wenn ein System mit Internetkontakt direkt die internen DCs abfragen.
  • Probleme, wenn das AD nicht alle Empfänger enthält

Die gültigen Adressen werden nach außen publiziert, z.B. kleinen SQL/LDAP-Server, der vom Gateway gefragt wird

  • nur Verbindung von intern nach extern./li>
  • Exportierte Daten können gefiltert werden

  • Zusätzlicher Server/Dienst "draußen"
  • Replikationslatenzzeit

Statische Listen
 FTP-Upload, Webservice, Manuelle Pflege, Mail and Gateway mit Attachment

  • Keine dynamische Konfigurationsverändern/li>

  • Manuelles Update erforderlich

SMTP PassThough
Das Gateway prüft die Mailadresse, indem es eine Testmail an das intern Gateway startet und dessen Antwort auf den "RCPT TO" abwartet.

  • Keine Konfiguration

  • Zusätzliche Last auf dem internen Mailserver
  • Internet Mailserver mit RCPTO-Filterung beherrschen.
  • Vorsicht bei Tarpitting und anderen Schutzfunktionen auf dem internen Server.

Kein Verfahren ist in der Hinsicht optional und es ist letztlich eine individuelle Betrachtung nach Sicherheit, Aufwand, Aktualität und Funktion erforderlich.

Lösungen nach Produkt

Auch wenn das Ablehnen von ungültigen Empfängern ein sehr einfacher Prozess ist, so haben erst neuere Versionen der verschiedenen Mailserver diese Funktion eingebaut. Sehr viele kommerzielle SMTP-Relays haben selbst im Jahr 2007 immer noch nicht diese einfache Funktion implementiert.

Exchange

Microsoft Exchange 5.5 und Exchange 2000 unterstützen noch keine Überprüfung von Empfängern. Erst Exchange 2003 konnte mit der Einführung von IMF V1 und V2 auch auf ungültige Empfänger prüfen und entsprechend ungültige Empfänger auf Ebene des SMTP-Protokolls gleich ablehnen. Exchange 2007 geht sogar noch weiter und lehnt die Empfänger nicht nur ab, sondern aktiviert noch ein "Tarpitting", d.h. die Meldung über die Ablehnung wird per Default um 5 Sekunden verzögert und nach 10 Protokollfehlern beendet, so dass es für Spammer schwerer ist, die Adressen zu erraten. Beide Einstellungen müssen aber aktiviert werden.

  • Exchange 2003
    Hier muss IMF (Exchange 2003 SP2) installiert werden, damit Sie auf der Organisation die Empfängerfilterung einschalten und auf dem annehmenden virtuellen SMTP-Server binden können.
    E2003 RCPTFilter E2003 RCPTO SMTP
  • Exchange 2007
    Installation der AntiSpam Addons auf dem Hub/Transport (oder Installation von Exchange 2007 Edge). Der Recipient Filter Agent ist die relevante Komponente, die auf der Organisation. aktiviert werden muss
    E2007 Antispam
    E2007 RCPT To Filter
[PS] C:\Program Files\Microsoft\Exchange Server\Scripts>& 'D:\Program Files\Micr
osoft\Exchange Server\Scripts\install-AntispamAgents.ps1'

Identity                                           Enabled         Priority
--------                                           -------         --------
Connection Filtering Agent                         True            4
Content Filter Agent                               True            5
Sender Id Agent                                    True            6
Sender Filter Agent                                True            7
Recipient Filter Agent                             True            8
Protocol Analysis Agent                            True            9

Bei all diesen Optionen ist es natürlich erforderlich, dass der Exchange SMTP-Stack direkt aus dem Internet erreichbar ist. Sobald ein Relay (z.B. Virenscanner o.ä.) installiert wird, kann die Funktion nicht mehr genutzt werden. Eine kleine Ausnahme sind nur die Zwischenstationen, welche als Proxy arbeiten oder eine Empfängerprüfung per SMTP vorziehen.

Postfix als Interimslösung

Besonderer Dank geht nach Berlin an Ralf Hildebrandt für die vielen Tipps und Hinweise zu Postfix.

Achtung
Ich bin kein Postfix Experte. Bitte verifizieren Sie ihre Konfiguration erst auf einem Testsystem.

Wenn Sie kein Problem mit dem Einsatz eines Unix-Mailrelays haben, dann ist PostFix nach meiner bisherigen Erfahrung das ideale Programm, um als erstes System vom Internet her die Nachrichten anzunehmen und ungültige Empfänger zurückzuweisen. Die Konfiguration ist denkbar einfach

# etc/postfix/main.cf
# mydestination = ip.des.exchange.server/32 das darf nicht drin sein
relay_domains = firma.de
transport_maps = hash:/etc/postfix/transport
mynetworks = ip.des.exchange.server/32
relay_recipient_maps = hash:/etc/postfix/validrecipients.txt

Nun müssen Sie nur noch die Datei "validrecipients.txt" anlegen. Die Datei enthält alle gültigen Empfänger Zeit für Zeile gefolgt von dem Statuscode, z.B.: Alle Empfänger die hier enthalten sind, sind gültig. Ungültige oder ausgeschiedene Empfänger müssen daher auskommentiert oder entfernt werden.

user1@firma.tld OK
user2@firma.tld OK
#user3@firma.tld 500 No longer valid.

An vielen Stellen sieht man die dritte Zeile ohne Kommentar, was aber falsch ist.

Quelle: http://www.postfix.org/postconf.5.html#relay_recipient_maps
"Technically, tables listed with $relay_recipient_maps are used as lists: Postfix needs to know only if a lookup string is found or not, but it does not use the result from table lookup."

Den Export aus Exchange 5.5 oder dem Active Directory können Sie per LDAP einfach selbst machen. Sie können dazu das Script VBS:SMTPList als Ausgangspunkt nehmen und im Quelltext die auskommentierte Zeile aktivieren.

Interessant könnte natürlich auch eine LDAP-Abfrage sein. Ergebnisse kann ich hierzu aber nicht vorweisen

Angeblich soll folgendes funktionieren

relay_recipient_maps = ldap:/etc/postfix/relay_maps.cf

Und der Inhalte der relay_maps.cf wäre ähnlich zu

server_host = ldap://xx.xx.xx.xx:389
search_base = cn=users,ou=msxfaq,o=local
query_filter = (|(mail=%s)(otherMailbox=smtp:%s))
result_attribute = mail
version = 3
bind = yes
bind_dn = cn=an_exchange_admin_user,cn=Recipients,ou=DOMAIN,o=DOMAIN
bind_pw = password

Diese Interimslösung sollte nur dann als Dauerlösung eingesetzt werden, wenn es in ihr Konzept passt und Sie mit den Produkten umgehen können. Prüfen Sie daher erst, ob ihre bestehende Produktauswahl nicht auch Empfänger schon am ersten Gateway ablehnen kann oder wählen Sie zukünftig ihre Produkte entsprechend aus.

Eine letzte aber ebenso pfiffige Lösung bietet Postfix, wenn ihr interner Mailserver auf ein RCPT TO eine Fehlermeldung generieren kann. Mit der Einstellung "address_verify_relayhost" kann Postfix angewiesen werden, für jede eingehende Mail  erst einmal eine Verbindung zu einem vorgegebenen internen Mailserver aufzubauen und die Gültigkeit der Adresse zu prüfen.

address_verify_relayhost = [IP-Adresse des SMTP Servers)

Zusätzlich muss in der Datei "main.cf" noch die SMTP-Prüfung aktiviert werden.

smtpd_recipient_restrictions = reject_unverified_recipient

Mit folgendem Eintrag kann man diese Ergebnisse dann sogar in einem Cache vorhalten, so dass der interne Server nicht jedes mal mit der gleichen falschen Adresse geprobt wird.

address_verify_map = btree:/var/lib/postfix/verify

Ungeschickt ist dies aber dann, wenn jemand eine Mail an einen neuen Benutzer sendet, eher der SMTP-Server diese neue Daten auch schon weiss. Allerdings sollten Sie hier natürlich nicht den Postfix selbst als Testgegenstelle eintragen,  sondern z.B.: den internen ExchangeServer, auf welchem Sie natürlich auch die Empfängerfilterung aktivieren müssen.

Hier noch ein paar Links zum Thema

Sendmail als Relay

Wenn Sie z.B. SENDMAIL als Mailrelay zwischen dem Internet und ihrem Exchange Server betreiben, dann können Sie auch hier entsprechende Filter und Konfigurationen vornehmen, so dass Sendmail als annehmendes System nur die Mails passieren lässt, die an gültige Empfänger gehen. Folgende Schritte sind dazu auf SENDMAIL erforderlich:

  • sendmail.mc sichern
    Sichern Sie zuerst die aktuelle Konfiguration des SENDMAIL, z.B. durch

cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc.<datum>

  • Aktivierung der Empfängerprüfung gegen eine Datenbank
    In der Konfigurationsdatei "/etc/mail/sendmail.mc" muss dazu das LDAP-Feature erweitert werden.

FEATURE(`blacklist_recipients')dnl


LDAPROUTE_DOMAIN(`firma1.tld')
LDAPROUTE_DOMAIN(`firma2.tld')
FEATURE(`ldap_routing', `hash -o /etc/mail/validusers.db', `null', `bounce')

EXPOSED_USER(`root')dnl

  • Als nächsten Schritt sind natürlich die gültigen Adressen in der Datenbank (z.B.: in der Datei /etc/mail/validusers) zu addieren in der Form, dass die Mailadresse auf die IP-Adresse des Exchange Servers verweist, z.B.:

user@firma1.tld [ExchangeIP]
user@firma2.tld [ExchangeIP]

  • Datenbank erstellen
    Über den Aufruf von "Makemap" wird die Datei für SENDMAIL entsprechend vorbereitet

makemap hash /etc/mail/validusers < /etc/mail/validusers

  • Sendmail neu starten
    nach einem Neustart von Sendmail sollte er dann nur Mails für in der Datenbank angegebenen Benutzer annehmen. Dies können Sie recht einfach mit einem Telnet testen

Achtung
Ich bin kein Sendmail Experte. Bitte verifizieren Sie ihre Konfiguration erst auf einem Testsystem.

Die Liste der Empfänger aus dem Exchange Server bzw. dem Active Directory können Sie sehr einfach mit einem VBScript oder CSVDE exportieren.

Also laut Postfix-Buch kann man die gewünschten Adressen mit

csvde -m -n -g -f "C:\ADUsers.txt \ -r "(|(&(objectClass=user)(objectCategory=person))(objectClass=groupOfNames)(objectClass=msExchDynamicDistributionList))" -l proxyAdresses

Dieser Aufruf exportiert alle "ProxyAddresses" von den Benutzern, Verteilern und dynamischen Verteilern aber z.B.: nicht die öffentlichen Ordner. Sie können natürlich auch ein VBScript als Ausgangspunkt nehmen. Siehe dazu VBS:SMTPList.

Probleme

Das frühe Ablehnen macht es natürlich für Spammer auch möglich, gültige Adressen einfach zu "probieren". Wenn Sich ihr Mailserver daher nicht entsprechend schützt, z.B.: durch Tarpitting oder temporäre Blockade der IP-Adresse, dann ist es tatsächlich für einen Angreifer damit ein leichtes, ihr Adressbuch zu erraten.

Andere Probleme sind nicht zu erwarten. Das Ablehnen von ungültigen Empfängeradressen am ersten Gateway hat nur Vorteile, weil sie dadurch Bandbreite, Speicherplatz und Rechenleistung sparen und vor allem keine NDRs versenden müssen, die im Falle eines Missbrauchs Sie selbst zum Störer machen. Wenn Sie hingegen diese NDRs nicht versenden, dann erkennen Absender nicht, wenn diese sich bei der Eingabe der Adresse vertippt haben. Das Abschalten dieser NDRs,  um den Störfaktor zu verhindern, ist daher keine gute Idee.

Weitere Links