Amavis - Amavis

Amavis
Deweloper (y) Patrick Ben Koetter
Pierwsze wydanie 1997  ( 1997 )
Wersja stabilna 2.11.1 (9 października 2018 ; 2 lata temu ) [±]  ( 09.10.2018 )
Magazyn Edytuj to w Wikidata
Napisane w Perl
System operacyjny Podobny do systemu Unix
Rodzaj Filtrowanie poczty
Licencja GPLv2 , uproszczona licencja BSD
Stronie internetowej www .amavis .org Edytuj to w Wikidata

Amavis jest open-source filtr treści za pośrednictwem poczty elektronicznej , wdrożenie Mail Transfer wiadomość, dekodowanie, niektóre przetwarzania i kontroli, a relacje z zewnętrznych filtrów zawartości w celu zapewnienia ochrony przed spamem i wirusami i innym złośliwym oprogramowaniem . Można go uznać za interfejs między programem pocztowym ( MTA , Mail Transfer Agent) a jednym lub kilkoma filtrami treści .

Amavis może być używany do:

  • wykrywania wirusów, spamu, zabronionych typów treści lub błędów składniowych w wiadomościach e-mail
  • blokować, oznaczać, przekierowywać (przy użyciu podadresowania ) lub przekazywać pocztę w zależności od jej zawartości, pochodzenia lub rozmiaru
  • poddawać kwarantannie (i wydawać) lub archiwizować wiadomości e-mail do plików, skrzynek pocztowych lub relacyjnej bazy danych
  • oczyszczanie przekazanych wiadomości przy użyciu zewnętrznego programu odkażającego
  • generować podpisy DKIM
  • weryfikuj podpisy DKIM i udostępniaj białą listę opartą na DKIM

Istotne cechy:

Typowa instalacja filtrowania poczty w Amavis składa się z Postfixa jako MTA, SpamAssassin jako klasyfikatora spamu i ClamAV jako ochrony antywirusowej, a wszystko to działa w systemie operacyjnym podobnym do Uniksa . Wiele innych skanerów antywirusowych (około 30) i niektóre inne skanery spam ( CRM114 , DSPAM , Bogofilter ) są obsługiwane, zbyt, a także kilka innych MTA.

Topologia interfejsów

Obsługiwane są trzy topologie do łączenia się z MTA . Proces amavisd można umieścić pomiędzy dwoma instancjami MTA, uzyskując klasyczną konfigurację filtrowania poczty po kolejce, lub amavisd może być używany jako filtr proxy SMTP w konfiguracji filtrowania przed kolejką lub można zapoznać się z procesem amavisd , aby zapewnić klasyfikacja poczty, ale nie samodzielne przekazywanie wiadomości pocztowej, w którym to przypadku klient konsultingowy pozostaje odpowiedzialny za przekazywanie poczty. To ostatnie podejście jest używane w konfiguracji Miltera (z pewnymi ograniczeniami) lub z historycznym programem klienta amavisd-submit .

Od wersji 2.7.0 preferowana jest konfiguracja przed kolejką, ponieważ umożliwia ona odrzucenie przesyłania wiadomości e-mail podczas sesji SMTP z klientem wysyłającym. W konfiguracji po kolejce filtrowanie ma miejsce po odebraniu wiadomości e-mail i umieszczeniu jej w kolejce przez MTA, w którym to przypadku filtr poczty nie może już odrzucić wiadomości, ale może ją tylko dostarczyć (prawdopodobnie oznaczoną) lub odrzucić, lub wygeneruj powiadomienie o niedostarczeniu, co może spowodować niepożądane rozproszenie wsteczne w przypadku odesłania wiadomości z fałszywym adresem nadawcy.

Wadą konfiguracji przed kolejką jest to, że wymaga zasobów (procesora, pamięci) proporcjonalnie do bieżącej (szczytowej) szybkości przesyłania poczty, w przeciwieństwie do konfiguracji po kolejce, w której pewne opóźnienie jest dopuszczalne, a zużycie zasobów odpowiada średniej szybkości przesyłania poczty . Wraz z wprowadzeniem opcji smtpd_proxy_options = speed_adjust w Postfix 2.7.0 wymagania dotyczące zasobów dla filtra zawartości przed kolejką zostały znacznie zmniejszone.

W niektórych krajach przepisy nie zezwalają na filtrowanie poczty w celu odrzucenia wiadomości e-mail po jej zaakceptowaniu przez MTA, więc wyklucza to konfigurację filtrowania po kolejce z odrzucaniem lub kwarantanną wiadomości, ale pozostawia możliwość dostarczenia (prawdopodobnie oznaczonej ) lub odrzucanie ich w konfiguracji przed kolejką (serwer proxy SMTP lub milter).

