постфиксная голубятня отключает lmtp

У меня есть 3 сервера. Сервер на 1 Максвелл с постфиксом и 2 сервера голубятни. Сервер MX получает электронные письма и затем служит им через LMTP к определенному серверу голубятни. Все почтовые ящики от того же домена находятся на том же сервере.

Там какой-либо путь к временному файлу, отключают LMTP и задерживают сообщения для определенного домена? Например, в случае мигрирующих доменов между серверами голубятни.

На постфиксе я использую transport_maps

transport_maps = mysql:/etc/postfix/sql/transport.cf

С этим запросом

 query = SELECT concat('lmtp:',servers.address, ':24') FROM servers
         JOIN domains ON (domains.server_id=servers.ID)
         WHERE domains.name LIKE SUBSTRING_INDEX("%s", "@", -1)
         LIMIT 1;

Голубятня прислушивается к lmtp на порте 24, user_query в голубятне

user_query = SELECT 1
        FROM domains
        JOIN mailboxes ON (domains.ID=mailboxes.domain_id)
        WHERE
            domains.name LIKE '%d'
            AND mailboxes.name LIKE '%n'
            AND domains.server_id='X'
        LIMIT 1;

Я проверил голубятню user_query страница справочника, но нет ничего, что может помочь мне (http://wiki2.dovecot.org/UserDatabase и http://wiki2.dovecot.org/UserDatabase/ExtraFields)

Я попытался добавить условие к user_query "И доменам enable_lmtp = 1", но затем постфиксный сервер успешно передал электронную почту серверу голубятни, и сервер голубятни, возвращенный ошибочному пользователю "Отправителя, не делает существует".

Затем я пытался добавить то же условие к запросу сервера на постфиксном сервере. Запрос ничего не возвратил (чтобы нигде транспортировать), электронная почта была удалена и в сказанном журнале

postfix/virtual[724]: fatal: bad string length 0 < 1: virtual_mailbox_base =
postfix/master[32263]: warning: process /usr/libexec/postfix/virtual pid 724 exit status 1
postfix postfix/master[32263]: warning: /usr/libexec/postfix/virtual: bad command startup -- throttling

Я надеялся, что постфикс поместит сообщения в задержанную очередь, но это не сделало. Сообщения были удалены. То же думает, произошел, когда я изменил транспортный сервер для не существования адреса.

Таким образом, я делаю что-то не так? Там какой-либо путь состоит в том, чтобы решить мою проблему?

Мой postconf-n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname,
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, check_policy_service unix:/var/spool/postfix/postgrey/socket, check_policy_service unix:private/recipient_restrictions
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_use_tls = yes
transport_maps = mysql:/etc/postfix/sql/transport.cf
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = mysql:/etc/postfix/sql/mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mailbox_maps.cf
5
задан 17 April 2015 в 10:50
1 ответ

Эту проблему можно решить с помощью postfix или dovecot.

  1. В dovecot вы должны настроить службу LMTP на ответ временным отклонением 4XX (для вашего "особого" домена) при отправке postfix email.
  2. В postfix вам нужно настроить postfix так, чтобы он откладывал электронную почту, если домен получателя соответствует вашему «особому» домену.

Вариант 1 невозможен, потому что -в отличие от postfix- dovecot может ' t быть настроенным для выдачи ошибки tempfail конкретному домену. См. Обсуждение [Dovecot] Конфигурация кода отклонения LMTP .

Для варианта 2 вам необходимо перенести «специальный» домен на нерабочий адрес, например , вы можете доставить его на закрытый порт на вашем сервере LMTP . Для этого вам понадобятся вторые transport_maps с таким запросом

#/etc/postfix/sql/transport-defer.cf

query = SELECT concat('lmtp:',servers.address, ':2424') FROM servers
        JOIN domains ON (domains.server_id=servers.ID)
        WHERE domains.name LIKE SUBSTRING_INDEX("%s", "@", -1)
        AND domains.enable_lmtp != 1
        LIMIT 1;

В приведенном выше запросе я использую порт 2424 в качестве закрытого порта, чтобы postfix отложил сообщение.

Затем поместите его рядом с mysql : /etc/postfix/sql/transport.cf

#main.cf
transport_maps = mysql:/etc/postfix/sql/transport.cf mysql:/etc/postfix/sql/transport-defer.cf

PS: Поскольку у вас нет почтового ящика на сервере postfix, было бы предпочтительнее использовать relay_domains и relay_recipient_maps вместо ] virtual_mailbox_domains и virtual_mailbox_maps . См. документацию по классу домена ретрансляции .

5
ответ дан 3 December 2019 в 01:37

Теги

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