Questa è la parte 11 della serie di tutorial da zero del server di posta Ubuntu. In questo articolo ti mostrerò come usare Amavis e ClamAV per eseguire la scansione dei virus nei messaggi di posta elettronica.
Amavi (A Mail Virus Scanner) è un'interfaccia ad alte prestazioni tra un agente di trasferimento messaggi (MTA) come Postfix e filtri di contenuto. Un filtro del contenuto è un programma che esegue la scansione delle intestazioni e del corpo di un messaggio di posta elettronica e di solito esegue alcune azioni in base a ciò che trova. Gli esempi più comuni sono Scanner antivirus ClamAV e SpamAssassin .
Amavis parla il protocollo SMTP standard e può anche utilizzare l'interfaccia del milter di Sendmail. È comunemente usato per
- Scansione antivirus mediante integrazione con ClamAV (Clam AntiVirus)
- controllo dello spam mediante l'integrazione con SpamAssassin
- Firma e verifica DKIM. (In realtà, preferisco usare OpenDKIM per la firma e la verifica DKIM.)
Prerequisiti
Dovresti aver completato almeno la parte 1 (server SMTP Postfix) e la parte 2 (server IMAP Dovecot) della serie di tutorial da zero del server di posta Ubuntu. Nota che se hai utilizzato iRedMail o Modoboa per configurare il tuo server di posta, Amavis e ClamAV sono già installati e configurati, quindi non è necessario seguire questo tutorial.
Avviso :Amavis e ClamAV richiedono una discreta quantità di RAM. Assicurati di avere almeno 1,3 GB di RAM libera sul tuo server prima di installare Amavis e ClamAV. L'intero stack del server di posta (Postfix, Dovecot, Amavis, ClamAV, SpamAssassin, OpenDKIM, MySQL/MariaDB, PostfixAdmin e Roundcube Webmail) richiede almeno 3 GB RAM per funzionare senza problemi. Se la tua RAM si esaurisce, avrai problemi come il server di posta che va offline o non risponde.
Passaggio 1:installa Amavis su Ubuntu
Amvis è disponibile dal repository Ubuntu predefinito, quindi esegui il comando seguente per installarlo.
sudo apt install amavisd-new -y
Una volta installato, si avvia automaticamente. Puoi verificarne lo stato con:
stato systemctl amavis
Uscita:
● amavis.service - LSB:avvia amavisd-new mailfilter Caricato:caricato (/etc/init.d/amavis; generato) Attivo:attivo (in esecuzione) da ven 2020-08-07 15:43:40 HKT; 1min 1s fa Documenti:man:systemd-sysv-generator(8) Compiti:3 (limite:9451) Memoria:75,4 milioni CGroup:/system.slice/amavis.service ├─1794260 /usr/sbin/amavisd-new (master ) ├─1794263 /usr/sbin/amavisd-new (bambino vergine) └─1794264 /usr/sbin/amavisd-new (bambino vergine)
Se non è in esecuzione, puoi avviarlo con:
sudo systemctl start amavis
Abilita l'avvio automatico all'avvio.
sudo systemctl enable amavis
Per impostazione predefinita, è in ascolto su 127.0.0.1:10024 , come si può vedere con:
sudo netstat -lnpt | grep amavis
E funziona come amavis
utente. Per controllare il numero di versione, esegui
amavisd-new -V
Esempio di output:
amavisd-nuovo-2.11.0 (20160426)
Per controllare i log di Amavis, puoi eseguire
sudo journalctl -eu amavis
I virus vengono comunemente diffusi come allegati ai messaggi di posta elettronica. Installa i seguenti pacchetti per consentire ad Amavis di estrarre e scansionare i file di archivio nei messaggi di posta elettronica come .7z
, .cab
, .doc
, .exe
, .iso
, .jar
e .rar
file.
sudo apt install arj bzip2 cabextract cpio rpm2cpio file gzip lhasa nomarch pax rar unrar p7zip-full unzip zip lrzip lzip liblz4-tool lzop unrar-free
Se usi Ubuntu 18.04, installa anche ripole
pacchetto.
sudo apt install ripole
Tieni presente che se il tuo server non utilizza un nome di dominio completo (FQDN) come nome host, Amavis potrebbe non avviarsi. E il nome host del sistema operativo potrebbe cambiare, quindi si consiglia di impostare un nome host valido direttamente nel file di configurazione di Amavis.
sudo nano /etc/amavis/conf.d/05-node_id
Trova la riga seguente.
#$myhostname ="mail.example.com";
Rimuovi il carattere del commento (#) e modifica mail.example.com
al tuo vero nome host.
$miohostname ="mail.linuxbabe.com";
Salva e chiudi il file. Riavvia Amavis per rendere effettive le modifiche.
sudo systemctl riavvia amavis
Fase 2:integra il server SMTP Postfix con Amavis
Amavisd-new funziona come proxy SMTP. L'e-mail viene inviata tramite SMTP, elaborata e restituita all'MTA tramite una nuova connessione SMTP.
Modifica il file di configurazione principale di Postfix.
sudo nano /etc/postfix/main.cf
Aggiungi la riga seguente alla fine del file. Questo dice a Postfix di attivare il filtro dei contenuti inviando ogni messaggio di posta elettronica in arrivo ad Amavis, che è in ascolto su 127.0.0.1:10024 .
filtro_contenuto =smtp-amavis:[127.0.0.1]:10024
Inoltre, aggiungi la seguente riga.
smtpd_proxy_options =regolazione_velocità
Ciò ritarderà la connessione di Postfix al filtro dei contenuti fino alla ricezione dell'intero messaggio e-mail, il che può impedire ai filtri dei contenuti di sprecare tempo e risorse per i client SMTP lenti.
Salva e chiudi il file. Quindi modifica il master.cf
file.
sudo nano /etc/postfix/master.cf
Aggiungi le seguenti righe alla fine del file. Questo indica a Postfix di utilizzare uno speciale componente client SMTP chiamato smtp-amavis
per recapitare messaggi di posta elettronica ad Amavis. Si prega di consentire almeno uno spazio vuoto (tab o barra spaziatrice) prima di ogni -o
. Nelle configurazioni suffisso, uno spazio vuoto precedente significa che questa riga è la continuazione della riga precedente.
smtp-amavis unix - - n - 2 smtp -o syslog_name=postfix/amavis -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 -o smtp_tls_security_level=none
Quindi aggiungi le seguenti righe alla fine del file. Questo dice a Postfix di eseguire un demone smtpd aggiuntivo in ascolto su 127.0.0.1:10025 per ricevere messaggi di posta elettronica da Amavis.
127.0.0.1:10025 inet n - n - - smtpd -o syslog_name=postfix/10025 -o content_filter=-o mynetworks_style=host -o mynetworks=127.0.0.0/8 -o local_recipient_maps=-o relay_recipient_maps=-o strict_rfc821_envelopes =yes -o smtp_tls_security_level =nessuno -o smtpd_tls_security_level =nessuno -o smtpd_restriction_classes =-o smtpd_delay_reject =no -o smtpd_client_restrictions =permit_mynetworks, respingere -o smtpd_helo_restrictions =-o smtpd_sender_restrictions =-o smtpd_recipient_restrictions =permit_mynetworks, respingere -o smtpd_end_of_data_restrictions =-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 receiver_override_options=no_header_body_checks, no_unknown_client_addressmapping,spredress_recipient_checksSalva e chiudi il file. Riavvia Postfix per rendere effettive le modifiche.
sudo systemctl restart postfixFase 3:integra Amavis con ClamAV
Ora che Postfix può passare le e-mail in arrivo ad Amavis, dobbiamo installare lo scanner antivirus ClamAV e integrarlo con Amavis, in modo che le e-mail in arrivo possano essere scansionate da ClamAV.
Installa ClamAV su Ubuntu.
sudo apt install clamav clamav-daemonCi saranno due servizi systemd installati da ClamAV:
clamav-daemon.service
:il demone dello spazio utente di Clam AntiVirusclamav-freshclam.service
:il programma di aggiornamento del database dei virus ClamAV
Innanzitutto, controlla lo stato di clamav-freshclam.service
.
stato systemctl clamav-freshclam
Come puoi vedere, è attivo (in esecuzione) e utilizza 217,6 M di RAM sul mio server di posta. Quindi controlla il diario/registro.
sudo journalctl -eu clamav-freshclam
Uscita:
Suggerimento:se il comando precedente non si chiude immediatamente, premi il tasto Q per chiuderlo.
Possiamo vedere che freshclam
scaricato 3 database di virus. CVD sta per ClamAV Virus Database.
- cvd.giornaliero
- main.cvd
- bytecode.cvd
Tuttavia, clamd
non è stato notificato perché freshclam non può connettersi a clamd tramite /var/run/clamav/clamd.ctl
. Controlla lo stato di clamav-daemon.service
.
stato systemctl clamav-daemon
Uscita:
Come puoi vedere, non è stato avviato perché una condizione non è stata soddisfatta. In /lib/systemd/system/clamav-daemon.service
file, ci sono due condizioni:
ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}
Il clamav-daemon.service
non è stato avviato perché main.cvd e daily.cvd non sono stati ancora scaricati all'avvio. Quindi dobbiamo solo riavviare questo servizio.
sudo systemctl restart clamav-daemon
Ora dovrebbe essere in esecuzione. A proposito, utilizza 731,4 M di RAM sul mio server di posta. Se il tuo server di posta non dispone di RAM sufficiente, il servizio fallirà.
stato systemctl clamav-daemon.service
Il clamav-freshclam.service
controllerà gli aggiornamenti del database dei virus ClamAV una volta all'ora.
Ora dobbiamo attivare il controllo dei virus in Amavis.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Decommenta le seguenti righe per abilitare il controllo antivirus.
#@bypass_virus_checks_maps =(# \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
Salva e chiudi il file. Ci sono molti scanner antivirus in /etc/amavis/conf.d/15-av_scanners
file. ClamAV è l'impostazione predefinita. Amavis chiamerà ClamAV tramite /var/run/clamav/clamd.ctl
Presa Unix. Dobbiamo aggiungere l'utente clamav
agli amavis
gruppo.
sudo adduser clamav amavis
Quindi riavvia Amavis e il demone ClamAV per rendere effettive le modifiche.
sudo systemctl restart amavis clamav-daemon
Controlla i log.
sudo journalctl -eu amavis
Puoi vedere che Amavis ora sta usando ClamAV per scansionare i virus.
08 agosto 17:26:19 mail.linuxbabe.com amavis[1233432]:Utilizzo del codice dello scanner av interno primario per ClamAV-clamdAug 08 17:26:19 mail.linuxbabe.com amavis[1233432]:Trovato scanner av secondario ClamAV-clamscan su /usr/bin/clamscan
Ora, se invii un'e-mail da altri server di posta come Gmail al tuo server di posta e controlli le intestazioni delle e-mail, puoi trovare una riga come quella di seguito, che indica che questa e-mail è stata scansionata da Amavis.
X-Virus-Scanned:Debian amavisd-new su linuxbabe.com
Dovresti anche controllare il registro della posta (/var/log/mail.log
) per trovare eventuali errori.
Fase 4:utilizza una porta dedicata per gli invii e-mail
ClamAV può ora scansionare sia le email in entrata che quelle in uscita. Amavis è in ascolto sulla porta 10024 per i messaggi di posta elettronica in entrata e in uscita. Tuttavia, è buona norma utilizzare una porta diversa come 10026 per gli invii di posta elettronica da utenti autenticati. Modifica il file di configurazione di Amavis.
sudo nano /etc/amavis/conf.d/50-user
Le impostazioni personalizzate dovrebbero essere aggiunte tra use strict;
e 1;
linea. Per impostazione predefinita, Amavis è in ascolto solo sulla porta 10024. Aggiungi la seguente riga per farlo ascoltare anche sulla porta 10026.
$ inet_socket_port =[10024,10026];
Quindi aggiungi la seguente riga, che imposta la politica "ORIGINATING" per la porta 10026.
$interface_policy{'10026'} ='ORIGINANTE';
Successivamente, aggiungi le seguenti righe, che definiscono la politica "ORIGINATING".
$policy_bank{'ORIGINATING'} ={ # posta presumibilmente originata dai nostri utenti originata => 1, # dichiarare che la posta è stata inviata dal nostro client smtp allow_disclaimers => 1, # abilita l'inserimento del disclaimer se disponibile # notifica all'amministratore locale malware di origine virus_admin_maps => ["virusalert\@$mydomain"], spam_admin_maps => ["virusalert\@$mydomain"], warnbadhsender => 1, # forza la conversione MTA a 7 bit (ad es. prima della firma DKIM) smtpd_discard_ehlo_keywords => ['8BITMIME'], bypass_banned_checks_maps => [1], # consenti l'invio di qualsiasi nome e tipo di file terminate_dsn_on_notify_success => 0, # non rimuovere NOTIFY=opzione SUCCESS};
Salva e chiudi il file. Riavvia Amavis.
sudo systemctl riavvia amavis
Controlla il suo stato per vedere se il riavvio è riuscito.
stato systemctl amavis
Quindi, modifica il file di configurazione principale di Postfix.
sudo nano /etc/postfix/master.cf
Aggiungi la seguente riga al submission
servizio, quindi le e-mail dai client SMTP autenticati verranno passate ad Amavis in ascolto sulla porta 10026. Questa riga sovrascriverà (-o
) il content_filter
parametro in /etc/postfix/main.cf
file che abbiamo aggiunto nel passaggio 2.
-o content_filter=smtp-amavis:[127.0.0.1]:10026
In questo modo:
Se hai abilitato smtps
servizio per gli utenti di Microsoft Outlook, è necessario aggiungere anche questa riga a smtps
servizio.
Salva e chiudi il file. Riavvia Postfix per rendere effettive le modifiche.
sudo systemctl restart postfix
Controlla il suo stato per vedere se il riavvio è riuscito.
postfisso dello stato systemctl
Filtro antispam in Amavis
Nota :Se hai seguito il mio tutorial SpamAssassin, non è necessario abilitare il controllo dello spam in Amavis. Se lo abiliti, ogni email verrà controllata due volte da SpamAssassin.
Per abilitare il controllo dello spam in Amavis, installa SpamAssassin e i relativi pacchetti.
sudo apt install spamassassin libnet-dns-perl libmail-spf-perl pyzor razor
Modifica un file di configurazione Amavis.
sudo nano /etc/amavis/conf.d/15-content_filter_mode
Decommenta le seguenti righe per abilitare il controllo dello spam.
#@bypass_spam_checks_maps =(# \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Salva e chiudi il file. Quindi riavvia Amavis.
sudo systemctl riavvia amavis
DKIM in Amavis
Due software comuni che possono eseguire la firma e la verifica DKIM su Linux sono OpenDKIM e Amavis. Preferisco usare OpenDKIM perché funziona meglio con OpenDMARC. Quindi non spiegherò come DKIM firmare la tua email in Amavis.
Per impostazione predefinita, Amavis può verificare la firma DKIM dei messaggi di posta elettronica in arrivo. Se hai OpenDKIM in esecuzione sul tuo server di posta, puoi disabilitare la verifica DKIM in Amavis.
sudo nano /etc/amavis/conf.d/21-ubuntu_defaults
Trova la riga seguente e cambia 1
a 0
, quindi Amavis non verificherà le firme DKIM.
$enable_dkim_verification =1;
Salva e chiudi il file. Quindi riavvia Amavis.
sudo systemctl riavvia amavis
Quando riceve le e-mail in arrivo, Postfix chiamerà OpenDKIM tramite l'interfaccia di sendmail milter per verificare le firme DKIM, quindi passerà l'e-mail ad Amavis per il controllo dei virus. Quando invia e-mail in uscita, Postfix chiamerà OpenDKIM per firmare le e-mail, quindi le passerà ad Amavis per il controllo antivirus.
Miglioramento delle prestazioni di Amavis
Per impostazione predefinita, Amavis esegue 2 processi. Se vedi le seguenti righe nel registro della posta (/var/log/mail.log
), significa che Amavis non può elaborare le email abbastanza velocemente.
postfix/qmgr[1619188]:avviso:la posta per [127.0.0.1]:10024 sta utilizzando fino a 4001 di 4008 voci di coda attivepostfix/qmgr[1619188]:avviso:potrebbe essere necessario ridurre smtp-amavis connect e helo timeoutspostfix /qmgr[1619188]:avviso:in modo che Postfix salti rapidamente hostspostfix non disponibile/qmgr[1619188]:avviso:potrebbe essere necessario aumentare main.cf minimal_backoff_time e maximal_backoff_timepostfix/qmgr[1619188]:avviso:in modo che Postfix perda meno tempo su posta non consegnabile postfix/qmgr[1619188]:avviso:potrebbe essere necessario aumentare il processo master.cf smtp-amavis limitmail postfix/qmgr[1619188]:avviso:evitare di svuotare l'intera coda quando si dispone di posta postfix/qmgr[1619188]:avviso:un sacco di posta in differita, che è dannoso per le prestazioni
Per migliorare le prestazioni, modifica il file di configurazione di Amavis.
sudo nano /etc/amavis/conf.d/50-user
Aggiungi la seguente riga nel file tra use strict;
e 1;
linea. Questo farà eseguire ad Amavis 4 processi. Se hai 10 core della CPU, puoi cambiarne da 4 a 10. Tieni presente che l'esecuzione di più di 10 processi Amavis ha scarso effetto sulle prestazioni.
$max_server =4;
Salva e chiudi il file. Quindi modifica il file di configurazione principale di Postifx.
sudo nano /etc/postfix/master.cf
Trova smtp-amavis
definizione del servizio e modificare il limite di processo da 2 a 4.
smtp-amavis unix - - n - 4 smtp -o syslog_name=postfix/amavis -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 -o smtp_tls_security_level=none
Salva e chiudi il file. Quindi riavvia Amavis e Postfix per rendere effettive le modifiche.
sudo systemctl restart amavis postfix
Ora esegui il seguente comando. Dovresti vedere che ora ci sono 4 processi Amavis.
sudo amavisd-tata
Premi Ctrl+C
per fermare amavisd-nanny.
Salta il controllo antivirus per le tue newsletter
Se utilizzi il tuo server di posta per inviare newsletter e abiliti Amavis e ClamAV, molte risorse di CPU e RAM verranno utilizzate per il controllo antivirus quando invii newsletter ai tuoi abbonati. Potrebbe far sì che il tuo server di posta non risponda. Puoi saltare il controllo antivirus per le tue newsletter utilizzando il metodo seguente.
Modifica il file di configurazione principale di Postfix.
sudo nano /etc/postfix/master.cf
Aggiungi le seguenti righe all'inizio di questo file. Questo abiliterà smtpd
sulla porta 2525 del localhost e può accettare connessioni client avviate dallo stesso server. Se c'è un altro processo in ascolto sulla porta 2525, puoi cambiare 127.0.0.1:2525 con qualcos'altro, come 127.0.0.1:2552. Nota che il content_filter
il parametro è impostato su none
, il che significa che le email non verranno scansionate da ClamAV.
127.0.0.1:2525 inet n - - - 1 smtpd -o syslog_name=postfix/2525 -o postscreen_greet_action=ignore -o content_filter=
Quindi aggiungi le seguenti righe alla fine di questo file. Sostituisci 12.34.56.78 con l'indirizzo IP pubblico del server di posta. Questo creerà un altro demone di invio Postfix in ascolto sulla porta 10587. Questo è per le connessioni client da un altro server.
12.34.56.78:10587 inet n - y - - smtpd -o syslog_name =postfix / 10587 -o smtpd_tls_security_level =cifrare -o smtpd_tls_wrappermode =no -o smtpd_sasl_auth_enable =yes -o smtpd_relay_restrictions =permit_sasl_authenticated, respingere -o smtpd_recipient_restrictions =permit_mynetworks, permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o content_filter=
Salva e chiudi il file. Quindi riavvia postfix.
sudo systemctl restart postfix
Se la tua applicazione newsletter viene eseguita sul server di posta, specifica 127.0.0.1:2525
come host SMTP, senza autenticazione SMTP. Se la tua applicazione newsletter viene eseguita su un server diverso, specifica 12.34.56.78:10587
come host SMTP, con autenticazione SMTP.
Risoluzione dei problemi
Se il tuo server Postfix SMTP non è in grado di inviare e-mail in uscita e trovi il seguente messaggio di errore nel registro della posta (/var/log/mail.log
),
relay=none, delay=239, delays=239/0.04/0/0, dsn=4.3.0, status=deferred (server non disponibile o non in grado di ricevere la posta)
potrebbe essere che amavis non sia in esecuzione, quindi è necessario verificarne lo stato:
sudo systemctl status amavis
Puoi riavviarlo con:
sudo systemctl riavvia amavis
Un'altra causa di questo errore è che stai applicando la connessione TLS per Postfix quando invii e-mail in uscita con la seguente impostazione in /etc/postfix/main.cf
file.
smtp_tls_security_level =applica
Poiché Postfix non può stabilire una connessione TLS ad Amavis, l'e-mail viene rinviata. Dovresti usare la seguente impostazione.
smtp_tls_security_level =maggio
Quindi riavvia Postfix.