• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Postfix: Mail an System-User verhindern / einschränken?

Bachsau

Member
Hallo,

kann ich Postfix irgendwie beibrigen, dass nur bestimmte System-Accounts mails empfangen dürfen, oder eben nur solche, die einen Alias haben? Postfix wird im Moment nur verwendet, um Mails nach draußen zu schicken, und soll in Zukunft auch virtuelle Postfächer verwalten. Gleichzeitig möchte ich das ganze von "realen" Accounts soweit wie möglich abschotten. Damit soll verhindert werden, dass Scripte die lokalen Mailboxen echter Accounts, die sowieso nie abgerufen werden, mit irgendwelchem Müll verstopfen können.

Gruß,
Bachsau
 
kannst du machen allein schon wenn du ne db einsetzt.

bei der mysql db kannst du dafür zusätzliche felder einbinden
die du dann gezielt mit postfix kombinieren kannst.

bei der verwendung von OpenLDAP kannst du das attribut accountstatus
verwenden bzw auch andere, die kannst du dann auch
entsprechend kombinieren.

bei der trennung von system accounts solltest du ein bisschen vorsichtig
sein, da es leicht passieren kann das mails an abuse (root, postmaster) o.ä.
verloren gehen. daher sollte für solche fälle ein aliases auf einen
virtuelen postmaster laufen.

das abschotten der mail passiert mit postfix mehr oder weniger automatisch
wenn du zusätliche domains virtuel behandelst.

Sven
 
