# # пассивная проверка операционной системы хоста отправителя # # ВНИМАНИЕ! для использования пассивной проверки операционной системы # хоста отправителя нужен работающий в режиме демона p0f и собранная # динамически загружаемая библиотека exim-p0f3-dlfunc.so (см. ниже) # # NO - не использовать пассивную проверку ОС хоста отправителя # YES - не использовать пассивную проверку ОС хоста отправителя # DEBUG - выводить в файл протокола название ОС хоста отправителя # вне зависимости от действий в фильтре # define(`confCHECK_ACCESS_RELAY_OS', `NO')# # # в файле access-os можно указать необходимое действие для данной ОС в виде: # ОС : действие : сообщение : сообщение 2 # # где # ОС - операционная система в виде полного названия, маски или # регулярного выражения # действие - действие, применяемое к письму # сообщение - ответ SMTP клиенту (может отсутствовать) # сообщение 2 - сообщение в файл протокола или в добавляемое поле # заголовка (может отсутствовать) # # возможные названия ОС можно почерпнуть из файла p0f.fp из состава p0f # # возможные действия: # ok - исключение из проверки для указанной ОС # warn - вывод предупреждения в файл протокола и добавление в письмо поля заголовка # greylist=X - добавление X баллов к счетчику опционального грейлистинга # reject=X - добавление X баллов к счетчику опционального reject'а # delay=zz - задержка на zz секунд перед продолжением обработки сообщения # pause=zz - синоним delay=zz # # в полях действия и сообщений можно использовать вычисляемые выражения # т. о. можно возвращать разные действия для одной и той же ОС например # в зависимости от принадлежности хоста отправителя списку доверенных # сетей или от использования шифрования SMTP клиентом # # пример: # \N^Windows.*$\N : warn greylist=10 ${if eq{$tls_cipher}{}{pause=15 reject=1}{pause=5}} : $acl_c_sender_host_os OS detected on ${if eq{$sender_host_name}{}{}{$sender_host_name }}[$sender_host_address] # # для использования данного механизма нужно установить p0f и настроить работу в режиме демона: # # http://lcamtuf.coredump.cx/p0f.shtml # http://lcamtuf.coredump.cx/p0f3/releases/ # http://lcamtuf.coredump.cx/p0f3/releases/p0f-3.08b.tgz # http://lcamtuf.coredump.cx/p0f3/releases/p0f-latest.tgz # # для FreeBSD: # cd /usr/ports/net-mgmt/p0f && make install clean # # для RedHat/CentOS/Fedora: # https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/p/p0f-3.09b-1.fc25.src.rpm # ftp://ftp.funet.fi/pub/Linux/mirrors/fedora/linux/development/rawhide/Everything/source/tree/Packages/p/p0f-3.09b-1.fc25.src.rpm # # отдельно нужно собрать exim-p0f3-dlfunc и скопировать файл exim-p0f3-dlfunc.so в каталог /usr/local/libexec/exim # # http://dist.epipe.com/exim/ # http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.README.txt # http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz # # для сборки динамически загружаемой библиотеки потребутся исходные тексты exim # # пример для сборки exim из порта FreeBSD: # # fetch http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz # tar -xzf exim-p0f3-dlfunc-0.1.tar.gz # cd exim-p0f3-dlfunc-0.1 # CPPFLAGS="-I`ls -1d /usr/ports/mail/exim/work/exim-4.*/build-FreeBSD-*`" ./configure --libdir=`ls -1d /usr/ports/mail/exim/work/exim-4.*/build-FreeBSD-*`/ # make # cp -p .libs/exim-p0f3-dlfunc.so /usr/local/libexec/exim/ # cd .. # # пример для сборки exim из src rpm под CentOS: # # wget http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz # tar -xzf exim-p0f3-dlfunc-0.1.tar.gz # cd exim-p0f3-dlfunc-0.1 # CPPFLAGS="-I`ls -1d /usr/src/redhat/BUILD/exim-4.*/build-Linux-* | tail -n 1`" ./configure --libdir=`ls -1d /usr/src/redhat/BUILD/exim-4.*/build-Linux-* | tail -n 1`/ # make # cp -p .libs/exim-p0f3-dlfunc.so /usr/local/libexec/exim/ # cd .. # # путь по умолчанию к файлу сокета p0f: # define(`confCHECK_ACCESS_OS_P0F_SOCKET', `/var/run/p0f.sock')dnl # # т. к. p0f может слушать лишь на одном интерфейсе, то может понадобиться # запуск нескольких экземпляров p0f с настройкой работы на разных # интерфейсах и использованием разных файлов сокетов. # в этом случае нужно указать зависимость файла сокета от IP адреса интерфейса, на который пришло соединение от SMTP клиента: # define(`confCHECK_ACCESS_OS_P0F_SOCKET', `${if eq{$received_ip_address}{1.2.3.4}{/var/run/p0f_em1.sock}{/var/run/p0f.sock}}')dnl # # исключения из пассивной проверки операционной системы хоста отправителя: # AUTH - исключения для аутентифицированных отправителей # HOSTS - исключения для хостов из confCHECK_ACCESS_RELAY_OS_SKIP_HOSTS # define(`confCHECK_ACCESS_RELAY_OS_SKIP', `AUTH HOSTS')dnl # # исключения из пассивной проверки операционной системы хоста отправителя для хостов из списка: # define(`confCHECK_ACCESS_RELAY_OS_SKIP_HOSTS', `+relay_from_hosts')dnl # #\N^Windows.*$\N : warn greylist=10 pause=15 : $acl_c_sender_host_os OS detected #