Amavis — это контент -фильтр с открытым исходным кодом для электронной почты , реализующий передачу почтовых сообщений, декодирование, некоторую обработку и проверку, а также взаимодействие с внешними контент-фильтрами для обеспечения защиты от спама , вирусов и других вредоносных программ . Его можно считать интерфейсом между почтовой программой ( MTA , Mail Transfer Agent) и одним или несколькими контент-фильтрами . [2]
Amavis можно использовать для:
Примечательные особенности:
Обычная установка фильтрации почты с Amavis состоит из Postfix в качестве MTA, SpamAssassin в качестве классификатора спама и ClamAV в качестве антивирусной защиты, все они работают под управлением Unix-подобной операционной системы. Поддерживаются также многие другие антивирусные сканеры (около 30) и некоторые другие спам-сканеры ( CRM114 , DSPAM, Bogofilter ), а также некоторые другие MTA.
Поддерживаются три топологии для взаимодействия с MTA . Процесс amavisd может быть зажат между двумя экземплярами MTA, что дает классическую настройку фильтрации почты после очереди [3] , или amavisd может использоваться как фильтр SMTP-прокси в настройке фильтрации до очереди [4] , или процесс amavisd может быть использован для предоставления классификации почты, но не для пересылки почтового сообщения самостоятельно, в этом случае консультирующий клиент остается ответственным за пересылку почты. Этот последний подход используется в настройке Milter (с некоторыми ограничениями) или с исторической клиентской программой amavisd-submit .
Начиная с версии 2.7.0 предпочтительнее настройка «до очереди», так как она позволяет отклонять передачу почтового сообщения во время сеанса SMTP [4] с отправляющим клиентом. При настройке «после очереди» фильтрация происходит после того, как почтовое сообщение уже получено и поставлено в очередь MTA, в этом случае почтовый фильтр больше не может отклонять сообщение, а может только доставить его (возможно, помеченным), или отклонить, или сгенерировать уведомление о недоставке, что может вызвать нежелательное обратное рассеивание в случае возврата сообщения с поддельным адресом отправителя.
Недостатком настройки до очереди [4] является то, что она требует ресурсов (ЦП, памяти), пропорциональных текущей (пиковой) скорости передачи почты, в отличие от настройки после очереди, где некоторая задержка приемлема, а использование ресурсов соответствует средней скорости передачи почты. С введением опции smtpd_proxy_options=speed_adjust в Postfix 2.7.0 требования к ресурсам для фильтра содержимого до очереди были значительно снижены. [5]
В некоторых странах [6] законодательство не разрешает фильтрацию почты, чтобы отбрасывать почтовое сообщение после того, как оно было принято MTA, поэтому это исключает настройку фильтрации после очереди с отбрасыванием или карантином сообщений, но оставляет возможность доставки (возможно, помеченных) сообщений или их отклонения в настройке до очереди (SMTP-прокси или milter).
Amavis может получать почтовые сообщения от MTA через один или несколько сокетов семейств протоколов PF_INET ( IPv4 ), PF_INET6 ( IPv6 ) или PF_LOCAL ( сокет домена Unix ), через протоколы SMTP , LMTP или простой частный протокол AM.PDP может использоваться с вспомогательной программой, такой как amavisd-milter [7], для взаимодействия с milter . На выходной стороне протоколы SMTP или LMTP могут использоваться для передачи сообщения экземпляру внутреннего MTA или LDA , или сообщение может быть передано порожденному процессу по каналу Unix . При использовании SMTP или LMTP сеанс может быть дополнительно зашифрован с использованием расширения TLS STARTTLS (RFC 3207) к протоколу. Конвейеризация команд SMTP (RFC 2920) поддерживается в клиентском и серверном коде.
Когда включено сканирование спама , процесс-демон amavisd концептуально очень похож на процесс spamd проекта SpamAssassin . В обоих случаях разветвленные дочерние процессы напрямую вызывают модули SpamAssassin Perl , поэтому их производительность схожа.
Основное различие заключается в используемых протоколах: Amavis обычно использует стандартный протокол SMTP для MTA, тогда как в случае spamc/spamd MTA обычно порождает программу spamc, передающую ей сообщение по каналу Unix, затем процесс spamc передает сообщение демону spamd с использованием закрытого протокола, а затем spamd вызывает модули SpamAssassin Perl.
Приоритетами проектирования amavisd-new (далее просто Amavis ) являются: надежность, безопасность, соответствие стандартам, производительность и функциональность.
С намерением, чтобы ни одно почтовое сообщение не было потеряно из-за непредвиденных событий, таких как сбои ввода-вывода, истощение ресурсов и непредвиденные завершения программы, программа amavisd тщательно проверяет статус завершения каждого системного вызова и операции ввода-вывода. Непредвиденные события регистрируются, если это вообще возможно, и обрабатываются с помощью нескольких уровней обработки событий. Amavis никогда не берет на себя ответственность за доставку почтового сообщения вне MTA: окончательный статус успеха сообщается MTA только после того, как сообщение было передано во внутренний экземпляр MTA и был подтвержден прием. В случае любых фатальных сбоев во время обработки или передачи сообщения обрабатываемое сообщение просто остается в очереди внешнего экземпляра MTA, чтобы быть повторно отправленным позже. Этот подход также охватывает потенциальные непредвиденные сбои хоста, сбои процесса amavisd или одного из его компонентов.
Использование ресурсов программы, таких как размер памяти, дескрипторы файлов, использование диска и создание подпроцессов, контролируется. Большие почтовые сообщения не хранятся в памяти, поэтому доступный размер памяти не накладывает ограничений на размер почтовых сообщений, которые могут быть обработаны, и ресурсы памяти не расходуются впустую.
Большое внимание уделяется аспектам безопасности, необходимым при обработке потенциально вредоносных, нестандартных или просто искаженных данных в почтовых сообщениях, поступающих из ненадежных источников.
Процесс, обрабатывающий почтовые сообщения, работает с пониженными привилегиями под выделенным идентификатором пользователя. При желании он может запустить chroot -ed. Риски переполнения буфера и ошибок выделения памяти в значительной степени избегаются за счет реализации всей обработки протоколов и обработки почты в Perl , который прозрачно обрабатывает динамическое управление памятью. Принимаются меры, чтобы содержимое обработанных сообщений непреднамеренно не распространялось в системе. Perl обеспечивает дополнительную защитную сетку с его маркировкой испорченных данных, происходящих из дикой природы, и Amavis тщательно использует эту функцию Perl с пользой, избегая автоматического снятия испорченности с данных ( используйте re "taint" ) и снимая испорченность только явно в стратегических точках, на поздних этапах потока данных.
Amavis может использовать несколько внешних программ для улучшения своей функциональности. Это деархиваторы , декомпрессоры , антивирусные сканеры и спам- сканеры. Поскольку эти программы часто реализуются на таких языках, как C или C++ , существует потенциальный риск того, что почтовое сообщение, переданное одной из этих программ, может вызвать ее сбой или даже открыть дыру в безопасности. Риск ограничивается запуском этих программ как непривилегированного идентификатора пользователя и, возможно, chroot-ed. Тем не менее, следует избегать внешних программ, таких как неподдерживаемые деархиваторы. Использование этих внешних программ настраивается, и их можно отключать выборочно или группой (как все декодеры или все антивирусные сканеры).
Несмотря на то, что Amavis реализован на интерпретируемом языке программирования Perl , сам по себе Amavis не является медленным. Хорошая производительность функциональности, реализованной самим Amavis (не говоря уже о внешних компонентах), достигается за счет обработки данных большими порциями (например, не построчно), избегания ненужного копирования данных, оптимизации часто проходимого кода, использования подходящих структур данных и алгоритмов, а также некоторых низкоуровневых оптимизаций. Узкие места обнаруживаются во время разработки путем профилирования кода и бенчмаркинга. Подробный отчет о времени в журнале может помочь распознать узкие места в конкретной установке.
Некоторые внешние модули или программы, такие как SpamAssassin или некоторые антивирусные сканеры командной строки, могут работать очень медленно, и их использование займет большую часть затраченного времени и ресурсов обработки, делая ресурсы, используемые самим Amavis, пропорционально довольно малыми.
Такие компоненты, как внешние почтовые декодеры, антивирусные сканеры и спам- сканеры, могут быть выборочно отключены, если они не нужны. Остается функциональность, реализованная самой Amavis, например, передача почтового сообщения из и в MTA с использованием протокола SMTP или LMTP , проверка действительности раздела заголовка письма, проверка запрещенных типов содержимого письма, проверка и генерация подписей DKIM .
В результате задачи обработки почты, такие как подписание и проверка DKIM (при отключенных других проверках почты), могут выполняться исключительно быстро и могут конкурировать с реализациями на компилируемых языках. [8] [9] [10] Даже полная проверка с использованием быстрого антивирусного сканера, но с отключенным сканированием спама, может выполняться на удивление быстро.
Реализация протоколов и структур сообщений строго соответствует набору применимых стандартов, таких как RFC 5322, RFC 5321, RFC 2033, RFC 3207, RFC 2045, RFC 2046, RFC 2047, RFC 3461, RFC 3462, RFC 3463, RFC 3464, RFC 4155, RFC 5965, RFC 6376, RFC 5451, RFC 6008 и RFC 4291. В нескольких случаях некоторые функции были повторно реализованы в коде Amavis, несмотря на то, что существует публичный ( CPAN ) модуль Perl , но в нем недостаточно внимания к деталям в соответствии со стандартом или недостаточно проверки и обработки ошибок.
Amavis лицензирован по лицензии GPLv2 . Это относится как к текущему коду, так и к историческим ветвям. Исключением являются некоторые вспомогательные программы (например, мониторинг и статистические отчеты), которые покрываются новой лицензией BSD .
Проект стартовал в 1997 году как скрипт оболочки Unix для обнаружения и блокировки сообщений электронной почты, содержащих вирус . Он был предназначен для блокировки вирусов на этапе MTA (агент передачи почты) или LDA (локальная доставка), работая на платформе , подобной Unix , дополняя другие механизмы защиты от вирусов, работающие на персональных компьютерах конечных пользователей.
Затем инструмент был переработан в виде программы Perl , которая позже превратилась в демонизированный процесс. Дюжина разработчиков сменяли друг друга в течение первых пяти лет проекта, разрабатывая несколько вариантов, сохраняя при этом общую цель, название проекта и часть инфраструктуры разработки.
С декабря 2008 года (до 2018-10-09) единственной активной веткой была официально amavisd-new , которую с марта 2002 года разрабатывал и поддерживал Марк Мартинец. Это было согласовано между разработчиками в то время в частной переписке: Кристиан Брикар, Ларс Хекинг, Хилько Бенген, Райнер Линк и Марк Мартинец. Название проекта Amavis во многом взаимозаменяемо с названием ветки amavisd-new .
За эти годы было добавлено много функций, таких как добавление защиты от спама и другого нежелательного контента, помимо изначальной защиты от вирусов. Основное внимание уделяется надежности, безопасности, соблюдению стандартов и производительности.
Домен amavis.org , используемый проектом, был зарегистрирован в 1998 году Кристианом Брикаром, одним из первых разработчиков, который до сих пор поддерживает регистрацию доменного имени. Домен теперь полностью посвящен единственной активной ветке. Список рассылки проекта был перенесен с SourceForge на amavis.org в марте 2011 года и размещен Ральфом Хильдебрандтом и Патриком Беном Кеттером. Веб-страница проекта и основной сайт распространения располагались в Институте Йожефа Стефана , Любляна, Словения (до передачи в 2018 году), где большая часть разработки проходила в период с 2002 по 2018 год.
9 октября 2018 года Марк Мартинец объявил [11] в общей рассылке поддержки и обсуждений о своем уходе из проекта, а также о том, что Патрик Бен Кеттер продолжит работу в качестве нового руководителя проекта.
Я знаю Бена лично, он один из двух авторов «Книги постфикса» и использует Amavis в своей профессиональной жизни, так что я думаю, что проект будет в надежных руках. [11]
— Марк Мартинек
После этого Патрик уведомил [12] о переносе исходного кода в публичный репозиторий GitLab и о своем плане дальнейших шагов по развитию проекта.
На протяжении истории проекта название проекта или его ответвлений несколько менялось. Первоначальное написание названия проекта было AMaViS (A Mail Virus Scanner), введенное Кристианом Брикаром. После переписывания на Perl название программы стало Amavis-perl . Демонизированные версии изначально распространялись под названием amavisd-snapshot , а затем как amavisd . Модульная переписка Хилько Бенгена была названа Amavis-ng .
В марте 2002 года Марк Мартинек представил ветку amavisd-new , изначально как патч против amavisd-snapshot-20020300 . Позже она превратилась в самостоятельный проект, который сейчас является единственной выжившей и активно поддерживаемой веткой. В настоящее время название проекта предпочтительно писать как Amavis (в то время как название самой программы — amavisd ). Название Amavis сейчас в основном взаимозаменяемо с amavisd-new .
{{cite web}}
: Отсутствует или пусто |title=
( помощь )