У меня есть виртуальные машины на основе Debian, которые должны передавать почту на центральный хост (smarthost / satellite).
Это предназначено только для локальной почты, полученной через localhost или sendmail
команда, но с изюминкой: Я не хочу, чтобы локальные виртуальные машины могли отправлять почту в Интернет, только на определенные домены. (вроде как предотвращение открытого реле для localhost).
Я бы использовал ssmtp, если бы не тот факт, что он не прослушивает обычные SMTP-порты на localhost, поэтому я использую Exim.
я использую update-exim4.conf
:
% cat update-exim4.conf.conf
dc_eximconfig_configtype='satellite'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost=''
dc_relay_domains='mydomain1.com ; mydomain2.net'
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='mailsrv1.mydomain2.net:mailsrv2.mydomain2.net'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'
У меня это в локальных макросах:
% cat exim4.conf.localmacros
CHECK_RCPT_LOCAL_ACL_FILE = /etc/exim4/local_CHECK_RCPT_LOCAL_ACL_FILE.conf
Соответствующий фрагмент ACL:
% cat local_CHECK_RCPT_LOCAL_ACL_FILE.conf
deny
message = relay not permitted
log_message = XXXXXXXXXXXXXXXXX
!domains = mydomain1.com : mydomain2.net
Теперь проблема в том, что CHECK_RCPT_LOCAL_ACL_FILE
включается после accept
для ретрансляции и локальных доменов, поэтому acl_smtp_rcpt
завершается до того, как достигнет моего локального макроса.
Конечно, я могу заменить весь acl_smtp_rcpt
с участием MAIN_ACL_CHECK_RCPT
, но я не хочу этого делать - мне пришлось бы скопировать существующий acl_smtp_rcpt
и что, если при будущем обновлении он не синхронизируется с автоматически созданной конфигурацией?