1. РАЗВОРАЧИВАНИЕ ГЕНЕРАТОРА КОНФИГУРАЦИОННЫХ ФАЙЛОВ минимальный набор действий для разворачивания системы конфигов с нуля: 1. переход в каталог с настройками exim'а в зависимости от ОС: cd /usr/local/etc/exim или cd /etc/exim или cd /usr/pkg/etc/exim 2. создание каталога с настройками: mkdir m4 3. копирование Makefile (возможно даже не самого свежего), полученного по почте, rsync или по http: cd m4 && cp ${DISTFILES}/Makefile ./ или cd m4 && rsync -avz rsync://rsync.mta.org.ua/exim-4.83-conf/m4/Makefile Makefile или cd m4 && wget http://mta.org.ua/exim-4.83-conf/m4/Makefile 4. синхронизация конфигов, повторная синхронизация (для случая получения при первой синхронизации Makefile с измененным набором синхронизируемых каталогов) и прединсталляционные процедуры: gmake sync && gmake sync pre-install 5. изменение конфигурационного файла: vi ../site/conf 6. сборка конфигов (configure, system_filter, exim.pl, всех db): gmake all 7. установка конфигов: gmake install 8. пересборка db файлов: gmake db 9. создание скриптов для запуска из планировщика задач и установка этих скриптов: gmake periodic install-periodic 10. создание TLS сертификата и ключа gmake exim.pem ###################################################################### 2. MAKEFILE доступные targets для Makefile: build: предустановочные процедуры, сборка configure, сборка system_filter, сборка exim.pl и сборка periodic (по умолчанию) build-all: предустановочные процедуры, сборка configure, сборка system_filter, сборка exim.pl и сборка periodic, сборка всех db db: сборка всех db файлов all: синоним для build-all reload: перегрузить конфигурационные файлы exim и переоткрыть лог файлы restart: перезапустить выполнение exim start: запустить на выполнение exim stop: остановить работу exim sync: синхронизация всех конфигов с конифгами из репозитария разработчика sync_acls: синхронизация подкаталога acls sync_deliveries: синхронизация подкаталога deliveries sync_features: синхронизация подкаталога features sync_m4: синхронизация подкаталога m4 sync_perl: синхронизация подкаталога perl sync_system_filters: синхронизация подкаталога system_filters sync_samples: синхронизация подкаталога samples sync_bin: синхронизация подкаталога bin sync_patches: синхронизация набора патчей sync_packages: синхронизация каталогов для сборки exim под разные платформы access-relay-greylist: сборка списка сетей стран для серого списка install: инсталляционные процедуры pre-install: предустановочные процедуры (необходимы для корректной генерации конфигов) post-install: постустановочные процедуры configure: сборка основного конфигурационного файла configure system_filter: сборка системного фильтра system_filter exim.pl: сборка файла с perl'овыми хуками exim.pl exim.pem: создание TLS сертификата и ключа exim.pem periodic: создание скриптов для запуска из планировщика задач install-periodic: установка скриптов для запуска из планировщика задач upgrade: настройка Makefile на работу со следующим релизом exim-conf fix: автоматическая правка site/conf и других файлов при после перехода на новый релиз exim-conf check: проверка использования устаревших имен переменных и файлов ###################################################################### 3. ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ acl_m0 - временная, используется внутри одного acl acl_m1 - временная, используется внутри одного acl acl_m2 - временная, используется внутри одного acl acl_m3 - временная, используется внутри одного acl acl_m8 - вычисленные предельные баллы SpamAssassin'а acl_m9 - флаг abuse/postmaster в пределах одного получателя, при помещении файла в карантин содержит список оповещаемых получателей acl_m10 - временная, используется внутри одного acl acl_m12 - временная, используется внутри одного acl acl_m14 - используется для резервного копирования почты acl_m16 - используется для отказа в приеме письма для всех получателей сразу после data acl_m18 - используется для резервного копирования почты acl_c2 - временная, используется внутри одного acl acl_c3 - используется для резервного копирования почты acl_c4 - используется для резервного копирования почты acl_c5 - используется для резервного копирования почты ###################################################################### 4. ПРИМЕРЫ ВКЛЮЧЕНИЯ РАЗЛИЧНЫХ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ включение рилеинга почты доменов и relay based on MX: define(`confSECONDARY_RELAY', `YES')dnl define(`confRELAY_BASED_ON_MX', `YES')dnl SMTP аутентификация (в том числе как клиента), STARTTLS и запрет использования plain text паролей без шифрования: define(`confSMTP_AUTH', `YES')dnl define(`confSMTP_AUTH_CLIENT', `PLAIN LOGIN CRAM-MD5')dnl define(`confSTARTTLS', `YES')dnl define(`confSMTP_AUTH_RESTRICT', `DISABLE_PLAIN_AUTH_WITHOUT_TLS')dnl ~~~~~~~~~~ dovecot (virtual maildirs, пользователи в passwd like файле): define(`confDELIVERY_TO', `MDIR_VIRTUAL FILTERS')dnl define(`confVIRT_MDIR_USER', `mailnull')dnl define(`confVIRT_MDIR_USERLIST', `SINGLE_FILE')dnl define(`confVIRT_MDIR_USERLIST_SINGLE', `/etc/passwd.imap')dnl define(`confVIRT_MDIR_ALIASES', `SINGLE_FILE')dnl define(`confVIRT_MDIR_DIR_MODE', `0770')dnl define(`confVIRT_MDIR_FILE_MODE', `0660')dnl define(`confSMTP_AUTH_SOURCE', `PASSWD')dnl define(`confSMTP_AUTH_PASSWD', `/usr/local/etc/passwd.imap')dnl define(`confSYSTEM_FILTER_USER', `mailnull')dnl ~~~~~~~~~~ dovecot (virtual maildirs, пользователи в passwd like файле, доставка с помощью внешнего LDA): define(`confDELIVERY_TO', `MDIR_VIRTUAL FILTERS PIPE')dnl define(`confVIRT_MDIR_PIPE', `/usr/libexec/dovecot/deliver -d $local_part@$domain')dnl define(`confVIRT_MDIR_USER', `mailnull')dnl define(`confVIRT_MDIR_USERLIST', `SINGLE_FILE')dnl define(`confVIRT_MDIR_USERLIST_SINGLE', `/etc/passwd.imap')dnl define(`confVIRT_MDIR_ALIASES', `SINGLE_FILE')dnl define(`confVIRT_MDIR_DIR_MODE', `0770')dnl define(`confVIRT_MDIR_FILE_MODE', `0660')dnl define(`confSMTP_AUTH_SOURCE', `PASSWD')dnl define(`confSMTP_AUTH_PASSWD', `/usr/local/etc/passwd.imap')dnl define(`confSYSTEM_FILTER_USER', `mailnull')dnl необходимо обеспечить возомжность чтения от файла /usr/local/etc/passwd.imap, записи в логи dovecot'а и записи в /var/run/dovecot/auth-master от имени mailnull:mail ~~~~~~~~~~ dovecot (user maildirs): define(`confDELIVERY_TO', `MDIR_USER FILTERS PROCMAIL')dnl define(`confSYSTEM_FILTER_USER', `mailnull')dnl define(`confSMTP_AUTH_SOURCE', `SASLAUTHD')dnl ~~~~~~~~~~ dovecot или imap-uw (mailboxes): define(`confDELIVERY_TO', `MBOX FILTERS PROCMAIL')dnl define(`confSMTP_AUTH_SOURCE', `SASLAUTHD')dnl define(`confSYSTEM_FILTER_USER', `root')dnl ~~~~~~~~~~ courier-imap (virtual maildirs): define(`confDELIVERY_TO', `MDIR_VIRTUAL FILTERS')dnl define(`confVIRT_MDIR_USER', `mailnull')dnl define(`confVIRT_MDIR_USERLIST', `MYSQL')dnl define(`confVIRT_MDIR_ALIASES', `MYSQL')dnl define(`confVIRT_MDIR_DIR_MODE', `0750')dnl define(`confVIRT_MDIR_FILE_MODE', `0640')dnl define(`confSYSTEM_FILTER_USER', `mailnull')dnl define(`confSMTP_AUTH_SOURCE', `MYSQL')dnl ~~~~~~~~~~ courier-imap (user maildirs): define(`confDELIVERY_TO', `MDIR_USER FILTERS PROCMAIL')dnl define(`confSYSTEM_FILTER_USER', `mailnull')dnl define(`confSMTP_AUTH_SOURCE', `SASLAUTHD')dnl ~~~~~~~~~~ dovecot (virtual maildirs, пользователи в Active Directory, все пользователи домена считаются почтовыми пользователями): define(`confVIRT_MDIR_USERLIST', `LDAP')dnl define(`confVIRT_MDIR_LDAP', `user="ldapuser@domain.tld" pass=xxxxxxxx \ ldap://dc.domain.tld/DC=domain,DC=tld?sAMAccountName?sub?\ (&(objectClass=user)(sAMAccountName=$local_part))')dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/domain.tld/$local_part/')dnl define(`confSMTP_AUTH_LDAPAUTH_HOST', `dc.domain.tld')dnl define(`confSMTP_AUTH_LDAPAUTH_LOGIN', `LOGIN@domain.tld')dnl адрес домен контроллера можно не указывать в LDAP запросе. вместо этого можно указать адрес(а) домен контроллера(ов) в переменной ldap_default_servers, которую в свою очередь можно внести в файл site/configure.general. номер порта лучше использовать не 389, а 3268: ldap_default_servers = <; dc1.domain.tld:3268 ; dc2.domain.tld:3268 или ldap_default_servers = dc1.domain.tld::3268 : dc2.domain.tld::3268 ~~~~~~~~~~ dovecot (virtual maildirs, пользователи в Active Directory, обслуживаются только члены группы "Mail Users" из OU "Mail", группы из OU "Mail", названия которых начинаются на "alias_", интерпретируются как групповые алиасы, значения атрибутов mail объектов учетных записей пользователей интерпретируются как адреса пересылки): define(`confVIRT_MDIR_USERLIST', `LDAP')dnl define(`confVIRT_MDIR_LDAP', `user="ldapuser@domain.tld" pass=xxxxxxxx \ ldap://dc.domain.tld/DC=domain,DC=tld?sAMAccountName?sub?\ (&(objectClass=user)(sAMAccountName=$local_part)(memberOf=CN=Mail Users,OU=Mail,DC=domain,DC=tld))')dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/domain.tld/$local_part/')dnl define(`confVIRT_MDIR_ALIASES', `LDAP')dnl define(`confVIRT_MDIR_LDAP_ALIAS', `user="ldapuser@domain.tld" pass=xxxxxxxx \ ldap://dc.domain.tld/DC=domain,DC=tld?sAMAccountName?sub?\ (&\ (memberOf=CN=Mail Users,OU=Mail,DC=domain,DC=tld)\ (memberOf=CN=alias_${local_part},OU=Mail,DC=domain,DC=tld)\ )') define(`confVIRT_MDIR_LDAP_ALIAS2', `user="ldapuser@domain.tld" pass=xxxxxxxx \ ldap://dc.domain.tld/DC=domain,DC=tld?mail?sub?\ (&\ (objectClass=user)\ (sAMAccountName=$local_part)\ (memberOf=CN=Mail Users,OU=Mail,DC=domain,DC=tld)\ )') define(`confSMTP_AUTH_SOURCE', `LDAP')dnl define(`confSMTP_AUTH_LDAP_HOST', `dc.domain.tld')dnl define(`confSMTP_AUTH_LDAP_LOGIN', `LOGIN@domain.tld')dnl define(`confSMTP_AUTH_LDAP_PASS', `PASSWORD')dnl define(`confSMTP_AUTH_LDAP_BASE', `DC=domain,DC=tld')dnl define(`confSMTP_AUTH_LDAP_FILTER', `(&\ (objectClass=user)\ (sAMAccountName=LOGIN)\ (memberOf=CN=Mail Users,OU=Mail,DC=domain,DC=tld)\ )')dnl define(`confSMTP_AUTH_LDAP_PASSWD_ATTR', `')dnl ~~~~~~~~~~ dovecot (virtual maildirs, пользователи в Active Directory Application Mode, почтовый адрес указывается в атрибуте userPrincipalName, адреса пересылки указываются в атрибуте mail, персональные алиасы указываются в атрибутах proxyAddresses, группы из DC=domain.tld интерпретируются как групповые алиасы, членами групы могут быть другие группы и пользователи, пример данных в виде ldif файла смотри в каталоге contrib/adam): define(`confVIRT_MDIR_USERLIST', `LDAP')dnl define(`confVIRT_MDIR_LDAP', `user="CN=ldapuser,O=Test Org,C=tld" pass=xxxxxxxx \ ldap://adam.domain.tld:2389/O=Test Org,C=tld?cn?sub?\ (&(objectClass=user)(userPrincipalName=$local_part@$domain))')dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/$domain/$local_part/')dnl define(`confVIRT_MDIR_ALIASES', `LDAP')dnl define(`confVIRT_MDIR_LDAP_ALIAS', `user="CN=ldapuser,O=Test Org,C=tld" pass=xxxxxxxx \ ldap://adam.domain.tld:2389/O=Test Org,C=tld?userPrincipalName?sub?\ (|\ (&\ (objectClass=user)\ (memberOf=CN=$local_part@$domain,DC=$domain,O=Test Org,C=tld)\ )\ (&\ (objectClass=user)\ (proxyAddresses=$local_part@$domain)\ )\ )') define(`confVIRT_MDIR_LDAP_ALIAS2', `user="CN=ldapuser,O=Test Org,C=tld" pass=xxxxxxxx \ ldap://adam.domain.tld:2389/O=Test Org,C=tld?name?sub?\ (|\ (&\ (objectClass=group)\ (memberOf=CN=$local_part@$domain,DC=$domain,O=Test Org,C=tld)\ )\ (&\ (objectClass=group)\ (proxyAddresses=$local_part@$domain)\ )\ )') define(`confVIRT_MDIR_LDAP_ALIAS3', `user="CN=ldapuser,O=Test Org,C=tld" pass=xxxxxxxx \ ldap://adam.domain.tld:2389/O=Test Org,C=tld?mail?sub?\ (&\ (objectClass=user)\ (userPrincipalName=$local_part@$domain)\ (mail=*)\ )') define(`confSMTP_AUTH_SOURCE', `LDAPAUTH')dnl define(`confSMTP_AUTH_LDAPAUTH_HOST', `dc.domain.tld')dnl define(`confSMTP_AUTH_LDAPAUTH_LOGIN', `LOGIN')dnl ~~~~~~~~~~ cyrus-imapd (доставка через внешний LDA, проверка существования получателей производится с помощью mbpath): define(`confDELIVERY_TO', `MDIR_VIRTUAL PIPE')dnl define(`confVIRT_MDIR_PIPE', `/usr/lib/cyrus-imapd/deliver -f $sender_address $local_part@$domain') define(`confVIRT_MDIR_USER', `cyrus')dnl define(`confVIRT_MDIR_GROUP', `mail')dnl define(`confVIRT_MDIR_USERLIST', `CYRUS-IMAPD')dnl define(`confVIRT_MDIR_CYRUS_MBPATH_PATH', `/usr/lib/cyrus-imapd/mbpath')dnl алтернативным вариантом является доставка через внешний LDA по LMTP: define(`confDELIVERY_TO', `MDIR_VIRTUAL PIPE-LMTP')dnl define(`confVIRT_MDIR_PIPE', `/usr/lib/cyrus-imapd/deliver -l') define(`confVIRT_MDIR_USER', `cyrus')dnl define(`confVIRT_MDIR_GROUP', `mail')dnl define(`confVIRT_MDIR_USERLIST', `CYRUS-IMAPD')dnl define(`confVIRT_MDIR_CYRUS_MBPATH_PATH', `/usr/lib/cyrus-imapd/mbpath')dnl ~~~~~~~~~~ cyrus-imapd (доставка по LMTP, проверка существования получателей производится с помощью mbpath): mailertable: cyrus.domain.tld : lmtp : localhost или cyrus.domain.tld : lmtp : localhost::2024 или cyrus.domain.tld : lmtpunix : /var/lib/imap/socket/lmtp:cyrus:mail define(`confDELIVERY_TO', `MDIR_VIRTUAL')dnl define(`confVIRT_MDIR_USER', `cyrus')dnl define(`confVIRT_MDIR_GROUP', `mail')dnl define(`confVIRT_MDIR_USERLIST', `CYRUS-IMAPD')dnl define(`confVIRT_MDIR_CYRUS_MBPATH_PATH', `/usr/lib/cyrus-imapd/mbpath')dnl ~~~~~~~~~~ доставка почты рилеемых доменов в cyrus-imapd по LMTP через TCP сокет (проверка существования получателей осуществляется с помощью callout'а, при этом cyrus-imapd lmtpd должен быть запущен с опцией -a): mailertable: cyrus.domain.tld : lmtp : localhost cyrus.domain.tld\|callout : lmtp : localhost если cyrus-imapd использует lmtp порт, отличный от 24-го, это нужно указать в явном виде: cyrus.domain.tld : lmtp : localhost::2024 cyrus.domain.tld\|callout : lmtp : localhost::2024 производить доставку почты рилеемых доменов в cyrus-imapd по LMTP через UNIX Domain сокет не рекомендуется, т. к. в этом случае exim не будет производить callout для проверки существования адреса получателя ~~~~~~~~~~ DBMail (доставка через внешний LDA, проверка существования получателей производится с помощью запросов к БД): define(`confDELIVERY_TO', `MDIR_VIRTUAL PIPE')dnl define(`confVIRT_MDIR_PIPE', `/usr/sbin/dbmail-smtp -d $local_part@$domain')dnl define(`confVIRT_MDIR_USER', `dbmail')dnl define(`confVIRT_MDIR_GROUP', `dbmail')dnl define(`confVIRT_MDIR_USERLIST', `SQLITE')dnl define(`confSQLITE', `/var/lib/dbmail/dbmail.db') define(`confVIRT_MDIR_SQLITE', `SELECT userid as id FROM dbmail_users WHERE userid="${quote_mysql:$local_part@$domain}"')dnl define(`confVIRT_MDIR_SQLITE2', `SELECT alias FROM dbmail_aliases WHERE alias="${quote_mysql:$local_part@$domain}" OR alias="${quote_mysql:@$domain}"')dnl ~~~~~~~~~~ DBMail (доставка по LMTP, проверка существования получателей производится с помощью запросов к БД): define(`confDELIVERY_TO', `MDIR_VIRTUAL')dnl define(`confVIRT_MDIR_USERLIST', `SQLITE')dnl define(`confSQLITE', `/var/lib/dbmail/dbmail.db') define(`confVIRT_MDIR_SQLITE', `SELECT userid as id FROM dbmail_users WHERE userid="${quote_mysql:$local_part@$domain}"')dnl define(`confVIRT_MDIR_SQLITE2', `SELECT alias FROM dbmail_aliases WHERE alias="${quote_mysql:$local_part@$domain}" OR alias="${quote_mysql:@$domain}"')dnl skip_verify_recipient: dbmail.domain.tld : * mailertable: dbmail.domain.tld : lmtp : localhost если dbmail использует lmtp порт, отличный от 24-го, это нужно указать в mailertable явном виде: dbmail.domain.tld : lmtp : localhost::2024 ~~~~~~~~~~ доставка почты рилеемых доменов в DBMail по LMTP: mailertable: dbmail.domain.tld : lmtp : localhost если dbmail использует lmtp порт, отличный от 24-го, это нужно указать в явном виде: dbmail.domain.tld : lmtp : localhost::2024 ~~~~~~~~~~ резервное копирование почты системным фильтром без сохранения вирусов: define(`confMAIL_BACKUP', `SYSTEM_FILTER')dnl define(`confANTIVIRUS_SAVE_BACKUP', `NO')dnl резервное копирование почты направлением копий писем по указанному адресу: define(`confMAIL_BACKUP', `ROUTER_REDIRECT')dnl define(`confMAIL_BACKUP_ADDR', `corvax@devnull.org.ua')dnl резервное копирование почты путем доставки в указанный maildir: define(`confMAIL_BACKUP', `ROUTER_ACCEPT')dnl define(`confMAIL_BACKUP_PATH', `/var/vmail/localhost/admin/.backup.$tod_logfile/')dnl ###################################################################### 5. ИСПОЛЬЗОВАНИЕ АНТИВИРУСОВ ANTIVIRUS(`название_антивируса', `действие', `параметр_для_av_scanner', `дополнительные_параметры', `шелловая_команда_получения_номера_версии_антивируса', `название_антивируса_для_заголовков_по_умолчанию', `максимальный_размер_проверяемого_письма') возможные действия с зараженными файлами: QUARANTINE - вывод в лог файл предупреждения и помещение зараженного письма в карантин DISCARD - удаление зараженного письма DROP - синоним DISCARD REJECT - отказ в приеме зараженного письма (возврат клиенту кода 5xx) QUARANTINE_MAILLIST - сохранение в карантине инфицированных писем из списков рассылки вместо отказа в приеме письма (используется только одновременно с REJECT) DISCARD_MAILLIST - игнорирование инфицированных писем из списков рассылки вместо отказа в приеме письма (используется только одновременно с REJECT) WARN - устаревшее значение, эквивалентно `QUARANTINE DISCARD' SUBMIT_MYSQL - сохранение информации о зараженном письме в БД MySQL (только для пользователей enterprise версии) SUBMIT_SQLITE - сохранение информации о зараженном письме в БД MySQL (только для пользователей enterprise версии) значение QUARANTINE можно указывать вместе с DISCARD, DROP или REJECT, разделяя их пробелом. возможные значения дополнительных параметров: defer_ok - при получении DEFER от антивирусного демона письмо доставляется получателю(ям), отправитель получает статус 250; defer_next - при получении DEFER от антивирусного демона письмо передается следующему (резервному) анти- вирусному демону. в остальных случаях письмо резервному антиви- русному демону не передается; defer_freeze - при получении DEFER от антивирусного демона письмо замораживается, отправитель получает статус 250; defer_no_mbox_unspool - при получении DEFER от антивирусного демона письмо не удаляется из /var/spool/exim/scan. несколько значений могут быть указаны через пробел "шелловая команда получения номера версии антивируса" и "название антивируса для заголовков по умолчанию" являются необязательными параметрами. "шелловая команда получения номера версии антивируса" должна возвращать название антивируса (желательно с номером версии) без символа конца строки. команда выполняется один раз при генерации конфигурационного файла. значение, возвращаемое командой, будет использовано при указании версии антивируса в заголовках проверяемого файла. если команда не указана, будет использовано значение параметра "названия антивируса для заголовков по умолчанию". если же и этот параметр будет не указан, будет использовано значение параметра "название антивируса". примеры использования: ANTIVIRUS(`ClamAV', `QUARANTINE REJECT', `clamd:/var/run/clamav/clamd', `defer_next defer_no_mbox_unspool') ANTIVIRUS(`KAV5', `QUARANTINE REJECT', `aveserver:/var/run/aveserver', `defer_ok defer_no_mbox_unspool') ANTIVIRUS(`DrWeb', `QUARANTINE REJECT', `drweb:/usr/local/drweb/run/drwebd.sock', `defer_no_mbox_unspool defer_freeze') ANTIVIRUS(`ClamAV', `REJECT QUARANTINE', `clamd:/var/run/clamav/clamd.sock', `defer_ok defer_no_mbox_unspool defer_next', `clamd -V 2>/dev/null | head -n 1 | perl -p -e "chomp"', `') ANTIVIRUS(`ClamAV_local', `REJECT QUARANTINE', `clamd:192.168.0.1 3310:local', `defer_ok defer_no_mbox_unspool defer_next') ANTIVIRUS(`ClamAV_remote', `REJECT QUARANTINE', `clamd:192.168.0.1 3310', `defer_ok defer_no_mbox_unspool defer_next') ANTIVIRUS(`ClamDScan', `QUARANTINE REJECT', `cmdline:/usr/bin/clamdscan \ --disable-summary \ %s : FOUND : (\\S+) FOUND', `defer_ok defer_no_mbox_unspool defer_next') ANTIVIRUS(`ClamScan', `QUARANTINE REJECT', `cmdline:/usr/bin/clamscan \ --disable-summary \ --max-space=40960 \ --max-files=1024 \ --max-recursion=8 \ --max-ratio=256 \ --unrar=/usr/local/bin/unrar3 \ --mbox -r %s : FOUND : (\\S+) FOUND', `defer_no_mbox_unspool defer_ok', `clamscan -V 2>/dev/null | head -n 1 | perl -p -e "chomp;s/clamav/ClamScan/i;"', `', `10240k') dnl Kaspersky Anti-Virus 5.5 ANTIVIRUS(`aveserver', `REJECT QUARANTINE', `aveserver:/var/run/aveserver', `defer_next defer_no_mbox_unspool', `/usr/local/share/kav/bin/aveserver -v 2>/dev/null | head -n 1 | perl -p -e "chomp;s/\/RELEASE.+$//"', `', `10240k') ANTIVIRUS(`aveclient', `REJECT QUARANTINE', `cmdline:/usr/local/share/kav/bin/aveclient \ -s -p /var/run/aveserver \ %s/* : LINFECTED : LINFECTED (.*)', `defer_ok defer_no_mbox_unspool') `', `', `10240k') ANTIVIRUS(`kavscanner', `REJECT QUARANTINE', `cmdline:/opt/kav/bin/kavscanner \ -i0 \ %s : INFECTED : INFECTED (.+)', `defer_no_mbox_unspool', `/usr/local/share/kav/bin/kavscanner -v 2>/dev/null | head -n 1 | perl -p -e "chomp;s/\/RELEASE.+$//"', `', `10240k') dnl Kaspersky Anti-Virus 5.6 ANTIVIR_DLFUNC(`kav4lms', `{postmaster@domain.tld}', `kav4lms', `QUARANTINE_MAILLIST QUARANTINE REJECT SUBMIT_MYSQL SUBMIT_SQLITE', `local:/var/run/kav4lms/kavmd.sock', `defer_no_mbox_unspool defer_next', `/opt/kaspersky/kav4lms/sbin/kavmd -v 2>/dev/null | head -n 1 | perl -p -e "chomp;s/\/RELEASE.+$//"', `', `10240k') ANTIVIRUS(`kavscanner', `QUARANTINE_MAILLIST QUARANTINE REJECT SUBMIT_MYSQL SUBMIT_SQLITE', `cmdline:/opt/kaspersky/kav4lms/bin/kav4lms-kavscanner \ -i0 \ %s : INFECTED : INFECTED (.+)', `defer_no_mbox_unspool', `/opt/kaspersky/kav4lms/bin/kav4lms-kavscanner -v 2>/dev/null | head -n 1 | perl -p -e "chomp;s/\/RELEASE.+$//"', `', `10240k') dnl DrWeb 4.32 ANTIVIRUS(`DrWeb', `REJECT QUARANTINE', `drweb:/var/drweb/run/drwebd.socket', `defer_no_mbox_unspool', `/usr/local/drweb/drwebd -V 2>/dev/null | head -n 1 | perl -p -e "chomp"', `') ANTIVIRUS(`drwebd_tcp', `QUARANTINE_MAILLIST QUARANTINE DISCARD', `drweb:127.0.0.1 3000', `defer_no_mbox_unspool') ANTIVIRUS(`DrWeb', `REJECT QUARANTINE', `drweb:127.0.0.1 3000', `defer_no_mbox_unspool') ANTIVIRUS(`drwebdc', `QUARANTINE REJECT', `cmdline:/opt/drweb/drwebdc \ -rr -q -e -u/var/drweb/run/drwebd.socket \ -f %s/* : infected with : infected with (.+)', `defer_no_mbox_unspool defer_ok') ANTIVIRUS(`drweb', `QUARANTINE REJECT', `cmdline:/opt/drweb/drweb \ -ini=/etc/drweb/drweb32.ini \ -path=%s : infected with : infected with (.+)', `defer_no_mbox_unspool defer_ok', `/usr/local/drweb/drweb -V 2>/dev/null | head -n 1 | perl -p -e "chomp"', `', `10240k') dnl DrWeb 4.33 ANTIVIRUS(`drwebd', `QUARANTINE_MAILLIST QUARANTINE REJECT SUBMIT_MYSQL SUBMIT_SQLITE', `drweb:/var/drweb/run/.daemon', `defer_no_mbox_unspool defer_next', `/opt/drweb/drwebd -V 2>/dev/null | head -n 1 | perl -p -e "chomp"', `', `10240k') ANTIVIRUS(`drweb', `QUARANTINE_MAILLIST QUARANTINE REJECT SUBMIT_MYSQL SUBMIT_SQLITE', `cmdline:/opt/drweb/drweb \ -ini=/etc/drweb/drweb32.ini \ -path=%s : infected with : infected with (.+)', `defer_freeze defer_no_mbox_unspool', `/opt/drweb/drweb -V 2>/dev/null | head -n 1 | perl -p -e "chomp"', `', `10240k') ANTIVIRUS(`uvscan', `REJECT QUARANTINE', `cmdline:/usr/local/bin/uvscan \ --secure -rv --summary --noboot \ --allole --analyse --mime --program --unzip \ %s : Found the .+ virus !!! : Found the (.+) virus !!!', `defer_no_mbox_unspool defer_ok') ###################################################################### 6. ИСПОЛЬЗОВАНИЕ DNSBL DNS_BL(`имя_зоны', `действие_в_случае_попадания_рилея_отправителя_в_DNSBL', `действие_в_случае_невозможности_получить_ответ_от_DNSBL', `сообщение_отправителю') действия в случае попадания рилея отправителя в DNSBL: reject - отвергать сообщение deny - синоним reject drop - обрыв соединения defer - возврат временной ошибки warn - выводить в лог файл предупреждение greylist:xx - добавление xx баллов к счетчику опционального greylisting'а greylisting:xx - синоним greylist:xx reject:yy - добавление yy баллов к счетчику опционального reject'а deny:yy - синоним reject:yy delay:zz - задержка на zz секунд перед продолжением обработки сообщения pause:zz - синоним delay:zz quarantine - принять письмо с сохранением в карантин без доставки получателям действия warn, greylist:xx, reject:yy и delay:zz можно указывать одновременно через пробел действие в случае невозможности получить ответ от DNSBL: pass - принять сообщение defer - вернуть клиенту 4xx сообщение отправителю: пустое значение - формируется умолчательное сообщение отправителю dialup - формируется сообщение отправителю для dial-up/dsl/cable сетей текст - данный текст возвращается отправителю как текст сообщения об ошибке примеры использования: DNS_BL(`dul.ru', `warn pause:30 greylist:10 reject:6', `pass', `dialup') DNS_BL(`dynablock.easynet.nl', `warn pause:30 greylist:10 reject:6', `pass', `dialup') DNS_BL(`bl.spamcop.net', `warn pause:30 greylist:10 reject:3', `pass', `') DNS_BL(`cbl.abuseat.org', `warn pause:30 greylist:10 reject:4', `defer',`') ###################################################################### 7. ВАРИАНТЫ ИСПОЛЬЗОВАНИЯ SPAMTRAP'ов адреса получателей, являющиеся spamtrap'ами, указываются в access-rcpt. 1. на этапе RCPT TO ответить 5xx, залистить хост в DNSBL. письмо будет доставлено получателям, адреса которых были указаны раньше адреса spamtrap'а. spamtrap@corvax.kiev.ua : submit_rbl reject : User unknown : Host sending message to spamtrap blacklisted 2. на этапе RCPT TO ответить 5xx, залистить хост в DNSBL. письмо не будет доставлено остальным получателям, клиенту будет возвращена ошибка 5xx в ответ на команду DATA. spamtrap@corvax.kiev.ua : submit_rbl reject reject_all : User unknown : Host sending message to spamtrap blacklisted 3. на этапе RCPT TO ответить 5xx, залистить хост в DNSBL. если до указания адреса spamtrap'ы были указаны другие адреса получателей, письмо будет доставлено в карантин. spamtrap@corvax.kiev.ua : submit_rbl reject quarantine_other : User unknown : Host sending message to spamtrap blacklisted 4. после приема письма ответить 5xx, залистить хост в DNSBL, содержимое письма отправить на автообучение spamassassin'у. spamtrap@corvax.kiev.ua : submit_rbl quarantine reject : User unknown : Host sending message to spamtrap blacklisted 5. после приема письма ответить 250, залистить хост в DNSBL, содержимое письма отправить на автообучение spamassassin'у. spamtrap@corvax.kiev.ua : submit_rbl quarantine : User unknown : Host sending message to spamtrap blacklisted ###################################################################### 8. ПЕРЕХОД С ПРЕДЫДУЩЕЙ ВЕРСИИ КОНФИГУРАТОРА переход с 4.76 на 4.83 осуществляется следующим образом: gmake sync_m4 && gmake upgrade && gmake sync_m4 && gmake sync && gmake stop gmake fix pre-install && touch ../site/conf && gmake configure system_filter install gmake periodic install-periodic 9. ПЕРЕХОД НА СЛЕДУЮЩУЮ ВЕРСИЮ КОНФИГУРАТОРА переход с 4.83 на 4.88 осуществляется следующим образом: gmake sync_m4 && gmake upgrade && gmake sync_m4 && gmake sync && gmake stop gmake fix pre-install && touch ../site/conf && gmake configure system_filter install gmake periodic install-periodic