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-4.60-conf/m4/Makefile Makefile или cd m4 && wget https://mta.org.ua/exim-4.60-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 sync_countries: синхронизация списков сетей стран access-relay-greylist: сборка списка сетей стран для серого списка 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 acl_m3 - временная, используется внутри одного acl acl_m4 - используется для вставки полей заголовков acl_m5 - используется для вычисления исключений из проверки SpamAssassin'ом acl_m6 - используется для fakereject не из acl_smtp_data, внутри acl_check_data используется для удаления полей заголовков acl_m7 - данные для антивирусных квитанций acl_m8 - вычисленные предельные баллы SpamAssassin'а acl_m9 - флаг abuse/postmaster, при помещении файла в карантин содержит список оповещаемых получателей acl_c0 - временная, используется для вылавливания defer'ов acl_c1 - временная, используется для сохранения результата работы предыдущего антивирусного демона acl_c2 - временная, используется внутри одного acl acl_c3 acl_c4 acl_c5 acl_c6 - используется для подсчета баллов для опционального reject'а acl_c7 - PTR запись рилея в случае несовпадения записей в прямой и реверсной зонах acl_c8 - используется для подсчета баллов для опционального greylisting'а acl_c9 - используется для анонимизации Received ###################################################################### 4. ПРИМЕРЫ ВКЛЮЧЕНИЯ РАЗЛИЧНЫХ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ для работы под ОС FreeBSD: dnl базовый каталог с настройками define(`confCONFDIR', `/usr/local/etc/exim')dnl dnl каталог планировщика задач define(`confPERIODIC', `/usr/local/etc/periodic/daily')dnl dnl пользователь, с правами которого запускается exim define(`confEXIM_USER', `mailnull')dnl dnl группа, с правами которой запускается exim define(`confEXIM_GROUP', `mail')dnl для работы под ОС Linux: dnl базовый каталог с настройками define(`confCONFDIR', `/etc/exim')dnl dnl каталог планировщика задач define(`confPERIODIC', `/etc/cron.daily')dnl dnl пользователь, с правами которого запускается exim define(`confEXIM_USER', `exim')dnl dnl группа, с правами которой запускается exim define(`confEXIM_GROUP', `mail')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. ИСПОЛЬЗОВАНИЕ АНТИВИРУСОВ ANTIVIRUS(`название_антивируса', `действие', `параметр_для_av_scanner', `дополнительные_параметры', `шелловая_команда_получения_номера_версии_антивируса', `название_антивируса_для_заголовков_по_умолчанию') возможные действия с зараженными файлами: QUARANTINE - вывод в лог файл предупреждения и помещение зараженного письма в карантин DISCARD - удаление зараженного письма DROP - синоним DISCARD REJECT - отказ в приеме зараженного письма (возврат клиенту кода 5xx) WARN - устаревшее значение, эквивалентно `QUARANTINE DISCARD' значение 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;"', `') 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.+$//"', `') 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', `/usr/local/share/kav/bin/kavscanner -v 2>/dev/null | head -n 1 | perl -p -e "chomp;s/\/RELEASE.+$//"', `') 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(`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"', `') 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')