Protokoły interfejsów

Amavis może odbierać wiadomości e-mail z MTA przez jedno lub więcej gniazd z rodzin protokołów PF_INET ( IPv4 ), PF_INET6 ( IPv6 ) lub PF_LOCAL ( gniazdo domeny Unix ), za pośrednictwem protokołów SMTP , LMTP lub prostego protokołu prywatnego AM.PDP z programem pomocniczym, takim jak amavisd-milter, do komunikacji z miltersami . Po stronie wyjściowej protokoły SMTP lub LMTP mogą być używane do przekazywania wiadomości do instancji MTA zaplecza lub do LDA , lub też wiadomość może być przekazywana do utworzonego procesu przez potok uniksowy . Gdy używane są SMTP lub LMTP, sesja może być opcjonalnie szyfrowana przy użyciu rozszerzenia TLS STARTTLS ( RFC 3207 ) do protokołu. Potok poleceń SMTP ( RFC 2920 ) jest obsługiwany w kodzie klienta i serwera.

Łączenie się ze SpamAssassin

Gdy skanowanie spamu jest włączone, proces demona amavisd jest koncepcyjnie bardzo podobny do procesu spamowanego projektu SpamAssassin . W obu przypadkach rozwidlone procesy potomne bezpośrednio wywołują moduły SpamAssassin Perl , stąd ich wydajność jest podobna.

Główna różnica polega na wykorzystywanych protokołach: Amavis zazwyczaj mówi standardowym protokołem SMTP do MTA, podczas gdy w przypadku spamc / spamd MTA zwykle tworzy program spamujący , przekazując mu wiadomość przez potok uniksowy, a następnie proces spamc przesyła wiadomość do spamowanego demona przy użyciu prywatnego protokołu, a następnie spamd wywołuje moduły SpamAssassin Perl.

Priorytety projektowe

Priorytety projektowe amavisd-new ( odtąd nazywanego właśnie Amavis ) to: niezawodność, bezpieczeństwo, zgodność ze standardami, wydajność i funkcjonalność.

Niezawodność

Z zamiarem, aby żadna wiadomość e-mail nie mogła zostać utracona z powodu nieoczekiwanych zdarzeń, takich jak awarie we / wy, wyczerpanie zasobów i nieoczekiwane zakończenie programu, program amavisd skrupulatnie sprawdza stan zakończenia każdego wywołania systemowego i operacji we / wy. Nieoczekiwane zdarzenia są rejestrowane, jeśli jest to w ogóle możliwe, i obsługiwane przez kilka warstw obsługi zdarzeń. Amavis nigdy nie bierze odpowiedzialności za dostarczenie wiadomości pocztowej z dala od MTA: ostateczny status sukcesu jest przekazywany do MTA dopiero po przekazaniu wiadomości do instancji MTA zaplecza i potwierdzeniu odbioru. W przypadku jakichkolwiek krytycznych błędów podczas przetwarzania lub przesyłania wiadomości, przetwarzana wiadomość po prostu pozostaje w kolejce front-endowej instancji MTA do ponownego wypróbowania później. To podejście obejmuje również potencjalne nieoczekiwane awarie hosta, awarie procesu amavisd lub jednego z jego składników.

Kontrolowane jest wykorzystanie zasobów programu, takich jak rozmiar pamięci, deskryptory plików, wykorzystanie dysku i tworzenie podprocesów. Duże wiadomości e-mail nie są przechowywane w pamięci, więc wielkość dostępnej pamięci nie narzuca ograniczenia rozmiaru wiadomości e-mail, które mogą być przetwarzane, a zasoby pamięci nie są niepotrzebnie marnowane.

Bezpieczeństwo

Dużo uwagi poświęca się aspektom bezpieczeństwa, wymaganym przy obsłudze potencjalnie złośliwych, niestandardowych lub po prostu zniekształconych danych w wiadomościach pocztowych pochodzących z niezaufanych źródeł.

