Устанавливаем AVP 3.x на Linux + Sendmail(8.11.6)

Предварительно советую скачать как минимум sendmail-8.11.6 SRPMS или tgz например:
sendmail-8.11.6-15.src.rpm
procmail-3.22-5.src.rpm
устанавливаем:
rpm -iv sendmail-8.11.6-15.src.rpm
rpm -iv sendmail-8.11.6-15.src.rpm
или
rpm -Uvh sendmail-8.11.6-15.src.rpm
rpm -Uvh sendmail-8.11.6-15.src.rpm
последний вариант предпочтительней, затем применяем все патчи и собираем из sources sendmail и procmail

Примечание: после сборки sendmail и procmail:

1) остановите работу почтовой системы:
kill -TERM `ps axuww | grep sendmail | grep accepting | grep -v grep | awk  '{ print $2}'`
или
killall -TERM sendmail
и только теперь производите make install или sh Build install для procmail и sendmail.

Лично я после этого копирую директорию cf в /usr/local/share/sendmail/cf и использую ее в inclde sendmail.mc:
include(`/usr/local/share/sendmail/cf/m4/cf.m4')
или альтернативно:
m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 myconfig.mc > myconfig.cf
для чего обычно делаю простейший скрипт docf
можете его скачать и сделать исполняемым
chmod 755 docf
вызывается так
docf name.mc filename.cf
Теперь создадим конфигурацию mc для sendmail: (данная конфигурация просто некое обобщение, но она вполне рабочая, в качестве LDA в ней используется procmail)
divert(-1) 
dnl This is the sendmail macro config file. If you make changes to this file, 
dnl you need the sendmail-cf rpm installed and then have to generate a 
dnl new /etc/sendmail.cf by running the following command: 
dnl 
dnl        m4 /etc/mail/sendmail.mc > /etc/sendmail.cf 
dnl 
dnl в include укажите ваш путь к к cf.m4 
include(`/usr/local/share/sendmail/cf/m4/cf.m4') 
VERSIONID(`linux setup for Red Hat Linux')dnl 
OSTYPE(`linux') 
dnl если вы не хотите сами распихивать почту, используйте SMART_HOST 
dnl define(`SMART_HOST',`mail.domain.ru') 
define(`confDEF_USER_ID',``8:12'')dnl 
dnl UUCP_RELAY BITNET_RELAY можно вовсе выкинуть 
undefine(`UUCP_RELAY')dnl 
undefine(`BITNET_RELAY')dnl 
define(`confAUTO_REBUILD')dnl 
define(`confTO_CONNECT', `1m')dnl 
define(`confTRY_NULL_MX_LIST',true)dnl 
dnl можете выкинуть DONT_PROBE_INTERFACES - зависимая вещь, читайте 
dnl /path/sendmail_sources/cf/README 
define(`confDONT_PROBE_INTERFACES',true)dnl 
dnl PROCMAIL_MAILER_PATH всегда задается ПЕРЕД FEATURE(`local_procmail') 
dnl PROCMAIL_MAILER_PATH не задавать если путь совпадает с default значением 
dnl см README или параметры для вашей системы: 
dnl cf/cf/generic-yoursystem.mc cf/feature/local_procmail.m4 mailer/procmail.m4 
dnl ostype/yoursystem.m4 
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl 
define(`ALIAS_FILE', `/etc/aliases')dnl 
dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl 
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl 
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun,noetrn')dnl 
dnl некоторые ограничения для spam в заголовках 
define(`confMAX_HEADERS_LENGTH',16384) 
define(`confMAX_MIME_HEADER_LENGTH', `256/128') 
define(`confNO_RCPT_ACTION', `add-to-undisclosed') 
dnl ограничение максимального размера письма 
define(`confMAX_MESSAGE_SIZE', `50000') 
define(`confCONNECTION_RATE_THROTTLE',3) 
define(`confMAX_RCPTS_PER_MESSAGE', `25') 
dnl создаем нужный нам prompt sendmail'а telnet localhost 25 и увидите его 
define(`confSMTP_LOGIN_MSG',`Lavr-Antispam-MTA; "Non-authorized relaying DENIED." ') 
dnl define(`confAUTH_OPTIONS', `A')dnl 
dnl TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
dnl define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
define(`confTO_QUEUEWARN', `4h')dnl 
define(`confTO_QUEUERETURN', `5d')dnl 
define(`confQUEUE_LA', `12')dnl 
define(`confREFUSE_LA', `18')dnl 
FEATURE(nouucp,reject) 
FEATURE(delay_checks)dnl 
dnl use anti-spam dnsbl feature 
dnl подключаем некоторые free antispam базы 
FEATURE(`dnsbl', `relays.ordb.org', `Spam bloked - see http://ordb.org/')dnl 
FEATURE(dnsbl,`inputs.orbz.org', `Input Spam bloked - see http://orbz.org/')dnl 
FEATURE(dnsbl,`bl.spamcop.net', `Spam blocked - see http://spamcop.net/bl.shtml?$&{client_addr}')dnl 
FEATURE(dnsbl,`ex.dnsbl.org', `Spam bloked - see http://www.dnsbl.org/')dnl 
FEATURE(dnsbl, `relays.osirusoft.com', `Spam bloked - see http://relays.osirusoft.com/')dnl 
dnl запрещаем MSA на 587 порту, тем кому не нравится или кто не знает что это 
FEATURE(`no_default_msa',`dnl')dnl 
dnl будьте аккуратны с SMRSH и прочитайте в его описании как разрешить работу 
dnl majordomo или других maillist 
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl 
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl 
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl 
FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl 
FEATURE(redirect)dnl 
FEATURE(always_add_domain)dnl 
FEATURE(`masquerade_envelope')dnl 
FEATURE(use_cw_file)dnl 
FEATURE(use_ct_file)dnl 
dnl FEATURE(local_procmail) 
dnl The '-t' option will retry delivery if e.g. the user runs over his quota. 
FEATURE(`local_procmail',`procmail -t -Y -a $h -d $u')dnl 
FEATURE(`blacklist_recipients')dnl 
EXPOSED_USER(`root')dnl 
FEATURE(`relay_entire_domain')dnl 
 
MAILER(local)dnl 
MAILER(smtp)dnl 
dnl примечание procmail как LDA всегда задается после smtp 
MAILER(procmail)dnl
Допустим мы все установили, создали нужную нам конфигурацию sendmail.cf, теперь необходимо в файле:

/etc/mail/local-host-names - прописать все имена локальной машины по которым она может представляться, а в файле

/etc/mail/relay-domains - все домены которые мы будем релеить

Примечание: прочтите в cf/README как FEATURE(`relay...') и access и relay-domains работают все вместе.

Теперь осталось заполнить все используемые нами maps:
- access
- userdb
- mailertable
- virtusertable
и другие если они указаны в вашей конфигурации, и для данного примера создать файл /etc/mail/trusted-users
makemap btree userdb.db < userdb
makemap hash access.db < access

Для этого можете сделать Makefile или использовать существующий если есть Базы созданы, осталось пересобрать базу aliases, варианты
- newaliases
или
- sendmail -bi
как больше нравится
на базе этого, достаточно удобного Makefile от FreeBSD для seendmail 8.11.x можно сделать свой, для своей OS, это не сложно. А на базе этого Makefile от FreeBSD для sendmail 8.12.x для своего sendmail 8.12.x.

Берем дистрибутив AVP версии 3
 - kavselinux.tgz
 
- создаем директорию куда развернем этот архив
   # cd /var/tmp 
   # mkdir /var/tmp/avptemp 
   # cd /var/tmp/avptemp 
   # tar zxvf /path/kavselinux.tgz 
   # ls -la 
   # итого 3964 
   # drwxr-xr-x   3 root     root         4096 Jun 15 19:52 . 
   # drwxr-xr-x   6 lavr     users        4096 Jun 16 06:02 .. 
   # -rwxr-xr-x   1 root     root       487080 Jul  1  2001 kavinstaller 
   # -rw-r--r--   1 501      501        199127 Jul 31  2001 kavkeeper-postfix-linux-3.5.136.tgz 
   # -rw-r--r--   1 501      501        194633 Jul 31  2001 kavkeeper-qmail-linux-3.5.136.tgz 
   # -rw-r--r--   1 501      501        200488 Jul 31  2001 kavkeeper-sendmail-linux-3.5.136.tgz 
   # -rw-r--r--   1 root     root      2940718 Jul 24  2001 kavwslinux.tgz 
   # drwxr-xr-x   4 root     root         4096 Jul  1  2001 locale 
   # 
   # ./kavinstaller 
   
отвечаем на вопросы: говорим что из дистрибутива устанавливать, а что нет, и задаем нужный нам путь куда будет установлен AVP (by default /opt/AVP)

примечание: если у вас до этого был установлен AVP и вас смущают вопросы о том что найдена другая версия, срубите установку и вычистите ранее установленную версию, не забывайте удалять .AVP в домашней директории пользователя root (часто бывает что там сохраняются неудачные настройки, но по скольку мы тестируем от root'а, то могут быть проблемы)

Допустим что все как-то худо бедно встало
   # ls -la /opt/AVP 
	drwxr-xr-x   9 root     root         4096 Jun 16 07:35 . 
	drwxr-xr-x  23 root     root         4096 Jun 16 07:02 .. 
	-rw-r--r--   1 root     root          182 Jun 16 00:04 AvpUnix.ini 
	-rw-r--r--   1 root     root          997 Jun 15 21:21 AvpUnix.key 
	drwxr-xr-x   2 root     root         4096 Jun 15 21:12 BootDiskImg 
	drwxr-xr-x   6 root     root         4096 Jun 15 21:12 DaemonClients 
	drwxr-xr-x   3 root     root         4096 Jun 15 21:12 Docs 
	drwxr-xr-x   4 root     root         4096 Jun 15 21:12 EtcScripts 
	drwxr-xr-x   2 root     root         4096 Jun 15 21:12 Locale 
	drwxr-xr-x   2 root     root         4096 Jun 15 21:12 Tools 
	-rw-r--r--   1 root     root         1863 Jun 15 21:12 Updates.lst 
	-rw-r--r--   1 root     root        13662 Jun 15 21:12 Whats.new.us 
	-rw-r--r--   1 root     root         1963 Jun 16 00:03 defUnix.prf 
	-rwxr-xr-x   1 root     root         1843 Jun 16 07:35 kavd.sh 
	-rwxr-xr--   1 root     root       617800 Jun 16 06:34 kavdaemon 
	-rwxr-xr-x   1 root     root       430964 Jun 15 23:50 kavkeeper 
	-rw-r--r--   1 root     root        10920 Jun 16 04:28 kavkeeper.ini 
	-rwxr-xr-x   1 root     root       588968 Jun 15 21:12 kavscanner 
	-rwxr-xr-x   1 root     root         1000 Jun 15 21:12 kavscanner.sh 
	-rwxr-xr-x   1 root     root       898440 Jun 15 21:12 kavtuner 
	-rwxr-xr-x   1 root     root          433 Jun 15 21:12 kavtuner.sh 
	-rwxr-xr-x   1 root     root       423660 Jun 15 21:12 kavupdater 
	-rwxr-xr-x   1 root     root         1958 Jun 15 21:12 kavupdater.sh 
	drwxr-xr-x   3 root     root         4096 Jun 15 22:28 kavkeeper
первое что делаем, проверяем свою лицензию cd /opt/AVP
сюда копируем свой key-file, например как AvpUnix.key
правим файл AvpUnix.ini
cat AvpUnix.ini
------------------------------- AvpUnix.ini ------------------------------- 
   [AVP32] 
   DefaultProfile=/opt/AVP/defUnix.prf 
   LocFile=None 
 
   [Configuration] 
   KeysPath=/opt/AVP 
   KeyFile=AvpUnix.key 
   BasePath=/opt/AVP 
   SetFile=avp.set 
   SearchInSubDir=No 
   UpdatePath=ftp://ftp.avp.ru/updates/ 
------------------------------- AvpUnix.ini ------------------------------- 
   #
можно взять AvpUnix.ini этот, теперь начинается самое интересное, не знаю где и что криво у разработчиков Kaspersky Lab., но лучше забить на их startup файлы из EtcScripts/init.d/ чтобы не трахаться почему kavdaemon работает как DEMO с нормальной лицензией и почему он ее не нашел, и нужно ли задавать полный путь в AvpUnix.ini к AvpUnix.key в KeyFile. Итак EtcScripts/init.d/
   # ls -la /opt/AVP/EtcScripts/init.d/  
   итого 24 
   drwxr-xr-x   2 root     root         4096 Jun 15 21:57 . 
   drwxr-xr-x   4 root     root         4096 Jun 15 21:12 .. 
   -rwxr-xr-x   1 root     root         1292 Jun 15 21:12 kavdaemon.debian 
   -rwxr-xr-x   1 root     root         2071 Jun 15 21:57 kavdaemon.rh 
   -rwxr-xr-x   1 root     root          138 Jun 15 21:12 kavdaemon.sl 
   -rwxr-xr-x   1 root     root         1994 Jun 15 21:12 kavdaemon.suse 
   #
ВСЕ кривое, скрипты, документация, mc и m4 файлы, везде очепятки, противоречия, исключительно грязно сделано для коммерческого продукта :(

Чтобы не пришлось ковырять скрипты и трассировать kavdaemon, просто пишете свой пускач скрипт kavdaemon (остальные не рассматриваем за ненадобностью)
примечание: я взял от FreeBSD и кое-что чуть-чуть изменил
------------------------------- kavstart ---------------------------------- 
#!/bin/sh 
# 
# kavdaemon             Start/Stop the kavdaemon 
# 
 
PATH=/opt/AVP:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 
RUN_DAEMON="Y" 
RUN_KAVUCC="N" 
RUN_HTTPD="N" 
PREFIX=/opt/AVP 
HCONF=/etc/AVP/_httpd.conf 
 
case "$1" in 
start)   
        [ x${RUN_KAVUCC} = xY ] && ${PREFIX}/kavucc > /dev/null  
        && echo -n ' kavucc' && UCCRUNNING=Y 
         
        if [ x${RUN_DAEMON} = xY ]; then 
                cd ${PREFIX} 
                ./kavdaemon ${DPARMS} > /dev/null 
                echo -n ' kavdaemon' 
                KAVDRUNNING=Y  
        fi 
 
        [ x${RUN_HTTPD} = xY ] && ${PREFIX}/_httpd -conf ${HCONF}  
        && echo -n ' _httpd' && _HTTPDRUNNING=Y  
 
        ;;
stop) 
        [ -S /var/run/kavucc.ctl ] && ${PREFIX}/kavucc -k > /dev/null  
        && echo "kavucc terminated" 
 
        if [ -f /var/run/_httpd.pid ]; then 
            kill -TERM `head -1 /var/run/_httpd.pid`  
            && echo "kavwebtuner terminated" 
            rm -f /var/run/_httpd.pid 
        fi 
 
        [ -f /var/run/AvpPid ] && ${PREFIX}/kavdaemon -ka > /dev/null  
        && echo "kavdaemon terminated" 
        ;;
*) 
        echo "Usage: `basename $0` {start|stop}" >&2 
        ;;
esac 
 
exit 0 
---------------------------------------------------------------------------
Итак, практически все готово, снова вернемся к пробному запуску и проверке лицензии, предвариательно необходимо закачать файлы баз, для чего в системе уже должен быть установлен wget и доступен в пути запуска: переменная $PATH:

создаем директорию /opt/AVP/Base
скачиваем базы
   # cd /opt/AVP 
   # ./kavupdater -ui=http://www.avp.ru/updates/ -o -b /opt/AVP/Base -kb 
   или
# ./kavupdater -uik=ftp://www.avp.ru/updates/ -o -b /opt/AVP/Base -kb
все, базы у нас, есть все необходимое для пробного запуска kavdaemon, но мы закачали базы в директорию /opt/AVP/Base и там же находится файл avp.set, значит необходимо внести изменения в файле AvpUnix.ini. Вот тут самое интересно, если вы внесли изменения:

BasePath=/opt/AVP/Base и при запуске kavdaemon ругнулся что не может найти базы, попробуйте удалить в домашней директории ~root настроечные файлы Avp и запустить kavdaemon снова, если он говорит что не нашел avp.set, попробуйте в AvpUnix.ini задать его полный путь, если и это не помогло, свалите все updates из Base прямо в /opt/AVP/Base - в этом случае точно запуститься
   # ./kavdaemon -P -B -dl -Y 
 
+-------------------------------------------------------+  
|            Kaspersky Anti-Virus for Linux             |  
|                        (Daemon)                       |  
|         Copyright(C) Kaspersky Lab. 1998-2001         |  
|                Version 3.0  build 136                 |  
|                                                       |  
+-------------------------------------------------------+  
                   Registration info:                    
Key name      Ser. number            Price pos.             Exp. date  Trial  
AvpUnix.key   XXXX-XXXXXX-XXXXXXXX   AVP Server Suite 1Y    26.7.2002  No  
Antiviral databases have been loaded. Known records: 55599.
Теперь у нас kavdaemon демонизировался и можно его остановить
   # ./kavdaemon -ka
Все готово к запуску AvpDaemon'а: kavdaemon, скопируйте файл kavstart в директорию init.d и сделайте необходимые линки SXXavp и KYYavp на нужных уровнях загрузки Linux чтобы kavdaemon загружался автоматически при загрузке системы.

В RedHat стартап скрипты находятся в /etc/rc.d/init.d SXXavp должен стартовать раньше чем sendmail чтобы обеспечить работу фильтра kavkeeper.

На данный момент у нас все готово для настройки kavkeeper'а, который вы должны были уже установить: /opt/AVP/kavkeeper
   # ls -la /opt/AVP/kavkeeper 
   drwxr-xr-x   3 root     root         4096 Jun 15 22:28 . 
   drwxr-xr-x  10 root     root         4096 Jun 17 22:41 .. 
   -rw-r--r--   1 root     root         3957 Jun 15 21:13 INSTALL.cyrus 
   -rw-r--r--   1 root     root         7988 Jun 15 21:13 INSTALL.sendmail 
   -rw-r--r--   1 root     root         2739 Jun 15 21:13 WHATSNEW.ENG 
   -rw-r--r--   1 root     root         2565 Jun 15 21:13 WHATSNEW.RUS 
   -rwxr-xr-x   1 root     root       430964 Jun 15 21:13 kavkeeper 
   -rw-r--r--   1 root     root        18959 Jun 15 21:13 kavkeeper.8 
   -rw-r--r--   1 root     root        10771 Jun 15 22:28 kavkeeper.ini 
   -rw-r--r--   1 root     root        10269 Jun 15 22:01 kavkeeper.ini.orig 
   drwxr-xr-x   5 root     root         4096 Jun 15 21:13 sendmail-cf 
 
   # ls -laR /opt/AVP/kavkeeper/sendmail-cf 
   /opt/AVP/keeper/sendmail-cf/: 
   итого 20 
   drwxr-xr-x   5 root     root         4096 Jun 15 21:13 . 
   drwxr-xr-x   3 root     root         4096 Jun 15 22:28 .. 
   drwxr-xr-x   2 root     root         4096 Jun 15 21:13 cf 
   drwxr-xr-x   2 root     root         4096 Jun 15 21:13 feature 
   drwxr-xr-x   2 root     root         4096 Jun 15 21:13 mailer 
   
/opt/AVP/keeper/sendmail-cf/cf:
итого 16
drwxr-xr-x 2 root root 4096 Jun 15 21:13 . drwxr-xr-x 5 root root 4096 Jun 15 21:13 .. -rw-r--r-- 1 root root 1515 Jun 15 21:13 kav_glb.mc -rw-r--r-- 1 root root 1310 Jun 15 21:13 kav_loc.mc
два файла выше: kav_glb.mc - пример конфигурации sendmail для глобальной проверки почты через kavkeeper, а kav_loc.mc - для локальной проверки почты через kavkeeper. /opt/AVP/keeper/sendmail-cf/feature: итого 16 drwxr-xr-x 2 root root 4096 Jun 15 21:13 . drwxr-xr-x 5 root root 4096 Jun 15 21:13 .. -rw-r--r-- 1 root root 552 Jun 15 21:13 cyrus_kav.m4 -rw-r--r-- 1 root root 552 Jun 15 21:13 local_kav.m4 эти два файла необходимо скопировать в вашу /path/cf/feature директорию, у меня это /usr/local/share/sendmail/cf/feature /opt/AVP/keeper/sendmail-cf/mailer: итого 12 drwxr-xr-x 2 root root 4096 Jun 15 21:13 . drwxr-xr-x 5 root root 4096 Jun 15 21:13 .. -rw-r--r-- 1 root root 1197 Jun 15 21:13 kavkeeper.m4 этот файл необходимо скопировать в вашу /path/cf/mailer/kavkeeper.m4 у меня это /usr/local/share/sendmail/cf/mailer/kavkeeper.m4

Сразу замечание, в большинстве версий AVP в этих файлах пустые строки на самом деле НЕ ПУСТЫЕ, из-за этого могут быть неприятности при запуске sendmail, он вам сообщит об этом :)
В некоторых версиях AVP3, могут быть очепятки и разногласия, в документации будет сказано avpkeeper, а в дистрибутиве kavkeeper, соответственно и файлы препроцессора avpkeeper.m4 или kavkeeper.m4 или keeper.m4 - так что смотрите с какими именами вы копируете файлы препроцессора в директорию cf/ и какие имена файлов препроцессора используете в define и FEATURE.

Предварительно подготовим файл kavkeeper.ini:

или взять готовый kavkeeper.ini
--------------------------------- kavkeeper.ini ------------------------------ 
############################################################ 
# UNISEX KAVKEEPER 
# sendmail/local 
# sendmail/global 
# sendmail/cyrus 
# qmail 
# postfix 
############################################################ 
#You may edit any section of the .ini file. 
#The [mailer] section contains working paths  
#to the mailer programs. 
#The general format of the section line is: 
#program_name=initialization_string 
############################################################### 
[mailer] 
# 
# MTA  
# 
# for exim 
#sendmail=/usr/lib/sendmail -oi -f$f $u 
# for sendmail 
# пишем откуда и с какими ключами будет вызываться sendmail 
 
sendmail=/usr/sbin/sendmail -oi -i -f$f -- $u 
 
#sendmail=/usr/libexec/sendmail/sendmail -oi -i -f$f -- $u 
#for postfix  
#sendmail=/usr/sbin/sendmail -oi -i -f$f -- $u 
# for Qmail 
#qmail-queue=/var/qmail/bin/qmail-que 
 
# 
#  Local mailer 
# 
 
# use mail.local with sendmail 
# если в качестве LDA используется mail.local раскомментируйте эту строку 
# но проверьте правильность указания пути в linux обычно /usr/[s]bin/mail.local 
#mail.local=/usr/libexec/mail.local -f $f $u 
# use procmail with sendmail 
# пишем откуда и как будет вызываться procmail в качестве LDA 
 
procmail=/usr/bin/procmail -Y -f $f -d $u 
 
# use cyrus with sendmail (2 lines uncomment) 
#cyrus=/usr/cyrus/bin/deliver -e -m $h -- $u 
#cyrusbb=/usr/cyrus/bin/deliver -e -m $u 
# use postfix 
#procmail=/usr/sbin/sendmail -oi -f$f -i -- $u 
# if uses exim then use any local mailer ex: 
#procmail=/usr/bin/procmail -Y -f $f -d $u 
# use qmail 
#qmail-inject=/var/qmail/bin/qmail-inject 
 
############################################################## 
#The section [kavdaemon] contains options defining the  
#address that the program uses to send notifications on  
#detected viruses. 
############################################################## 
[kavdaemon] 
# kavdaemonname - address that is specified in  
# this line should be used by kavkeeper to notify  
# the administrator and the sender of the infected message. 
# задается административный адрес для уведомления о зараженных письмах 
 
kavdaemonname=root@mailrelay.domain 
 
# kavdaemonreturnpath - return address. If the notification  
# that was sent by kavkeeper to the administrator or the sender  
# will be rejected by some reasons it should be returned to  
# the specified address. If you do not need the failed  
# notification to be returned specify  <#@[]> in this line. 
 
kavdaemonreturnpath=<#@[]> 
 
############################################################## 
# The section [link] contains options defining the method  
# that should be used by kavkeeper to communicate with kavdaemon. 
############################################################## 
[link] 
# connect - defines the method of communication  
# between kavkeeper and kavdaemon:  
#   inet value defines the communication via the Internet,  
#   file - via a local file and  
#   shm - via the shared memory. 
# я проверял file и shm, с последним могут быть проблемы, в случае 
# нагруженной почтовой системы увеличьте размер Shared Memory через sysctl 
 
connect=file 
 
# timeout - time of waiting answer from kavdaemon  
# temppath - defines the directory where temporary files  
# should be stored. This option is active only if you  
# specified file or shm in the line connect. 
# !!!!!!!! The temppath directory should be included  
# into the list of directories assigned to the option  
# List in the section Location within the profile of  
# kavdaemon. Otherwise kavkeeper will not be able to  
# detect any virus in the mail messages. 
# смотрите чтобы хватило места в этой директории 
 
temppath=/tmp/kavkeeper 
 
# server - name or IP address of the server that should  
# be used by the program to communicate. This option is  
# using only if you specified inet in the line connect. 
#server=mailrelay.domain.ru 
 
# only if inet method 
#server=mailrelay.domain.ru 
 
# port - port number of server that should be used by  
# the program to communicate. This option is using only  
# if you specified inet in the line connect. 
# port=1055 
 
# only for inet method 
#port=1055 
 
# socketfile - path to the file that is used by the program  
# to communicate with the daemon process. This option is  
# using only if you specified file or shm in the line connect. 
#socketfile=/var/run/AvpCtl 
 
socketfile=/var/run/AvpCtl 
 
############################################################## 
# The section [log] contains options defines the way the  
# results should be logged. 
############################################################## 
[log] 
# usesyslog -  yes logs results into the system log. 
# в случае варианта с запуском двух sendmail: слушающего и обрабатывающего 
# очередь, необходимо использовать usesyslog=yes 
 
usesyslog=no 
 
# logfile - path to the log file storing that program  
# operation results. In this line you may also use any  
# switches of the system command date together with the  
# file name (e.g. %d, %m, %y are define day, month and  
# year, respectively). The program will save results to  
# the specified file only if you specified  no in the line usesyslog. 
 
logfile=/var/log/kavcheck=%d%m%y.log 
 
# logonlyinfected -  yes logs only the infected message  
# details. The no value logs details of all the processed messages. 
 
logonlyinfected=yes 
 
############################################################## 
# The sections [group:NAME]  
# (where NAME is the name of address group) contains options  
# defining the way the infected messages (containing outgoing  
# or incoming addresses matching members of the address group)  
# should be processed. 
# For more info about sections please reffer printed doc. 
############################################################## 
# ниже следуют группы: NOTCHECK - чью почту не проверять 
# OURNET и DEFAULT 
# 
# check = yes | no (проверять или нет почту на вирус) 
# desinfect = yes | no (дезинфецировать вирус или нет) 
# removeinfectedpart = yes | no (удалять инфицированный attachment который 
#                                невозможно проверить или нет) 
# infectedaction = NOTIFY | BLOCK | PASSIFCURED 
# NOTIFY - вставлять уведомление в вирусное письмо 
# BLOCK - блокировать 
# PASSIFCURED - дезинфецировать без уведомления получателя 
# infectednotify = адрес администратора для уведомления о вирусе 
#                  в письмо будет вставляться извещение и копия зараженного 
#                  письма 
# attachinfected = yes | no 
#                  yes - дезинфецированное письмо будет присоединено к 
# уведомлению как attachment, no - будет подсоединен недезинфецированный 
# оригинал как attachment 
# notifyfrom = yes | no - уведомлять отправителя вирусного письма 
# attachkavanswer= text | или прямо здесь набираете текст ответа, но тогда 
# в секции msg_recipient_notify добавьте строку line=$KAVANSWER 
[group:NOTCHECK] 
 
check=no 
 
#desinfect=yes 
desinfect=no 
removeinfectedpart=no 
infectedaction=NOTIFY 
infectedaction=root@mailrelay.domain.ru 
attachinfected=no 
notifyfrom=yes 
attachkavanswer=text 
#removeinfectedpart=no 
#infectedaction=NOTIFY 
#infectednotify=root@domain.ru 
#attachinfected=yes 
#notifyfrom=yes 
#attachkavanswer=text 
 
# to - address of the recipient of messages that will be  
# processed according to the group rules. You may add as  
# many strings to=  as you wish, 
# When adding the address templates you may use the character * ,  
# e.g. from=@*.ru. 
 
to=root@* 
to=root 
 
#to=vasa 
#to=peta 
 
 
[group:OURNET] 
check=yes 
desinfect=yes 
#removeinfectedpart=yes 
removeinfectedpart=yes 
infectedaction=BLOCK 
infectednotify=root@mailrelay.domain.ru 
attachinfected=no 
notifyfrom=yes 
attachkavanswer=text 
 
# from - address of the sender of messages that will be processed  
# according to the group rules. You may add as many strings 
# from= as you wish, 
# When adding the address templates you may use the character * ,  
# e.g. from=@*.ru. 
 
from=*@pccmsz.jinr.dubna.su 
to=*@pccmsz.jinr.dubna.su 
 
[group:DEFAULT] 
# check - the virus-check mode. If you specify yes the  
# program will check for virus in the messages,  
# if no - the mode will be disabled. 
 
check=yes 
 
# desinfect -  yes disinfects infected messages.  
# The no value disables the disinfecting mode. 
#desinfect=yes 
 
desinfect=yes 
 
# removeinfectedpart -  yes deletes infected attachments  
# that the program could not disinfect. The no value disables  
# this mode. This option is active only if you specified yes  
# in the lines desinfect and attachinfected. 
 
removeinfectedpart=yes 
 
#infectedaction - the way the infected message to be processed.  
#  NOTIFY - notifies on the infected message, 
#  BLOCK - blocks it,   
#  PASSIFCURED - disinfected message to the  
#  recipient without the notification on deleted viruses. 
 
infectedaction=BLOCK 
 
# infectednotify - address of the administrator that will be  
# notified on infected messages that are addressed to protected  
# users. kavkeeper will notify the administrator on all the  
# infected messages. The program inserts a report on detected  
# viruses into the notification and attaches the infected message itself. 
 
infectednotify=root@pccmsz.jinr.dubna.su 
 
# attachinfected -  yes sends the message to the user as an  
# attachment to the notification, and if you specify no the  
# attachment mode will be disabled. If you specify yes here and  
# in the desinfect line, the program will disinfect the message  
# and attach it to the notification. If the line desinfect contains  
# the no value, the infected message will be attached to the notification. 
 
attachinfected=no 
 
# notifyfrom -  yes notifies the sender of the infected message.  
# The no value disables this mode. 
 
notifyfrom=yes 
 
# attachkavanswer - defines weather the detail report from  
# kavdaemon should be included into notifications or not.  
# The text value adds the report to the notification text and 
# inserts the report as a MIME section. If you specify text  
# in this line, make sure to add the string line=$KAVANSWER  
# to the section [msg_recipient_notify]. 
 
attachkavanswer=text 
 
############################################################## 
# The [msg_sender_notify] section contains options defining  
# subject and text of the notification for the sender.  
# subject - notification subject. 
# content-type - the method the text is inserted into the notification. 
# line - notification string. 
# file - name of the file containing the text that should be  
# inserted in the notification. 
############################################################## 
[msg_sender_notify]  
subject=SENDER ! Virus found in message from you ! Lavr KAV3/Linux  
#Content-type="text/plain" 
line=You sent to user $u message with VIRUS . 
line======================================= 
line=KAV Report: 
line======================================= 
line=$KAVANSWER 
line======================================= 
line=Bye ! 
line= 
 
############################################################## 
# The [msg_recipient_notify] section contains options defining  
# subject and text of the notification for the recipient.  
# subject - notification subject. 
# content-type - the method the text is inserted into the notification. 
# line - notification string. 
# file - name of the file containing the text that should be  
# inserted in the notification. 
############################################################## 
[msg_recipient_notify]  
subject=RECIPIENT ! Virus found in message to you ! Lavr KAV3/Linux  
#Content-type="text/plain" 
line=   
line=User $f sent to you mail with virus.  
line=------------------------------------- 
line= KAV report: 
line=------------------------------------- 
line=$KAVANSWER 
line=------------------------------------- 
line=This message redirect to anton@localhost.localdomain  
line= 
 
############################################################## 
# The [msg_admin_notify] section contains options defining  
# subject and text of the notification that is sent to the  
# administrator together with attached infected messages that  
# were addressed to protected users. 
# subject - notification subject. 
# content-type - the method the text is inserted into the notification. 
# line - notification string. 
# file - name of the file containing the text that should be  
# inserted in the notification. 
############################################################## 
[msg_admin_notify]  
subject=ADMIN ! ALARM ! Virus found ! Lavr KAV3/Linux  
line=   
line=User $f send to user $u. mail with virus.  
line=------------------------------------- 
line=KAV report: 
line=------------------------------------- 
line=$KAVANSWER 
line=------------------------------------- 
line= 
------------------------------------------------------------------------------
Теперь все готово для создания файла конфигурации sendmail.cf с включением в него kavkeeper'а как фильтра который будет передавать почту kavdaemon'у для проверки и возвращать обратно sendmail'у:

Вариант 1: Использование старой технологии (KAV) для локальной или глобальной проверки почты, в данном случае запускается один sendmail.

- раскладываем взятые из /opt/AVP/kavkeeper/sendmail-cf файлы для препроцессора в наш собственный sendmail-cf

примечание: если вы собственноручно устанавливали sendmail, то должны были заранее сохранить его cf/* в удобном месте, если ставили из rpm то посмотрите в spec от rpm, если используете sendmail в системной поставке, то для разных Linux он может быть в разных местах
RH: /usr/lib/sendmail-cf 
SuSE: /usr/share/sendmail/cf
и тд 


итак, у меня sendmail-cf находится в /usr/local/share/sendmail/cf
соответственно я копирую m4 от Kaspersky Lab в
cp /opt/AVP/kavkeeper/sendmail-cf/feature/local_kav.m4 /usr/local/share/sendmail/cf/feature/ 
cp /opt/AVP/kavkeeper/sendmail-cf/sendmail-cf/mailer/kavkeeper.m4 /usr/local/share/sendmail/cf/mailer/

ну и на всякий случай запомните названия:

- local_kav.m4
- kavkeeper.m4

Пример конфигурации sendmail+kav3.mc:

(в данном примере используется SMART_HOST куда будет сваливаться вся почта по SMTP для дальнейшей обработки, в качестве LDA используется PROCMAIL)

примечание: в m4 файлах Kaspersky Lab, по умолчанию подразумевается использование пути к kavkeeper:

в соответствии с kavkeeper.m4
KAVKEEPER_MAILER_PATH=/opt/AVP/kavkeeper/kavkeeper 
KAVKEEPER_CONFIG=/opt/AVP/kavkeeper/kavkeeper.ini
в соответствии с local_kav.m4
KAV_MAILER=procmail 
------------------------------- sendmail+kav3.mc -------------------------- 
divert(-1) 
dnl This is the sendmail macro config file. If you make changes to this file, 
dnl you need the sendmail-cf rpm installed and then have to generate a 
dnl new /etc/sendmail.cf by running the following command: 
dnl 
dnl        m4 /etc/mail/sendmail.mc > /etc/sendmail.cf 
dnl 
dnl укажите в include свой путь к /path_sendmail_cf/m4/cf.m4 
include(`/usr/local/share/sendmail/cf/m4/cf.m4') 
VERSIONID(`linux setup for Red Hat Linux')dnl 
OSTYPE(`linux') 
define(`SMART_HOST',`mail.jinr.ru') 
define(`confDEF_USER_ID',``8:12'')dnl 
undefine(`UUCP_RELAY')dnl 
undefine(`BITNET_RELAY')dnl 
define(`confAUTO_REBUILD')dnl 
define(`confTO_CONNECT', `1m')dnl 
define(`confTRY_NULL_MX_LIST',true)dnl 
define(`confDONT_PROBE_INTERFACES',true)dnl 
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl 
define(`ALIAS_FILE', `/etc/aliases')dnl 
dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl 
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl 
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun,noetrn')dnl 
dnl some spam limits 
define(`confMAX_HEADERS_LENGTH',16384) 
define(`confMAX_MIME_HEADER_LENGTH', `256/128') 
define(`confNO_RCPT_ACTION', `add-to-undisclosed') 
define(`confMAX_MESSAGE_SIZE', `50000') 
define(`confMAX_RCPTS_PER_MESSAGE', `25') 
define(`confSMTP_LOGIN_MSG',`JINR-Net Lavr-Antispam-MTA; "Non-authorized relaying DENIED." ') 
dnl define(`confAUTH_OPTIONS', `A')dnl 
dnl TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
dnl define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
define(`confTO_QUEUEWARN', `4h')dnl 
define(`confTO_QUEUERETURN', `5d')dnl 
dnl три дефайна ниже настройте под себя 
define(`confQUEUE_LA', `12')dnl 
define(`confREFUSE_LA', `18')dnl 
define(`confCONNECTION_RATE_THROTTLE',3) 
FEATURE(nouucp,reject) 
FEATURE(delay_checks)dnl 
dnl use anti-spam dnsbl feature 
dnl FEATURE(`dnsbl') - mail-abuse.net worked need payment now 
dnl FEATURE(`dnsbl')dnl 
FEATURE(`dnsbl', `relays.ordb.org', `Spam bloked - see http://ordb.org/')dnl 
FEATURE(dnsbl,`inputs.orbz.org', `Input Spam bloked - see http://orbz.org/')dnl 
FEATURE(dnsbl,`bl.spamcop.net', `Spam blocked - see http://spamcop.net/bl.shtml?$&{client_addr}')dnl 
FEATURE(dnsbl,`ex.dnsbl.org', `Spam bloked - see http://www.dnsbl.org/')dnl 
FEATURE(dnsbl, `relays.osirusoft.com', `Spam bloked - see http://relays.osirusoft.com/')dnl 
 
FEATURE(`no_default_msa',`dnl')dnl 
dnl если не хотите настраивать SMRSH для majordomo, закоментарьте этот FEATURE 
dnl тогда вместо него будет использоватьс /bin/sh 
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl 
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl 
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl 
FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl 
FEATURE(redirect)dnl 
FEATURE(always_add_domain)dnl 
FEATURE(`masquerade_envelope')dnl 
FEATURE(use_cw_file)dnl 
FEATURE(use_ct_file)dnl 
dnl LDA - Local Delivery Agent, по умолчанию sendmail в качестве LDA 
dnl использует mail.local, альтернатива: procmail или kavkeeper, см. ниже 
dnl The '-t' option will retry delivery if e.g. the user runs over his quota. 
dnl FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl 
FEATURE(local_procmail,`',`procmail -Y -a $h -d $u')dnl 
dnl использовать LMTP протокол для локальной доставки и mail.local 
dnl FEATURE(local_lmtp) 
dnl local_kav - use kavkeeper as LDA (Local Delivery Agent) 
dnl использовать kavkeeper как LDA вместо mail.local или procmail 
dnl FEATURE(local_kav) 
FEATURE(`blacklist_recipients')dnl 
EXPOSED_USER(`root')dnl 
dnl This changes sendmail to only listen on the loopback device 127.0.0.1 
dnl and not on any other network devices. Comment this out if you want 
dnl to accept email over the network. 
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA') 
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires 
dnl       a kernel patch 
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6') 
FEATURE(`relay_entire_domain')dnl 
 
dnl lavr for AVP3/Old 
dnl define(`KAVKEEPER_MAILER',`/usr/local/AVP/kavkeeper')  
dnl define(`KAVKEEPER_CONFIG',`/usr/local/AVP/kavkeeper.ini')  
dnl if LDA == procmail 
dnl по умолчанию KAVKEEPER использует procmail 
dnl define(`KAVKEEPER_LOCAL_MAILER',`procmail')  
dnl если используем LMTP и mail.local, раскоментарить нижнюю строку 
dnl define(`KAVKEEPER_LOCAL_MAILER',`mail.local')  
dnl for check local mail 
dnl для проверки локальной почты использовать KAV_LOCAL_HACK 
define(KAV_LOCAL_HACK)  
 
MAILER(local) 
MAILER(kavkeeper) 
MAILER(smtp)dnl 
MAILER(procmail)dnl 
---------------------------------- end of mc ------------------------------
это общий вариант с комментариями, ниже куски для конкретных реализаций:

- использовать в качестве LDA mail.local и lmtp, убираем procmail/local_kav и оставляем только
... 
FEATURE(local_lmtp) 
... 
dnl раскоментируйте эти строки и укажите реальный путь если AVP не в /opt/AVP 
dnl define(`KAVKEEPER_MAILER',`/usr/local/AVP/kavkeeper') 
dnl define(`KAVKEEPER_CONFIG',`/usr/local/AVP/kavkeeper.ini') 
define(`KAVKEEPER_LOCAL_MAILER',`mail.local') 
define(KAV_LOCAL_HACK) 
 
MAILER(local) 
MAILER(kavkeeper) 
MAILER(smtp) - использовать в качестве LDA procmail
... 
dnl use local_procmail for procmail filter 
dnl PROCMAIL...PATH must be define before local_procmail 
define('PROCMAIL_MAILER_PATH','/usr/local/bin/procmail') 
dnl define('PROCMAIL_MAILER_FLAGS',...) 
dnl define('PROCMAIL_MAILER_ARGS',...) 
FEATURE(local_procmail) 
... 
dnl define(`KAVKEEPER_MAILER',`/usr/local/share/AVP/kavkeeper')  
dnl define(`KAVKEEPER_CONFIG',`/usr/local/share/AVP/kavkeeper.ini')  
dnl if LDA == procmail 
define(`KAVKEEPER_LOCAL_MAILER',`procmail')  
define(KAV_LOCAL_HACK) 
 
MAILER(local) 
MAILER(kavkeeper)  
MAILER(smtp) 
dnl usr procmail as LDA 
MAILER(procmail) - использовать в качестве LDA kavkeeper
... 
FEATURE(local_kav) 
... 
dnl если AVP не в /opt/AVP раскомментировать строки 
dnl define(`KAVKEEPER_MAILER',`/usr/local/share/AVP/kavkeeper')  
dnl define(`KAVKEEPER_CONFIG',`/usr/local/share/AVP/kavkeeper.ini')  
dnl for check local mail 
dnl define(KAV_LOCAL_HACK)  
 
MAILER(local) 
dnl MAILER(kavkeeper)  
MAILER(smtp)
Будем считать что все вышеперечисленные действия выполнены, sendmail.mc создан, теперь можем создать sendmail.cf для работы sendmail с kavkeeper:

чтобы не попортить текущую конфигурацию:

1) если для той же версии sendmail что в текущий момент работает, построим на всякий случай базу алиасов, с которой у AVP с технологией KAV проблемы
 # newaliases
2) чтобы не попортить текущую рабочую конфигурацию sendmail.cf
 # cd /var/tmp 
 # m4 sendmail.mc > sendmail.cf  
или
 # docf sendmail.mc sendmail.cf  
3) сохраним текущую конфигурацию
 # cd /etc  
или
 # cd /etc/mail  

зависит от того как у вас настроен sendmail и откуда он читает sendmail.cf
 # cp sendmail.cf sendmail.cf-noavp
4) убиваем sendmail, можно стартап скриптом, а можно
 # killall -TERM sendmail
или
 # kill -TERM `ps axuww | grep sendmail | grep accepting | grep -v grep | awk '{ print $2}'`
5) производим проверку правил что отрезают пришлепку KAV к email адресу, так как у меня масса разного хлама, я запускаю sendmail с нужной конфигурацией для проверки, вы можете запустить просто sendmail -bt :

примечание: кстати не обязательно убивать работающий sendmail чтобы произвести проверку, можно вызвать его sendmail -C /var/tmp/seendmail.cf -bt
[unix1]~ > sendmail -C /etc/mail/unix1-kav.cf -bt 
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 
Enter <ruleset> <address>  
> 3,0 lavr@dubna.su 
canonify           input: lavr @ dubna . su 
Canonify2          input: lavr < @ dubna . su > 
Canonify2        returns: lavr < @ dubna . su . > 
canonify         returns: lavr < @ dubna . su . > 
parse              input: lavr < @ dubna . su . > 
Parse0             input: lavr < @ dubna . su . > 
Parse0           returns: lavr < @ dubna . su . > 
ParseLocal         input: lavr < @ dubna . su . > 
ParseLocal       returns: $# kavkeeper $@ dubna . su . KAV $: lavr @ dubna . su . KAV 
parse            returns: $# kavkeeper $@ dubna . su . KAV $: lavr @ dubna . su . KAV 
> 3,0 lavr@dubna.su.KAV 
canonify           input: lavr @ dubna . su . KAV 
Canonify2          input: lavr < @ dubna . su . KAV > 
Canonify2        returns: lavr < @ dubna . su . KAV > 
canonify         returns: lavr < @ dubna . su . KAV > 
parse              input: lavr < @ dubna . su . KAV > 
Parse0             input: lavr < @ dubna . su . KAV > 
Parse0           returns: lavr < @ dubna . su . KAV > 
ParseLocal         input: lavr < @ dubna . su . KAV > 
ParseLocal       returns: lavr < @ dubna . su . > 
Parse1             input: lavr < @ dubna . su . > 
Mailertable        input: < dubna . su > lavr < @ dubna . su . > 
Mailertable        input: dubna . < su > lavr < @ dubna . su . > 
Mailertable      returns: lavr < @ dubna . su . > 
Mailertable      returns: lavr < @ dubna . su . > 
MailerToTriple     input: < sunct0 . jinr . dubna . su > lavr < @ dubna . su . > 
MailerToTriple   returns: $# relay $@ sunct0 . jinr . dubna . su $: lavr < @ dubna . su . > 
Parse1           returns: $# relay $@ sunct0 . jinr . dubna . su $: lavr < @ dubna . su . > 
parse            returns: $# relay $@ sunct0 . jinr . dubna . su $: lavr < @ dubna . su . > 
> CTRL-C 
[unix1]~ > 
выше вы производите проверку указывая сначала email адрес в привычной нотации:

3,0 name@domain

и по завершению разбора должны получить name@domain.KAV - это перед проверкой, а уже после проверки и перед выдачей на транспорт smtp, KAV должен быть отрезан:

3,0 name@domain.KAV

должен в результате выдать name@domain

Какие при этом возможны проблемы:

- кирдык конструкции msgs: "| /usr/bin/msgs -s" в алиасах :(
- кирдык если у вас в DNS изспользуется "*" для RR=MX, не по RFC это
- еще известна пенка с тем что не работают алиасы, выполните команду
# grep kavkeeper /etc/mail/seendmail.cf
и если строка
Mkavkeeper,     P=/usr/local/share/AVP/kavkeeper, F=DFMSPhnu9, ...
используя редактор измените ее на
Mkavkeeper,     P=/usr/local/share/AVP/kavkeeper, F=DFMSPAhnu9, ...
^
или добавьте следующий define в ваш mc и сгенерите новый sendmail.cf
define('AVPKEEPER_MAILER_FLAGS', 'ASPhnu9')
если все ok, переходим к правилу 6

6) запускаем kavdaemon если не запущен, запускаем sendmail если не запущен:

- запуск и контроль kavdaemon
  # ps -axuww | grep kavdaemon
если не запущен
  # /path/kavd start 
  # ps -axuww | grep kavdaemon - проверям, работает ли 
  # ls -la /var/log/kavscan.rpt - если есть, смотрим его 
  # less /var/log/kavscan.rpt - как стартовал kavdaemon, в каком режиме 
если нет kavscan.rpt, смотрим messages
  # less /var/log/messages
- запуск и контроль sendmail, либо стартап скриптом, либо
# sendmail -bd -q30m
# ls -la /var/log/kavcheck-030602.log
# less /var/log/kavcheck-030602.log
если этот лог отсутствует, смотрите что в mail логах
7) производим проверку на обнаружение вирусов, скачиваем их с
  # wget -t 0 -c http://www.eicar.org/download/eicar.com 
или c http://www.eicar.org/download/ - скачиваем все что нужно.


Вариант 2. Запуск двух sendmail для прослушки SMTP и обработки очереди:

примечание: недостаток, в версии AVP3 этот метод проверяет только транзитную почту, локальную не проверяет что для этого необходимо - другой kavkeeper2.m4 для построения sendmail.listen.cf

теперь шаг за шагом построим новую конструкцию:

1) создаем или берем готовую конфигурацию sendmail.cf без всяких kavkeeper . а в файле kavkeeper.ini в строке sendmail производим замену на такую строку
sendmail=/usr/sbin/sendmail -oi -C/etc/sendmail.cf -i -f$f -- $u
или
sendmail=/usr/sbin/sendmail -oi -C/etc/mail/sendmail.cf -i -f$f -- $u
в зависимости от того откуда seendmail читает конфигурацию.

2) копируем kavkeeper2.m4 в /path/sendmail-cf/mailer , для моего случая
  # cp kavkeeper2.m4 /usr/local/share/sendmail/cf/mailer/
3) в наш sendmail.mc (без kavkeeper) добавляем строки
... 
define(`QUEUE_DIR',`/var/spool/mqueue.kav') 
dnl раскоментарьте если AVP не в /opt/AVP 
dnl define(`KAVKEEPER_MAILER',`/usr/local/AVP/kavkeeper') 
dnl define(`KAVKEEPER_CONFIG',`/usr/local/AVP/kavkeeper.ini') 
 
MAILER(local)dnl 
MAILER(smtp)dnl 
MAILER(kavkeeper2) 
MAILER(procmail)dnl 
...
пример такого sendmail-kav3v2.mc

4) на базе этого sendmail-kav3v2.mc строим вторую конфигурацию для sendmail
- sendmail.listen.cf
  # m4 sendmail-kav3v2.mc > sendmail.listen.cf
5) создаем каталог для новой очереди
  # mkdir /var/spool/mqueue.kav
  # chown root.mail /var/spool/mqueue.kav
6) создаем старт-стоп файл для запуска sendmail:

или берем отсюда runsendmail
-------------------------------- runsendmail --------------------------------- 
#!/bin/sh 
  
CONF_LOG="/etc/mail" 
SENDMAIL=/usr/sbin/sendmail 
  
case "$1" in 
start) 
        if [ -z $SENDMAIL ]; then 
            echo " Not found SENDMAIL at you system !" 
            exit 200 
        fi 
        $SENDMAIL -bd -q10m -C $CONF_LOG"/sendmail.listen.cf" 
        $SENDMAIL -q1m -C $CONF_LOG"/sendmail.cf" 
        echo "Sendmail Started" 
        ;;
stop) 
        killall -TERM sendmail 
        echo "Sendmail Stopped" 
        ;;
*) 
        echo "Usage: `basename $0` {start|stop}" >&2 
        ;;
esac 
  
exit 0 
------------------------------- end of script --------------------------------
7) перед запуском sendmail, проверьте ваш kavkeeper.ini чтобы в нем были строки: # usesyslog - yes logs results into the system log. usesyslog=yes logfile=/var/log/kavcheck-%y%m%d.log при том что по данному методу все работает, но присутствует ошибка связанная с ранее измененным вызовом sendmail в kavkeeper.ini, из-за которой идет попытка послать уведомление по адресу /var/log/kavcheck-%y%m%d.log :))) этого можно избежать используя собственный wrapper для вызова sendmail в kavkeeper.ini

8) убиваем текущий работающий sendmail и запускаем наш скрипт:
 # ./runsendmail start
разместите его где нужно для автоматического запуска при загрузке.

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