Exim (от англ. EXperimental Internet Mailer) — это агент пересылки сообщений, используемый в операционных системах семейства Unix
. Первая версия была написана в 1995 году Филиппом Гейзелом (Philip Hazel) для использования в качестве почтовой системы в Кембриджском Университете. Exim
распространяется под лицензией GPL
, и каждый может свободно скачать его, использовать и модифицировать. Следует отметить, что версия 4 существенно отличается от версии 3.
Exim
придерживается дизайна SendMail, где один процесс контролирует всю работу MTA
. Такой монолитный дизайн считается небезопасным, но у Exim
прекрасная история безопасности и для версии 4.xx. крайне редки критические уязвимости.
Exim 4
спроектирован для систем, имеющих постоянное подключение к сети, поэтому в нём нет сложных механизмов работы с очередью, через которую должны проходить все сообщения. В настройке по умолчанию Exim
пытается немедленно доставить сообщение. При большой нагрузке на сервере режим немедленной доставки может быть временно выключен.
apt-get install exim4
Для установки усиленной версии пакета с поддержкой ACL
нужно использовать команду:
apt-get install exim4-daemon-heavy
Настройка пакета после установки:
dpkg-reconfigure exim4-config
Нужно выбирать Раздельная конфигурация в маленьких файлах (Split configuration into small files
), это позволяет использовать такой режим настройки, при котором конфигурация разбита на отдельные файлы и папки в /etc/exim4/conf.d
.
При этом варианте файл update-exim4.conf.conf
должен содержать строку
dc_use_split_config='true'
Такой вариант удобнее для настройки чем один большой файл.
Перезагрузка (чтение новых настроек) | service exim4 reload |
Перезапуск | service exim4 restart |
Обновление настроек | update-exim4.conf |
При обновлении настроек создается файл /var/lib/exim4/config.autogenerated
, он получается путем компиляции /etc/exim4/conf.d
или exim4.conf.template
(в зависимости от варианта настроек)
dc_eximconfig_configtype='internet' dc_local_domains='domain.com' dc_primary_hostname='server' dc_other_hostnames='server' dc_smarthost='server::25' dc_relay_from_hosts='127.0.0.1' dc_local_interfaces='0.0.0.0' dc_readhost='*' dc_relay_domains='*' dc_relay_nets='*' dc_minimaldns='true' CFILEMODE='644' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='dovecot' dc_virtualdelivery='dovecot' dc_use_split_config='true'
Имя | Описание | Примечание |
---|---|---|
dc_smarthost | Адрес SMTP сервера через который отправлять почту во внешние домены | server::port |
dc_use_split_config | Использовать конфигурацию в виде отельных файлов в /etc/exim4/conf.d | dc_use_split_config='true ' |
relay_from_hosts | ||
dc_eximconfig_configtype | The main configuration type. Sets macro DC_eximconfig_configtype. The macro usually contains a shorthand for one of the choices for the “General type of mail configuration” debconf question (See README.Debian). | dc_eximconfig_configtype ↔ debconf configtype mapping:internet internet site; mail is sent and received directly using SMTP, smarthost mail sent by smarthost; received via SMTP or fetchmail, satellite mail sent by smarthost; no local mail, local local delivery only; not on a network, none no configuration at this time |
dc_hide_mailname | Boolean option that controls whether the local mailname in the headers of outgoing mail should be hidden. (Only effective for “smarthost” and “satellite” | HIDE_MAILNAME |
dc_mailname_in_oh | Internal use only Boolean option that is set by the maintainer scripts after adding the contents of /etc/mailname to the dc_other_hostnames list. This is a transition helper since it wouldn't other wise be possible to see whether that domain name has been removed from dc_other_hostnames on purpose. This is not used by update-exim4.conf, and no macro is set. | |
ue4c_keepcomments | Boolean option that controls whether update-exim4.conf strips the comments from the target configuration file (default) or leaves them in. This can be overridden by the command line options –keep comments and –removecomments. The value is not written to an exim macro. | |
dc_localdelivery | name of the default transport for local mail delivery. Defaults to mail_spool if unset, use maildir_home for delivery to ~/Maildir/ | LOCAL_DELIVERY |
dc_local_interfaces | List of IP addresses the Exim daemon should listen on. If this is left empty, Exim listens on all interfaces | MAIN_LOCAL_INTERFACES only if there is a non-empty value |
dc_minimaldns | Boolean option to activate some option to minimize DNS lookups, if set to “true” a macro DC_minimaldns is defined. If true, the macro DC_minimaldns is set to 1, and the macro | MAIN_HARDCODE_PRIMARY_HOSTNAME |
dc_other_hostnames | is used to build the local_domains list, together with “localhost”. This is the list of domains for which this machine should consider itself the final destination. The local_domains list ends up in the macro | MAIN_LOCAL_DOMAINS |
dc_readhost | For “smarthost” and “satellite” it is possible to hide the local mailname in the headers of outgoing mail and replace it with this value instead, using rewriting. For “satellite” only, this value is also the host to send local mail to | DCreadhost |
dc_relay_domains | Список доменов в которые можно отправлять почту | MAIN_RELAY_TO_DOMAINS |
dc_relay_nets | A list of machines for which we serve as smarthost. Please note that 127.0.0.1 and ::1 are always permitted to relay since /usr/lib/sendmail is available anyway and relay control doesn't make sense here | MAIN_RELAY_NETS |
dc_eximconfig_configtype='internet' dc_local_domains='domain.ru' dc_primary_hostname='domain.ru' dc_other_hostnames='domain.ru' dc_smarthost='mail.domain.ru' dc_relay_from_hosts='127.0.0.1' dc_local_interfaces='0.0.0.0' dc_readhost='*' dc_relay_domains='*' dc_relay_nets='*' dc_minimaldns='true' CFILEMODE='644' dc_hide_mailname='false' dc_mailname_in_oh='true' dc_localdelivery='dovecot'
exim -bV
exim -bt АДРЕС
exim -be
Выход по Ctrl+D
Для работы в паре с IMAP сервером Dovecot
Папка: conf.d/transport/
dovecot: debug_print = "T: dovecot for $local_part@$domain" driver = pipe command = /usr/lib/dovecot/dovecot-lda -f $sender_address message_prefix = message_suffix = log_output delivery_date_add envelope_to_add return_path_add group = mail user = vmail temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
Значение переменной home_directory
должно быть согласовано переменной mail_location
сервера Dovecot
Папка:conf.d/main/
.ifndef LDAP_ROOT_DN LDAP_ROOT_DN = ldap:///АДРЕС И ПУТЬ К СЕРВЕРУ LDAP .endif
Папка: conf.d/router/
ldap_user: driver = redirect allow_fail allow_defer # Поиск maildrop в полях mail объектов objectclass=mailUser data = ${lookup ldapm {LDAP_ROOT_DN?maildrop?sub?\. (&(mail=${quote_ldap:$local_part@${domain}})(objectclass=mailUser))}} cannot_route_message = Неизвестный пользователь (Unknown user) file_transport = dovecot
ldap_groups: driver = redirect allow_fail allow_defer # Поиск членов групп objectclass=mailGroup, для каждого члена группы поиск maildrop. data = ${sg{${map {<\n \. ${sg{${lookup ldapm { \. LDAP_ROOT_DN?member?sub?\. (&\. (objectClass=mailGroup)\. (mail=${quote_ldap:${local_part}@${domain}})\. )\. }}}{\N, \N}{\n}}} \. {${lookup ldap{ \. ldap:///${quote_ldapdn:$item}?maildrop?base?}} \. }}}{\N\n\N}{, } \. } cannot_route_message = Неизвестный пользователь/группа (Unknown user/group)
Папка: conf.d/main/
av_scanner = clamd:/var/run/clamav/clamd.ctl
Папка: conf.d/acl/
acl_check_data: deny malware = * demime = * hosts = * message = Это письмо содержит вирус ! ($malware_name)
Папка: conf.d/router/
message_all_copy: driver = redirect unseen domains = * data = АДРЕС
Этот роутер должен быть описан в самом начале роутеров 3)
Уведомления о доставке report-type=disposition-notification; 1. Уведомления о доставке (Delivery Status Notification, DSN). Почтовый клиент может позволять пользователю установить требование уведомления о доставке сообщения в почтовый ящик получателя. В случае, если сервер, на котором расположен почтовый ящик, поддерживает функцию генерации таких уведомлений, то отправитель сообщения будет информирован о факте доставки. 2. Уведомления о действиях с сообщением, которые совершил получатель (Message Disposition Notification, MDN). Ряд почтовых клиентов позволяют указывать необходимость уведомления отправителя о тех действиях, которые совершил получатель сообщения. Технически это реализуется путем помещения дополнительной информации в заголовок сообщения (Поле "Disposition-Notification-To"). Пожалуй, самым известным типом таких уведомлений является "уведомление о прочтении", генерируемое после отображения сообщения на экране почтовым клиентом получателя. Кроме того, отправитель может уведомляться о печати сообщения, об удалении без прочтения и т.п. Конкретный состав возможных уведомлений определяется почтовым клиентом. Уведомления генерируются клиентом получателя (в случае, если клиент поддерживает эту функцию) при обнаружении соответствующего требования в заголовке полученного сообщения. Наиболее развитые клиенты позволяют выбрать режим обработки уведомлений. Обычно в качестве альтернатив выбора используются три варианта: автоматическая отправка уведомлений; автоматическое игнорирование требований, при этом уведомления не отправляются; предоставление в каждом конкретном случае пользователю возможности выбора между отправкой уведомления и игнорированием требования. Примеры удаления полей заголовка http://www.lissyara.su/articles/freebsd/mail/exim+exchange/
Список доступных (при компиляции) аутентификаторов средствами dovecot
exim -bV | grep Authenticators