[7] Amavisd & Spamassassin & ClamAV
5 lutego 2023To trio oprogramowania służy do zwalczania spamu i wiadomości e-mail z załącznikami wirusów. Amavisd jest używany jako interfejs między Postfix jako MTA (agent przesyłania poczty), a narzędziami do sprawdzania treści są spamassassin i clamav. Nie ma konkretnych konfiguracji, więc zainstalujemy je z pakietów.
Opis instalacji i konfiguracji ClamAV został opisany w innym rozdziale, ja jednak pokażę i tutaj, jak od podstaw przygotować go do współpracy z pocztą elektroniczną.
Instalacja
Instalujemy potrzebne oprogramowanie:
root@vfbsd01:~ # pkg install amavisd-new root@vfbsd01:~ # pkg install clamav
Spamassassin jest instalowaną zależnością dla amavisd, więc zostanie zainstalowany automatycznie. Najpierw skonfigurujmy amavisd.
Konfiguracja
Plik konfiguracyjny to [/usr/local/etc/amavisd.conf]. Edytuj ten plik i upewnij się, że te wartości są poprawne.
root@vfbsd01:~ # cp /usr/local/etc/amavisd.conf /usr/local/etc/amavisd.conf.old root@vfbsd01:~ # mcedit /usr/local/etc/amavisd.conf # linie 12-14: sprawdź i zmień # @bypass_virus_checks_maps = (1); # controls running of anti-virus code # @bypass_spam_checks_maps = (1); # controls running of anti-spam code # $bypass_decode_parts = 1; # controls running of decoders&dearchivers # linie 20-23: sprawdź, odkomentuj i zmień $daemon_user = 'vscan'; # (no default; customary: vscan or amavis), -u $daemon_group = 'vscan'; # (no default; customary: vscan or amavis), -g $mydomain = 'zicher.lab'; # a convenient default for other settings $MYHOME = '/var/amavis'; # a convenient default for other settings, -H # linia 53: zmień @local_domains_maps = ( [".$mydomain","zicher-dwa.test"] ); # list of all local domains # linia 155: odkomentuj i zmień $myhostname = 'mailbsd.zicher.lab'; # must be a fully-qualified domain name!
Istnieje wiele opcji, które można skonfigurować, ale te są podstawowe. Zobacz oficjalną stronę, aby uzyskać więcej informacji. Na koniec wprowadźmy kolejną zmianę w tym pliku, aby amavisd i clamav wiedziały o sobie nawzajem.
Clamav pochłania dużo pamięci. Nie będziesz w stanie uruchomić go na serwerze z mniej niż 2 GB pamięci RAM. Nie usuwaj komentarzy z poniższych linii, usuń komentarz z:
# @bypass_virus_checks_maps = (1);
Kontroluje działanie kodu antywirusowego i usuwa go z rc.conf, jeśli już go zainstalowałeś.
# linie 386-389: odkomentuj ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], qr/\bOK$/m, qr/\bFOUND$/m, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
Domyślny plik [amavisd.conf] zawiera „sock.sock” w linii 387. Usuń ten błąd, aby linia 387 wyglądała jak:
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
Teraz edytuj [/etc/group] i dodaj [clamav] jako członka grupy [vscan], aby wyglądało to tak.
root@vfbsd01:~ # mcedit /etc/group # linia 62: zmień vscan:*:110:clamav
Następnie sprawdź plik konfiguracyjny clamav [/usr/local/etc/clamd.conf] i upewnij się, że ta linia istnieje. Jeśli nie istnieje – dodaj ją na końcu pliku.
root@vfbsd01:~ # mcedit /usr/local/etc/clamd.conf# dodaj na końcuAllowSupplementaryGroups yes
Teraz połączmy wszystko razem z postfixem. Edytuj [/usr/local/etc/postfix/master.cf] i dodaj te linie na końcu.
root@vfbsd01:~ # mcedit /usr/local/etc/postfix/master.cf # dodaj na końcu # Amavisd amavisfeed unix - - n - 2 lmtp -o lmtp_data_done_timeout=1200 -o lmtp_send_xforward_command=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o re-ceive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters,no_address_mappings -o local_header_rewrite_clients= -o smtpd_milters= -o local_recipient_maps= -o relay_recipient_maps=
Edytuj [/usr/local/etc/postfix/main.cf] i dodaj te linie na końcu.
root@vfbsd01:~ # mcedit /usr/local/etc/postfix/main.cf # dodaj na końcu # Amavisd content_filter = amavisfeed:[127.0.0.1]:10024
Upewnijmy się, że nasze trio uruchamia się przy każdym ponownym uruchomieniu. Edytuj [/etc/rc.conf] i dodaj te linie.
root@vfbsd01:~ # mcedit /etc/rc.conf # dodaj na końcu # jeśli masz już zainstalowanego i skonfigurowanego ClamAV to pomiń jego sekcję # Amavisd amavisd_enable="YES" # ClamAV clamav_clamd_enable="YES" clamav_freshclam_enable="YES" # Spamd spamd_enable="YES"
Część demona clamav_freshclam służy do aktualizacji sygnatur antywirusowych. Aby zaktualizować definicje i podpisy spamassassina, będziemy musieli uruchomić zadanie cron. Najpierw zróbmy wstępne uruchomienie dla spamassassin.
root@vfbsd01:~ # sa-update –D Nov 21 11:38:41.725 [6583] dbg: logger: adding facilities: all … Nov 21 11:38:44.877 [6583] dbg: diag: updates complete, exiting with code 0
Opcja „-D” służy do uruchamiania w trybie debugowania, dzięki czemu można zobaczyć, co się dzieje. Jeśli dostępna jest aktualizacja, kod wyjścia spamassassina to 0, jeśli nie, kod wyjścia to 1. W przypadku aktualizacji będziemy musieli ponownie uruchomić demona spamassassina. Stwórzmy więc zadanie cron, które będzie uruchamiane raz dziennie i sprawdza dostępność aktualizacji.
root@vfbsd01:~ # mcedit /etc/crontab # dodaj na końcu # uruchamia minutę po północy aktualizację 1 0 * * * root /usr/local/bin/sa-update && /usr/local/sbin/service sa-spamd restart
Kiedy już zajęliśmy się częścią aktualizacji, zajmijmy się więc i samym spamassassinem i uruchommy go w końcu.
root@vfbsd01:~ # service sa-spamd start Starting spamd.
Zróbmy wstępne uruchomienie clamav.
root@vfbsd01:~ # freshclam
Jeśli zobaczysz poniższe ostrzeżenie, zignoruj je. Demon clamav nadal nie jest uruchomiony.
WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamav/clamd.sock: No such file or directory
Na koniec zrestartujmy wszystkie usługi wraz z postfixem.
root@vfbsd01:~ # service clamav-clamd restart Stopping clamav_clamd. Waiting for PIDS: 6640. Starting clamav_clamd. root@vfbsd01:~ # service clamav-freshclam restart Stopping clamav_freshclam. Waiting for PIDS: 2075. Starting clamav_freshclam. root@vfbsd01:~ # service amavisd restart amavisd not running? (check /var/amavis/amavisd.pid). Starting amavisd. root@vfbsd01:~ # service postfix restart postfix/postfix-script: stopping the Postfix mail system postfix/postfix-script: waiting for the Postfix mail system to terminate postfix/postfix-script: starting the Postfix mail system
Testowanie
Sprawdźmy połączenie między amavisd i postfix.
root@vfbsd01:~ # telnet localhost 10024 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready # wpisz i naciśnij [Enter] ehlo localhost 250-[127.0.0.1] 250-VRFY 250-PIPELINING 250-SIZE 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SMTPUTF8 250-DSN 250 XFORWARD NAME ADDR PORT PROTO HELO IDENT SOURCE # wpisz i naciśnij [Enter] quit 221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel Connection closed by foreign host.
Następnie wykonaj:
root@vfbsd01:~ # telnet localhost 10025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailbsd.zicher.lab ESMTP Postfix # wpisz i naciśnij [Enter] ehlo localhost 250-mailbsd.zicher.lab 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-SMTPUTF8 250 CHUNKING # wpisz i naciśnij [Enter] quit 221 2.0.0 Bye Connection closed by foreign host.
I na koniec kilka prawdziwych testów. Najpierw sprawdź plik dziennika poczty.
root@vfbsd01:~ # tail -f /var/log/maillog Nov 21 12:07:09 vfbsd01 amavis[6713]: No decoder for .lrz Nov 21 12:07:09 vfbsd01 amavis[6713]: Using primary internal av scanner code for Cla-mAV-clamd Nov 21 12:07:09 vfbsd01 amavis[6713]: Found secondary av scanner ClamAV-clamscan at /usr/local/bin/clamscan Nov 21 12:07:20 vfbsd01 postfix/postfix-script[6732]: stopping the Postfix mail system Nov 21 12:07:20 vfbsd01 postfix/postfix-script[6735]: waiting for the Postfix mail system to terminate Nov 21 12:07:20 vfbsd01 postfix/master[4422]: terminating on signal 15 Nov 21 12:07:21 vfbsd01 postfix/postfix-script[6806]: starting the Postfix mail system Nov 21 12:07:21 vfbsd01 postfix/master[6808]: daemon started -- version 3.7.2, confi-guration /usr/local/etc/postfix Nov 21 12:11:21 vfbsd01 postfix/smtpd[6824]: connect from localhost[127.0.0.1] Nov 21 12:11:34 vfbsd01 postfix/smtpd[6824]: disconnect from localhost[127.0.0.1] ehlo=1 quit=1 commands=2
Następnie z innego konta e-mail wyślij wiadomość tekstową (nie HTML) z taką zawartością (DOKŁADNIE) w treści.
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Następnie ponownie sprawdź plik dziennika poczty.
root@vfbsd01:~ # tail -f /var/log/maillog Nov 21 12:17:28 vfbsd01 amavis[6715]: (06715-01) Blocked INFECTED (Eicar-Signature) {DiscardedInternal,Quarantined}, MYNETS LOCAL [192.168.100.151]:60307 <bogdan@zicher.lab> -> <adam@zicher.lab>, quarantine: virus-WzIWykuFqVLT, Queue-ID: 7F274187440, Message-ID: <aef90bc3-a2c9-5a49-5267-4cd4bca14b9a@zicher.lab>, mail_id: WzIWykuFqVLT, Hits: -, size: 876, 142 ms Nov 21 12:17:28 vfbsd01 postfix/lmtp[6846]: 7F274187440: to=<adam@zicher.lab>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.19, delays=0.01/0.04/0.01/0.14, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=06715-01 - INFECTED: Eicar-Signature) Nov 21 12:17:28 vfbsd01 postfix/qmgr[6810]: 7F274187440: removed Nov 21 12:17:28 vfbsd01 postfix/virtual[6849]: AAC8A187442: to=<virusalert@zicher.lab>, relay=virtual, delay=0.02, delays=0/0/0/0.01, dsn=5.1.1, status=bounced (unknown user: "virusalert@zicher.lab") Nov 21 12:17:28 vfbsd01 postfix/cleanup[6845]: AEA6D187444: message-id=<20221121111728.AEA6D187444@mailbsd.zicher.lab> Nov 21 12:17:28 vfbsd01 postfix/bounce[6850]: AAC8A187442: sender non-delivery notification: AEA6D187444 Nov 21 12:17:28 vfbsd01 postfix/qmgr[6810]: AEA6D187444: from=<>, size=4631, nrcpt=1 (queue active) Nov 21 12:17:28 vfbsd01 postfix/qmgr[6810]: AAC8A187442: removed Nov 21 12:17:28 vfbsd01 postfix/virtual[6849]: AEA6D187444: to=<virusalert@zicher.lab>, relay=virtual, delay=0.02, delays=0.02/0/0/0, dsn=5.1.1, status=bounced (unknown user: "virusalert@zicher.lab") Nov 21 12:17:28 vfbsd01 postfix/qmgr[6810]: AEA6D187444: removed
Wiadomość e-mail nie zostanie dostarczona do odbiorcy, zamiast tego wiadomość zostanie przekazana na konto [virusalert]. Jeśli posiadasz takie konto, to wiadomość zostanie na nie dostarczona. Oto jak wygląda taka wiadomość:
Wyślijmy kolejny testowy e-mail, w tym samym formacie tekstowym, ale tym razem umieść poniższą linię w treści wiadomości.
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Powinieneś zobaczyć coś takiego w pliku dziennika.
root@vfbsd01:~ # tail -f /var/log/maillog … Nov 21 12:36:11 vfbsd01 amavis[6715]: (06715-02) Passed SPAM {RelayedTaggedInter-nal,Quarantined}, MYNETS LOCAL [192 …
Zaś w kliencie poczty coś na poniższy kształt. Temat wiadomości oznaczony jako [***SPAM***]