Exim настройка

Инструкция по настройке агента пересылки почтовых сообщений Exim4 на виртуальных серверах под управлением операционных систем семейства Linux.

Что это такое?

Exim4 это агент пересылки почтовых сообщений, фактически является простым SMTP-сервером. В нашей статье мы рассмотрим пересылку через SMTP-сервера таких крупных компаний как Google и Yandex. Стоит отметить, что в нашей инструкции предполагается только отправка сообщений, например это удобно для отчетности о работе приложений или событиях.

Установка и настройка

Прежде всего обновите локальный список пакетов с помощью вашего пакетного менеджера, например на Ubuntu и Debian это можно сделать с помощью apt:

Для установки выполните команду:

Примечание: если вам необходимо использовать ACL и другие расширенные функции, то установите exim4-daemon-heavy:

Чтобы перейти к настройке, выполните команду:

Нажмите Ok для начала настройки.

OK

На следующем шаге выберите “mail sent by smarthost; received via SMTP or fetchmail” и нажмите Ok.

Примечание:


  • internet site; mail is sent and received directly using SMTP — этот вариант подходит для автономной системы с полным доступом к Интернету. Демон Exim принимает сообщения на локальные домены и доставляет их. Исходящая почта будет доставлена непосредственно на почтовые серверы домена получателя.
  • mail sent by smarthost; received via SMTP or fetchmail — этот вариант подходит для автономной системы с ограниченным доступом к Интернету. Демон Exim принимает сообщения на локальные домены и доставляет их. Исходящая почта будет доставлена на Smart host, а уже потом на почтовые серверы домена получателя.
  • mail sent by smarthost; no local mail — этот вариант подходит для клиентской системы, все электронные письма отправляются на Smart host без каких-либо локальных доменов.
  • local delivery only; not on a network — этот вариант подходит для серверов не подключенных к сети Интернет. Сообщения принимаются и доставляются только для локальных доменов, т.е. отправка на удаленные (внешние) домены не поддерживается.

General Type

Здесь введите имя хоста или ваше доменное имя.


System mail name

Нажмите Ok.

OK

Введите адрес локальной петли, если exim будет использоваться только локальными сервисами. Оставьте поле пустым, для прослушивания всех интерфейсов, или перечислите нужные через символ “;”.

IP-adresses

Следующее поле оставьте пустым при отсутствии локальных доменов.

Примечание: при наличии локальных доменов их можно указать, по умолчанию все локальные домены будут обрабатываться одинаково.

Other destinations

