Tag Archives: Exim

Exim стресс-тест на 100 000 сообщений в очереди

Однажды утром на почтовом сервере Exchange обнаружили более 100 000 сообщений в очереди. Не суть, как они там оказались. Суть в том, что для удаления сообщений из очереди ушло примерно 4-5 часов, средствами PowerShell. Выборка из очереди 20 000 записей – продолжалась более 30 минут… до конца не дождались, уменьшили количество до 1 000 потом 2 000… но запросы все равно выполнялись очень медленно.

Делаю тест, дабы понять – как будет вести себя Exim в подобной ситуации, какие ожидают временные потери.
Continue reading

Exim заметки

Ошибка: no immediate delivery: more than 10 messages received in one connection
Решение: в конфиге

smtp_accept_queue_per_connection = 50

Отключаем IPV6

# добавляем в конфиг
disable_ipv6 = true

Eximstat
Linux: Debian 8

echo -e "#"'!'"/bin/sh\neximstats -nr -nt -tnl -include_original_destination -bydomain -byemail /var/log/exim4/main.log | mail -s "WDM: EXIM statistics"  [email protected]\n#" > /etc/cron.daily/eximstat
chmod +x /etc/cron.daily/eximstat

Exim blacklist

Локальний BLACKLIST по отправителю

“LIMIT 1” – обязательно.

acl_check_rcpt:
# ...
deny
    message   = SPAM blocked. Sender is in blacklist
    senders   = ${lookup mysql{SELECT '$sender_address' \
                    FROM `blacklist_sender_address` \
                    WHERE instr('$sender_address',`address`)>0 LIMIT 1} \

Таблицы

CREATE TABLE IF NOT EXISTS `blacklist_sender_address` (
  `address` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Exim blackhole

blackhole – инструмент EXIM на уровне роутеров, позволяющий выкидывать письма, без DENY ответа отправителю.
Использую в случаях:
– сотрудники зарегистрировались где-попало на служебные ящики и давно уволились. выкидываем их письма.
– Exchange пересылает письма сотрудников на другой домен (после перевода), а тот почтовик их отвергает после проверки SPF.

Получатель

CREATE TABLE IF NOT EXISTS `blackhole_recipient` (
  `recipient` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Continue reading

Exim правила повторов

В кофигурации по умолчанию имеем:

begin retry
# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,5m; G,16h,30m,1.5; F,1d,4h

Означают:
F,2h,5m : повторять каждые 15 минут, продолжать до 2 часов.
G,16h,30m,1.5 : повторять каждые 30 минут, а потом умножать время на 1.5, продолжать до 16 часов.
F,4d,4h : повторять каждые 4 часов, продолжать до 4-х дней.

Проверка правил повторов:

# exim -brt [отправитель или домен отправителя]
exim -brt [email protected]

Развернутое описание : на lissyara.su

Postfixadmin для EXIM-а

FreeBSD 10, Postfixadmin 2.3.7 для EXIM-а создает папки в с относительным именем.
Решение “в лоб”, правим файл create-mailbox.php:

        else if ($CONF['domain_path'] == "YES")
        {
            if ($CONF['domain_in_mailbox'] == "YES")
            {
                // Было: $maildir = $fDomain . "/" . $fUsername . "/";
                $maildir = "/var/mail/exim/".$fDomain . "/" . $fUsername . "/";
            }
            else
            {
                // Было: $maildir = $fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
                $maildir = "/var/mail/exim/".$fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
            }
        }

FreeBSD 10 Exim Dovecot RoundCube Spamassasin

FreeBSD 10.0
domain.com – имя внешнего домена
В DNS:
A – mx.domain.com
MX – mx.domain.com
A – mail.domain.com – для настройки клиентов у пользователей
CNAME – webmail.domain.com – для web-доступа пользователей

localhost.localdomain – имя хоста
В DNS:
CNAME mail.localdomain

Конфигурацию поднимаем с работающего ранее Exim 4.73.
Continue reading

Exim роутеры

Копируем входящие и исходящие сообщения
В конфиге первым роутером (сразу после):

begin routers

Вставляем:

copy_message:
  driver = redirect
  unseen
  data = [email protected]

Можно добавить условия

condition = ${if match{$sender_address}{<user1>|<user2>}{yes}{no} } 

Exim commands

# Number of messages in queue
exim -bpc

# Посмотрим, что в очереди
exim -bpu

# Посмотрим, что в очереди в разрезе доменов
exim -bp | exiqsumm

# Толкнуть очередь
exim -qf
exim -qff

# Толкнуть очередь c отладкой (-v)
exim -q -v

# Поиск к очереди по отправителю
exiqgrep -f  [email protected] 

# Поиск к очереди по получателю
exiqgrep -r [email protected] 

# Очистка очереди от замороженных сообщений:
exipick -zi | xargs exim -Mrm
exiqgrep -zi | xargs exim -Mrm

# full clear queue
exipick -i | xargs exim -Mrm
exiqgrep -i -r | xargs exim -Mrm

# Удалить сообщение из очереди
exim -Mrm {MESSAGE-ID}

# Remove all messages from <[email protected]>
exiqgrep -i -f <[email protected]> | xargs exim -Mrm

# Удаление из очереди писем содержащих "domain.com" в отправителе ИЛИ получателе
exim -bpr | grep "domain.com" | awk '{print $3}' | xargs exim -Mrm

# Удаление из очереди писем от/на ПУСТОЙ адреса
exim -bpr | grep "<>" | awk '{print $3}' | xargs exim -Mrm


# ----- Commands for Message
# show header 
exim -Mvh {MESSAGE-ID}
# show body
exim -Mvb {MESSAGE-ID}
# show log
exim -Mvl {MESSAGE-ID}


# Тестирование маршрута доставки
# Внешний получатель
exim -bt [email protected]
# А так получится локальный. Очень полезный результат:
exim -bt root

# Проверка правил повтора
exim -brt [адрес отправителя]

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

exim -bV

Вывести все конфигурационные опции:

exim -bP