Адрес отправителя Postfix отклонен / использование нескольких адресов

У меня есть почтовый сервер с Postfix, который в целом отлично работает. Я пытаюсь использовать этот сервер в качестве SMTP-сервера для исходящей почты в установке платформы CRM / Marketing. Я ввел учетные данные для аутентификации, и все работает нормально. Однако я могу использовать только тот почтовый ящик, в котором я аутентифицируюсь, как адрес «от». Если я попытаюсь использовать другой адрес (в том же домене) в кампании, он не сможет отправить и приведет к этой ошибке:

Это сообщение не было доставлено после 3 попыток по следующей причине: Сообщение об ошибке: Ответ от сервера 220 server.com 250-server.com 250-ТРУБОПРОВОД 250-РАЗМЕР 26214400 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 220 2.0.info@server.com250 2.0.0 Хорошо.

Есть ли способ настроить Postfix, чтобы я мог отправлять сообщения с любого адреса в этом конкретном домене после аутентификации с помощью одной учетной записи? Могу ли я назначить адреса этому пользователю, с которым я аутентифицируюсь? Я не хочу открывать это на других доменах, только на этом конкретном домене, который я использую для этой CRM.

Спасибо!

-

Вот что postconf -n дает мне:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
bounce_queue_lifetime = 1d
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
disable_vrfy_command = yes
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
maximal_backoff_time = 1800s
maximal_queue_lifetime = 1d
message_size_limit = 26214400
milter_default_action = accept
milter_protocol = 6
minimal_backoff_time = 300s
mydestination = mail1.mydomain.com, localhost.mydomain.com, localhost
myhostname = mail1.mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
postscreen_access_list = permit_mynetworks, cidr:/etc/postfix/postscreen_access.cidr
postscreen_bare_newline_enable = no
postscreen_blacklist_action = drop
postscreen_cache_cleanup_interval = 24h
postscreen_cache_map = proxy:btree:$data_directory/postscreen_cache
postscreen_dnsbl_action = enforce
postscreen_dnsbl_sites = b.barracudacentral.org=127.0.0.2*7 dnsbl.inps.de=127.0.0.2*7 bl.mailspike.net=127.0.0.2*5 bl.mailspike.net=127.0.0.[10;11;12]*4 dnsbl.sorbs.net=127.0.0.10*8 dnsbl.sorbs.net=127.0.0.5*6 dnsbl.sorbs.net=127.0.0.7*3 dnsbl.sorbs.net=127.0.0.8*2 dnsbl.sorbs.net=127.0.0.6*2 dnsbl.sorbs.net=127.0.0.9*2 zen.spamhaus.org=127.0.0.[10;11]*8 zen.spamhaus.org=127.0.0.[4..7]*6 zen.spamhaus.org=127.0.0.3*4 zen.spamhaus.org=127.0.0.2*3 hostkarma.junkemailfilter.com=127.0.0.2*3 hostkarma.junkemailfilter.com=127.0.0.4*1 hostkarma.junkemailfilter.com=127.0.1.2*1 wl.mailspike.net=127.0.0.[18;19;20]*-2 hostkarma.junkemailfilter.com=127.0.0.1*-2
postscreen_dnsbl_threshold = 8
postscreen_dnsbl_ttl = 5m
postscreen_greet_action = enforce
postscreen_greet_banner = $smtpd_banner
postscreen_greet_ttl = 2d
postscreen_greet_wait = 3s
postscreen_non_smtp_command_enable = no
postscreen_pipelining_enable = no
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
queue_run_delay = 300s
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relay_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_mxdomain_maps.cf
relay_recipient_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
relayhost =
smtp_header_checks = pcre:/etc/postfix/mailcow_anonymize_headers.pcre
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_cert_file = /etc/ssl/mail/mail.crt
smtp_tls_key_file = /etc/ssl/mail/mail.key
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname
smtpd_data_restrictions = reject_unauth_pipelining, permit
smtpd_delay_reject = yes
smtpd_error_sleep_time = 10s
smtpd_hard_error_limit = ${stress?1}${stress:5}
smtpd_helo_required = yes
smtpd_proxy_timeout = 600s
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_helo_hostname, reject_unknown_reverse_client_hostname, reject_unknown_client_hostname, reject_non_fqdn_helo_hostname, reject_unauth_destination, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, reject_rbl_client b.barracudacentral.org
smtpd_restriction_classes = z1_greylisting
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth_dovecot
smtpd_sasl_type = dovecot
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_sender_acl.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated, reject_unlisted_sender, reject_unknown_sender_domain
smtpd_soft_error_limit = 3
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/mail/mail.crt
smtpd_tls_dh1024_param_file = /etc/ssl/mail/dhparams.pem
smtpd_tls_eecdh_grade = strong
smtpd_tls_exclude_ciphers = ECDHE-RSA-RC4-SHA
smtpd_tls_key_file = /etc/ssl/mail/mail.key
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = ECDHE-RSA-RC4-SHA
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
tls_high_cipherlist = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_spamalias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_minimum_uid = 104
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_uid_maps = static:5000
z1_greylisting = permit_dnswl_client list.dnswl.org, check_policy_service inet:127.0.0.1:10023

