Upgrade to Pro

Exim4

Wall
2023-08-18 17:53:42

Exim4 это программа, обеспечивающая доставку писем локальным пользователям, а так же их пересылку внешнему SMTP-серверу.
Работа Exim4 основана на логических элементах — драйверах: роутерах и транспортах. Роутер производит операции над адресом и определяет, как дальше пойдет процесс доставки сообщения: оно будет передано транспорту как есть или его адрес будет переписан, или процесс доставки следует прервать. Транспорты передают копию сообщения из почтовой очереди в указанное место назначения (файл, pipe, удаленный хост, etc).

Установка

В дистрибутиве debian программа представлена в двух модификациях: exim4-daemon-light и exim4-daemon-heavy. Дальнейшее описание приводиться на примере exim4-daemon-heavy.
Пакет присутствует в хранилище пакетов debian.
Для установки пакета

  • в командной строке: следует выполнить команду # apt-get install exim4-daemon-heavy exim4 exim4-config
  • в графическом режиме: воспользоваться специализированной программой управления пакетами

После установки пакет готов к использованию в качестве локального MTA.

Некоторые часто используемые команды

  # dpkg-reconfigure exim4-config                  - (пере)конфигурирование пакета
  # /etc/init.d/exim4 restart                      - перезапуск сервера
  # tail -f /var/log/exim4/mainlog                 - просмотр журнала работы
  # iceweasel /usr/share/doc/exim4-base/README.Debian.html  - документация Exim4

Файлы конфигурации

Для сборки текущей конфигурации сервера

  • в диалоговом режиме может быть использована команда
  # dpkg-reconfigure exim4-config
    при этом вводимые параметры записываются в файл /etc/exim4/update-exim4.conf.conf
    а сам exim4 перезапускается.
  • в ручном режиме осуществляется изменение файлов конфигурации, расположеных в каталоге /etc/exim4/, с последущим обновлением
  # update-exim4.conf

Результат размещается в файл /var/lib/exim4/config.autogenerated.

Настройка Exim4 как сервера локальной сети

Exim4 может выступать в качестве локального MTA-агента и SMTP-сервера и обеспечивать тем самым обмен электронными письмами пользователей локальной сети.

Для настройки Exim4 как локального сервера

  • настраивается пакет, например с помощью команды
  # dpkg-reconfigure exim4-config
    с примерным ответом на вопросы
     Общий тип почтовой конфигурации:                                              доставка только локальной почты
     Почтовое имя системы:                                                         localhost
     IP-адреса, с которых следует ожидать входящие соединения SMTP:                127.0.0.1; 192.168.0.1
     Другие места назначения, для которых должна приниматься почта:                доменного имя почтовой системы
     Сокращать количество запросов DNS до минимума (дозвон по требованию)?         нет
     Метод доставки локальной почты:                                               mbox формат в /var/mail/
     Разделить конфигурацию на маленькие файлы?                                    нет
  • на рабочей станции с запущенным exim4 создаются локальные пользователи, которые и будут выступать в качестве пользователей почтовой системы
  # adduser newuser
  или с помощью графической программы kuser

На этом сервер настроен и готов к работе.
При указании в Почтовом клиенте IP-адреса сервера с Exim4 и стандартного порта 25 обеспечивается приемка почты и размещение ее в одноименном mbox-файле в каталоге /var/mail/ из локальной сети и/или с локальной рабочей станции для всех зарегистрированных пользователей. При указании неверныз почтовыз адресов получателей сервер почту не принимает.

Замечание:

  Описанная конфигурация Exim4 достаточна для организации почтового сервера предприятия на сервере терминалов.
  Для получения писем в этом случае даже отсутствует необходимость развёртывания POP3-сервера, в связи с 
  возможность доступа почтовых клиентов к своим локальным ящикам напрямую.

Настройка Exim4 как локального MTA-агента

Exim4 обеспечивает доставку почты с рабочей станции локальной сети почтовому серверу. Это может быть использовано, например при сборке служебных писем с рабочих станций локальной сети на общий административный почтовый ящик.

