Назад | Перейти на главную страницу

Ограничение исходящей почты определенными доменами в From Address с помощью Postfix

По причинам, которые заставляют меня хотеть причинить себе вред, приложение, которое я должен поддерживать, имеет возможность отправлять почту с использованием адреса «ПОЧТА ОТ» любого домена. Поскольку я не могу дальше заблокировать приложение, я хочу, чтобы Postfix проверял работоспособность всей почты, которая пытается покинуть мою сеть, предназначенную для остального мира.

Я хочу, чтобы почта, исходящая изнутри, разрешалась только в том случае, если у нее есть адрес отправителя example.com. Если почта, исходящая изнутри, имеет адрес отправителя 'someotherdomain.com', эта почта должна быть заблокирована через Postfix.

Чтобы прояснить, как мне настроить Postfix, чтобы разрешить отправку только почты, исходящей из моей локальной сети, ЕСЛИ эта почта имеет адрес FROM одного из моих доменных имен?

Единственный способ, которым я понял, как это сделать, заключается в следующем. Но есть ли что попроще?

/etc/postfix/main.cf:

smtpd_restriction_classes =
        external_sender_access
        internal_sender_access

# Intended for mail originating from outside our networks
external_sender_access =
        # Verify MAIL_FROM on incoming mail
        check_sender_access hash:/etc/postfix/external_sender_access
        # Allow all other incoming mail
        permit

# Intended for mail originating from within our networks
internal_sender_access =
        # Verify MAIL_FROM on outgoing mail
        check_sender_access hash:/etc/postfix/internal_sender_access
        # Block all other outbound mail
        reject

# Restrictions applied in the context of the MAIL FROM command.
smtpd_sender_restrictions =
        reject_non_fqdn_sender
        reject_unknown_sender_domain
        # Access rules for specific 'sender' data based upon client IP
        check_client_access cidr:/etc/postfix/network_sender_access
        permit
/etc/postfix/network_sender_access:

# Localhost
127.0.0.0/24        internal_sender_access

# Inside Networks
192.168.0.0/16      internal_sender_access

# Everything else
0.0.0.0/0           external_sender_access
/etc/postfix/internal_sender_access:

example.com OK
.example.com OK
/etc/postfix/external_sender_access:

example.com REJECT You're not from here!
.example.com REJECT You're not from here!

postconf -n вывод для этой конфигурации:

alias_database = dbm:/etc/aliases
alias_maps = hash:/etc/aliases
biff = no
body_checks = pcre:/etc/postfix/body_checks
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
disable_vrfy_command = yes
external_sender_access = check_sender_access hash:/etc/postfix/external_sender_access permit
header_checks = pcre:/etc/postfix/header_checks
home_mailbox = Maildir/
inet_protocols = ipv4,ipv6
internal_sender_access = check_sender_access hash:/etc/postfix/internal_sender_access reject
local_header_rewrite_clients = permit_inet_interfaces,permit_mynetworks
mailbox_command = /usr/bin/procmail -t
mailbox_size_limit = 0
manpage_directory = /usr/share/man
minimal_backoff_time = 1800s
mydestination = $myorigin, $myhostname, localhost.$mydomain, localhost
mynetworks = /etc/postfix/local_networks
queue_directory = /data/postfix
recipient_delimiter = +
smtp_generic_maps = pcre:/etc/postfix/generic
smtpd_banner = $myhostname ESMTP
smtpd_client_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/client_access permit
smtpd_data_restrictions = reject_unauth_pipelining reject_multi_recipient_bounce permit
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname reject_non_fqdn_helo_hostname permit_mynetworks check_client_access hash:/etc/postfix/client_access permit
smtpd_recipient_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/rbl_override reject_rbl_client zen.spamhaus.org permit
smtpd_relay_restrictions = reject_non_fqdn_recipient reject_unknown_recipient_domain regexp:/etc/postfix/regexp_access permit_mynetworks reject_unauth_destination reject_unlisted_recipient check_policy_service inet:127.0.0.1:10023 permit
smtpd_restriction_classes = external_sender_access internal_sender_access
smtpd_sender_restrictions = reject_non_fqdn_sender reject_unknown_sender_domain check_client_access cidr:/etc/postfix/network_sender_access permit
strict_rfc821_envelopes = yes
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual.d/example.com