Вот что mysql_virtual_sender_acl.cf :

# mysql_virtual_sender_acl.cf
user = mailcow
password = password
hosts = localhost
dbname = mailcow
query = SELECT logged_in_as FROM sender_acl WHERE send_as='%s'
#expansion_limit = 100

И в mysql_virtual_alias_maps.cf :

# mysql_virtual_alias_maps.cf
user = mailcow
password = password
hosts = localhost
dbname = mailcow
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100
3
задан 26 February 2016 в 02:13
2 ответа

Вы можете использовать reject_authenticated_sender_login_mismatch

Сделать пользователей для теста

# saslpasswd2 -c -u example.net user1
# saslpasswd2 -c -u example.com user2

# sasldblistusers2
user2@example.com: userPassword
user1@example.net: userPassword

Выполните некоторые базовые тесты. Как вы можете видеть, без reject_authenticated_sender_login_mismatch пользователь может использовать в MAIL FROM все, что пожелает

# echo "Hello world" | swaks -s 127.0.0.1 --from user1@example.net --to user2@example.com --h-Subject "Test" --auth PLAIN --auth-user user1 --auth-password 1234567 --body -
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
<-  220 mail.example.net ESMTP Postfix
 -> EHLO svn.example.net
<-  250-mail.example.net
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-AUTH LOGIN PLAIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
 -> AUTH PLAIN AHVzZXIxADEyMzQ1Njc=
<-  235 2.7.0 Authentication successful
 -> MAIL FROM:<user1@example.net>
<-  250 2.1.0 Ok
 -> RCPT TO:<user2@example.com>
<-  250 2.1.5 Ok
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Thu, 25 Feb 2016 20:53:45 +0000
 -> To: user2@example.com
 -> From: user1@example.net
 -> Subject: Test
 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ->
 -> Hello world
 ->
 ->
 -> .
<-  250 2.0.0 Ok: queued as E1D3D406CC
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

# grep E1D3D406CC /var/log/maillog
Feb 25 20:53:45 svn postfix/smtpd[56996]: E1D3D406CC: client=localhost[127.0.0.1], sasl_method=PLAIN, sasl_username=user1@example.net
Feb 25 20:53:45 svn postfix/cleanup[56999]: E1D3D406CC: message-id=<20160225205345.E1D3D406CC@mail.example.net>
Feb 25 20:53:45 svn postfix/qmgr[56990]: E1D3D406CC: from=<user1@example.net>, size=416, nrcpt=1 (queue active)
Feb 25 20:53:45 svn postfix/local[57000]: E1D3D406CC: to=<user2@example.com>, relay=local, delay=0.03, delays=0.02/0/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Feb 25 20:53:45 svn postfix/qmgr[56990]: E1D3D406CC: removed

# echo "Hello world" | swaks -s 127.0.0.1 --from non_exist-reply@example.net --to user2@example.com --h-Subject "Test" --auth PLAIN --auth-user user1 --auth-password 1234567 --body -
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
<-  220 mail.example.net ESMTP Postfix
 -> EHLO svn.example.net
<-  250-mail.example.net
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-AUTH LOGIN PLAIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
 -> AUTH PLAIN AHVzZXIxADEyMzQ1Njc=
<-  235 2.7.0 Authentication successful
 -> MAIL FROM:<non_exist_user@example.net>
<-  250 2.1.0 Ok
 -> RCPT TO:<user2@example.com>
<-  250 2.1.5 Ok
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Thu, 25 Feb 2016 20:55:13 +0000
 -> To: user2@example.com
 -> From: non_exist_user@example.net
 -> Subject: Test
 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ->
 -> Hello world
 ->
 ->
 -> .
<-  250 2.0.0 Ok: queued as 94CBF4076C
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

# grep 94CBF4076C /var/log/maillog
Feb 25 20:55:13 svn postfix/smtpd[56996]: 94CBF4076C: client=localhost[127.0.0.1], sasl_method=PLAIN, sasl_username=user1@example.net
Feb 25 20:55:13 svn postfix/cleanup[56999]: 94CBF4076C: message-id=<20160225205513.94CBF4076C@mail.example.net>
Feb 25 20:55:13 svn postfix/qmgr[56990]: 94CBF4076C: from=<non_exist_user@example.net>, size=424, nrcpt=1 (queue active)
Feb 25 20:55:13 svn postfix/local[57000]: 94CBF4076C: to=<user2@example.com>, relay=local, delay=0.01, delays=0.01/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Feb 25 20:55:13 svn postfix/qmgr[56990]: 94CBF4076C: removed

