
У меня почти идеальная настройка Postfix (v3.3.1) на CentOS8. Мои цели:
- Разрешить службам отправлять электронные письма пользователям Linux. (crontab для root)
- Не принимайте публичную электронную почту для пользователей Linux. ([email protected])
- Определите, какие пользователи будут получать публичную электронную почту, не создавая для них пользователей Linux.
Мне удалось достичь вышеперечисленного, но есть один побочный эффект, который я не могу понять, как предотвратить. Вот некоторые из того, что я уже сделал:
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/
Этот бит сообщает Postfix, что к любому сообщению, отправленному службой пользователю, добавляется $myhostname ([email protected]) и он доставляется на стандартный системный адрес электронной почты в формате /var/spool/mail
.
Любое электронное письмо, отправленное пользователю Linux в домене как[email protected]рассматривается как виртуальный домен, ищет виртуального пользователя и, если его нет, отклоняет электронное письмо.
Если я добавлю виртуального пользователя (например, веб-мастера), любое электронное письмо, отправленное этому пользователю ([email protected]) принимается и доставляется для /var/spool/email/...
сохранения общедоступной электронной почты отдельно от системной электронной почты.
Проблема...
Если кто-то будет достаточно мудр, чтобы отправить электронное письмо на имя хоста ([email protected]) из интернета он принимается и доставляется в /var/spool/mail
. Я не могу понять, как это заблокировать.
Я пробовал настраивать, default_transport = error:Domain doesn't accept email.
но это не изменило поведение. Документация не поддерживает эту функцию, но я видел, что она упоминается на форуме, поэтому я попробовал.
Для меня не важно, чтобы пользователи Linux хранились в формате user@$myhostname, просто это был единственный способ, с помощью которого я смог понять, как отделить пользователей Linux от виртуальных пользователей на том же доменном имени, чтобы предотвратить атаки спамеров.[email protected],[email protected], и т. д.
Другие параметры конфигурации, если они важны:
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
Есть ли какие-нибудь идеи или другие способы решения этой проблемы?
решение1
Я нашел решение.
Сохраняю myorigin = $myhostname
способ разделения локальных пользователей от виртуальных пользователей в одном домене, как указано в моем вопросе.
В smtpd_recipient_restrictions
разделе main.cf
, после permit_mynetworks
добавления 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
...
Затем создайте файл списка/хэша./etc/postfix/block_mydomain
hostname.domain.com 513 Invalid domain.
Сохраните файл и запустите его postmap block_mydomain
для создания версии *.db.
Затем перезапустите Postfix systemctl restart postfix
, и это должно помочь.
Я проверил это, и я могу отправлять почту с помощью команды sendmail локально любому пользователю Linux. Crontab может отправлять почту локальным пользователям Linux. Но если вы отправляете письмо из Интернета на , [email protected]
оно возвращается. И если вам интересно,[email protected]все равно принимается и отвергается.