На следующем шаге укажите список доменов, для которых Exim будет ретранслировать сообщения, выполняя роль Smarthost`а. Если сервер не должен быть smarthost для другого хоста, оставьте этот список пустым.

mail for

Здесь укажите адрес используемого smtp-сервера:

smarthost

На следующий вопрос ответьте No, если необходимо скрыть локальное имя сервера.


No

Нажмите Ok.

OK

В обычном режиме работы Exim выполняет поиск DNS при запуске, а также при получении или доставке сообщений. Этот параметр следует выбрать, если в системе используется Dial-on-Demand. Если сервер всегда имеет доступ к Интернету, этот параметр должен быть отключен.

No

Выберете место хранения почты: в каталоге /var/mail или в домашней директории для каждого пользователя.

mbox format

На вопрос о разделении файла конфигурации на маленькие — ответьте Yes. Так будет более удобно конфигурировать exim4 далее.

Yes

Далее необходимо добавить данные о почтовом ящике, с которого будет происходить отправка почты. Для этого, с помощью текстового редактора, например vi, откройте на редактирование следующий файл:

Добавьте в него строку следующего вида, указав ваш логин и пароль.

Для Gmail


Для Yandex:

Для вашего SMTP-сервера:

Содержимое файла будет выглядеть следующим образом:

Следующие настройки будут выполнены на примере почтового сервиса gmail.

Далее внесем изменения в файл /etc/exim4/exim4.conf.template. Откройте его на редактирование с помощью текстового редактора:

Найдите строку со следующим содержимым:

После нее вставьте следующие строки:

Найдите первую строку со следующим содержимым:

После нее вставьте следующие строки:

Найдите строку со следующим содержимым:

  begin authenticators  

После нее вставьте следующие строки, почтовый адрес и пароль измените на ваши:

Также из файла необходимо удалить следующий блок строк, чтобы не было ошибок авторизации:

Сохраните изменения и закройте файл.

Чтобы изменения вступили в силу, перезагрузите почтовый сервис:

Чтобы проверить корректность настроек, отправляем тестовое письмо:

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

Заблокирована попытка входа в аккаунт

 

1cloud.ru

Один IP-адрес для всех доменов сервера

Для такой работы в файле конфигурации в секции transports (после строки «begin transports») должна быть строка такого вида:

interface = 188.120.24.34 

Измените адрес тут.

После изменений в файлах перезапускаем почтовый сервер одной из команд:

service exim4 restart service exim restart 

Разные IP-адреса для разных доменов


Для такой работы в файле конфигурации в секции transports (после строки «begin transports») должна быть строка такого вида:

interface = <;${lookup{$sender_address_domain}lsearch{/etc/exim4/domainips}} 

В файле /etc/exim4/domainips необходимо указать IP для нужных доменов так:

domain1.ru:188.120.235.69; domain2.ru:188.120.229.17; 

После изменений в файлах перезапускаем почтовый сервер одной из команд:

service exim4 restart service exim restart 

Проверить как это работает можно, отправив почту через этот почтовый сервер себе на почтовый ящик, а после, просмотрев её заголовки.

firstwiki.ru

Описание

Первым делом, нам необходимо создать каталог, в котором мы будем хранить наш приватный ключ.

mkdir /etc/exim4/dkim

Далее нам необходимо сгенерировать приватный ключ, который будет только у нас на сервере и публичный ключ, который мы потом внесем в DNS запись.
Переходим в папку /etc/exim4/dkim

cd /etc/exim4/dkim    

Генерируем приватный ключ example.com.key

# openssl genrsa -out example.com.key 1024  Generating RSA private key, 1024 bit long modulus  ..........................++++++  ..................++++++  e is 65537 (0x10001)

Генерируем публичный ключ example.com.public из нашего приватного ключа example.com.key

# openssl rsa -pubout -in example.com.key -out example.com.public  writing RSA key

Меняем владельца каталога /etc/exim4/dkim и всех файлов внутри на Debian-exim, именно под этим пользователем запускается Exim. Эту нужно, чтобы он имел доступ к файлу приватного ключа.

chown -R Debian-exim:Debian-exim /etc/exim4/dkim

Далее, нам необходимо внести изменения в файл конфигурации Exim /etc/exim4/exim4.conf.template, чтобы он использовал наш приватный ключ. Для этого, открываем файл конфигурации и вносим следующие строчки перед секцией remote_smtp:

# DKIM:  DKIM_DOMAIN = ${lc:${domain:$h_from:}}  DKIM_KEY_FILE = /etc/exim4/dkim/DKIM_DOMAIN.key  DKIM_PRIVATE_KEY = ${if exists{DKIM_KEY_FILE}{DKIM_KEY_FILE}{0}}  DKIM_SELECTOR = email

Сохраняем изменения и перезапускаем Exim следующей командой:

service exim4 restart

Чтобы проверить конфигурацию, можно воспользоваться следующей командой:

exim -bP transports | grep dkim    

Результат:

dkim_domain = ${lc:${domain:$h_from:}}  dkim_private_key = ${if exists{/etc/exim4/dkim/${lc:${domain:$h_from:}}.key}{/etc/exim4/dkim/${lc:${domain:$h_from:}}.key}{0}}  dkim_selector = email

Теперь нам необходимо создать в DNS зоне нашего домена запись типа TXT, в которой указать наш публичный ключ в соответствующем формате. В поле имя указываем:

email._domainkey

Где email — это селектор из предыдущего пункта настройки.
А в поле самой записи, указываем следующую строку:

v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcbu6mvGWmF65Suqazr3Krb2Ky/EXs8qaT1yMDfc00YJD77dq6jCnAwxQUHHuKanlELGd1uqoVpKzmmVoquUChbmTzs5MBuzw0TCEhzIyyiD+ZZBbJQa85a7OhdLoDs7MkwlF2Asqj4k44CpJo0c7gAySdbIQNaY9YpTW0L1TatwIDAQAB

v=DKIM1 — версия DKIM
h=sha256 — предпочитаемый hash-алгоритм, может быть sha1 и sha256
k=rsa — тип публичного ключа p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcbu6mvGWmF65Suqazr3Krb2Ky/EXs8qaT1yMDfc00YJD77dq6jCnAwxQUHHuKanlELGd1uqoVpKzmmVoquUChbmTzs5MBuzw0TCEhzIyyiD+ZZBbJQa85a7OhdLoDs7MkwlF2Asqj4k44CpJo0c7gAySdbIQNaY9YpTW0L1TatwIDAQAB — сам публичный ключ, который лежит у нас в файлике /etc/exim4/dkim/example.com.public

Протестировать работу DKIM можно с помощью следующих сервисов:
Проверяем, что на DNS сервере существует DKIM запись и она корректна этим сервисом.
Если все хорошо, то можно приступать к проверке корректной работы Exim и послать тестовое письмо, для этого, можно воспользоваться этим сервисом.

sysadmin.ru

Установка необходимых пакетов


Для начала нужно обновить кэш пакетов и установить Exim следующей командой:

apt-get update && apt-get install exim4-daemon-light mailutils 

Настройка Exim

Для настройки Exim наберите в консоли следующую команду:

dpkg-reconfigure exim4-config 

Появится окно с выбором типа общей почтовой конфигурации. Выберите пункт “интернет-сайт”.

выберите пункт "интернет-сайт"

В следующем окне введите ваш домен полностью (напр.: mysuperdomain.ltd):

введите домен

При выборе IP-адресов, которые будет слушать Exim, стоит указать только “127.0.0.1”:

введите IP

В следующем окне нужно указать через точку с запятой все домены, которые указывают на ваш сервер:


введите дополнительные домены

На следующих двух страницах мастера настройки нужно оставить поля пустыми:

оставьте этот вопрос пустым оставьте этот вопрос пустым

На шаге с выбором сокращения DNS-запросов нужно выбрать “Нет”:

выберите 'нет'

В следующем шаге выбираем пункт “Maildir…”, т.к. данный тип более распространён и имеет преимущества перед mbox:

выберите Maildir

На шаге выбора разделения конфигурации выберите “Нет”:

выберите Нет

На последнем шаге нужно через пробел указать ящики, куда будет пересылаться почта для ‘root’ и ‘postmaster’:

выберите Нет

После этого, окно мастера закроется и он перезагрузит Exim.

Для проверки работоспособности сервера выполните команду (замените “user@myrealmail.ltd” на свой реальный email):

echo “Моё тестовое сообщение” | mail -s Topic user@myrealmail.lrd     
Условия использования документа

Материал представленный на данной странице может быть использован Вами по своему усмотрению. Разрешается копирование и распространение предоставленного материала без изменения содержания и без предварительного уведомления администрации Clodo.ru.

Мы будем признательны Вам за сообщения об ошибках в представленной документации и за предложения об улучшении документации. По этим вопросам необходимо обращаться по адресу mail@clodo.ru. При обращении не забывайте указывать URL-адрес публикации.

lib.clodo.ru

Версия для печатиОтправить другуPDF version

MTA Exim

Давно уже собирался написать статью о настройке почтового сервера, но все никак не находилось свободного времени, во время настройки очередного "почтовика". Сейчас же вроде не очень "подгоняют", соответственно попытаемся все подробно задокументировать.

Итак, исходные данные:

  • домен: ispalternativa.net.ua
  • IP-адрес сервера: 91.221.84.10
  • имя сервера: mail.ispalternativa.net.ua

Важно! Согласно RFC, необходимо, чтобы "прямая" и "обратная" запись в ДНС совпадали. Тоесть в нашем случае, необходимо чтобы запись mail.ispalternativa.net.ua "резолвилась" в IP-адрес 91.221.84.10, а PTR-запись 91.221.84.10 была установлена в mail.ispalternativa.net.ua.

Проверяем эти условия:

# host mail.ispalternativa.net.ua
mail.ispalternativa.net.ua has address 91.221.84.10

# host 91.221.84.10
10.84.221.91.in-addr.arpa domain name pointer mail.ispalternativa.net.ua.

С ДНС-записями почти разобрались… Проверим еще, чтобы МХ-запись домена указывала на наш почтовый сервер:

# dig MX ispalternativa.net.ua

; <<>> DiG 9.6.2-P2 <<>> MX ispalternativa.net.ua
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57347
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; QUESTION SECTION:
;ispalternativa.net.ua.         IN      MX

;; ANSWER SECTION:
ispalternativa.net.ua.  2756    IN      MX      10 mail.ispalternativa.net.ua.
ispalternativa.net.ua.  2756    IN      MX      20 smtp.ispalternativa.net.ua.

;; AUTHORITY SECTION:
ispalternativa.net.ua.  2756    IN      NS      ns2.h26.hvosting.ua.
ispalternativa.net.ua.  2756    IN      NS      ns1.h26.hvosting.ua.

;; ADDITIONAL SECTION:
mail.ispalternativa.net.ua. 3600 IN     A       91.221.84.10
smtp.ispalternativa.net.ua. 2756 IN     A       91.200.40.26
ns1.h26.hvosting.ua.    344     IN      A       91.200.40.26
ns2.h26.hvosting.ua.    344     IN      A       62.149.29.26

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Aug  7 00:15:03 2011
;; MSG SIZE  rcvd: 173

MX-запись указывает на наш сервер, здесь все в порядке. Пора приступать непосредственно к установке Exim.

Первым делом внесем некоторые изменения в /etc/make.conf. Добавим такую секцию:

# Задаем переменную — путь к каталогу портов
PORTSDIR?= /usr/ports
# EXIM
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
LOG_FILE_PATH?= syslog
WITH_DEFAULT_CHARSET?= koi8-r
.endif

Дело в том, что по умолчанию Exim пишет логи в свой каталог, что не очень удобно. Указав же, что необходимо использовать syslog, логи будут писаться в /var/log/maillog. Добавляем именно в make.conf по той причине, что все опции, кроме логгирования, можно будет задать при запуске make config. Редактировать Makefile тоже не советую, поскольку при обновлении портов он просто будет перезаписан.

Подготовка к инсталляции окончена. Даем команду на установку.

# cd /usr/ports/mail/exim && make install clean && rehash

Выставляем необходимые опции сборки. Главное — не забыть включить поддержку MySQL

Options for exim 4.76

 [ ] ALT_CONFIG_PREFIX Restrict the set of configuration files [X] AUTH_CRAM_MD5      Enable CRAM-MD5 authentication mechanisms [X] AUTH_DOVECOT       Enable Dovecot authentication mechanisms [X] AUTH_PLAINTEXT     Enable plaintext authentication [ ] AUTH_RADIUS        Enable radius (RFC 2865) authentication [ ] AUTH_SASL          Enable use of Cyrus SASL auth library [X] AUTH_SPA           Enable Secure Password Authentication [X] CDB                Enable CDB-style lookups [Х] CONTENT_SCAN       Enable exiscan email content scanner [X] DAEMON             Install scripts to run as a daemon [ ] DCC                Enable DCC at ACL support via dccifd [ ] DEBUG              Build with debugging symbols [X] DISABLE_D_OPT      Disable macros overrides using option -D [X] DNSDB              Enable DNS-style lookups [X] DSEARCH            Enable directory-list lookups [X] EMBEDDED_PERL      Enable embedded Perl interpreter [ ] EXIMON             Build eximon monitor (require XFree86!) [X] ICONV              Enable header charset conversion [ ] IPV6               Enable IPv6 support [ ] KAS                Build with Kaspersky AntiSpam local scan  [X] LMTP               RFC2033 SMTP over command pipe transport [X] LSEARCH            Enable wildcarded-file lookups [X] MAILDIR            Enable Maildir mailbox format [X] MAILSTORE          Enable Mailstore mailbox format [X] MBX                Enable MBX mailbox format [X] MYSQL              Link against libmysqlclient library [X] NIS                Enable NIS-style lookups [X] OLD_DEMIME         Enable old, deprecated demime ACL [ ] OPENLDAP           Link against libldap [X] PAM                Enable PAM authentication mechanisms [ ] PASSWD             Enable /etc/passwd lookups [ ] PGSQL              Link against libpq [X] READLINE           Enable readline(3) library [ ] SASLAUTHD          Enable use of Cyrus SASL auth daemon [ ] SA_EXIM            SA-Exim support [ ] SO_1024            Build with Spamooborona-1024 local scan [X] SPF                Enable Sender Policy Framework checking [ ] SQLITE             Enable SQLite lookups [X] SRS                Enable Sender Rewriting Scheme [ ] SRS_ALT            Enable alternative SRS library [X] SUID               Install the exim binary suid root [ ] TCP_WRAPPERS       Enable /etc/hosts.allow access control [X] TLS                Link against OpenSSL [ ] WISHLIST           Include the unsupported patches [ ] XCLIENT            Enable XCLIENT command in exim

Также не стоит забывать об антивирусной поддержке в Exim. Поэтому устанавливаем Clamav согласно этой статьи.

После установки и запуска Clamav приступаем к редактированию конфигурационного файла Exim. Постараюсь максимально комментировать строки, но не обещаю детальное описание. Скачать конфигурационный файл можно по этой ссылке.

А здесь вывод файла /usr/local/etc/exim/configure с комментариями.

############################################################################ # Runtime configuration file for Exim # # MAIN CONFIGURATION SETTINGS # ############################################################################    # Имя хоста. Используется в HELO/EHLO. Необходимо, чтобы содержалось имя # домена, для которого принимаем почту. Правильный вариант - чтобы этот # параметр совпадал с именем MX-записи. primary_hostname = mail.ispalternativa.net.ua  
# Список доменов, для которых будем принимать почту. В нашем случае # выборка делается из БД MySQL. domainlist local_domains = ${lookup mysql{SELECT domain FROM domains   WHERE domain='${domain}' AND   (type='LOCAL' OR type='VIRTUAL')}}    # Список доменов, для которых разрешен релей через данный сервер. Выборка # делается из БД MySQL. domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains   WHERE domain='${domain}' AND type='RELAY'}}  
# Список отправителей, которых считать "спамерами". Выборка делается из БД # MySQL. hostlist spamers = ${lookup mysql{SELECT senders FROM blacklist_host WHERE   senders='${sender_host_address}'}}    # Список сетей, которым будет разрешена отправка без авторизации. # Перечисляем сети, которые будут пользоваться даным сервером для # отправки почты. hostlist relay_from_hosts = localhost : 127.0.0.1 : 91.221.84.0/23  
# Выбираем данные из БД MySQL для поддержки квотирования. GET_QUOTA=${lookup mysql{SELECT quota FROM users   WHERE login='${local_part}' AND domain='${domain}'}{${value}M}}    # Задаем квотирование. MAILDIR_SIZE=${eval:${sg{${sg{${readfile{/var/exim/$domain/$local_part/maildirsize}  {n}}}{N^.+?nN}{}}}{N(?s)s+-?d+nN}{+}}0+500K}
# На каких портах будет "работать" Exim.
daemon_smtp_ports = 25 : 465 # Указываем, что на порту 465 будет TLS-шифрование. tls_on_connect_ports = 465
# Перечисляем, для каких хостов будет доступно TLS-шифрование. tls_advertise_hosts = *  # Указываем путь к сертификату и ключу шифрования. tls_certificate = /etc/ssl/certs/mail.pem tls_privatekey = /etc/ssl/certs/mail.pem
# Выбираем, что будем логировать # + - писать в логи, # - - Не писать в логи. # +all_parents - все входящие соединения # +lost_incoming_connections - потеряные входящие соединения # +received_sender - отправитель # +received_recipients - получатель # +smtp_confirmation - подтверждения SMTP # +smtp_syntax_error - ошибки синтаксиса SMTP # +smtp_connection - соединение SMTP # +smtp_protocol_error - ошибки протокола SMTP # -queue_run - работа очереди (замороженные мессаги) log_selector =   +all_parents   +lost_incoming_connection   +received_sender   +received_recipients   +smtp_confirmation   +smtp_syntax_error   +smtp_connection   +smtp_protocol_error   -queue_run  # Убираем из логов временную метку Exim`a - её ставит syslogd # Внимание! Если планируете использовать утилиту eximstats, # необходимо установить в значение yes syslog_timestamp = no  # Задаем acl для проверки почты. acl_smtp_rcpt = acl_check_rcpt acl_smtp_mime = acl_check_mime acl_smtp_data = acl_check_data  # "Цепляем" антивирус. Указываем путь к сокету Clamav. av_scanner = clamd:/var/run/clamav/clamd.sock  # Доверенные пользователи. trusted_users = www  # Имя домена добавляемое для локальных отправителей (пользователей системы).  # Тоесть почта отправляемая от root, будет root@$qualify_domain. qualify_domain = ispalternativa.net.ua  # Cписок IP-адресов интерфейсов, на которых ожидаются запросы.  local_interfaces = 127.0.0.1 : 91.221.84.10  # Принимать ли почту вида имя_пользователя@IP-адрес. allow_domain_literals = false  # Имя пользователя и групы, от имени которых будет работать Exim. exim_user = mailnull exim_group = mail  # В целях безопасности запрещаем работу от root-а. never_users = root  # Когда доставка сообщения откладывается, Exim посылает предупреждающее # письмо отправителю, с указанными интервалами. delay_warning = 4h:8h:24h:48h  # При генерации сообщения об ошибка "вкладывать" не все сообщение, а  # "кусок", указанного размера. return_size_limit = 50k  # Резолвить DNS-имена перечисленных хостов. host_lookup = *  # Таймаут для резолвинга идентификатора пользователя на удаленной машине. rfc1413_hosts = * rfc1413_query_timeout = 0s  # Принудительна синхронизация команд. Не принимать команды от удаленного # сервера "потоком". smtp_enforce_sync = true
# Контроль повторяющихся строк логов. syslog_duplication = false  # Разрешить, чтобы МХ указывал на IP-адрес. allow_mx_to_ip
# Уничтожать недоставленные рикошеты, если они "старше" указанного времени. ignore_bounce_errors_after = 2d  # Какой промежуток времени хранить "замороженные" сообщения. timeout_frozen_after = 2d
# Максимальный размер письма. message_size_limit = 20M  # Ограничение на максимальной количество одновременных входящих сообщений. smtp_accept_max = 100
# Ограничение на максимальное количество сообщений в одной сесию. smtp_accept_max_per_connection = 50  # Ограничение на максимальное количество сообщений с одного хоста. smtp_accept_max_per_host = 20
# Количество соединений по стеку TCP/IP. smtp_connect_backlog = 50  # Класть в очередь, при большем числе сообщений за одну сесию. smtp_accept_queue_per_connection = 30
# Максимальное количество СМТП-доставок на одно сообщение. remote_max_parallel = 15  # Разбиение каталога спула. Увеличивает производительность. split_spool_directory = true
# "Приветствие" сервера.
smtp_banner = "$primary_hostname ESMTP Exim"
# Параметры соединения с БД MySQL: server/database/username/password.
hide mysql_servers = localhost/exim/exim/MySQL-pass-here ############################################################################ # ACL CONFIGURATION # # Specifies access control lists for incoming SMTP mail # ############################################################################
begin acl  acl_check_rcpt:  # Запрещаем письма содержащие в локальной части символы @; %; !; /; |. deny message = "Illegal characters are in an address."  domains = +local_domains  local_parts = ^[.] : ^.*[@%!/|]
# Запрещаем недопустимые символы для нелокальных получателей. deny message = "Illegal characters are in an address."  domains = !+local_domains  local_parts = ^[./|] : ^.*[@%!] : ^.*/\.\./  # Запрещаем прием почты с определенных доменов. С них жестко СПАМ идет. # orange.fr deny message   = "All email from *.orange.fr - discarded!"
     condition = ${if match{$sender_helo_name}{.orange.fr}{yes}{no}}