/etc/aliases ist mir natürlich bekannt. Habe auch brav das Handbuch gelesen, und das Postfix-Buch von Peer Heinlein. Leider dennoch keine Lösung gefunden. :(

root und postmaster haben einen alias, aber ich will ja nicht jeden Benutzer in die aliases eintragen.

das abschotten der mail passiert mit postfix mehr oder weniger automatisch
wenn du zusätliche domains virtuel behandelst.
Ich verstehe nicht, was du meinst. So wie ich es verstanden habe, ist es doch so, dass Mails ohne domain oder an $mydestination trotzdem noch normal zugestellt werden, unabhängig von den virtuellen. Vielleicht kannst du mal näher erläutern? Ich will halt einfach nicht, dass jeder lokale Benutzer auch E-Mails empfangen kann. Also angenommen ich habe "kunde1" in der /etc/passwd, dann möchte ich trotzdem einen Bounce haben, wenn einer versucht an kunde1@$mydestination eine Mail einzuliefern.

Trotzdem danke schonmal.
 
Last edited by a moderator:
Ich verstehe nicht, was du meinst. So wie ich es verstanden habe, ist es doch so, dass Mails ohne domain oder an $mydestination trotzdem noch normal zugestellt werden, unabhängig von den virtuellen. Vielleicht kannst du mal näher erläutern? Ich will halt einfach nicht, dass jeder lokale Benutzer auch E-Mails empfangen kann. Also angenommen ich habe "kunde1" in der /etc/passwd, dann möchte ich trotzdem einen Bounce haben, wenn einer versucht an kunde1@$mydestination eine Mail einzuliefern.
mails ohne domain sollten eigentlich nicht angenommen werden!
so wie localhost, sollte das unterbunden werden. gerade im
internet. es sei denn du hast ein "internes" netzwerk wo du das so willst.

das mit dem mails verschicken kannst du über zusätzliche felder
in der db regeln.

dafür eigenet sich am besten accountstatus im ldap
bzw was vergleichebares in der mysqldb.

denn kannst du dann beim einliefern oder versenden entsprechend
auch auswerten.

aber du solltest es eigentlich niemandem verbieten mails zuschicken,
wenn du domains bzw hosting angebote vermietest muss du
normalerweise dafür sorgen das abuse meldungen an den domain
inhaber durch kommen, also zu mindest ne postmaster adresse.

Sven
 
Ihm geht es aber um die Unix-User in der /etc/passwd.
Ich habe es bei mir so gelöst: In der /etc/aliases habe ich für meine Webhosting-User einen Alias angelegt, so daß Mails an den Unix-User an den zugehörigen Webmaster-Account weitergeleitet werden. Damit bekommen meine User auch Status-Mails, die beispielsweise von ihren Cronjobs erstellt werden.
Für die User einiger Unix-Dienste (z.B. amavis u.ä.) habe ich einen Alias auf root gelegt.
Den Rest würde ich einfach ignorieren und hin und wieder mal unter /var/mail nachschauen, ob da was aufgeschlagen ist, ggfl. die /etc/aliases korrigieren (vielleicht wurde doch mal ein Alias vergessen) und ansonsten aufräumen. Ich hatte bisher nur Mails dort liegen, wo mir noch der Alias fehlte. Also alles halb so wild.
 
wenn man aber alles über aliases löst wird das irgendwan nicht mehr
handhabbar.

ausser es sind dauerhaft nur 10 oder 20 user für die nächsten 20 jahre


Sven
 
Bei einer größeren Anzahl muß man das mit den Aliases natürlich automatisieren, aber bei mir ist es überschaubar, daher mache ich das von Hand.
Und was die lokalen Linux-User betrifft, hilft auch eine SQL-Datenbank oder LDAP sehr wenig - die Mails werden ja über das local-Kommando von Postfix zu gestellt. Aber ich habe gerade mal spaßeshalber ein wenig gegooglt und das hier gefunden: http://wiki.kartbuilding.net/index.php/Postfix_SMTP#Restrict_Mail_delivery_to_Local_users
@bachsau: Sollte von der Beschreibung her genau den Effekt erzielen, der gesucht ist. Hab es aber nicht getestet.
 
Hallo,

also ich habe hier einfach folgende Zeilen in der main.cf stehen:

local_recipient_maps = $alias_maps
alias_database = hash:/etc/aliases
alias_maps = mysql:/etc/postfix/maps/mysql_aliases.cf

Ob die lokalen Empfänger jetzt in /etc/aliases oder in der Datenbank stehen, ist egal.
Es funktioniert beides. Existiert kein Eintrag, wird die Mail abgelehnt ("Recipient address rejected: User unknown in local recipient table").

In der Datenbank kann man dann mit entsprechenden Regeln arbeiten.


LG
 
Last edited by a moderator:
Und was die lokalen Linux-User betrifft, hilft auch eine SQL-Datenbank oder LDAP sehr wenig - die Mails werden ja über das local-Kommando von Postfix zu gestellt.

da kann ich nicht wiklich zustimmen. du kannst ganz genau mit postfix
konigurieren wie er lokal mails bzw mailuser behandelt.

wenn du das nicht könntest hättest du ja nen problem mit ner multiserver
umgebung.

du kannst in postfix bei fast jeder einstellung eine datenbank abfragen.

gerade bei der /etc/aliases kannst du das genauso auf eine datenbank
umbiegen, was meinst du wie ich unsere server administriere.

wenn ich das mit postfix nicht machen könnte würde ich postfix für
solche einen kramm auch garnicht einsetzen.


Sven
 
Hallo,
also ich habe hier einfach folgende Zeilen in der main.cf stehen:

local_recipient_maps = $alias_maps
alias_database = hash:/etc/aliases
alias_maps = mysql:/etc/postfix/maps/mysql_aliases.cf

Ob die lokalen Empfänger jetzt in /etc/aliases oder in der Datenbank stehen, ist egal.
Es funktioniert beides. Existiert kein Eintrag, wird die Mail abgelehnt
("Recipient address rejected: User unknown in local recipient table").

In der Datenbank kann man dann mit entsprechenden Regeln arbeiten.

genau so meine ich das!!!!! :))

aber ich hätte das anders gemacht.
da postfix auch mehrere datenbanken für eine aktion abfragen kann,
wäre hier die schnellere alternative das zb so zu lösen:
Code:
local_recipient_maps  = $alias_maps
alias_maps  = hash:/etc/aliases, mysql:/etc/postfix/maps/mysql_aliases.cf

dabei speilt es keine rolle welche db´s das sind.


Sven
 
Wie viele Mikrosekunden gewinnt man dabei? :D

keine ahnung wenn du aber 6 postfix server selbst verwaltest dann
macht man sich damit die arbeit um einiges leichter, weil man nur
an einer stelle was in die db prügeln muss und damit auch bestimmte
sonderfälle ganz gut abdecken kann.

nen abfrage in mysql oder ldap ist bei nem postfixserver der an der kotzt
grenze läuft sowie nicht sinnvoll, da sollte in sollchen fällen auch die
postmap datenbank verwendet werden, da die um EINIGES fixer ist
als nen mysql oder ldap server.

Sven
 
Also wenn ich die Postfix-Doku jetzt richtig verstehe, dann dürfte mit der Variante von mattis42 die /etc/aliases bei ihm gar nicht mehr zum Zug kommen, sondern nur die Einträge in der SQL-Datenbank. Oder habe ich was übersehen und wenn ja, was?
 
