1. РАЗВОРАЧИВАНИЕ ГЕНЕРАТОРА КОНФИГУРАЦИОННЫХ ФАЙЛОВ минимальный набор действий для разворачивания системы конфигов с нуля: 1. переход в каталог с настройками эксима в зависимости от ОС: cd /usr/local/etc/exim или cd /etc/exim 2. создание каталога с настройками: mkdir m4 3. копирование Makefile (возможно даже не самого свежего), полученного по почте, rsync или по http: cd m4 && cp ${DISTFILES}/Makefile ./ или cd m4 && rsync -avz rsync://mta.org.ua/exim-conf/m4/Makefile Makefile или cd m4 && wget https://mta.org.ua/exim-4.0-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 файдов: 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: restart: start: stop: 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_redhat: синхронизация каталогов для сборки sc.rpm для RedHat/Fedora install: инсталляционные процедуры pre-install: прединсталляционные процедуры (необходимы для корректной генерации конфигов) post-install: постинсталляционные процедуры dnsbls.lists: сборка списков dnsbl configure: сборка основного конфигурационного файла configure system_filter: сборка системного фильтра system_filter exim.pl: сборка файла с perl'овыми хуками exim.pl exim.pem: создание TLS сертификата и ключа exim.pem periodic: создание скриптов для запуска из планировщика задач install-periodic: установка скриптов для запуска из планировщика задач ###################################################################### 3. ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ acl_m0 - временная, используется внутри одного acl acl_m1 - временная, используется внутри одного acl acl_m2 acl_m3 acl_m4 acl_m5 acl_m6 - используется для fakereject не из acl_smtp_data acl_m7 - данные для антивирусных квитанций acl_m8 - вычисленные предельные баллы SpamAssassin acl_m9 - флаг abuse/postmaster, при помещении файла в карантин содержит список оповещаемых получателей acl_c0 - временная, используется для вылавливания defer'ов acl_c1 - временная, используется для сохранения результата работы предыдущего антивирусного демона acl_c9 - используется для анонимизации Received ###################################################################### 4. ПРИМЕРЫ ВКЛЮЧЕНИЯ РАЗЛИЧНЫХ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ для работы под ОС FreeBSD: dnl базовый каталог с настройками define(`confCONFDIR', `/usr/local/etc/exim')dnl dnl каталог планировщика задач define(`confPERIODIC', `/usr/local/etc/periodic/daily')dnl для работы под ОС Linux: dnl базовый каталог с настройками define(`confCONFDIR', `/etc/exim')dnl dnl каталог планировщика задач define(`confPERIODIC', `/etc/cron.daily')dnl включение рилеинга почты доменов и 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(`confDISABLE_AUTH_WITHOUT_TLS', `PLAINTEXT')dnl сканирование рилея на предмет наличия на нем open proxy: define(`confCHECK_OPEN_PROXY', `REJECT')dnl define(`confCHECK_OPEN_PROXY_TIMEOUT', `120')dnl define(`confCHECK_OPEN_PROXY_HOST', `bsd.falbi.kiev.ua:25')dnl define(`confCHECK_OPEN_PROXY_BANNER', `220 bsd.falbi.kiev.ua ESMTP daemon')dnl dovecot (virtual maildirs, пользователи в passwd like файле): define(`confDELIVERY_TO', `MDIR_VIRTUAL FILTERS')dnl define(`confVIRT_MDIR_USER', `dovecot')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', `dovecot')dnl dovecot (user maildirs): define(`confDELIVERY_TO', `MDIR_USER FILTERS PROCMAIL')dnl define(`confSYSTEM_FILTER_USER', `dovecot')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 дополнительная доставка cyrus-imapd: define(`confDELIVERY_TO', confDELIVERY_TO` CYRUS')dnl резервное копирование почты системным фильтром без сохранения вирусов: define(`confMAIL_BACKUP_SYSTEM_FILTER', confCONFDIR`/site/system_filter_backup')dnl define(`confMAIL_BACKUP', `SYSTEM_FILTER')dnl define(`confANTIVIRUS_SAVE_BACKUP', `NO')dnl резервное копирование почты направлением копий писем по указанному адресу: define(`confMAIL_BACKUP', `ROUTER')dnl define(`confMAIL_BACKUP_ADDR', `corvax@devnull.org.ua')dnl проверка существования пользователя MS Exchange: define(`confEXCHANGE_ROUTERS', `ip_or_hostname_of_exchange : another_ip_or_hostname_of_exchange ')dnl define(`confEXCHANGE_AD_HOSTS', `one_ad_dc : another_ad_dc')dnl define(`confEXCHANGE_LDAP_USER', `ldapuser@active.directory.domain')dnl define(`confEXCHANGE_LDAP_PASSWORD', `password')dnl define(`confEXCHANGE_LDAP_BASE', `cn=Users,dc=active,dc=directory,dc=domain')dnl ###################################################################### 5. ИСПОЛЬЗОВАНИЕ АНТИВИРУСОВ 5.1. exim до 4.41-25 использование антивируса DrWEB с отверганием всех вирусов (550): define(`confUSE_DRWEB', `REJECT')dnl define(`confAV_SCANNER', `drweb:/var/drweb/run/drwebd.socket')dnl использование антивируса ClamAV с сохранением зараженных писем в карантине: define(`confUSE_CLAMAV', `WARN')dnl define(`confAV_SCANNER', `clamd:/var/run/clamav/clamd.sock')dnl define(`confQUARANTINE_DIR', `/usr/local/viruses')dnl использование нескольких антивирусов с сохранением зараженных писем в карантине: define(`confUSE_ANTIVIRUSES', `WARN')dnl define(`confAV_SCANNER', `clamd:/var/run/clamav/clamd.sock : drweb:/var/drweb/run/drwebd.socket')dnl define(`confQUARANTINE_DIR', `/usr/local/viruses')dnl (exiscan-acl с 4.30-14 по 4.41-24 с патчем https://mta.org.ua/exim/patches/exiscan-acl-4.32-17-malware/patch-src::malware.c) 5.2. использование нескольких антивирусов (exiscan-acl с 4.41-25 и выше): отключение ранее используемых способов взаимодействия с антивирусными демонами: define(`confUSE_CLAMAV', `NO')dnl define(`confUSE_DRWEB', `NO')dnl define(`confUSE_ANTIVIRUSES', `NO')dnl define(`confANTIVIRUS0_NAME', `ClamAV') define(`confANTIVIRUS0_ACT', `REJECT') define(`confANTIVIRUS0_SCAN', `clamd:/var/run/clamav/clamd') define(`confANTIVIRUS0_OPT', `defer_ok') define(`confANTIVIRUS1_NAME', `DrWeb') define(`confANTIVIRUS1_ACT', `REJECT') define(`confANTIVIRUS1_SCAN', `drweb:/usr/local/drweb/run/drwebd.sock') define(`confANTIVIRUS1_OPT', `') значениями параметров confANTIVIRUS0_ACT, confANTIVIRUS1_ACT и остальных могут быть: QUARANTINE - вывод в лог файл предупреждения и помещение зараженного письма в карантин DISCARD - удаление зараженного письма DROP - синоним DISCARD REJECT - отказ в приеме зараженного письма (возврат клиенту кода 5xx) WARN - устаревшее значение, эквивалентно `QUARANTINE DISCARD' значение QUARANTINE можно указывать вместе с DISCARD, DROP или REJECT, разделяя их пробелом значениями параметров confANTIVIRUS0_OPT, confANTIVIRUS1_OPT и остальных могут быть: defer_ok - при получении DEFER от антивирусного демона письмо доставляется получателю(ям), отправитель получает статус 250; defer_next - при получении DEFER от антивирусного демона письмо передается следующему (резервному) анти- вирусному демону. в остальных случаях письмо резервному антиви- русному демону не передается; defer_freeze - при получении DEFER от антивирусного демона письмо замораживается, отправитель получает статус 250; defer_no_mbox_unspool - при получении DEFER от антивирусного демона письмо не удаляется из /var/spool/exim/scan. несколько значений могут быть указаны через пробел для обеспечения работоспособности комбинации значений `QUARANTINE REJECT' необходимо использовать патч patch-src::reject_message: https://mta.org.ua/exim/patches/exiscan-acl-4.41-24-fakereject/patch-src::reject_message 5.3. использование нескольких антивирусов (exiscan-acl с 4.41-25 и выше), альтернативный метод: отключение ранее используемых способов взаимодействия с антивирусными демонами: define(`confUSE_CLAMAV', `NO')dnl define(`confUSE_DRWEB', `NO')dnl define(`confUSE_ANTIVIRUSES', `NO')dnl 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') 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') ANTIVIRUS(`aveserver', `REJECT QUARANTINE', `aveserver:/var/run/aveserver', `defer_next defer_no_mbox_unspool') 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') ANTIVIRUS(`kavscanner', `REJECT QUARANTINE', `cmdline:/opt/kav/bin/kavscanner \ -i0 \ %s : INFECTED : INFECTED (.+)', `defer_no_mbox_unspool') ANTIVIRUS(`DrWeb', `REJECT QUARANTINE', `drweb:/var/drweb/run/drwebd.socket', `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') 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') значения второго параметра такие же, как для переменных confANTIVIRUS0_ACT и confANTIVIRUS1_ACT из предыдущего параграфа. значения четвертого параметра такие же, как для переменных confANTIVIRUS0_OPT и confANTIVIRUS1_OPT из предыдущего параграфа.