У меня есть 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
Эту проблему можно решить с помощью postfix или dovecot.
Вариант 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
. См. документацию по классу домена ретрансляции .