keine ahnung wenn du aber 6 postfix server selbst verwaltest dann macht man sich damit die arbeit um einiges leichter, weil man nur an einer stelle was in die db prügeln muss und damit auch bestimmte sonderfälle ganz gut abdecken kann.

Die Standards habe ich hier auch fertig im Dump stehen.
Eingespielt und fertig ist die Laube (i.d.R.)

Also wenn ich die Postfix-Doku jetzt richtig verstehe, dann dürfte mit der Variante von mattis42 die /etc/aliases bei ihm gar nicht mehr zum Zug kommen, sondern nur die Einträge in der SQL-Datenbank. Oder habe ich was übersehen und wenn ja, was?

Es reicht, wenn die Datei vorhanden ist und mit postalias behandelt wurde (dann gibt es kein Gemecker).
In /etc/aliases schreiben eigentlich nur diverse Programme (z.B. Amavis) ihre Standards bei der Installation.
Sowas wird danach i.d.R. eh an die eigene Umgebung angepasst.

Die alias_maps benötige ich z.B. nur noch für ganz wenige lokale Sonderfälle. Die Masse wandert eh in die virtual-Abteilung.


LG
 
Das die aliases vorhanden sein muß, damit es kein Gemecker gibt, ist mir schon klar. Aber wenn ich mir die Konfig so ansehe
local_recipient_maps = $alias_maps
alias_database = hash:/etc/aliases
alias_maps = mysql:/etc/postfix/maps/mysql_aliases.cf
dann soll local nur noch die Einträge in der alias_maps beachten und das wären nur die Einträge in der MySQL-Datenbank. Der Parameter alias_database ist ja laut Doku nur für newaliases gedacht, da nicht alle Einträge bei alias_maps lokale Dateien sein müssen. Oder definierst du komplett alle Alias-Einträge über MySQL und nutzt die Einträge in der /etc/aliases gar nicht?
Oder schließt alias_maps die Einträge unter alias_database mit ein, was aber aus der Postfix-Doku nicht so klar hervorgeht (oder es steht an einer Stelle, die ich nicht nicht gefunden habe).
 
Aber wenn ich mir die Konfig so ansehe dann soll local nur noch die Einträge in der alias_maps beachten und das wären nur die Einträge in der MySQL-Datenbank.

Code:
local_recipient_maps = $alias_maps, $alias_database
alias_database = hash:/etc/aliases
alias_maps = mysql:/etc/postfix/maps/mysql_aliases.cf

Wird wohl auch funktionieren.
Bzw. den Default-Eintrag verwenden:
Code:
local_recipient_maps = proxy:unix:passwd.byname, $alias_maps

Damit kann man dann aber Mails von extern an alle in der /etc/aliases stehenden Einträge senden.

Der Parameter alias_database ist ja laut Doku nur für newaliases gedacht, da nicht alle Einträge bei alias_maps lokale Dateien sein müssen. Oder definierst du komplett alle Alias-Einträge über MySQL und nutzt die Einträge in der /etc/aliases gar nicht?

Wie gesagt, sind das i.d.R. nur wenige Sonderfälle, unverbesserliche Irrläufer, etc. Und da ich grundsätzlich alles in die Datenbank packe, um nicht an diversen Ecken rumschrauben zu müssen, kommen die Aliase eben auch mit rein.

Oder schließt alias_maps die Einträge unter alias_database mit ein, was aber aus der Postfix-Doku nicht so klar hervorgeht (oder es steht an einer Stelle, die ich nicht nicht gefunden habe).

Mit eingeschlossen wird da pauschal nichts.
Aber wenn ich ehrlich bin, habe ich dem Thema auch nur die nötigste Aufmerksamkeit geschenkt :D
 
OK, du verwendest also nur die Alias-Einträge in der MySQL-Datenbank (in der du alle notwendigen Alias-Einträge verwaltest). Die Einträge in /etc/aliases werden auch gar nicht verwendet. Würde man die auch verwenden wollen, dann sollte es so wie bei Sven_GWI aussehen:
Code:
alias_maps  = hash:/etc/aliases, mysql:/etc/postfix/maps/mysql_aliases.cf
Dann habe ich mir selber eine Verwirrung mit Knoten im Gehirn erzeugt, wo keine war und mein Verständnis was korrekt :D
 
Back
Top