Postfix und SASL: Wie kann man Benutzer für relaying sperren

mettwurscht
Posts: 14
Joined: 2003-02-13 19:20

Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by mettwurscht »

Hallo,

ich verwende postfix + SASL + mySQL.

Folgendes Szenario: Ein Kunde kann sich 50 Postfächer anlegen und hat von mir aus 3 Domains. Dieser Kunde bezahlt nun seine Rechnung nicht und somit soll der Mailserver für ihn gesperrt werden.

Ich habe bereits einen Ansatz gefunden, bei dem in eine Datei in /etc/postfix (nennen wir sie map_domainuser) die Domain und eine Nutzerkennung eingetragen wird. Also bspw so:

Code: Select all

@example.net         user@localhost
Wobei localhost die Domain ist, die postfix verwendet, um SASL zu verwenden. Diese Datei map_domainuser wird nun per Option smtpd_sender_login_maps = hash:/etc/postfix/map_domainuser in der main.cf eingebunden. Zusammen mit der Regel reject_authenticated_sender_login_mismatch ist das ein ganz hervorragendes Instrument.

Wenn nun aber der Kunde wie gesagt 50 Postfächer anlegen kann, dann wird die manuelle Pflege der map_domainuser doch recht unkomfortabel. Bzw. diese Liste muss ja angelegt werden, damit alle Benutzer relayen dürfen. Die Nutzer, die dann nicht mehr relayen dürfen, müssen aus dieser Liste gelöscht werden.

Gibt es andere Möglichkeiten? Gibt es die Möglichkeit, nur Benutzernamen zu sperren? Das wird dann zwar auch recht umfangreich, ist aber immernoch besser, als bspw. 3x50 Zeilen in eine Datei einzutragen. Ich verwende zwar auch die Athentifizierung per Zertifikat und dabei ist die Sperre eines Zertifikates ja sehr simpel. Aber momentan gibt es eben noch die Möglichkeit, sich per Benutzername und Passwort am Mailserver zwecks relaying anzumelden.
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11518
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by Joe User »

Nimm die Accounts des Users aus der MySQL-DB und blackliste seinen Systemuser, sollte schneller und übersichtlicher sein.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

mettwurscht
Posts: 14
Joined: 2003-02-13 19:20

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by mettwurscht »

Das hab ich auch schon überlegt. Dabei stellt sich halt die Frage, inwieweit das rechtens ist. In dieser Konfiguration sind die User ja sowohl die Relayberechtigung am postfix, als auch das POP3-/IMAP4-Konto. Lösche ich also den Benutzer, fallen auch die Postfächer mitsamt der E-Mails weg.

Ich möchte die Sperre aber eigentlich als letztes Druckmittel vor der Kündigung einsetzen, ohne dass es dem Kunden schadet, wenn er die ausstehenden Rechnungen beglichen hat (auch wenn er mir die Zahlung aus welchem Grund auch immer verweigert und damit erstmal mir schadet).

Gut. Eine andere Möglichkeit wäre, die Kennwörter für die Konten in einem Rutsch auf einen beliebigen Wert zu setzen. Dann kann er sich nach der Freischaltung wieder neue Kennwörter vergeben.

Dennoch: Ist jemand bekannt, wie man eine Benutzernamen-Blacklist für postfix anlegen kann?


Mett
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11518
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by Joe User »

Wie sieht denn die Datenbankstruktur für Postfix aus und welche Felder daraus werden vom POP3d/IMAPd verwendet?
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

mettwurscht
Posts: 14
Joined: 2003-02-13 19:20

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by mettwurscht »

Ich verwende die Datenbankstruktur, die webcyradm anlegt. Da gibt es neuerdings auch ein SMTPauth-flag, das aber vom postfix bisher nicht abgefragt wird. Das wäre eigentlich auch ein Ansatz.

Wie dem auch sei: cyrus verwendet aus der Tabelle "accountuser" die Felder 'username' und 'password'. Die selbe Tabelle sowie Felder werden von postfix auch für die Authentifizierung verwendet.
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11518
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by Joe User »

Hmm, der DB-Struktur nach solltest Dir mal folgende Optionen näher ansehen:
DB alias Feld status
DB domain Feld transport
DB virtual Feld dest
DB virtual Feld status

Um dem Kunden den Zuriff auf die Einstellungen zu nehmen, kannst Du in der DB "domain_admin" das Feld "adminuser" auf ungültige/Deine Werte setzen.


Wenn Du dem Kunden ein ungültiges SMTP-Auth-Passwort verpasst, kann er seine Mails nicht mehr abholen, was Du ja nicht verhindern möchtest/darfst...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Top

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by daemotron »

In der Datei, in der Du den MySQL-Zugriff konfiguriert hast, kannst Du das SMTPauth-flag einfach abfragen:

Code: Select all

additional_conditions = and SMTPauth = 'y'
(Je nachdem, welchen Namen das Feld in der Datenbank tatsächlich hat...)
Hier ein Beispiel, wie ich das gelöst habe (mein "Flag"-Feld heißt einfach 'postfix'):

Code: Select all

# cat /etc/postfix/myql-virtual-maps.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock
Top

mettwurscht
Posts: 14
Joined: 2003-02-13 19:20

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by mettwurscht »

Hmm, ok. Das klingt ganz gut. Allerdings wird die Berechtigung zum relaying via pam.d erfragt, saslauthd macht das also via pam. Im Verzeichnis /etc/pam.d gibts dann eine Datei, die smtp heißt und folgenden Inhalt hat:

Code: Select all

#%PAM-1.0
auth sufficient pam_mysql.so user=xxx passwd=xxx host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 l
ogtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time

account required pam_mysql.so user=xxx passwd=xxx host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1
logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time
Ich denke, dass das "smtpauth"-flag aus der SQL-DB dann hier verwurschtet werden müsste.
Top

mettwurscht
Posts: 14
Joined: 2003-02-13 19:20

Re: Postfix und SASL: Wie kann man Benutzer für relaying sperren

Post by mettwurscht »

Heureka!

Also, es war eigentlich ganz einfach. *patsch*

In der Datei /etc/pam.d/smtp hab ich an die beiden Zeilen einfach folgendes angehängt:

Code: Select all

where=smtpauth=1
Damit wird das Flag 'smtpauth' in der entsprechenden Datenbank abgefragt. Dieses Flag lässt sich einfach per webcyradm setzen.

Danke für eure Denkanstöße.


Mett
Top