Proces obsługujący wiadomości e-mail działa z ograniczonymi uprawnieniami pod dedykowanym identyfikatorem użytkownika. Opcjonalnie może działać w chroot . Ryzyka przepełnienia bufora i błędów alokacji pamięci można w dużej mierze uniknąć, implementując obsługę wszystkich protokołów i przetwarzania poczty w Perlu , który w przejrzysty sposób obsługuje dynamiczne zarządzanie pamięcią. Uważa się, aby treść przetwarzanych wiadomości nie przedostała się do systemu w sposób niezamierzony. Perl zapewnia dodatkową siatkę bezpieczeństwa z oznaczeniem skażonych danych pochodzących z natury, a Amavis stara się dobrze wykorzystać tę funkcję Perla, unikając automatycznego czyszczenia danych ( używaj ponownego „skażenia” ) i tylko jawnie nie malując ich w strategicznym punktów, późno w przepływie danych.

Amavis może korzystać z kilku zewnętrznych programów, aby zwiększyć swoją funkcjonalność. Są to dearchiwery , dekompresory , skanery antywirusowe i skanery spamu . Ponieważ programy te są często implementowane w językach takich jak C lub C ++ , istnieje potencjalne ryzyko, że wiadomość e-mail przekazana do jednego z tych programów może spowodować jego awarię lub nawet otworzyć lukę w zabezpieczeniach. Ryzyko jest ograniczone przez uruchamianie tych programów jako nieuprzywilejowanego identyfikatora użytkownika i prawdopodobnie w środowisku chroot. Niemniej jednak należy unikać programów zewnętrznych, takich jak nieobsługiwane programy do usuwania archiwizacji. Korzystanie z tych zewnętrznych programów jest konfigurowalne i można je wyłączyć selektywnie lub jako grupę (jak wszystkie dekodery lub wszystkie skanery antywirusowe).

Wydajność

Pomimo implementacji w interpretowanym języku programowania Perl , sam Amavis nie jest powolny. Dobra wydajność funkcjonalności zaimplementowanej przez sam Amavis (nie mówiąc o komponentach zewnętrznych) jest osiągana poprzez obsługę danych w dużych porcjach (np. Nie wiersz po wierszu), unikanie niepotrzebnego kopiowania danych, optymalizację często przechodzących ścieżek kodu, poprzez przy użyciu odpowiednich struktur danych i algorytmów, a także przez niektóre optymalizacje niskopoziomowe. Wąskie gardła są wykrywane podczas programowania poprzez profilowanie kodu i testy porównawcze. Szczegółowy raport czasowy w dzienniku może pomóc w rozpoznaniu wąskich gardeł w konkretnej instalacji.

Niektóre zewnętrzne moduły lub programy, takie jak SpamAssassin lub niektóre skanery antywirusowe z wiersza poleceń, mogą być bardzo powolne, a ich używanie stanowiłoby ogromną większość czasu i zasobów przetwarzania, przez co zasoby wykorzystywane przez sam Amavis byłyby proporcjonalnie niewielkie.

Komponenty, takie jak zewnętrzne dekodery poczty, skanery antywirusowe i skanery spamu, można selektywnie wyłączyć, jeśli nie są potrzebne. Pozostaje funkcjonalność zaimplementowana przez sam Amavis, na przykład przesyłanie wiadomości pocztowych zi do MTA przy użyciu protokołu SMTP lub LMTP , sprawdzanie ważności sekcji nagłówka poczty, sprawdzanie zabronionych typów treści poczty, weryfikacja i generowanie podpisów DKIM .

W rezultacie zadania przetwarzania poczty, takie jak podpisywanie i weryfikacja DKIM (z wyłączonym innym sprawdzaniem poczty), mogą być wyjątkowo szybkie i mogą konkurować z implementacjami w językach kompilowanych. Nawet pełne sprawdzenie przy użyciu szybkiego skanera antywirusowego, ale przy wyłączonym skanowaniu spamu, może być zaskakująco szybkie.

Przestrzeganie norm

Implementacja protokołów i struktur wiadomości jest ściśle zgodna z zestawem odpowiednich standardów, takich jak 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 i RFC 4291 . W kilku przypadkach niektóre funkcje zostały ponownie zaimplementowane w kodzie Amavis, mimo że istnieje publiczny ( CPAN ) moduł Perl , ale brakuje mu uwagi do szczegółów w przestrzeganiu standardu lub brakuje wystarczającego sprawdzania i obsługi błędów.

Licencja

Amavis jest licencjonowany na podstawie licencji GPLv2 . Dotyczy to obecnego kodu, a także oddziałów historycznych. Wyjątkiem są niektóre programy pomocnicze (takie jak monitorowanie i raportowanie statystyk), które są objęte nową licencją BSD .

Projekt