# mdp2.net
deny message   = "All email from *.mdp2.net - discarded!"
     condition = ${if match{$sender_helo_name}{.mdp2.net}{yes}{no}}
# mail.comcast.net
deny message   = "All email from *.mail.comcast.net - discarded!"
     condition = ${if match{$sender_helo_name}{.mail.comcast.net}{yes}{no}}
# libero.it
deny message   = "All email from *.libero.it - discarded!"
     condition = ${if match{$sender_helo_name}{.libero.it}{yes}{no}}
# ono.com
deny message   = "All email from *.ono.com - discarded!"
     condition = ${if match{$sender_helo_name}{.ono.com}{yes}{no}}
# wanadoo.fr
deny message   = "All email from *.wanadoo.fr - discarded!"
     condition = ${if match{$sender_helo_name}{.wanadoo.fr}{yes}{no}}
# Разрешаем отправку, если отправитель находится в "белом списке". Выборка # делается из БД MySQL. accept senders=${lookup mysql{SELECT senders FROM whitelist WHERE senders='${quote_mysql:$sender_address}' OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}}
# Запрещаем отправку тем, кто внесен в "черный список". Выборка делается из # БД MySQL. deny message = "Your address in banlist!"  senders=${lookup mysql{SELECT senders FROM blacklist   WHERE senders='${quote_mysql:$sender_address}'   OR senders='*@${quote_mysql:$sender_address_domain}' LIMIT 1}}  # Запрещаем отправку тем, кто "достал" и приравнивается к спамеру. Выборка # делается из БД MySQL. deny hosts = +spamers
     message = "Host rejected by spamers list on rbl.ispalternativa.net.ua!"
