User Tools

Site Tools


qnote:exim

Быстрые заметки по Exim

Exim как дефолтный MTA в системе

FIXME Разобраться как выставить exim дефолтным. Нет команды –set.
FIXME Пока просто удалил postfix (в итоге он все равно должен был быть удален)

[root@noc exim]# alternatives --display mta
mta - status is auto.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-rsmtp: (null)
 slave mta-runq: (null)
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
/usr/sbin/sendmail.exim - priority 10
 slave mta-pam: /etc/pam.d/exim
 slave mta-mailq: /usr/bin/mailq.exim
 slave mta-newaliases: /usr/bin/newaliases.exim
 slave mta-rmail: /usr/bin/rmail.exim
 slave mta-rsmtp: /usr/bin/rsmtp.exim
 slave mta-runq: /usr/bin/runq.exim
 slave mta-sendmail: /usr/lib/sendmail.exim
 slave mta-mailqman: /usr/share/man/man8/exim.8.gz
 slave mta-newaliasesman: (null)
 slave mta-aliasesman: (null)
 slave mta-sendmailman: (null)
Current `best' version is /usr/sbin/sendmail.postfix.
[root@noc exim]# alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix
   2           /usr/sbin/sendmail.exim

Enter to keep the current selection[+], or type selection number: 2   

Запуск очереди

root@host# exiqgrep -i | xargs exim -M
или
root@host# exim -q -v


Удалить писmмо из очереди

root@host# exim -Mrm 1ZEKTg-0001Vb-Kf
Если надо много писем, то можно так:
root@host# exiqgrep -i | xargs exim -M


Посмотреть заголовки письма

root@host# exim -Mvh 1ZEdbs-0007Ju-Gp


Посмотреть список писем в очереди

root@host# exim -bp
Будет видно id письма, поля from: и to:

Вывод:

20h   22K 1ZEdbs-0007Ju-Gp <aaa@bbb.ru>
          ccc@ddd.co.in
        D eee@fff.gov.cn

aaa@bbb.ru - поле from:
ccc@ddd.co.in - поле to:
D - флаг указывающий на то, что сообщение уже доставлено.

21h  2.9K 1ZEcyR-00075z-Mu <> *** frozen ***
          aaa@bbb.ru

* frozen * - сообщение заморожено, exim не будет пытаться переслать его.

Посчитать количество писем в очереди:
root@host# exim -bpс


Элементы конфигурации

Простая конфигурация exim c отправкой писем через gmail

Данную конфигурацию можно использовать когда в организации нет нормальных сопуствующих сервисов (своего домена, днс), а почту с машин мониторинга отправлять надо.

Конфигурация exim, gmail как релей

Конфигурация exim, gmail как релей

primary_hostname = noc1

domainlist local_domains = @ : localhost
hostlist   relay_from_hosts = 127.0.0.1

daemon_smtp_ports = 25
local_interfaces = 127.0.0.1

never_users = root
rfc1413_hosts = *
rfc1413_query_timeout = 5s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d

begin routers

send_via_gmail:
  condition = ${lookup {$local_part@$domain} lsearch {/etc/exim/to_inet} {yes} {no} }
  driver = manualroute
  domains = ! +local_domains
  transport = gmail_smtp
  route_list = * smtp.gmail.com

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/aliases}}
# user = exim
  file_transport = address_file
  pipe_transport = address_pipe

localuser:
  driver = accept
  check_local_user
# local_part_suffix = +* : -*
# local_part_suffix_optional
  transport = local_delivery
  cannot_route_message = Unknown user

begin transports

gmail_smtp:
  driver = smtp
  port = 587
  hosts_require_auth = *
  hosts_require_tls = *

local_delivery:
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660

address_pipe:
  driver = pipe
  return_output

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

begin authenticators

gmail_login:
  driver = plaintext
  public_name = LOGIN
  client_send = : XXXX@gmail.com : PASSWORD6

begin retry

*  *   F,2h,15m; G,16h,1h,1.5; F,4d,6h[root@noc1 mail]# 

Простая конфигурация exim

Подобную конфигурацию можно использовать на машинах мониторинга для отправки алармов.
Есть контроль получателей сообщений.

Простая конфигурация exim

Простая конфигурация exim

 primary_hostname = noc.mydomain.ru

 #domainlist local_domains = @ : localhost : localhost.localdomain
 domainlist local_domains = @ : localhost
 #domainlist relay_to_domains =
 hostlist   relay_from_hosts = 127.0.0.1

 daemon_smtp_ports = 25
 local_interfaces = 127.0.0.1

 never_users = root
 rfc1413_hosts = *
 rfc1413_query_timeout = 5s
 ignore_bounce_errors_after = 2d
 timeout_frozen_after = 7d

 begin routers

 mydomain_ex_router:
         condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/to_exchange} {yes} {no} }
         driver = manualroute
         transport = remote_smtp
         route_data = 10.10.10.253

 dnslookup:
         condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/to_inet} {yes} {no} }
         driver = dnslookup
         transport = remote_smtp
         ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
         no_more

 system_aliases:
   driver = redirect
   allow_fail
   allow_defer
   data = ${lookup{$local_part}lsearch{/etc/aliases}}
 # user = exim
   file_transport = address_file
   pipe_transport = address_pipe


localuser:
   driver = accept
   check_local_user
 # local_part_suffix = +* : -*
 # local_part_suffix_optional
   transport = local_delivery
   cannot_route_message = Unknown user

begin transports

 remote_smtp:
   driver = smtp

 local_delivery:
   driver = appendfile
   file = /var/mail/$local_part
   delivery_date_add
   envelope_to_add
   return_path_add
   group = mail
   mode = 0660

 address_pipe:
   driver = pipe
   return_output

 address_file:
   driver = appendfile
   delivery_date_add
   envelope_to_add
   return_path_add


begin retry

 *                      *           F,2h,15m; G,16h,1h,1.5; F,4d,6h

Endpass

Используется при написании правил acl (c действием access) для того, что бы задать поведение exim при несовпадении условий правила.

Например, в одном из правил acl есть несколько условий:

accept      domains         = xxx.com
            endpass
            message         = "No such user"
            verify          = recipient
  • Если письмо адресовано не домену xxx.com (условие domain), то письмо передается для дальнейшей проверки по оставшимся правилам acl.
    Несовпадение условий правила acl произошло до endpass - письмо идет дальше.
  • Если письмо адресовано домену xxx.com, но не прошла проверка получателся (условие verify), то такое письмо дропается с сообщением “No such user”.
    Несовпадение условий правила acl произошло после endpass - письмо дальше не идет.
  • Если письмо адресовано домену xxx.com (условие domain) и успешно прошла проверка получателя (условие verify), то такое письмо принимается и дальнейшая проверка по правилам acl прекращается.

Логи

Значение символов в логах Exim

<=    message arrival (относительно самого Exim)
=>    normal message delivery
->    additional address in same delivery
>>    cutthrough message delivery 
*>    delivery suppressed by -N
**    delivery failed; address bounced
==    delivery deferred; temporary problem
S=    размер доставленного сообщения, пишется вместе с "=>"
qnote/exim.txt · Last modified: 2021/08/12 08:35 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki