приветствую
переделана проверка имен прикрепленных файлов
вернее, она реализована заново. т. е. старые проверки расширений файлов
и двойных расширений файлов всё ещё работают, но будут упразднены в
следующей версии конфигуратора.
новый механизм проверки реализован отдельно.
его включение управляется значением переменной confCHECK_MIME_FILENAME:
NO - не проводить проверку имен прикрепленных файлов
YES - проводить проверку имен прикрепленных файлов
по умолчанию проверка выключена:
define(`confCHECK_MIME_FILENAME', `NO')dnl
список шаблонов имен прикрепленных файлов находится в файле
access-mime-filename в виде:
filename : действие : сообщение : сообщение 2
где
filename - имя прикрепленного файла в виде полного имени,
wildcard или регулярного выражения
действие - действие, применяемое к письму
сообщение - ответ SMTP клиенту (может отсутствовать)
сообщение 2 - сообщение в файл протокола или в добавляемое поле
заголовка (может отсутствовать)
в качестве "действия" могут выступать:
ok - исключить имя файла из проверки
warn - выдача предупреждения в лог файл и добавление в
заголовки сообщения поля X-Warn-Attachment
текст сообщения об ошибке может быть указан через
двоеточие (см выше "сообщение2")
deny или reject - отказ в приеме сообщения
fakereject - фиктивный отказ в приеме сообщения
drop - отказ в приеме сообщения с обрывом соединения
discard - прием письма без доставки получателю
defer - возврат клиенту временной ошибки 4xx
quarantine - принять письмо с сохранением в карантин без доставки
получателям
greylist=xx - добавление xx баллов к счетчику опционального
greylisting'а
greylisting=xx - синоним greylist=xx
reject=yy - добавление yy баллов к счетчику опционального reject'а
deny=yy - синоним reject=yy
delay=zz - задержка на zz секунд перед продолжением обработки
сообщения
pause=zz - синоним delay=zz
применение серых списков - это может и перебор. всё остальное - как обычно.
примеры настроек для access-mime-filename приведены в
https://mta.org.ua/exim-4.83-conf/samples/access-mime-filename :
\N^(?i).+\.[a-z]{3}\.(bat|btm|cab|chm|cmd|com|cpl|dat|dll|exe|hlp|hta|js|jse|jsp|lnk|msi|pif|prf|reg|scr|shs|sys|vb|vbe|vbs|wsf|wsh|wsp)$\N
: warn deny : Attachment with double extension found ($mime_filename)
\N^(?i).+\.(bat|btm|cab|chm|cmd|com|cpl|dat|dll|exe|hlp|hta|js|jse|jsp|lnk|msi|pif|prf|reg|scr|shs|sys|vb|vbe|vbs|wsf|wsh|wsp)$\N
: warn : Attachment with suspicious extension found ($mime_filename)
\N^(?i).+\.(bat|btm|cab|chm|cmd|com|cpl|dat|dll|exe|hlp|hta|js|jse|jsp|lnk|msi|pif|prf|reg|scr|shs|sys|vb|vbe|vbs|wsf|wsh|wsp)\.(gz|bz2)$\N
: warn deny : Attachment with suspicious extension found in archive
($mime_filename)
строки перенеслись, но по указанной выше ссылке можно посмотреть
оригинал этих примеров.
правая часть строки вычисляемая. следовательно, в ней можно применять
переменные (в этих примерах $mime_filename), либо проводить
дополнительные проверки с помощью любых вычисляемых выражений exim (т.
е. возвращать для одних и тех же имен прикрепленных файлов разные
действия и разные сообщения в зависимости от ряда критериев).
исключение из проверки расширений файлов (список, значения указываются
через пробел):
AUTH - не проводить проверку для аутентифицированных
сообщений
RELAY_FROM - не проводить проверку для исходящих сообщений
WHITE_LIST_RELAYS - не проводить проверку для сообщений из
white_list_relays
POSTMASTER_ABUSE - не проводить проверку для postmaster/abuse
значение по умолчанию:
define(`confCHECK_MIME_FILENAME_SKIP', `AUTH RELAY_FROM
POSTMASTER_ABUSE')dnl
этот же механизм задуман для проверки имен файлов внутри прикрепленных
архивов (на данный момент речь идет о rar, zip и 7z архивах).
максимальный размер проверяемого архива, kB:
define(`confCHECK_MIME_FILENAME_MAX_ARC_SIZE', `2048')
проверять имена файлов внутри zip архивов:
NO - не проводить проверку имен файлов внутри zip архивов
YES - проводить проверку имен файлов внутри zip архивов
по умолчанию проверка выключена:
define(`confCHECK_MIME_FILENAME_ZIP', `NO')dnl
командная строка для получения списка файлов zip архива:
define(`confCHECK_MIME_FILENAME_UNZIP_CMD', `/usr/local/bin/unzip -l')dnl
здесь и далее в примерах приведены пути для FreeBSD.
регулярное выражение для удаления лишних строк из списка файлов zip архива:
define(`confCHECK_MIME_FILENAME_UNZIP_REGEXP',
`\N(?:.*\n)*(?:-+(?:\s+-+)+\n)((?:.*\n)*)(?:-+(?:\s+-+)+\n)(?:.*\n)*\N')dnl
данное регулярное выражение сохраняет в $1 строки, находящиеся между
строками
"--------- ---------- ----- ----"
и
"--------- ---------- ----- ----"
реально количество минусов может быть разным, как и количество групп
этих минусов.
проверять имена файлов внутри rar архивов:
NO - не проводить проверку имен файлов внутри rar архивов
YES - проводить проверку имен файлов внутри rar архивов
по умолчанию проверка выключена:
define(`confCHECK_MIME_FILENAME_RAR', `NO')dnl
командная строка для получения списка файлов rar архива:
define(`confCHECK_MIME_FILENAME_UNRAR_CMD', `/usr/local/bin/unrar l')dnl
регулярное выражение для удаления лишних строк из списка файлов rar архива:
define(`confCHECK_MIME_FILENAME_UNRAR_REGEXP',
`\N(?:.*\n)*(?:-+(?:\s+-+)+\n)((?:.*\n)*)(?:-+(?:\s+-+)+\n)(?:.*\n)*\N')dnl
данное регулярное выражение сохраняет в $1 строки, находящиеся между
строками
"----------- --------- ---------- ----- ----"
и
"----------- --------- ---------- ----- ----"
проверять имена файлов внутри 7z архивов:
NO - не проводить проверку имен файлов внутри 7z архивов
YES - проводить проверку имен файлов внутри 7z архивов
по умолчанию проверка выключена:
define(`confCHECK_MIME_FILENAME_7Z', `NO')dnl
командная строка для получения списка файлов 7z архива:
define(`confCHECK_MIME_FILENAME_UN7Z_CMD', `/usr/local/bin/7z l')dnl
регулярное выражение для удаления лишних строк из списка файлов 7z архива:
define(`confCHECK_MIME_FILENAME_UN7Z_REGEXP',
`\N(?:.*\n)*(?:-+(?:\s+-+)+\n)((?:.*\n)*)(?:-+(?:\s+-+)+\n)(?:.*\n)*\N')dnl
данное регулярное выражение сохраняет в $1 строки, находящиеся между
строками
"------------------- ----- ------------ ------------
------------------------"
и
"------------------- ----- ------------ ------------
------------------------"
по регулярным выражениям из access-mime-filename будет проверяться сразу
весь список файлов архива с суффиксом в виде разделителя "|" и
расширения архива.
пример регулярного выражения для проверки имен файлов внутри архивов:
\N^(?i)(.+\n)*.+\.(bat|btm|cab|chm|cmd|com|cpl|dat|dll|exe|hlp|hta|js|jse|jsp|lnk|msi|pif|prf|reg|scr|shs|sys|vb|vbe|vbs|wsf|wsh|wsp)\n(.+\n)*\|(rar|zip|7z)$\N
: warn deny: Attachment with suspicious extension found in archive
($mime_filename)
пример регулярного выражения для проверки наличия архивов внутри других
архивов:
\N^(?i)(.+\n)*.+\.(rar|zip|7z|tbz2|tgz)\n(.+\n)*\|(rar|zip|7z)$\N : warn
: Archive found in archive ($mime_filename)
опятть строки перенеслись. и опять же, оригиналы примеров этих
регулярных выражений можно посмотреть в samples:
https://mta.org.ua/exim-4.83-conf/samples/access-mime-filename
в общем, как-то так.....
--
Best wishes Victor Ustugov mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 371808614 JID: corvax_at_nb на jabber.corvax.kiev.ua
nic-handle: CRV-UANIC