
Ich habe fast mein perfektes Postfix-Setup (v3.3.1) auf CentOS8. Meine Ziele sind:
- Erlauben Sie Diensten, E-Mails an Linux-Benutzer zu senden. (Crontab an Root)
- Akzeptieren Sie keine öffentlichen E-Mails für Linux-Benutzer. ([email geschützt])
- Legen Sie fest, welche Benutzer öffentliche E-Mails erhalten sollen, ohne Linux-Benutzer für sie zu erstellen.
Ich habe es geschafft, das oben genannte zu erreichen, aber ich weiß nicht, wie ich eine Nebenwirkung verhindern kann. Einiges von dem, was ich bisher getan habe:
myhostname = server.foobar.com
mydomain = foobar.com
myorigin = $myhostname
mydestination = $myhostname, localhost
mail_spool_directory = /var/spool/mail
virtual_transport = virtual
virtual_mailbox_domains = foobar.com
virtual_mailbox_base = /var/spool/email/
Dieses Bit weist Postfix an, dass bei jeder von einem Dienst an einen Benutzer gesendeten E-Mail $myhostname hinzugefügt wird ([email geschützt]) und es wird an die Standard-System-E-Mail in zugestellt /var/spool/mail
.
Jede E-Mail, die an einen Linux-Benutzer in der Domäne gesendet wird als[email geschützt]wird als virtuelle Domäne behandelt, sucht nach einem virtuellen Benutzer und lehnt die E-Mail ab, wenn keiner vorhanden ist.
Wenn ich einen virtuellen Benutzer (wie etwa Webmaster) hinzufüge, werden alle an diesen Benutzer gesendeten E-Mails ([email geschützt]) akzeptiert und zugestellt wird, um /var/spool/email/...
öffentliche E-Mails von System-E-Mails zu trennen.
Das Problem...
Wenn jemand schlau genug ist, eine E-Mail an den Hostnamen ([email geschützt]) aus dem Internet wird es akzeptiert und übermittelt /var/spool/mail
. Ich weiß nicht, wie ich das blockieren kann.
Ich habe versucht, dies einzustellen, default_transport = error:Domain doesn't accept email.
aber das hat das Verhalten nicht geändert. Die Dokumentation unterstützt diese Funktion nicht, aber ich habe sie in einem Forum erwähnt gesehen, also habe ich es ausprobiert.
Es ist mir nicht wichtig, Linux-Benutzer als user@$myhostname zu behalten, dies war einfach die einzige Möglichkeit, die ich finden konnte, um Linux-Benutzer von virtuellen Benutzern auf demselben Domänennamen zu trennen, um Spammer davon abzuhalten,[email geschützt],[email geschützt], usw.
Andere Konfigurationseinstellungen, falls wichtig:
html_directory = no
local_recipient_maps =
luser_relay = postmaster
mail_spool_directory = /var/spool/mail
meta_directory = /etc/postfix
mydestination = $myhostname, localhost
mydomain = foobar.com
myhostname = server.foobar.com
mynetworks_style = host
myorigin = $myhostname
relay_domains =
relayhost =
virtual_mailbox_base = /var/spool/email/
virtual_mailbox_domains = foobar.com
virtual_transport = virtual
Irgendwelche Ideen oder eine andere Möglichkeit, das zu erreichen?
Antwort1
Ich habe eine Lösung gefunden.
Behalten Sie die myorigin = $myhostname
in meiner Frage beschriebene Methode zur Trennung lokaler und virtueller Benutzer in derselben Domäne bei.
Im smtpd_recipient_restrictions
Abschnitt von main.cf
, nachdem Sie das Verweisen auf eine Liste permit_mynetworks
hinzugefügt haben . Ich habe verwendet , es sah ungefähr so aus:check_recipient_access
hash:
# Don't include the "...", its just to show this is among other settings
smtpd_recipient_restrictions =
...
permit_mynetworks
check_recipient_access hash:/etc/postfix/block_mydomain
...
Erstellen Sie dann die Liste/Hash-Datei/etc/postfix/block_mydomain
hostname.domain.com 513 Invalid domain.
Speichern Sie die Datei und führen Sie sie aus, postmap block_mydomain
um die *.db-Version zu erstellen.
Starten Sie dann Postfix neu systemctl restart postfix
und das sollte erledigt sein.
Ich habe es getestet und kann mit dem Befehl sendmail lokal E-Mails an jeden Linux-Benutzer senden. Crontab kann E-Mails an lokale Linux-Benutzer senden. Aber wenn Sie eine E-Mail aus dem Internet senden, [email protected]
wird sie zurückgewiesen. Und falls Sie sich fragen,[email geschützt]wird immer noch akzeptiert und verworfen.