Но после того, как мы добавили следующие строки

# /etc/postfix/main.cf

smtpd_sender_login_maps = hash:/etc/postfix/sender_logins_maps
smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch

, не забудьте создать карту и перезапустить постфикс

# postmap /etc/postfix/sender_logins_maps
# service postfix restart

# cat /etc/postfix/sender_logins_maps
user1@example.net user1@example.net
info@example.net user1@example.net
no-reply@example.net user1@example.net

Пользователь может Больше не использовать то, что он хочет

# echo "Hello world" | swaks -s 127.0.0.1 --from non_exit_user@example.net --to user2@example.com --h-Subject "Test" --auth PLAIN --auth-user user1 --auth-password 1234567 --body -
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
<-  220 mail.example.net ESMTP Postfix
 -> EHLO svn.example.net
<-  250-mail.example.net
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-AUTH LOGIN PLAIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
 -> AUTH PLAIN AHVzZXIxADEyMzQ1Njc=
<-  235 2.7.0 Authentication successful
 -> MAIL FROM:<non_exit_user@example.net>
<-  250 2.1.0 Ok
 -> RCPT TO:<user2@example.com>
<** 553 5.7.1 <non_exit_user@example.net>: Sender address rejected: not owned by user user1
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

Но с настройками выше (скрытый) может использовать только в ПОЧТУ ОТ: (скрытый) (скрытый) и (скрытый) небольшая хитрость

, если не добавить строку для какого-то конкретного пользователя в / etc / postfix / sender_logins_maps - он будет получать электронные письма, но не отправлять.

Кажется, я не могу запустить saslauthd. Он говорит, что команда не найдена. Это отдельная утилита? РЕДАКТИРОВАТЬ: Извините, я хотел сказать testsaslauthd. Ни одной работы

Это всего лишь тест. Итак, для быстрой настройки тестовой среды я выбрал sasldb. Потому что у меня нет времени на установку и настройку MySQL. Вы используете MySQL для хранения всей информации о пользователях. И ваши ограничения, описанные здесь

smtpd_sender_login_maps = 
 proxy:mysql:/etc/postfix/sql/mysql_virtual_sender_acl.cf
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

Вы должны добавить содержимое mysql_virtual_sender_acl.cf/mysql_virtual_alias_maps.cf (конечно, без пароля) к вопросу

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

в / etc / postfix / sender_logins_maps у вас должно быть что-то вроде следующего

@example.net user1@example.net

Modify smtpd_sender_login_maps

smtpd_sender_login_maps = 
 hash:/etc/postfix/sender_logins_maps,
 proxy:mysql:/etc/postfix/sql/mysql_virtual_sender_acl.cf, 
 proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

Файл / etc / postfix / sender_logins_maps должен содержать только одну строку

@example.net user1@example.net

где @ example.net - «один конкретный домен», (скрытый) - «аутентификация с одной учетной записью». Это должно быть sasl_username!

sasl_method=PLAIN, sasl_username=user1@example.net

Не забудьте создать карту и перезапустить постфикс.

3
ответ дан 3 December 2019 в 05:12

Кажется, вы установили reject_sender_login_mismatch

Вы можете использовать smtpd_sender_login_maps , чтобы настроить, каким пользователям разрешено отправлять сообщения от определенных отправителей или доменов.

В документации постфикса приведен пример здесь (см. Авторизация адреса отправителя в конверте).

Обновление 1:

Вот пример smtpd_sender_login_maps (hashmap). Это зависит от порядка поиска постфикса при сопоставлении с картами. Итерации, как (скрытые), вам нужно ввести хэш-карту, которая заносит в белые списки учетные записи для домена. Это будет похоже на

@server.com info@server.de

. Это просто говорит о том, что второй постфикс поиска будет делать (первый - точное совпадение с (скрытым) попадет в хэш-карту. Важно Если есть дополнительные карты (взятые из комментария, есть карты в mysql), которые попадают на первое место, решение уже было (выполнено первое совпадение), и второй поиск не выполняется.

Чтобы разрешить «отправить как любое» @ server.com "разрешение на учетную запись (скрытое), либо mysql должен указать его среди разрешенных владельцев учетной записи (кроме фактической учетной записи), либо mysql явно имеет , а не , чтобы перечислить эту учетную запись (так что вторая итерация поиска попадает в хэш-карту).

Не забудьте постмапить хэш-карту после изменения содержимого (cd в каталог файла и postmap файла)

4
ответ дан 3 December 2019 в 05:12

Теги

Похожие вопросы