# Разрешаем отправку авторизованным пользователям. accept authenticated = *  # Запрещаем тех, кто не обменивается приветственными сообщениями (HELO/EHLO) deny message = "HELO/EHLO required by SMTP RFC"  condition = ${if eq{$sender_helo_name}{}{yes}{no}}
# Запрещаем тех, кто в HELO "отдает" только цифры. deny condition = ${if match{$sender_helo_name}{N^d+$N}{yes}{no}}  hosts = !127.0.0.1:!localhost:*  message = "There can not be only numbers in HELO!"  # Запрещаем тех, кто не пишет отправителя. deny condition = ${if eq{$sender_address}{}{yes}{no}}  hosts = +relay_from_hosts  message = "Your message have not return address"
# Запрещаем тех, кто подставляет свой IP в HELO.
deny message   = "The use of IP is forbidden in HELO!"
     hosts     = *:!+relay_from_hosts
     condition = ${if eq{$sender_helo_name}
                      {$sender_host_address}{true}{false}}
# Запрещаем использовать наш IP в HELO. deny condition = ${if eq{$sender_helo_name} {$interface_address}{yes}{no}} hosts = !127.0.0.1 : !localhost : * message = "The use of my IP is forbidden!" # Запрещаем прием почты с динамических хостов. deny message = "Dynamic hosts is forbidden!" condition = ${if match{$sender_host_name} {dsl|dial|pool|peer|dhcp|cable} {yes}{no}}
# Запрещаем прием почты с хостов, которые находятся в блэк-листах. deny message = rejected because $sender_host_address   is in a black list at $dnslist_domainn$dnslist_text  hosts = !+relay_from_hosts  !authenticated = *  log_message = found in $dnslist_domain  dnslists = bl.spamcop.net :   cbl.abuseat.org :   dnsbl.njabl.org :   sbl-xbl.spamhaus.org :   pbl.spamhaus.org  # Удерживание соединения. Метод борьбы со спамом. # Метод не допускается на высокозагруженых серверах, # поскольку в результате ему приходится удерживать # много открытых соединений. warn # ставим дефолтовую задержку в 25 секунд set acl_m0 = 25s warn # ставим задержку в 0 секунд для своих сетей hosts = +relay_from_hosts set acl_m0 = 0s warn # ставим задержку в 0 секунд для авторизованых пользователей authenticated = * set acl_m0 = 0s  warn # пишем в логи задержку (если в этом есть необходимость) logwrite = Delay $acl_m0 for $sender_host_name  [$sender_host_address] with HELO=$sender_helo_name. Mail  from $sender_address to $local_part@$domain. delay = $acl_m0 # Проверка существования отправителя. drop message = Rejected - Sender Verify Failed  log_message = Rejected - Sender Verify Failed  hosts = *  !verify = sender/no_details/callout=2m,defer_ok  !condition = ${if eq{$sender_verify_failure}{}} # Проверка получателя в локальных доменах. accept domains = +local_domains  endpass  message = $acl_verify_message  verify = recipient
# Проверяем получателя в релейных доменах. accept domains = +relay_to_domains  endpass
       message  = "Unrouteable address!"
       verify   = recipient/callout=30s,defer_ok,use_postmaster
