Skip to content

Добавляем ACL не пускающие письма с исполняемыми файлами, в том числе и вложенными в архив

Добавляем ACL не пускающие письма с исполняемыми файлами, в том числе и вложенными в архивы

Настройка будет показана на примере Ubuntu 16.04, но с учётом специфических для дистров моментов, этот метод применим и для других случаевл

Открываем в редакторе файл /etc/exim4/exim4.conf.localmacros и добавлем в него

# макросы
EXE_PATTERNS = apk|cgi|js|jse|jsp|wsf|exe|com|vb|vba|vbs|vbe|bat|pif|ps1|scr|hta|cmd|chm|cpl|reg|lnk|dll|sys|jar|ocx|msi|msu|mst
ARCH_PATTERNS = bz2|zip|rar|7z|cab|ace|7za|lah|lzo|lzx|gz|arj|bin|msi|cbr|deb|rpm|gzip|jar|pak|pkg|tar-gz|tgz|xar|zipx|wim|tb2|tar|paq|xz|iso|jar|lzh|lzma|pak|pk3|pk4|smzip|u3p|xpi|zipx|cpio|xar|lz|rk|zoo|img|ha

Открываем в редакторе файл /etc/exim4/exim4.conf.template и прокручиваем его до блока объявления acl-ов, который выглядит примерно так

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_not_smtp = acl_check_not_smtp

и указан обычно немного выше начала основного блока с набором ACL-ей, что начинается с

begin acl

Затем переходим к блоку begin acl и в нём добавляем ближе к началу ещё один блок

    acl_check_mime:
        # Проверка на присутствие отправителя в белых списках host_local_deny_exceptions, sender_local_deny_exceptions, local_host_whitelist, local_sender_whitelist и whitelist.
        accept
              hosts = ${if exists{CONFDIR/host_local_deny_exceptions}\
                    {CONFDIR/host_local_deny_exceptions}\
                    {}}

        accept
                senders = ${if exists{CONFDIR/sender_local_deny_exceptions}\
                    {CONFDIR/sender_local_deny_exceptions}\
                    {}}
        accept
                hosts = ${if exists{CONFDIR/local_host_whitelist}\
                    {CONFDIR/local_host_whitelist}\
                    {}}
        accept
                senders = ${if exists{CONFDIR/local_sender_whitelist}\
                  {CONFDIR/local_sender_whitelist}\
                  {}}
        accept
                hosts = net-lsearch;/etc/exim4/whitelist
        # Проверка вложений на их присутствие в списке исполняемых файлов или на соответствие типа файла исполняемому файлу
        deny    message     = We do not accept attachments like: $mime_filename
                condition   = ${if or{{match{$mime_content_type}{(?i)executable}}{match{$mime_filename}{\N(?i)\.(EXE_PATTERNS)$\N}}}}
                log_message = Rejected mail with executable attachement: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
        # Проверка вложений c рашсширениями как у архивов на присутствие файлов, в которых присутствуют вложенные исполняемые файлы, обнаруженые спомощью deepfind
        deny    message   = We do not accept attachments/deepfind like: $mime_filename
            condition       = ${if match{$mime_filename}{\N(?i)\.(ARCH_PATTERNS)$\N}}
            decode          = default
            condition       = ${if match{${run{/usr/local/bin/deepfind $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}
            log_message     = Rejected mail with executable/deepfind attachement: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
        # Проверка сложений с расширениями zip, rar, tgz, tar, gz и 7z на присутствие исполняемых файлов с помощью архиватора(ахиватор выводит список файлов, exim по нему проходится правилом с EXE_PATTERNS, если находит совпадение, выводит сообщение о том, что сообщение заблокировано).
        deny    message   = A arhive attachment contains a Windows-executable file - blocked because we are afraid of new viruses not recognized [yet] by antiviruses.
            condition       = ${if match{$mime_filename}{\N(?i)\.(zip|rar|tgz|tar|gz|7z)$\N}}
            condition       = ${if def:sender_host_address}
            decode          = default
            condition       = ${if or{\
                                {match{${run{/usr/bin/unzip -l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                {match{${run{/usr/bin/unrar l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                {match{${run{/usr/bin/tar -tf $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                {match{${run{/usr/bin/7z l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}}}
            log_message             = forbidden arhive attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients

            accept

Устаналиваем на сервер необходимое ПО

apt install unrar
apt install unzip
apt install p7zip-full
apt install strigi-utils

Полезные ссылки

https://forum.lissyara.su/mta-mail-transfer-agent-f20/problemy-s-fil-traciej-pisem-s-ispolnyaemymi-vloje-t43823.html https://kostikov.co/ispolzovanie-analiza-mime-sredstvami-exim-488 https://www.lissyara.su/doc/exim/4.62/content_scanning_at_acl_time/ http://www.rldp.ru/exim/exim484r/glava39.htm