Для настройки Exim4 в качестве MTA-агента рабочей станции

  • при использовании авторизованного доступа на почтовый SMTP-сервер локальной сети, в файл /etc/exim4/passwd.client добавляется соответствующий пользователь и пароль
  • настраивается пакет, например с помощью команды
  # dpkg-reconfigure exim4-config
    с примерным ответом на вопросы
     Общий тип почтовой конфигурации:                                              отправка почты через smarthost; прием по SMTP или через fetchmail
     Почтовое имя системы:                                                         localhost
     IP-адреса, с которых следует ожидать входящие соединения SMTP:                127.0.0.1
     Другие места назначения, для которых должна приниматься почта:                
     IP-адрес или имя хоста являющегося исходящим smarthost:                       ip почтового сервера
     Скрывать локальное почтовое имя в исходящей почте?                            да
     Видимое доменное имя локальных пользователей:                                 доменного имя почтовой системы
     Сокращать количество запросов DNS до минимума (дозвон по требованию)?         нет
     Метод доставки локальной почты:                                               mbox формат в /var/mail/
     Разделить конфигурацию на маленькие файлы?                                    нет

На этом настройка Exim4 завершена и он готов к работе для пересылки писем на почтовый сервер локальной сети.
Для использования следует добавить строку MAILTO в файлах конфигурации демона cron, например

  # echo "[email protected]" >>/etc/crontab
  # cd /etc/; crontab crontab                     - и применить новую конфигурацию

Настройка Exim4 как SMTP-шлюза

Exim4 предоставляет возможность пересылки писем на внешний SMTP-сервер (relay-агент, SMTP-шлюз). Это может быть необходимо например для доставки писем из локальной сети в интернет через рабочую станцию - шлюз доступа в глобальную сеть.

Для настройки Exim4 в качестве elay-агента для пересылки писем на внешний SMTP-сервер

  • при использовании авторизованного доступа на внешний почтовый SMTP-сервер, в файл /etc/exim4/passwd.client добавляется соответствующий пользователь и пароль
  • настраивается пакет, например с помощью команды
  # dpkg-reconfigure exim4-config
    с примерным ответом на вопросы
     Общий тип почтовой конфигурации:                                              отправка почты через smarthost; прием по SMTP или через fetchmail
     Почтовое имя системы:                                                         localhost
     IP-адреса, с которых следует ожидать входящие соединения SMTP:                127.0.0.1 ; 192.168.0.2
     Другие места назначения, для которых должна приниматься почта:                 
     Машины, для которых доступна релейная передача почты:                         192.168.0.0/24     (маска локальной сети)
     IP-адрес или имя хоста являющегося исходящим smarthost:                       smtp.mail.ru       (ip внешнего почтового сервера)
     Скрывать локальное почтовое имя в исходящей почте?                            да
     Видимое доменное имя локальных пользователей:                                 mail.ru            (имя целевой почтовой системы)
     Сокращать количество запросов DNS до минимума (дозвон по требованию)?         нет
     Метод доставки локальной почты:                                               mbox формат в /var/mail/
     Разделить конфигурацию на маленькие файлы?                                    нет

На этом настройка Exim4 завершена и он готов к работе для пересылки писем на внешний почтовый сервер.
При обращении smtp-клиента из локальной сети по стандартному порту 25 на ip-адрес шлюза интернет происходит создание smtp-сессии напрямую до внешнего почтового ящика. В случае успеха происходит передача почты от почтового клиента пользователя на внешний почтовый smtp-сервер.

Настройка Exim4 как SMTP-сервера

Exim4 предоставляет возможность приёма писем из интернет и пересылки их локальным пользователям внутренний почтовый сервер (SMTP-сервер). Это может быть необходимо, например для организации внешнего SMTP-сервера в почтовой системе предприятия.

