Sendmail mit virtusertable - Wildcards

gunnarh

Allwissende Müllhalde
ich habe bisher sendmail mit virtusertable und catch-all ("@domain.tld username") verwendet. Bedingt durch die immer heftiger werdende Spam-Belastung (spamassassin filtert leider nur um die 95% aus, die Sensibilitätsschwelle möchte ich jedoch nicht heruntersetzen um false-positives zu vermeiden) muss ich die Verwendung von catch-all jedoch überdenken und stattdessen z.b. Wildcards oder am besten regular expressions verwenden.

Soweit ich recherchiert habe ist dies mit sendmail und virtusertable jedoch nicht möglich?

meine Zielvorstellung z.b.
statt:
@domain.tld username1

soetwas zu verwenden:
gh.*@domain.tld username1

Hat jemand eine Idee wie soetwas ohne großen Aufwand zu realisieren ist? Die Nachrichten erst mir procmail wegzusortieren wäre zwar prinzipell auch möglich, jedoch möchte ich eben vom catch-all wegkommen und die an ungültige Adressen adressierten Spams erst gar nicht mehr annehmen. Und alle gültigen Adressen in die Virtusertable einzutragen scheitert daran, dass die Liste der verwendeten Adressen mittlerweile unbekannt ist (es wurden einfach für unterschiedliche Zwecke Adressen in der Form aa.xxxxx@domain.tld verwendet, wobei mir nur aa bekannt ist, die xxxxx sind sehr vielfältig.
 
Last edited by a moderator:
also du müsstest folgendes benutzen können:

gh.*@$domain %1

dann muss für den Teil im Kontonamen der an der Stelle des '*' steht, dann entweder ein Userkonto oder ein Mailalias auf dem Rechenr existieren, an sonsten wird es vermutlich mit User Unknown gebounced.

Alternativ kannst du natürlich auch über %1@$neue_domain redirecten, oder noch den Namen des Zielkontos ergänzen - also z.B. gh.%1@$neue_domain. Dann kommen an dem neuen Domainnamen nur noch die an, die du haben wolltest.
 
mein Wunsch:
gh.*@domain.tld username1

Vorschlag von jaw:
gh.*@domain.tld %1

Beides funktioniert meiner Recherche/Erfahrung nach nicht. Ein Sternchen in der virtusertable wird offenbar nicht als Wildcard unterstützt/interpretiert.

was "jaw" vermutlich gemeint hat wäre dies:
@domain.tld %1

=> dann hab ich aber wieder den unerwünschten Catchall und muss zusätzlich das File "aliases" mit mir nicht bekannten (jedoch im Umlauf befindlichen) email-Adressen befüllen.

Wie gesagt: ich benötige keine selektive Sortierung, sondern es soll schlicht und einfach gh.*@domain.tld in eine Mailbox zugestellt und stattdessen die Catch-All Zeile aus der virtusertable entfernt werden.

Also leider keine Lösung.
 
Last edited by a moderator:
nein, ich meinte, was ich geschrieben habe. Die virtusertable von Sendmail kann Wildcards. Welchen MTA du verwendest, hast du nicht geschrieben.

Siehe Sendmail cf/README - Features

du kannst natürlich auch
gh.*@$domain user1

schreiben, dann bekommt der lokale User 'user1' alle Mails, die durch kommen sollten, und die Catchall bounced z.B. den Rest.

[Edit] du hast Recht, da hab' ich mich wohl verlesen.

Anderer Vorschlag: die Filterung Procmail überlassen, dann geht das problemlos, denn der kann RegExps auf die Empfängeradresse anwenden:

:0:
* ^TO_ gh\..*@
!user1
 
Last edited by a moderator:
@jaw - stimmt, diese Doku würde ich auch so verstehen.

Bei mir funktioniert es trotzdem nicht. Eventuell ist meine Sendmail-Version zu alt für dieses Feature?

ich habe in der Virtusertable folgenden Eintrag vorgenommen:

test.+*@domain.tld benutzer1
den Catch-All für @domain.tld habe ich entfernt.

anschließend mit
makemap hash virtusertable <virtusertable
die neue db erzeugt.

Eine Testmail an test.abcabc@domain.tld bringt nun lediglich ein Reply des Mail Delivery Subsystem mit einem "550 5.1.1 <test.abcabc@domain.tld>... User unknown"
 
Die Lösung mit Procmail wäre meine letzte Wahl, denn ich möchte diese tausenden zig-kb großen PDFs, ZIP, xls Files die da momentan auf einen niederpasseln (Stichwort: Aktien-Spam, siehe auch Heise Meldung Mailserver-Höllenritt durch Aktien-Spam) eigentlich gar nicht annehmen und verarbeiten müssen, zumindest nicht auf hunderten generierten und nicht existenten aliases, die auch niemals verwendet wurden bzw. benötigt werden.
 
Die Verwendung von Wildcards in der virtusertable ist laut changelog seit Version "8.12.0/8.12.0 2001/09/08" möglich.

Mein Sendmail ist zwar nicht der neueste, aber immerhin 8.12.10 - sollte also bereits unterstützt sein.

Hat noch jemand einen Tipp woran ich scheitere?
 
Hat vielleicht noch jemand einen Tipp für mich oder kann wenigstens bestätigen, dass sein Sendmail Wildcards in der Virtusertable unterstützt? Ist die Doku eventuell falsch und der dort ab 8.12.0 angeführte Wildcard-Support war mit meiner 8.12.10 doch noch gar nicht implementiert?
 
beide Zeilen führen zum selben Ergebnis - nämlich einer neuen virtusertable.db:
Code:
makemap hash virtusertable <virtusertable
makemap hash virtusertable.db <virtusertable

Sendmail Neustart entfällt in meiner Konfiguration, da sendmail nicht als Dämon läuft sondern über xinetd gestartet wird. Das nächste ankommende Mail wird daher sofort mit der neuen virtusertable behandelt.
 
Nochmal eine Frage: Warum unterbindest du nicht komplett die catchall Adressen? Funktioniert mit einem Eintrag wie diesem in der virtusertable:

Code:
@your.domain<tab>550 No such user here

Wenn zum Beispiel die Mailadresse mail @ your.domain nicht existiert, wird dem Absender die 550 Meldung zurückgegeben und die Mail nicht angenommen. Dieser Eintrag sollte nach allen anderen Einträgen in der virtusertable stehen.

Noch ein Frage: Was für Parameter werden dem sendmail via xinetd mitgegeben?
 
Last edited by a moderator:
Dein Hinweis bezüglich Unterbinden von catchall ist mir klar. Genau dahin möchte ich ja kommen, nämlich catchall aus der Konfiguration herausnehmen bzw. wie von Dir beschrieben unbekannte Adressen mit einem 550er ablehnen und nur mehr "well known adresses" verwenden.

Das Problem ist nur wie beschrieben, dass die Liste der zu definierenden Adressen nicht mehr ermittelbar ist, jedoch mit einer Regular-Expression oder einem schlichten Wildcard-Support recht schnell abgehandelt werden könnte - wenns denn funktionieren würde.

Sendmail wird über xinetd.d/sendmail mit den Parametern "-Am -bs" gestartet.
 
Back
Top