[exim] Failover (+ by pass) для av_scanner/spamd_address

В данной статье расскажу о повышении отказоустойчивости работы почты в случае проблем с антивирусом и антиспамом. Содержание будет разбито на 2 части: как использовать несколько экземпляров и как сделать by pass, если так случилось, что все экземпляры недоступны.

FailOver av_scanner

Согласно документации, мы можем использовать сколь-угодно экземпляров только для tcp socket, которые отделяются между собой разделителем (двоеточие). Можно так же использовать переменные (раскрываются до применения). Нельзя миксовать tcp socket и unix socket. Нельзя использовать несколько unix socket. Вот несколько примеров:

av_scanner = clamd:192.0.2.3 1234
av_scanner = clamd:192.0.2.3 1234:local
av_scanner = clamd:192.0.2.3 1234 retry=10s
av_scanner = clamd:192.0.2.3 1234 : 192.0.2.4 1234
av_scanner = clamd:/var/run/clamav/clamd

где retry означает, через сколько будет выполнена вторая (и только одна) попытка, local – означает, что exim передаст имя файла антивирусу, то есть, по сути, получается вместо tcp socketunix socket. Зачем это надо – неясно ))

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

FailOver spamd_address

Тут практически тоже самое, но есть отличия: можно миксовать tcp socket и unix socket. Так же можно указывать диапазон портов в tcp socket, который будет опрашиваться строго в указанном порядке. Всего можно указать до 32 экземпляров. Некоторые примеры:

spamd_address = 192.0.2.3 783 : 192.0.2.4 783
spamd_address = /var/run/spamd.sock : 10.1.5.2 783
spamd_address = 192.0.2.3 100-783 : 192.0.2.4 783

Доступны такие опции

pri=priority – выбор приоритета (выше – больше, по умолчанию – 1)
weight=value – смещение выбора в случае одинаковых приоритетов, так как сервера с одним и теми же приоритетами запрашиваются случайно (по умолчанию – 1)
time=start-end – использовать строго в этом диапазоне времени (например, только рабочее время 9-18)
retry=timespec – через сколько сделать вторую попытку
tmo=timespec – таймаут при попытке подключения
variant=rspamd – использовать протокол rspamd вместо протокола spamassassin

defer_ok

Если так случилось, что все av_scanner / spamd_address оказались недоступны (или вернули ошибки), письмо складывается в очередь с соответствующим сообщением в лог. Если для нас это не критично и нужно что бы письмо обязательно было доставлено адресату, можно использовать опцию defer_ok. Вот пример для malware проверки:


malware = * / defer_ok / tmo=10s

Где tmo – таймаут на подключение.

А вот пример для spamd:

deny spam = Debian-exim/defer_ok
     message = This message was classified as SPAM

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *