Постфикс отклоняет реле для некоторых виртуальных пользователей

Я использую Постфикс в качестве MTA и реле. Пользователи, которые хотят послать электронное письмо от удаленной системы, проходят проверку подлинности и Постфиксные руки, что к Голубятне, и это работает хорошо. Но как я могу ограничить, какие пользователи могут использовать SMTP+Authentication, не ограничивая доступ к POP или IMAP?

Мне не имеет значения, если блок находится в аутентификации Голубятни SASL, или Постфиксом, ищущим его в таблице.

Используя Постфикс 2.9.6 для SMTP, Голубятня 2.0.19 для POP, IMAP и SASL. Виртуальные пользователи хранятся в MySQL 5.5.40.

root@mx1:~# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
home_mailbox = Maildir/
inet_interfaces = all
mailbox_size_limit = 0
message_size_limit = 51200000
mydestination = localhost, mx1.mydomain.tld
myhostname = virtmx.mydomain.tld
mynetworks = /etc/postfix/mynetworks
myorigin = /etc/mailname
policy-spf_time_limit = 3600s
readme_directory = no
recipient_delimiter = +
relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
setgid_group = vmail
smtp_tls_mandatory_ciphers = medium
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = !SSLv2,!SSLv3
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, check_policy_service unix:private/policy-spf, reject_rbl_client zen.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/postfix/mydomain.tld-virtmx.pem
smtpd_tls_key_file = /etc/postfix/mydomain.tld-virtmx.key
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
tls_medium_cipherlist = AES128+EECDH:AES128+EDH
transport_maps = proxy:mysql:/etc/postfix/mysql_transports_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:88
virtual_mailbox_base = /srv/mailbox
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 999
virtual_transport = virtual
virtual_uid_maps = proxy:mysql:/etc/postfix/mysql_virtual_uid_maps.cf

Если это помогает, это используемые SQL-запросы:

mysql_mynetworks.cf
query = SELECT address FROM mailnetworks WHERE address='%s' and active='Y'

mysql_relay_domains_maps.cf
query = SELECT domain FROM maildomains WHERE domain='%s' AND backupmx = 1 AND active = 1

mysql_sender_maps.cf
query = SELECT address FROM mailsender WHERE username='%s'

mysql_transports_maps.cf
query = SELECT transport FROM maildomains WHERE domain='%s' AND transport != '' AND active=1

mysql_virtual_alias_maps.cf
query = SELECT goto FROM mailaliases AS a LEFT JOIN maildomains AS dom ON dom.domain=a.domain WHERE address='%s' AND dom.active=1 and a.active=1

mysql_virtual_domains_maps.cf
query = SELECT domain FROM maildomains WHERE domain='%s' AND backupmx='0' AND active=1

mysql_virtual_mailbox_maps.cf
query = SELECT maildir FROM mailboxes AS box LEFT JOIN maildomains AS dom ON dom.domain=box.domain WHERE username='%s' AND dom.active=1 AND box.active=1

mysql_virtual_uid_maps.cf
query = SELECT uid FROM mailboxes AS box LEFT JOIN maildomains AS dom ON box.domain=dom.domain WHERE username='%s' AND box.active=1 and dom.active=1
6
задан 4 April 2015 в 09:36
2 ответа

Эта функция была доступна в postfix версии 2.11 .

Вы можете использовать параметр check_sasl_access для применения ограничений на основе имени пользователя SASL. Конечно, вам нужно поставить его выше permission_sasl_authenticated . Для получения полной документации обратитесь к man 5 postconf .

Пример конфигурации, взятый из Postfix SASL Howto

# main.cf
smtpd_relay_restrictions = 
    ..., 
    check_sasl_access hash:/etc/postfix/sasl_blacklist,
    permit_sasl_authenticated,
    ...

и

# sasl_blacklist
# Use this when smtpd_sasl_local_domain is empty.
username   REJECT
# Use this when smtpd_sasl_local_domain=example.com.
username@example.com REJECT
6
ответ дан 3 December 2019 в 00:18

Некоторое решение для postfix <2.11

Автор предложил , что вам нужна комбинация reject_sender_login_mismatch и check_sender_access .

  • Параметр reject_sender_login_mismatch отклонит, если отправитель не определен в разрешенном им имени пользователя. Похоже, у вас уже есть запрос для этого в mysql_sender_maps.cf .

  • Параметр check_sender_access будет отклонять электронную почту в зависимости от отправителя.

Итак, вам нужно что-то вроде

smtpd_sender_login_maps = mysql:/etc/postfix/mysql_sender_maps.cf
smtpd_relay_restriction = ...
    ...
    reject_sender_login_mismatch
    check_sender_access hash:/etc/postfix/sasl_reject
    ...

и

#sasl_reject
username@example.com   REJECT

. Альтернативой является использование облегченного postfwd для выполнения каких-то ограничений для имени пользователя SASL. Вы можете использовать параметр sasl_username для управления этим поведением. Дополнительную информацию см. На странице документации postfwd .

3
ответ дан 3 December 2019 в 00:18

Теги

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