[exim-conf] переделана проверка имен прикрепленных файлов

Victor Ustugov victor на corvax.kiev.ua
Сб Окт 3 22:12:06 EEST 2015


приветствую

переделана проверка имен прикрепленных файлов

вернее, она реализована заново. т. е. старые проверки расширений файлов
и двойных расширений файлов всё ещё работают, но будут упразднены в
следующей версии конфигуратора.

новый механизм проверки реализован отдельно.

его включение управляется значением переменной 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



Подробная информация о списке рассылки exim-conf