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

Postfix: Как смарт-хост, как я могу ограничить входящую почту доменом отправителя и IP-адресом отправителя?

Я использую службу Postfix + Dovecot на Centos 7 с несколькими несвязанными виртуальными доменами. Этот же сервер Postfix также установлен как интеллектуальный хост (ретранслятор) для IP 192.0.2.2 и 203.0.113.2. Прямо сейчас, какую бы почту ни отправлял IP 192.0.2.2, мой Postfix ретранслирует в Интернет, как и должно. Все адреса отправителей из 192.0.2.2 происходят из домена @ example.com. Однако иногда IP 192.0.2.2 отправляет спам из случайных доменов отправителя, которые мой Postfix будет ретранслировать в Интернет, занося мой IP в черный список.

Я хотел бы настроить ограничение для своего Postfix, чтобы, когда IP 192.0.2.2 пытается ретранслировать почту, домен отправителя должен быть example.com, в противном случае мой Postfix должен отклонять почту.

У меня такая же проблема с отправкой IP 203.0.113.2 из домена @ example.net.

У меня нет контроля над 192.0.2.2 или 203.0.113.2, поэтому проблема должна быть решена только с помощью моего Postfix.

Это сейчас в моем файле main.cf, чтобы включить функцию smarthost:

mynetworks = 127.0.0.0/8, 192.0.2.2/32, 203.0.113.2/32

Редактировать:

Ниже был анонимный вывод postconf -n: «inet: 127.0.0.1: 8891» - это OpenDKIM, который я использую для подписи исходящей электронной почты с example.org.

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
dovecot_destination_recipient_limit = 1
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_size_limit = 51200000
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 51200000
milter_default_action = accept
milter_protocol = 6
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = example.org
myhostname = mail.example.org
mynetworks = 127.0.0.0/8, 192.0.2.2/32, 203.0.113.2/32
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = inet:127.0.0.1:8891
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
relay_domains = $mydestination, example.com
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891, unix:/run/spamass-milter/postfix/sock
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/pki/tls/mail.example.org.public.pem
smtpd_tls_key_file = /etc/pki/tls/mail.example.org.private.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = $smtpd_tls_protocols
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/vmail_aliases
virtual_gid_maps = static:800
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains = hash:/etc/postfix/vmail_domains
virtual_mailbox_maps = hash:/etc/postfix/vmail_mailboxes
virtual_minimum_uid = 800
virtual_transport = dovecot
virtual_uid_maps = static:800

Это решение было вариантом из этого решения. Но сначала мы внесем некоторые изменения в конфигурацию.

Первый: Конечно, вы можете использовать комбинацию mynetworks и permit_mynetworks чтобы разрешить ретрансляцию клиента. Альтернатива - использование check_client_access параметр. Итак, удалите оба IP-адреса (192.0.2.2/32, 203.0.113.2/32) из mynetworks.

Второй: Мы будем применять ограничение одно за другим. На начальном этапе мы ограничиваем домен и IP-адрес только с IP-адреса 192.0.2.2. Мы можем подать заявку решение класса ограничения Вот

main.cf

smtpd_restriction_classes =
   firstclient

firstclient =
  check_sender_access hash:/etc/postfix/firstsender
  reject

smtpd_recipient_restrictions =
   permit_sasl_authenticated
   permit_mynetworks
   check_client_access hash:/etc/postfix/myclient
   reject_unauth_destination

/ и т.д. / postfix / myclient

192.0.2.2               firstclient

/ и т. д. / постфикс / firstsender

example.com     OK

Третий: применить аналогичное решение для второго клиента, чтобы настройка стала

main.cf

smtpd_restriction_classes =
   firstclient, secondclient

firstclient =
  check_sender_access hash:/etc/postfix/firstsender
  reject

secondclient = 
  check_sender_access hash:/etc/postfix/secondsender
  reject

smtpd_recipient_restrictions =
   permit_sasl_authenticated
   permit_mynetworks
   check_client_access hash:/etc/postfix/myclient
   reject_unauth_destination

/ и т.д. / postfix / myclient

192.0.2.2               firstclient
203.0.113.2             secondclient 

/ и т.д. / postfix / firstsender

example.com     OK

/ etc / postfix / secondsender

example.net     OK

ВОПРОСЫ-ОТВЕТЫ:

Не могли бы вы объяснить, как работает вышеуказанная установка?

Объяснение, как это работает: Официальная документация классов ограничений Postfix

Это не выглядит масштабируемым. Вы можете предложить мне другое решение?

Да, вы можете использовать Делегирование политики доступа Postfix SMTP

Хм, сервер политик postfix мне нравится. Но нужно ли мне реализовывать собственный сценарий?

Вы можете использовать любой надстройка сервера политики например policyd, postfwd и другие.