[7] Amavisd & Spamassassin & ClamAV

5 lutego 2023 Wyłączono przez Adam [zicherka] Nogły

To 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ńcu
AllowSupplementaryGroups 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***]