РЕДАКТИРОВАТЬ: Ниже представлена ​​альтернативная конфигурация, которую я пытался использовать reject_unlisted_sender.

Когда я пытаюсь использовать эту конфигурацию, почта, отправленная «From: does_not_exist@example.com», отскакивает (как и ожидалось), но отправленная почта «From: blah@not_my_domain.com» разрешается без проблем, а это именно то, что я не хочу. .

# Restrictions applied in the context of the MAIL FROM command.
smtpd_sender_restrictions =
        reject_non_fqdn_sender
        reject_unknown_sender_domain
        check_client_access cidr:/etc/postfix/outgoing_senders
        # Access rules for specific 'sender' data
        check_sender_access hash:/etc/postfix/sender_access
        permit
/etc/postfix/outgoing_senders:
192.168.0.0/16  reject_unlisted_sender, permit
/etc/postfix/sender_access:

example.com REJECT You're not from here!
.example.com REJECT You're not from here!

postconf -n вывод для этой конфигурации:

alias_database = dbm:/etc/aliases
alias_maps = hash:/etc/aliases
biff = no
body_checks = pcre:/etc/postfix/body_checks
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
disable_vrfy_command = yes
header_checks = pcre:/etc/postfix/header_checks
home_mailbox = Maildir/
inet_protocols = ipv4,ipv6
local_header_rewrite_clients = permit_inet_interfaces,permit_mynetworks
mailbox_command = /usr/bin/procmail -t
mailbox_size_limit = 0
manpage_directory = /usr/share/man
minimal_backoff_time = 1800s
mydestination = $myorigin, $myhostname, localhost.$mydomain, localhost
mynetworks = /etc/postfix/local_networks
queue_directory = /data/postfix
recipient_delimiter = +
smtp_generic_maps = pcre:/etc/postfix/generic
smtpd_banner = $myhostname ESMTP
smtpd_client_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/client_access permit
smtpd_data_restrictions = reject_unauth_pipelining reject_multi_recipient_bounce permit
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname reject_non_fqdn_helo_hostname permit_mynetworks check_client_access hash:/etc/postfix/client_access permit
smtpd_recipient_restrictions = permit_mynetworks check_client_access hash:/etc/postfix/rbl_override reject_rbl_client zen.spamhaus.org permit
smtpd_relay_restrictions = reject_non_fqdn_recipient reject_unknown_recipient_domain regexp:/etc/postfix/regexp_access permit_mynetworks reject_unauth_destination reject_unlisted_recipient check_policy_service inet:127.0.0.1:10023 permit
smtpd_sender_restrictions = reject_non_fqdn_sender reject_unknown_sender_domain check_client_access cidr:/etc/postfix/outgoing_senders check_sender_access hash:/etc/postfix/sender_access permit
strict_rfc821_envelopes = yes
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual.d/example.com

Я могу подтвердить, что то, что вы видите в своем постфиксе, было намеренным поведением reject_unlisted_sender. Эта страница документации четко прописаны 4 условия, когда postfix отклонил вашу электронную почту

  • Домен отправителя совпадает $ mydestination, $ inet_interfaces или $ proxy_interfaces, но отправитель не указан в $ local_recipient_maps, и $ local_recipient_maps не равно нулю.
  • Домен отправителя совпадает $ virtual_alias_domains но отправитель не указан в $ virtual_alias_maps.
  • Домен отправителя совпадает $ virtual_mailbox_domains но отправитель не указан в $ virtual_mailbox_maps, и $ virtual_mailbox_maps не равно нулю.
  • Домен отправителя совпадает $ relay_domains но отправитель не указан в $ relay_recipient_maps, и $ relay_recipient_maps не равно нулю.

Если адрес отправителя не соответствует ни одному из указанных выше условий, по умолчанию постфикс будет разрешать Это.


Вернемся к исходному вопросу: Единственный способ, которым я понял, как это сделать, заключается в следующем. Но есть ли что попроще?

Нет, ваш единственный вариант - это классы ограничения SMTPD. Для другого решения вы можете использовать любое надстройка сервера политики такие как postfwd, policyd и другие.