Amavis - Amavis
Deweloper (y) | Patrick Ben Koetter |
---|---|
Pierwsze wydanie | 1997 |
Wersja stabilna | 2.11.1 (9 października 2018 [±] | )
Magazyn | |
Napisane w | Perl |
System operacyjny | Podobny do systemu Unix |
Rodzaj | Filtrowanie poczty |
Licencja | GPLv2 , uproszczona licencja BSD |
Stronie internetowej |
www |
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:
- zapewnia statystyki SNMP i monitorowanie stanu za pomocą obszernej bazy MIB zawierającej ponad 300 zmiennych
- zapewnia zorganizowany dziennik zdarzeń w formacie JSON
- Protokół IPv6 jest obsługiwany w interfejsach, a formularze adresów IPv6 w sekcji nagłówka wiadomości
- prawidłowo honoruje ustawienia dla poszczególnych odbiorców, nawet w przypadku wiadomości z wieloma adresatami, podczas skanowania wiadomości tylko raz.
- obsługuje międzynarodową pocztę e-mail ( RFC 6530 , SMTPUTF8 , EAI , IDN )
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ż
- Lista oprogramowania antywirusowego
- SpamAssassin , popularny klasyfikator spamu typu open source