- Info: https://github.com/qmail/simscan
- John Simpson's simscan page (patch and a lot of info)
- README
- Versione: simscan-1.4.4
- Patch applicata (13 settembre 2023)
- Vecchia repository 1.4.0: http://sourceforge.net/projects/simscan/files/
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.
Dettagli sulla versione 1.4.4
Come si può notare, per comodità ho spostato i sorgenti di simscan
nel mio spazio github
. Ciononostante, tutte le informazioni riguardanti simscan
continueranno a essere pubblicate qui, e questa è la pagina dove chiedere eventualmente supporto.
La versione 1.4.4 è un fork della version 1.4.1, che a sua volta aggiorna il programma originale di Inter7.
Nella versione 1.4.1 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 versione 1.4.2 aggiunge solamente solo quanto segue:
- La debug patch di John Simpson, che consente di migliorare il debud a livello di
qmail-smtpd
(maggiori informazioni nel sito di jms); - un bug fix di Bob Greco secondo il quale un messaggio ricevuto con destinatari locali multipli eseguiva
spamc
come utente null invece di estrarre il nome utente dal primo destinatario.
Maggiori informazioni qui https://notes.sagredo.eu/en/qmail-notes-185/simscan-38.html#comment844 -
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 aspamassassin
. Questa patch consente di impostare la dimensione massima in byte attraverso la variabilesize_limit
nel file /var/qmail/control/simcontrol file. Inoltre, gli eventi dovesimscan
non viene attivato sono ora loggati (prima lo erano solo se il debug è attivo).
ripMIME
- Info: https://pldaniels.com/ripmime/
- Scarica da github: https://github.com/inflex/ripMIME
- Vecchia versione stabile (può creare problemi nella compilazione): https://pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz
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 wget https://github.com/inflex/ripMIME/archive/refs/tags/1.4.1.0.tar.gz tar xzf 1.4.1.0.tar.gz cd ripMIME-1.4.1.0 chown -R root:root . make make install
Test
- man
ripmime
per maggiori informazioni
Salvare 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, altrimenti clamav
non avrà i privilegi per leggere gli allegati.
Installazione di simscan
Installare come segue. Notare che è necessario 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. Il programma include anche un bug fix di Bob Greco (maggiori informazioni qui).
SIMSCAN_VER=1.4.4 cd /usr/local/src wget https://github.com/sagredo-dev/simscan/archive/refs/tags/v${SIMSCAN_VER}.tar.gz tar xzf simscan-${SIMSCAN_VER}.tar.gz cd simscan-${SIMSCAN_VER} chown -R root:root . ./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 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
)
Configurare il file /var/qmail/control/simsizelimit se non lo si è ancora fatto. Esso imposterà a circa 10MB le dimensioni dei messaggi che saranno passati a spamassassin
:
echo 10000000 > /var/qmail/control/simsizelimit
Creare la cartella tyemporanea sotto qmail
e assegnare i privilegi opportuni:
mkdir /var/qmail/simscan chown clamav:clamav /var/qmail/simscan
qmail-queue-custom-error.patch
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
Come impostare simscan
per gestire al meglio lo spamming
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:
- Rigettare le email con un punteggio spam > 9.5
- Lasciar passare (pass through) le email con un 5.0<punteggio<9.5, per i quali messaggi non si sa mai che
spamassassin
abbia commesso un errore, etichettandoli comunque come spam. In questo caso vorremmo adoperare una regola sieve (come già spiegato prima) che sposti i messaggi spam nella cartella Spam, di modo che all'occorrenza possano esere recuperati dalla webmail. - Considerare tutte le email con punteggio < 5.0 come regolari
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,size_limit=10000000 __EOF__
Notare che , a causa della variabile size_limit=10000000
, gli allegati con dimensione superiore a circa 10MB non verranno passati a spamassassin
(default 250KB).
Ricordare di aggiornare simcontrol.cdb ogni qual volta si modifica simcontrol
# update simcontrol.cdb /var/qmail/bin/simscanmk
Abilitare la scansione
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.
Il file simcontrol
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,size_limit=10000000 __EOF__
- La prima riga disabilita clam (virus) e spam per l'utente postmaster@example.com e controlla i virus negli allegati del tipo .txt e .com.
- La seconda riga abilita clam e spam per il dominio example.com e disabilita la scansione sugli file .mp3 allegati.
- La terza riga imposta la regola di default (valida se non sono valide le precedenti) abilitando la scansione di clamav e spamassassin, e impostando il punteggio spam oltre il quale i messaggi sono rigettati a 9.5.
Configurazione di simscan
in presenza della patch DKIM
Se si vuole abilitare DKIM è necessario modificare la configurazione di simscan come spiegato nella pagina riguardante DKIM.
Aggiornare sil database di 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 in un ramdisk
Nella 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
.
Commenti
Errore in compilazione con gcc 4.4
Giuseppe Blandino 8 ottobre 2012 15:49 CET
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 CET
qui nessun problema con gcc 4.5.2 su Slackware64-13.37
Rispondi | Permalink
patch per simscan
guy 28 novembre 2011 09:09 CET
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 CET
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 CET
Grazie. Proverò appena possibile
Rispondi | Permalink