Projekt rozpoczął się w 1997 roku jako skrypt powłoki systemu Unix do wykrywania i blokowania wiadomości e-mail zawierających wirusy . Miał on na celu blokowanie wirusów na etapie MTA (agent transferu poczty) lub LDA (dostarczanie lokalne), działając na platformie uniksopodobnej , uzupełniając inne mechanizmy ochrony przed wirusami działające na komputerach osobistych użytkowników końcowych.

Następnie narzędzie zostało ponownie zaimplementowane jako program w Perlu , który później przekształcił się w proces zdemonizowany . W ciągu pierwszych pięciu lat trwania projektu kilkunastu deweloperów pracowało na zmianę, opracowując kilka wariantów przy zachowaniu wspólnego celu, nazwy projektu i części infrastruktury deweloperskiej.

Od grudnia 2008 (do 09.10.2018) jedynym aktywnym oddziałem był oficjalnie amavisd-new , który był rozwijany i utrzymywany przez Mark Martinec od marca 2002 roku. Zostało to uzgodnione pomiędzy deweloperami w tym czasie w prywatnej korespondencji: Christian Bricart , Lars Hecking, Hilko Bengen, Rainer Link i Mark Martinec. Nazwa projektu Amavis jest w dużej mierze wymienna z nazwą oddziału amavisd-new .

Przez lata dodawano wiele funkcji, takich jak ochrona przed spamem i inną niechcianą zawartością, oprócz oryginalnej ochrony przed wirusami. Nacisk kładzie się na niezawodność, bezpieczeństwo, zgodność ze standardami i wydajność.

Domena amavis.org używana przez projekt została zarejestrowana w 1998 roku przez Christiana Bricarta, jednego z pierwszych programistów, który nadal zajmuje się rejestracją nazwy domeny. Domena jest teraz w całości przeznaczona dla jedynej aktywnej gałęzi. Lista mailingowa projektu została przeniesiona z SourceForge do amavis.org w marcu 2011 roku i jest prowadzona przez Ralfa Hildebrandta i Patricka Bena Koettera. Strona internetowa projektu i główna witryna dystrybucyjna znajdowały się w Instytucie Jožefa Stefana w Lublanie w Słowenii (do przekazania w 2018 r.), Gdzie większość prac rozwojowych miała miejsce w latach 2002-2018.

Ogłoszenie o zmianie kierownika projektu

9 października 2018 roku Mark Martinec ogłosił na ogólnej liście mailingowej wsparcia i dyskusji swoje odejście z projektu, a także, że Patrick Ben Koetter będzie nadal pełnił funkcję nowego lidera projektu.

Znam Bena osobiście, jest jednym z dwóch autorów The Book of Postfix i używa Amavisa także w życiu zawodowym, więc myślę, że projekt będzie w dobrych rękach.

-  Mark Martinec

Po tym Patrick powiadomił o migracji kodu źródłowego do publicznego repozytorium GitLab oraz o swoim planie dalszych kroków związanych z rozwojem projektu.

Oddziały i nazwa projektu

W historii projektu nazwa projektu lub jego gałęzi różniła się nieco. Początkowo nazwa projektu brzmiała AMaViS (skaner wirusów poczty), wprowadzony przez Christiana Bricarta. Po przepisaniu na Perl nazwa programu brzmiała Amavis-perl . Wersje zdemonowane były początkowo dystrybuowane pod nazwą amavisd-snapshot, a następnie jako amavisd . Modularna przeróbka Hilko Bengena została nazwana Amavis-ng .

W marcu 2002 roku Mark Martinec wprowadził gałąź amavisd-new , początkowo jako łatkę przeciwko amavisd-snapshot-20020300 . To później przekształciło się w samodzielny projekt, który jest obecnie jedyną zachowaną i aktywnie utrzymywaną gałęzią. Obecnie najlepiej zapisuje się nazwę projektu Amavis (podczas gdy sama nazwa programu to amavisd ). Nazwa Amavis jest obecnie w większości wymienna z nazwą amavisd-new .

Historia projektu

program powłoki

  • 1997 (oryginalny kod Mogens Kjær - Carlsberg Laboratory, zmodyfikowany przez Jürgen Quade) inicjał, nie wydany oficjalnie
  • 1998-01-17 AMaViS 0.1 (Christian Bricart) AMaViS, pierwsze oficjalne wydanie
  • 1998-01-28 AMaViS 0.1.1
  • 1998-12-08 AMaViS 0.2.0-pre1
  • 1999-02-25 AMaViS 0.2.0-pre2
  • 1999-03-29 AMaViS 0.2.0-pre3
  • 1999-03-31 AMaViS 0.2.0-pre4
  • 1999-07-19 AMaViS 0.2.0-pre5
  • 1999-07-20 AMaViS 0.2.0-pre6
  • 2000-10-31 AMaViS 0.2.1 (Christian Bricart, Rainer Link, Chris Mason)