Для настройки Exim4 в качестве SMTP-сервера интернет

  • в файл конфигурации /etc/exim4/update-exim4.conf.conf добавляются например такие строки
  dc_eximconfig_configtype='smarthost'           Общий тип почтовой конфигурации
  dc_other_hostnames=
  dc_local_interfaces=
  dc_readhost='tdkare.ru'                        Видимое доменное имя локальных пользователей
  dc_relay_domains='tdkare.ru'                   Домены, для которых доступна релейная передача почты
  dc_minimaldns='false'
  dc_relay_nets='192.168.0.0/24'                 Машины, для которых доступна релейная передача почты
  dc_smarthost='192.168.0.10'                    IP-адрес или имя хоста являющегося исходящим smarthost
  CFILEMODE='644'
  dc_use_split_config='false'
  dc_hide_mailname='true'
  dc_mailname_in_oh='true'
  dc_localdelivery='mail_spool'
  • выполняется обновление конфигурации
  # update-exim4.conf
  • на рабочей станции - шлюзе в интернет открыватеся порт 25 напирмер с помошью пакета arno-iptables-firewall

На этом настройка Exim4 завершена и он готов к работе в качестве SMTP-сервера.
При обращении внешних почтовых клиентов из глобальной сети по стандартному порту 25 на IP-адрес шлюза интернет происходит создание smtp-сессии, приёмка и пересылка почты на внутренний почтовый SMTP-сервер локальной сети.

Exim4 и procmail

Одним из поддерживаемых транспортов Exim4 является агент Procmail.

  Замечание:
  В процессе использования Exim4 создалось впечатление (?) что при наличии файла конфигурации /etc/procmailrc (? ~/.procmailrc)
  передачи письма для доставки от MTA к procmail и далее локальному пользователю не происходит.

Для поддержки доставки писем локальным пользователя через Procmail

  • в файле /etc/exim4/exim4.conf.template заменяется
  строку   require_files = ${local_part}:\
  на       require_files = \
  • (пере)запускается создание файла конфигурации
  # dpkg-reconfigure exim4-config
    с примерным ответом на вопросы
     Разделить конфигурацию на маленькие файлы?                                    нет

Устранение ошибок

Для устранения ошибки T=remote_smtp_smarthost defer (-53): retry time not reached for any host выполняются команды

  # su
  # cd /var/spool/exim4/db/
  # /etc/init.d/exim4 stop
  # rm *
  # /etc/init.d/exim4 start
  # cat /var/log/exim4/mainlog         - проверка устранения ошибок
 
Wall
2023-08-19 09:19:29

Проверка работы почтового сервера Exim

PHP скрипт для проверки работоспособности почтового сервера:

<?php
 
$testemaillist = array(
'[email protected]',
'[email protected]',
'[email protected]'
);
 
for ($i=0; $i < count($testemaillist); $i++) {
if (mail("$testemaillist[$i]", "Test email for $testemaillist[$i]", "Test email for $testemaillist[$i] \n To be, or not to be, \n that is the question")) {
echo "Sent - $testemaillist[$i]<br>";
} else {
echo "Error - $testemaillist[$i]<br>";
}
}
?>

