28 luglio 2021 Roberto Puzzanghera 5 commenti
Simscan è un semplice programma che abilita il servizio qmail smtpd a rigettare virus , spam e a bloccare allegati durante la conversazione SMTP in modo da ridurre al minimo il carico per il sistema.
La versione 1.4.1 è un fork del programma originale di Inter7. I sorgenti sono stati ripuliti e leggermente modernizzati (per evitare vari warming durante la compilazione), contegono varie correzioni di bug e patche, tra le quali quasi tutte quelle di John Simpson (l'unica mancante è la patch "debug" che applicheremo comunque, come mostrato sotto) e il bug fix di Gustavo Castro che era presente nella mia precedente patch combinata. Pertanto la nuova patch agginge solamente solo quanto segue:
qmail-smtpd
(maggiori informazioni nel sito di jms);spamc
come utente null invece di estrarre il nome utente dal primo destinatario.La mia patch attachments-size-limit che consente di superare un limite di simscan
per cui i messaggi con allegati di dimensione superiore a 250k non vengono passati a spamassassin
. Questa patch consente di impostare la dimensione massima degli allegati in bytes in fase di compilazione configurando il programma in questo modo
autoreconf -f -i
(questo è necessario dal momento che il file configure.ac è stato modificato)configure --with-attachments-size-limit=500000
(default 250k, valore numerico in bytes)
Inoltre, gli eventi per cui simscan
non viene attivato vengono ora loggati a livello smtpd
anche senza attivare l'opzione debug.
La funzione principale di ripMIME è estrarre gli allegati da un MIME email package criptato. E' usato da simscan. E' un pacchetto raccomandato.
cd /usr/local/src git clone https://github.com/inflex/ripMIME.git cd ripMIME chown -R root:root . make make install
ripmime
per maggiori informazioniSalvare una mail con un allegato dentro nel file "message.eml".
mkdir tmp ripmime --debug --disable-qmail-bounce -i message.eml -d tmp > ripmime.log
Gli allegati dovrebbero essere stati estratti nella cartella tmp
.
# ls -l tmp/ total 2352 -rw------- 1 root root 2396801 Aug 2 16:10 attached_file.jpeg -rw-r--r-- 1 root root 0 Aug 2 16:10 textfile0 -rw-r--r-- 1 root root 4 Aug 2 16:10 textfile1 -rw-r--r-- 1 root root 25 Aug 2 16:10 textfile2
Come si può notare, ripMIME
ha estratto il file allegato attached_file.jpeg
senza dotarlo dei privilegi di lettura per il gruppo. Questo non sarà un problema per noi, dal momento che sceglieremo di eseguire simscan
con l'utente clamav
, ma se si sta pensando di eseguirlo come utente simscan
e perciò includendo clamav
nel gruppo simscan
, allora sarà necessario modificare ripMIME
con questa patch (probabilmente si dovrà farlo a manualmente poichè la patch è per la vecchia versione v. 1.4.0.9 che non compila più), altrimenti clamav
non avrà i privilegi per leggere gli allegati.
Installare come segue. Notare che è necessario creare il file configure.in per i vecchi compilatori e che con la versione 1.4.1 dobbiamo dire esplicitamente al compilatore dove si trova il database di clamav
(--enable-clamavdb-path
):
Per maggiori informazioni sulla patch applicata si veda la pagina del sito di J.Simpson linkata sopra. La patch include anche un bug fix di Bob Greco (maggiori informazioni qui).
cd /usr/local/src wget https://notes.sagredo.eu/files/qmail/tar/simscan-1.4.1.tar.gz wget https://notes.sagredo.eu/files/qmail/patches/simscan/simscan-1.4.1_20210728.patch tar xzf simscan-1.4.1.tar.gz cd simscan-1.4.1 chown -R root:root . patch < ../simscan-1.4.1_20210728.patch autoreconf -f -i ./configure \ --enable-user=clamav \ --enable-clamav=y \ --enable-spam=y \ --enable-spam-passthru=y \ --enable-spam-hits=9.5 \ --enable-per-domain=y \ --enable-ripmime \ --enable-attach=y \ --enable-custom-smtp-reject=y \ --enable-spamc-user=y \ --enable-received=y \ --enable-clamavdb-path=/usr/local/share/clamav \ --with-attachments-size-limit=500000 make make install-strip
Dare un'occhiata al file README per una spiegazione di di tutte le opzioni di configurazione. Per quanto riguarda lo spam, faremo in modo di rigettare già a livello smtp lo spam con un punteggio maggiore di 9.5 e di passare gli altri messaggi all'utente dopo averli eventualmente opportunamente etichettati come spam. Questo consente di non rigettare mai messaggi che siano falsi spam.
--enable-per-domain=y|n
Abilita la possibilita di assegnare settaggi differenti per i vari domini.--enable-spam=y|n
Abilita il controllo dello spam. Per default è no.--enable-spam-passthru=y|n
Lascia passare lo spam oppure lo rigetta. Default: disable (reject)--enable-spam-hits=number
Rigetta lo spam con punteggio superiore a questo "hit level". Default 10.0--enable-custom-smtp-reject=y
Abilita la possibilità di personalizzare il messaggio di rifiuto di un messaggio. Quando viene abilitato verrà messo il nome del virus trovato nel messaggio restituito al mittente. Richiede la patch qmail-queue-custom-error.patch. Abilitando dropmsg si disabilita questa opzione. (maggiori informazioni qui)--enable-spamc-user=y
Impostazione obbligatoria se si vogliono gestire le userprefs (blacklist personalizzate a livello utente ad es.) via SQL.--enable-received=y
Aggiunge una linea Received: al messaggio, mostrando gli scanners in azione e qualche statistica (è necessario aver patchato simscan
)--with-attachments-size-limit=500000
Gli allegati con dimensione superiore a 500000 byte non verranno passati a spamassassin
(default 250k)
Creare la cartella tyemporanea sotto qmail
e assegnare i privilegi opportuni:
mkdir /var/qmail/simscan chown clamav:clamav /var/qmail/simscan
Se non l'hai già fatto, potrebbe essere utile patchare qmail con la qmail-queue-custom-error.patch (maggiori informazioni qui) come mostrato prima. La patch abilita Simscan a restituire dei messaggi appropriati per ogni messaggio che rifiuta di recapitare.
Riferirsi a questa pagina per capire come il rigetto smtp
funziona con simscan
. Questa guida ricorda brevemente che:
In caso di rigetto causato da virus, il messaggio contiene il nome del virus:
Your email was rejected because it contains the Worm.Bagle.AU virus
In caso di rigetto causa spam, il messaggio è più generico:
Your email is considered spam (53.5 spam-hits)
In caso di rigetto a causa di allegato non ammesso, il messaggio contiene il nome dell'allegato:
Your email was rejected because it contains a bad attachment: trojan.exe
Supponiamo che spamassassin sia configurato con una soglia (spam-score) di 5.0, cosicchè i messaggi con un punteggio superiore a questo siano etichettati come spam.
Allora, o prima o poi, spamassassin commetterà un errore di valutazione etichettando come spam una email importante di un cliente di uno dei vostri clienti, e siamo tutti d'accordo che questa è una cosa che non deve mai succedere. D'altro canto è estremamente improbabile che i messaggi con un punteggio al di sopra di un limite ragionevole, ad esempio 9.5, siano realmente spam e per questi possiamo ragionavolmente fidarci dell'operato di spamassassin e istruire simscan per rigettare questi messaggi senza intasare la nostra casella (Cartella Spam).
Pertanto configureremo simscan/spamassassin al fine di:
Per fare questo creiamo un file simcontrol come il seguente:
cat > /var/qmail/control/simcontrol << __EOF__ :clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif __EOF__
Ricordare di aggiornare simcontrol.cdb ogni qual volta si modifica simcontrol
# update simcontrol.cdb /var/qmail/bin/simscanmk
echo ':allow,CHKUSER_WRONGRCPTLIMIT="3",QMAILQUEUE="/var/qmail/bin/simscan"' >> ~vpopmail/etc/tcp.smtp qmailctl cdb
Ora simscan/chkuser interromperanno la comunicazione smtp dopo 3 destinatari sbagliati. Si può anche aggiungere un'istruzione come CHKUSER_RCPTLIMIT="50" per limitare il numero di destinatari per connessione SMTP. Ad essere precisi, queste impostazione di chkuser non hanno a che vedere con simscan, ma era il caso di parlarne visto che stiamo qui impostando tcp.smtp.
Si possono impostare delle regole per uno specifico utente, domino e una regola di defalut come segue:
cat > /var/qmail/control/simcontrol << __EOF__ postmaster@example.com:clam=yes,spam=no,attach=.txt:.com example.com:clam=no,spam=yes,attach=.mp3 :clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif __EOF__
Se si vuole abilitare DKIM è necessario modificare la configurazione di simscan come spiegato nella pagina riguardante DKIM.
simscan
La patch applicata aggiunge una linea come questa all'intestazione:
Received: by simscan 1.4.0 ppid: 5613, pid: 5684, t: 0.7355s scanners: attach: 1.4.0 clamav: 0.98.4/m:55/d:19599 spam: 3.4.0
E' necessario aggiornare il database di simscan sesi vuole che vengano mostrate le versioni aggiornate degli scanners usati:
# /var/qmail/bin/simscanmk -g simscan versions cdb file built. /var/qmail/control/simversions.cdb
Poichè questo aggiornamento deve essere fatto ogni qual volta si aggiorna il database dei virus, è necessario modificare di conseguenza il file di configurazionedi freshclam
come segue.
Prima di tutto scarichiamo e installiamo il programma che farà l'update:
wget --no-check-certificate https://qmail.jms1.net/simscan/update-simscan.c gcc -s -o /usr/local/sbin/update-simscan update-simscan.c chown root:clamav /usr/local/sbin/update-simscan chmod 4110 /usr/local/sbin/update-simscan
Ora modifichiamo il file di configurazione di freshclam
affinchè esegua update-simscan
ogni volta che il database è cambiato. E' necessario modificare una linea del file come segue:
OnUpdateExecuteOnUpdateExecute /usr/local/sbin/update-simscan
/var/qmail/simscan
on a ramdiskNella sua pagina su simscan
John Simpson suggerisce di montare la directory di lavoro di simscan
su un ramdisk, al fine di velocizzare di caricamento dei file.
Per fare ciò è sufficiente montare quella directory agendo sul proprio /etc/fstab
:
CLAMAV_UID=`id -u clamav` CLAMAV_GID=`id -g clamav` echo "none /var/qmail/simscan tmpfs nodev,noexec,noatime,uid=$CLAMAV_UID,gid=CLAMAV_GID,mode=2750 0 0" >> /etc/fstab
E' necessario che i parametri uid
e gid
corrispondano ai numeri utente e gruppo di clamav
rispettivamente, o per lo meno all'utente e il gruppo con cui gira simscan
.
qq_temporary_problem_(#4.3.0)
2 giugno 2023 07:32
qq_temporary_problem_(#4.3.0)
1 giugno 2023 22:18
qq_temporary_problem_(#4.3.0)
31 maggio 2023 19:22
qq_temporary_problem_(#4.3.0)
31 maggio 2023 15:42
qq_temporary_problem_(#4.3.0)
31 maggio 2023 15:33
Thank you! for all the documentation, patches and support
26 maggio 2023 09:42
free(): double free detected in tcache 2: /var/www/qmail/cgi-bin/qmailadmin
17 maggio 2023 16:25
free(): double free detected in tcache 2: /var/www/qmail/cgi-bin/qmailadmin
17 maggio 2023 08:46
Tags
apache clamav dkim dovecot ezmlm fail2ban ftp guide hacks lamp letsencrypt linux linux-vserver lxc mariadb mediawiki mozilla mysql openboard owncloud patches php proftpd qmail qmail to postfix qmail-spp qmailadmin rbl roundcube rsync sieve simscan slackware solr spamassassin spf ssh ssl tcprules tex ucspi-tcp vpopmail vqadmin
Commenti
Errore in compilazione con gcc 4.4
Giuseppe Blandino 8 ottobre 2012 15:49
Complimenti per l'ottimo lavoro.
Segnalo che per chi, come me, ha installato il compilatore gcc versione 4.4 la compilazione va in errore:
Bisogna allora fare un downgrade del gcc alla versione 4.1 perchè tutto fili liscio:
Rispondi | Permalink
nessun problema con gcc 4.5.2
roberto puzzanghera Giuseppe Blandino 8 ottobre 2012 16:21
qui nessun problema con gcc 4.5.2 su Slackware64-13.37
Rispondi | Permalink
patch per simscan
guy 28 novembre 2011 09:09
Complimenti per il tutorial che mi ha permesso di configurare l'ostico qmail, gli unici problemi li ho avuti a far funzionare correttamente simscan, risolti seguendo l'indicazioni del sito qmail.jms.net , in parole povere occorre patchare simscan in modo da far funzionare la scansione degli allegati con il file simscan-1.4.0-combined.4.patch.
Inoltre non e' restituito il motivo di rifuito della mail poiche' con la tua patch di qmail si usa il descrittore file 6 invece del 4 usato da simscan, per cui occorre questa ulteriore patch:
Rispondi | Permalink
Eppure a me simscan funziona
roberto puzzanghera guy 28 novembre 2011 15:18
Eppure a me simscan funziona come deve, restituendo il motivo del rigetto, senza bisogno di patchare per il numero del descrittore. Ora non ricordo più, sono passati molti mesi da quando ci ho messo le mani, però mi pare che il descrittore 6 sia stato messo per andare d'accordo con la patch DKIM di modo che la funzionalità qmail-custom-error potesse restituire pure gli errori causati dalla firma DKIM...
Rispondi | Permalink
Grazie. Proverò appena
roberto puzzanghera guy 28 novembre 2011 11:32
Grazie. Proverò appena possibile
Rispondi | Permalink