# Разрешаем почту от хостов в релейных доменах. accept hosts = +relay_from_hosts accept authenticated = * deny message = relay not permitted accept acl_check_mime:
# Запрещаем вложения определенных типов
deny message = Blacklisted file extension detected ($mime_filename) condition = ${if match  {${lc:$mime_filename}}  {N(.exe|.pif|.bat|.scr|.lnk|.com|.vbs|.cpl)$N}{1}{0}}
accept 
# ACL проверки "тела" письма. acl_check_data:   # Проверка антивирусом. deny message = This message contains a virus ($malware_name). demime = * malware = */defer_ok  accept  ###################################################################### # ROUTERS CONFIGURATION # # Specifies how addresses are handled # ###################################################################### # THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! # # An address is passed to each router in turn until it is accepted. # ######################################################################
begin routers
# Поиск маршрута к хосту в DNS. Не проверяются 0.0.0.0 и 127.0.0.0/8! dnslookup:  driver = dnslookup  domains = ! +local_domains  transport = remote_smtp  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8  no_more  # Почтовые алиасы (виртуальные адреса). Выборка делается из БД MySQL. system_aliases:  driver = redirect  allow_fail  allow_defer  data = ${lookup mysql{SELECT recipients FROM aliases   WHERE (local_part='${local_part}' AND domain='${domain}')   OR (local_part='*' AND domain='$domain')ORDER BY local_part='*'   LIMIT 1}}  # Перенаправления почты в случае необходимости. userforward:  driver = redirect  check_local_user=false  file = /var/exim/$domain/$local_part/forward  user = mailnull  group = mail  allow_filter  no_verify  no_expn  check_ancestor  file_transport = address_file  pipe_transport = address_pipe  reply_transport = address_reply  condition = ${if exists{/var/exim/$domain/$local_part/forward}{yes}{no}}
# Настройка квотирования. Мы не жадные, но порядок должен быть :) # Выборка делается из БД MySQL. virtual_user_quota_defer:  driver = redirect  domains = +local_domains  condition = ${if and{  {exists{/var/exim/$domain/$local_part}}  {exists{/var/exim/$domain/$local_part/maildirsize}}  {>{GET_QUOTA}{0}}  {>={MAILDIR_SIZE}{GET_QUOTA}}  } }  data = :fail: Over quota!  verify_sender = false  allow_fail  # Принимаем почту для валидного пользователя. Выборка делается из БД MySQL. virtual_localuser:  driver = accept  domains = ${lookup mysql{SELECT domain from domains   WHERE domain='${domain}'}}  local_parts = ${lookup mysql{SELECT login from users   WHERE login='${local_part}' AND domain='${domain}'}}  transport = local_delivery  cannot_route_message = Unknown user  ###################################################################### # TRANSPORTS CONFIGURATION # ###################################################################### # ORDER DOES NOT MATTER # # Only one appropriate transport is called for each delivery. # ######################################################################
begin transports  # Доставка на удалённые хосты. remote_smtp:  driver = smtp  interface = 91.221.84.10  # Локальная доставка. local_delivery:  driver = appendfile  maildir_use_size_file  check_string = ""  create_directory  delivery_date_add  directory = ${lookup mysql{SELECT   LOWER(CONCAT('/var/exim/$domain/',login)) FROM users   WHERE login='${local_part}' AND domain='${domain}';}}  directory_mode = 770  envelope_to_add  group = mail  maildir_format  maildir_tag = ,S=$message_size  message_prefix = ""  message_suffix = ""  mode = 0660  quota = ${lookup mysql{SELECT quota FROM users   WHERE login='${local_part}' AND domain='${domain}'}{${value}M}}  quota_size_regex = S=(d+)$  quota_warn_threshold = 80%  return_path_add
# Транспорт а-ля "труба" address_pipe:  driver = pipe  return_output  # Запись в файл. address_file:  driver = appendfile  delivery_date_add  envelope_to_add  return_path_add
# Автоответчик. address_reply:  driver = autoreply  # В никуда... null_transport:  driver = appendfile  file = /dev/null  ###################################################################### # RETRY CONFIGURATION # ######################################################################
begin retry  # Настройка повтора недоставленных писем. * quota * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
###################################################################### # REWRITE CONFIGURATION # ######################################################################  # Секция перезаписи адресов. Не использую. begin rewrite
###################################################################### # AUTHENTICATION CONFIGURATION # ######################################################################  begin authenticators
# Секция авторизации. Разные типы авторизации для разных почтовых клиентов. fixed_login:  driver = plaintext  public_name = LOGIN  server_prompts = Username:: : Password::  server_condition = "${if and {   {!eq{$1}{}}   {!eq{$2}{}}   {crypteq{$2}{\{crypt\}${lookup mysql{SELECT   password FROM users   WHERE login='${local_part:$1}'   AND domain='${domain:$1}' AND   smtp_auth='1'}{$value}fail}}}   } {yes}{no}}"  server_set_id = $1  fixed_plain:  driver = plaintext  public_name = PLAIN  server_prompts = :  server_condition = "${if and {   {!eq{$2}{}}   {!eq{$3}{}}   {crypteq{$3}{\{crypt\}${lookup mysql{SELECT   password FROM users   WHERE login='${local_part:$2}'   AND domain='${domain:$2}' AND   smtp_auth='1'}{$value}fail}}}   } {yes}{no}}"  server_set_id = $2  # End of Exim configuration file. 