Этот скрипт попытается отправить проверочное письмо по списку адресов из массива. Измените этот список на почтовые ящики к которым у вас есть доступ и сохраните скрипт в каком-нибудь PHP файле у себя на сайте (например testmail.php) и затем запустите в окне браузера (https://mydomain.tld/testmail.php).

При успешной работе скрипта вы увидите в окне браузера список email адресов куда сервер попытается доставить почту. Далее вам нужно будет проверить указанные в скрипте почтовые ящики, чтобы убедиться что письма пришли.

Идентификаторы сообщений в очередях Exim, представляют из себя буквенно-цифровые последовательности в верхнем и нижнем регистрах: XXXXXX-YYYYYY-ZZ и используются большинством команд администрирования очереди и логирования в Exim. Для каждого сообщения создаются три файла в spool директории ( зачастую это: /var/spool ). Если вы работает с данными файлами вручную, без использования описанных ниже команд и утилит, убедитесь что обработали все три файла, например, не оставив в очереди exim только один из них, удалив остальные. Каталог /var/spool/exim/msglog содержит файлы со служебной информацией для каждого сообщения и именуются в соответствии с ID этого сообщения. Каталог /var/spool/exim/input содержат файлы заголовков и данных, к ID сообщения в имени, добавлены суффиксы -H и -D, соответственно. Кроме того в этих директориях могут появляться хэшированные подкаталоги для работы с большими почтовыми очередями.

  • Проверяем сервер на отправку почты из консоли:
# echo "test" | mail -s 'test message' email@example.com

где [email protected] адрес электронный почты, на который вы хотите отправить проверочное сообщение.

  • Опция -bt запускает exim в режиме тестирования адресов, в котором каждый параметр берётся как адрес, который будет тестироваться на доставку. Результаты пишутся на стандартный вывод. Если тест неудачен, и вызывающий - не административный пользователь, детали о ошибке не выводятся, поскольку они могут содержать секретную информацию, типа имён пользователей и паролей для поиска в БД.
exim -bt -d test@dieg.info
  • Проверить количество сообщений в очереди:
exim -bpc
  • Получить список сообщений в очереди:
exim -bp
  • Просмотреть тело сообщения с конкретным ID:
exim -Mvb email-id
  • Удалить все «замороженные» сообщения из очереди:
exipick -zi | xargs exim -Mrm
  • Полностью очистить очередь сообщений (удалить все неотправленные сообщения):
exipick -i | xargs exim -Mrm
  • exiwhat - список, что делают процессы exim`a
  • exiqgrep - выбор из очереди
  • exiqsumm - суммирование очереди
  • exigrep - поиск по главному логу
  • exipick - выбор сообщений по различным критериям
  • exicyclog - ротация лог-файлов
  • eximstats - выбор статистики из логов
  • exim_checkaccess - проверка приёма адреса с данного IP
  • exim_dbmbuild - сборка файла DBM
  • exinext - извлечение информации повторов отсылки почты, удобно смотреть почему почта не отправляется. Пример использования
    exinext user@example.com

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

  • exim_dumpdb - дамб БД подсказок
  • exim_tidydb - очистка БД подсказок
  • exim_fixdb - правка БД подсказок
  • exim_lock - блокировка файла почтового ящика (mailbox)
  • Утилита, которая могла бы использоваться на сайтах с многими MTA - exilog Tom Kistner's. Она обеспечивает визуализацию логов от многих серверов exim`a.
Wall
2023-08-25 00:34:13

Настройка SSL для почты
exim
Правим конфигурационный файл:
vi /etc/exim4/exim4.conf.template
tls_certificate = /etc/exim4/ssl/domain.ru.crt
tls_privatekey = /etc/exim4/ssl/domain.ru.key
Кладем соответственно:
/etc/exim4/ssl/domain.ru.crt -  файл сертификата и цепочки
/etc/exim4/ssl/domain.ru.key - файл ключа
Выставляем права на файлы сертификата и ключа:
chown Debian-exim:Debian-exim /etc/exim4/ssl/domain.ru.crt
chmod 444 /etc/exim4/ssl/domain.ru.crt
chown Debian-exim:Debian-exim /etc/exim4/ssl/domain.ru.key
chmod 400 /etc/exim4/ssl/domain.ru.key
Перезапускаем exim:
/etc/init.d/exim4 restart
systemctl restart exim4
/etc/init.d/exim4 stop
/etc/init.d/exim4 start
dovecot
Правим include-файл с опциями ssl:
nano /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/exim4/ssl/domain.ru.crt

ssl_key = </etc/exim4/ssl/domain.ru.key
Перезапускаем dovecot:
systemctl restart dovecot
Реконфигурация Exim
# dpkg-reconfigure exim4-config
# update-exim4.conf

Wall
2023-08-25 00:56:33

Команды для очистки очереди Exim:
Для показа писем в очереди используется команда, выводятся время постановки в очередь, размер, ID сообщения, отправитель, получатель:
exim -bp
Очистить все сообщения из очереди:
exipick -i | xargs exim -Mrm
Выполнить очистку всех замороженных сообщений из очереди:
exipick -zi | xargs exim -Mrm
Удалить определенное сообщение из очереди можно командой (где ID это id сообщения в очереди):
exim -Mrm ID
Очистить из очереди письма от конкретного отправителя:
exiqgrep -i -f [email protected] | exim -Mrm
Очистить из очереди письма по получателю:
exiqgrep -i -r [email protected] | exim -Mrm