Program w Perlu

  • 2000-01 Amavis-perl (Chris Mason)
  • 2000-08 Amavis-perl-8
  • 2000-12 Amavis-perl-10
  • 2001-04 Amavis-perl-11 (podzielony na amavisd)
  • 2003-03-07 Amavis-0.3.12 (Lars Hecking)

Demon Perla: amavisd

  • Demonizacja 2001-01 (Geoff Winkless)
  • 2001-04 amavisd-snapshot-20010407 (Lars Hecking)
  • 2001-07 amavisd-snapshot-20010714
  • 2002-03 amavisd-snapshot-20020300 (podzielony na amavisd-new)
  • 2003-03-03 amavisd-0.1

Perl, modularne przeprojektowanie

(Hilko Bengen)

  • 2002-03 amavis-ng-0.1
  • 2003-03 amavis-ng-0.1.6.2

amavisd-new

(Mark Martinec)

  • 2002-03-30 amavisd-nowy, wstępnie rozwidlony, Net :: Server
  • 2002-05-17
  • 2002-06-30 pakiety, wyszukiwania SQL
  • 2002-11-16 zintegrowany - jeden plik
  • 2002-12-27
  • 2003-03-14 wyszukiwania LDAP
  • 2003-06-16
  • 2003-08-25 p5
  • 2003-11-10 p6 @ * _ mapy
  • 2004-01-05 s.7
  • 2004-03-09 p8
  • 2004-04-02 p9
  • 2004-06-29 s.10
  • 2004-07-01 2.0 polityka bankowa, formaty adresów IPv6
  • 2004-08-15 2.1.0 Narzędzie do monitorowania amavisd-niania
  • 2004-09-06 2.1.2
  • 2004-11-02 2.2.0
  • 22.12.2004 2.2.1
  • 2005-04-24 2.3.0 @decoders, zasady blokowania dla poszczególnych odbiorców
  • 2005-05-09 2.3.1
  • 2005-06-29 2.3.2
  • 2005-08-22 2.3.3
  • 2006-04-02 2.4.0 DSN w SMTP,% * _ by_ccat
  • 2006-05-08 2.4.1
  • 2006-06-27 2.4.2 Przyjaciele pióra, logowanie SQL i kwarantanna
  • 2006-09-30 2.4.3
  • 2006-11-20 2.4.4
  • 2007-01-30 2.4.5
  • 2007-04-23 2.5.0 blokowanie kategorii treści, przepisany klient SMTP
  • 2007-05-31 2.5.1 amavisd-requeue
  • 2007-06-27 2.5.2
  • 2007-12-12 2.5.3
  • 2008-03-12 2.5.4
  • 2008-04-23 2.6.0 DKIM , bounce killer, TLS
  • 2008-06-29 2.6.1
  • 2008-12-12 Amavis jest nowy amavisd
  • 2008-12-15 2.6.2
  • 2009-04-22 2.6.3 obsługa CRM114 i DSPAM , obcięcie
  • 2009-06-25 2.6.4 monitorowanie przez SNMP
  • 2010-04-25 2.7.0-pre4
  • 2011-02-03 2.7.0-pre14
  • 2011-03-07 lista mailingowa została przeniesiona z SourceForge do amavis.org
  • 2011-04-07 2.6.5
  • 2011-05-19 2.6.6
  • 2011-06-01 2.7.0 ulepszenia przed kolejką, przyspieszenie
  • 2012-04-29 2.7.1
  • 2012-06-30 2.7.2
  • 2012-06-30 2.8.0 używa ØMQ zamiast BDB , optymalizacje wydajności
  • 2013-04-27 2.8.1-rc1
  • 2013-06-28 2.8.1 może używać Redis do przechowywania znajomych z piór
  • 2013-09-04 2.8.2-rc1 (2.8.2 nie wydany)
  • 2014-05-09 2.9.0 ustrukturyzowany log w formacie JSON , automatyczna reputacja adresów IP
  • 2014-06-27 2.9.1
  • 2014-10-22 2.10.0 Międzynarodowa poczta e-mail ( RFC 6530 , SMTPUTF8 , EAI , IDN )
  • 2014-10-22 2.10.1
  • 2016-04-26 2.11.0
  • 2018-10-09 2.11.1 drobne aktualizacje, tuż przed migracją do repozytorium GitLab

Zobacz też

Bibliografia

Zewnętrzne linki