С конфигурационным файлом, кажется, разобрались. Следующий шаг — создание БД,  пользователя этой БД и наполнение БД данными.

Создадим пользователя MySQL и базу данных:

mysql> create database exim;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on exim.* to ‘exim’@’localhost’ identified by ‘MySQL-pass-here’;
Query OK, 1 row affected (0.00 sec)

Скачиваем дамп базы данных и "заливаем" его в БД:

# fetch http://muff.kiev.ua/files/exim.sql
# mysql -u exim -pMySQL-pass-here exim < exim.sql

Структура БД у нас есть. Теперь пора "заполнить" ее необходимыми данными. По очереди внесу по одной записи в каждую из таблиц.

mysql> use exim;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
 

mysql> INSERT INTO `exim`.`aliases` (`local_part`, `domain`, `recipients`)
    -> VALUES (‘root’, ‘ispalternativa.net.ua’, ‘muff [at] ispalternativa [dot] net [dot] ua’);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`blacklist` (`senders`, `when_added`)
    -> VALUES (‘elenafrits [at] km [dot] ru’, CURDATE());
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`blacklist_host` (`senders`, `when_added`)
    -> VALUES (‘12.134.36.100’, CURDATE());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO `exim`.`domains` (`domain`, `type`)
    -> VALUES (‘ispalternativa.net.ua’, ‘LOCAL’);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`users` (`login`, `name`, `password`, `uid`, `gid`, `domain`,
    -> `quota`, `status`, `smtp_auth`) VALUES (‘muff’, ‘Oleg Zinkov. System administrator’,
    -> ENCRYPT(‘password-here’), ’26’, ‘6’, ‘ispalternativa.net.ua’, ‘150’, ‘1’, ‘1’);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `exim`.`whitelist` (`senders`, `when_added`)
    -> VALUES (‘do-not-reply [at] livejournal [dot] com’, CURDATE());
Query OK, 1 row affected (0.00 sec)

Возьмемся за поддержку шифрования… Создадим самоподписной сертификат безопасности. Создадим каталог для сертификата и создадим сертификат, как таковой и немного обезопасим его:

# mkdir /etc/ssl/certs && cd /etc/ssl/certs
# openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/mail.pem -keyout /etc/ssl/certs/mail.pem

Generating a 1024 bit RSA private key
……………………………………………………………………………….++++++
………………..++++++
writing new private key to ‘/etc/ssl/certs/mail.pem’
——
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
——
Country Name (2 letter code) [AU]:UA
State or Province Name (full name) [Some-State]:Kiev region.
Locality Name (eg, city) []:Kiev
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ISP Alternativa
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:mail.ispalternativa.net.ua
Email Address []:noc [at] ispalternativa [dot] net [dot] ua

# chown mailnull:mail mail.pem
# chmod 440 mail.pem

Теперь пора создать каталог, где будет храниться почта. Ну и не нужно забывать о правах на каталог:

# mkdir /var/exim && chown mailnull:mail /var/exim

Также не стоит забывать о файле /etc/mail/mailer.conf. Отредактируем его до такого состояния:

 sendmail /usr/local/sbin/exim send-mail /usr/local/sbin/exim mailq /usr/local/sbin/exim -bp newaliases /usr/local/sbin/exim -bi hoststat /usr/local/sbin/exim purgestat /usr/local/sbin/exim

Зададим параметры запуска Exim. Кстати, не стоит забывать про необходимость останова штатного Sendmail перед запуском Exim.

# echo ‘# Mail Server’ >> /etc/rc.conf
# echo ‘sendmail_enable="NONE"’ >> /etc/rc.conf
# echo ‘exim_enable="YES"’ >> /etc/rc.conf
# killall sendmail
# sh /usr/local/etc/rc.d/exim start

Если не напутать, то Exim должен корректно запуститься. После успешного запуска Exim-а в maillog-е можно обнаружить такую запись:

Aug  9 02:46:30 billing exim[93613]: exim 4.76 daemon started: pid=93613, -q30m, listening for SMTP on [127.0.0.1]:25 [91.221.84.10]:25 and for SMTPS on [127.0.0.1]:465 [91.221.84.10]:465

Выполним тестовою отправку письма, выполнив SMTP-диалог:

Просмотрим в логах "судьбу" письма…

# cat /var/log/maillog | grep 1QqZsP-000PQO-Se
Aug  9 03:09:06 billing exim[97736]: 1QqZsP-000PQO-Se <= root [at] ispalternativa [dot] net [dot] ua H=(mail.ispalternativa.net.ua) [127.0.0.1] P=esmtp S=368 from <root [at] ispalternativa [dot] net [dot] ua> for muff [at] ispalternativa [dot] net [dot] ua
Aug  9 03:09:06 billing exim[97759]: 1QqZsP-000PQO-Se => muff <muff [at] ispalternativa [dot] net [dot] ua> R=virtual_localuser T=local_delivery
Aug  9 03:09:06 billing exim[97759]: 1QqZsP-000PQO-Se Completed

Кажется пора поздравлять себя с полноценным почтовым сервером. Следующий шаг — настройка Dovecot-а, чтобы пользователи смогли забрать почту с сервера.

А пока советую ознакомиться с этим инструментом, и определить все ли в порядке с SMTP-сервером. У меня оказалось все в порядке.

www.muff.kiev.ua

Exim — это так называемый MTA ( Mail Transfer Agent ), агент передачи сообщений, в просторечии — почтовик или почтовый сервер, использующийся в операционных системах Unix. Распространяется по свободной лицензии GPL, то есть доступен для распространения, использования и модификации. Exim, весьма распространен и в некоторых операционных системах является почтовым сервером по умолчанию.

ID сообщений и spool файлы

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

Получение базовой информации по Exim

Вывести количество сообщений в очереди:

 root@localhost# exim -bpc 

Печать списка сообщений в очереди. Выводятся, время постановки в очередь, размер, ID сообщения, отправитель, получатель:

 root@localhost# exim -bp 

Печать суммарной информации. Выводимые колонки: количество, объем, старейшее, последнее, домен.

 root@localhost# exim -bp | exiqsumm 

Чем в данный момент занимается Exim:

 root@localhost# exiwhat 

Тестирование маршрута доставки до указанного адреса:

 root@localhost# exim -bt alias@localdomain.com user@thishost.com  <-- alias@localdomain.com  router = localuser, transport = local_delivery root@localhost# exim -bt user@thishost.com user@thishost.com  router = localuser, transport = local_delivery root@localhost# exim -bt user@remotehost.com  router = lookuphost, transport = remote_smtp  host mail.remotehost.com [1.2.3.4] MX=0 

Эмитировать SMTP транзакцию из командной строки, как если-бы сообщение пришло с указанного IP адреса. При этом будет показано прохождение и срабатывание проверок, фильтров и листов доступа (ACL). На самом деле, никакое сообщение никуда доставлено не будет.

 root@localhost# exim -bh 192.168.11.22 

Листинг всех настроек конфигурации exim:

 root@localhost# exim -bP 

Поиск очереди с помощью утилиты exiqgrep

Стандартная поставка сервера Exim включает в себя утилиту для поиска по очередям — exiqgrep, это самый оптимальный путь для решения данной задачи. Если вы используете конвейер команд, например из exim -bp в awk, grep, cut и т.д., вы просто усложняете себе жизнь. Различные ключи команды exiqgrep, позволяют достаточно тонко настроить критерии поиска. Ключ -f используется для поиска сообщений конкретного отправителя

 root@localhost# exiqgrep -f [luser]@domain 

Ключ -r используется для поиска сообщений для определенного адресата

 root@localhost# exiqgrep -r [luser]@domain 

Ключ -o указывает искать сообщения, старее, указанного количества секунд. В примере, сообщения старее 1 дня:

 root@localhost# exiqgrep -o 86400 [...] 

Ключ -y ищет сообщения свежее указанного количества секунд. В примере, найти сообщения, пришедшие в течении последнего часа:

 root@localhost# exiqgrep -y 3600 [...] 

Ключ -s позволяет искать по размеру сообщения, совпадающего с заданным регулярным выражением:

 root@localhost# exiqgrep -s '^7..$' [...] 

Для поиска только среди заблокированных( замороженных ) сообщений, используйте ключ -z, или -x для поиска только среди не заблокированных. Еще несколько ключей отвечающих за вывод результатов поиска Вывести только ID сообщения, в одном из вышеупомянутых вариантов поиска

 root@localhost# exiqgrep -i [ -r | -f ] ... 

Печатать счетчик сообщений при одном из вышеприведенных вариантов поиска:

 root@localhost# exiqgrep -c ... 

Вывести только идентификатор всей очереди:

 root@localhost# exiqgrep -i 

Управление очередями сообщений

Основной бинарник Exim ( /usr/sbin/exim ), используется с различными ключами для управления сообщениями в очереди. Многие ключи, подразумевают указание одного или более ID сообщения в командной строке, как раз тут вам и пригодится команда exiqgrep -i, которая была упомянута выше. Запуск очереди:

 root@localhost# exim -q -v 

Запуск очереди только для локальных доставок:

 root@localhost# exim -ql -v 

Удалить сообщение из очереди:

 root@localhost# exim -Mrm  [  ... ] 

Очистит все заблокированные сообщения из очереди:

 root@localhost# exipick -zi | xargs exim -Mrm 

Очистит все сообщения из очереди:

 root@localhost# exipick -i | xargs exim -Mrm  

Заблокировать( заморозить ) сообщение:

 root@localhost# exim -Mf  [  ... ] 

Разблокировать сообщение:

 root@localhost# exim -Mt  [  ... ] 

Доставить сообщение, вне зависимости от состояния блокировки или времени повторной доставки:

 root@localhost# exim -M  [  ... ] 

Доставить сообщение, только если достигнуто время для повторной доставки:

 root@localhost# exim -Mc  [  ... ] 

Принудительно остановить сообщение с формулировкой «отменено администратором»:

 root@localhost# exim -Mg  [  ... ] 

Удалить все заблокированные сообщения:

 root@localhost# exiqgrep -z -i | xargs exim -Mrm 

Удалить все сообщения, старше 5 дней (86400 * 5 = 432000 секунд):

 root@localhost# exiqgrep -o 432000 -i | xargs exim -Mrm 

Заблокировать все письма от указанного отправителя:

 root@localhost# exiqgrep -i -f luser@example.tld | xargs exim -Mf 

Просмотреть заголовки сообщений:

 root@localhost# exim -Mvh  

Просмотреть тело сообщений:

 root@localhost# exim -Mvb  

Просмотр логов сообщения:

 root@localhost# exim -Mvl  

Добавить получателя в сообщение:

 root@localhost# exim -Mar  
[
... ]

Редактировать отправителя сообщения:

 root@localhost# exim -Mes  

Листы контроля доступа (Access Control List, ACL)

Exim предоставляет возможность использовать, листы контроля доступа (ACL) на различных этапах SMTP передачи. Условия ACL назначаются в конфигурационном файле exim.conf. Начать имеет смысл с HELO.

 # Назначить ACL для использования после команды HELO acl_smtp_helo = check_helo  # Условия проверки check_helo для ACL: check_helo:   deny message = Gave HELO/EHLO as "friend"  log_message = HELO/EHLO friend  condition = ${if eq {$sender_helo_name}{friend} {yes}{no}}   deny message = Gave HELO/EHLO as our IP address  log_message = HELO/EHLO our IP address  condition = ${if eq {$sender_helo_name}{$interface_address} {yes}{no}}   accept  

Используйте проверку HELO на свой страх и риск. Сейчас HELO не имеет такого большого значения в общей схеме SMTP, так что не стоит сильно доверять его содержимому. Не только спамеры используют строку HELO, вы будете удивлены сколько нормальных сообщений может приходить с кривым HELO. Спамерам не составит труда отправлять сообщения с легальной строкой HELO а не писать там «я спамер», так что много спама вы на этом не отсеете.

Далее, вы можете провести проверку по отправителю или удаленному хосту. В примере показано как фильтровать по содержимому, идущему после команды RCPT TO. Если прием сообщения будет отклонен в этом месте, вы получите больше данных в логах, нежели при блокировке по MAIL FROM.

 # Назначит проверку содержимого после RCPT TO acl_smtp_rcpt = check_recipient  # Условия для check_recipient ACL check_recipient:   # [...]   drop hosts = /etc/exim_reject_hosts  drop senders = /etc/exim_reject_senders   # [ Probably a whole lot more... ] 

В приведенном примере для блокировки используются два текстовых файла. В файл /etc/exim_reject_hosts, значения добавляются в виде: имя_хоста/IP_адрес, в файл /etc/exim_reject_senders в виде адреса отправителя, по одной записи в строке. Кроме того, можно сканировать содержимое сообщения, на предмет совпадения с регулярным выражением. Имейте в виду, это дает дополнительную нагрузку на процессор, особенно на больших сообщениях.

 # Назначить ACL для использования после команды DATA acl_smtp_data = check_message  # Условия проверки для check_messages ACL check_message:   deny message = "Sorry, Charlie: $regex_match_string"  regex = ^Subject:: .*Lower your self-esteem by becoming a sysadmin   accept   

Исправление SMTP аутентификации для pine

В случае, если pine не может использовать аутентификацию на сервере Exim, возвращая сообщение «unable to authenticate», без запроса на ввод пароля, нужно добавить в exim.conf следующие строки.

  begin authenticators   fixed_plain:  driver = plaintext  public_name = PLAIN  server_condition = "${perl{checkuserpass}{$1}{$2}{$3}}"  server_set_id = $2 > server_prompts = : 

Некоторое время назад, данная проблема имела место быть в CPanel, на текущий момент этот недочет исправлен.

Запись в лог файл заголовка Subject

Один из самых полезных хаков конфигурации Exim. Добавление в exim.conf приведенной строки, позволит писать в лог файл строку subject, писем проходящих через сервер. Это сильно помогает при решении проблем в процессе настройки сервера, а так-же дает дополнительные критерии для отсева спама.

 log_selector = +subject 

Отключение identd

Честно говоря не думаю что протокол identd был когда либо очень полезен. Identd опирается на подключающийся хост, что-бы подтвердить идентификацию ( System UID ), удаленного пользователя, владельца процесса, устанавливающего сетевое соединение. Это может быть в определенной степени полезно в мире системных оболочек и IRC пользователей, но уж никак не на нагруженном почтовом сервере, где пользователем процесса зачастую является просто какой-нибудь «mail», и за этим может быть любой другой MTA. В итоге куча накладных расходов, нулевой результат, лишь задержки identd запросов и как следствие отказы и таймауты. Можно запретить Exim делать подобные запросы, установив таймаут 0 секунд в exim.conf.

 rfc1413_query_timeout = 0s 

Отключение блокировки вложений

Что-бы отключить блокировку исполняемых вложений, что CPanel делает по умолчанию, правда не предоставляя при это контроля «для каждого домена», следующий блок нужно добавить в начало файла /etc/antivirus.exim:

 if $header_to: matches "example.com|example2.com" then  finish endif 

Поиск в журнальных файлах с помощью exigrep

Утилита exigrep ( не путайте с exiqgrep, использующейся для поиска в очереди ), используется для поиска по лог файлам. Например exigrep может вывести все записи из лог файла с совпадающим ID сообщения, что довольно удобно, учитывая что каждое сообщение занимает 3 строки в лог файле. Поиск сообщений отправленных с определенного IP адреса:

 root@localhost# exigrep '<= .* [12.34.56.78] ' /path/to/exim_log 

Поиск сообщений отправленных на определенный IP адрес:

 root@localhost# exigrep '=> .* [12.34.56.78]' /path/to/exim_log 

Данный пример ищет сообщения содержащие символы «=>», и отправленные на адрес «user@domain.tld», далее по конвейеру, результат передается команде grep, которая из полученного результата выбирает строки, содержащие «<=» с информацией об отправителе, почтовом адресе, IP адресе, размере сообщения, ID сообщения и заголовок subject, если логгирование этой строки включено.

 root@localhost# exigrep '=> .*user@domain.tld' /path/to/exim_log | fgrep '<=' 

Генерировать из лог файла и показать статистику Exim:

 root@localhost# eximstats /path/to/exim_mainlog 

То-же что и выше но с более подробными данными:

 root@localhost# eximstats -ne -nr -nt /path/to/exim_mainlog 

Аналогично но за определенный день:

 root@localhost# fgrep YYYY-MM-DD /path/to/exim_mainlog | eximstats 

В качестве дополнения Удалить все сообщения в очереди, содержащие в теле, определенную строку:

 root@localhost# grep -lr 'a certain string' /var/spool/exim/input/ |   sed -e 's/^.*/([a-zA-Z0-9-]*)-[DH]$/1/g' | xargs exim -Mrm 

Командой выше, мы проверяем содержимое каталога /var/spool/exim/input/, в поисках файлов очереди, содержащих определенную строку в теле сообщения, поскольку команда exiqgrep не умеет просматривать тело сообщений. Если вы решите удалить найденные файлы напрямую, ЭТО БУДЕТ НЕ ПРАВИЛЬНО, используйте предназначенные для этого команды exim. Если вывод используемой команды слишком длинный, например ID сообщений при exiqgrep -i, которые нужно передать дальше по конвейеру команде exim, может быть превышено количество аргументов командной строки вашей системной оболочки. В этом случае передавайте результат поиска через конвейер, команде xargs, которая будет обрабатывать результаты ограниченными порциями. Например удалим тысячи сообщений, отправленных с адреса joe@example.com:

 root@localhost# exiqgrep -i -f '' | xargs exim -Mrm  

После того как вы внесли изменения в файл конфигурации, необходимо перезапустить exim, или послать рабочему процессу сигнал SIGHUP, что-бы он перечитал конфигурационный файл и изменения вступили в силу. Предпочтительней естественно отправить сигнал, нежели перезапускать приложение.

 root@localhost# kill -HUP `cat /var/spool/exim/exim-daemon.pid` 

vds-admin.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector