Newsgroup: it.comp.os.linux.sys
Titolo: postfix, rbl e blocchi, un template

Da un paio di richieste qui, e un post recente nella ML del mio lug,
posto anche qui, nella speranza di fare cose utili, un "template" per
una configurazione safe, in merito all'uso di blocking list, e blocchi
vari.
La configurazione e` postfix-centrica, ma adattabile a qualunque
resonable MTA.
Nella speranza che sia utile. Ogni contributo e` ben accetto e
caldamente consigliato.
- Attenzione. Le dnsbl/rbl non sono un qualcosa di statico da inserire
  nel vostro mta e dimenticarvele. Se avete questa esigenza, il
  consiglio migliore e` *non* usarle.
  Allo stato attuale, questo e` un setup safe per me, ma e` soggetto a
  modifiche continue.
Lista delle rbl ragionevolmente safe:
relays.ordb.org
,
l1.spews.dnsbl.sorbs.net
,
dul.spews.dnsbl.sorbs.net
,
sbl-xbl.spamhaus.org
,
combined.njabl.org
Queste sono in questo momento le liste piu` affidabili in circolazione,
e filtrano rispettivamente: openrelay, sourcespam confermati, ip
dinamici, sourcespam + altre schifezze confermate, e un misto con una
certa attenzione ai dinamici.
Per la mia esperienza, sono utilizzabili "as is", con un indice di
blocco illecito prossimo allo zero [ma si veda dopo per le tematiche di
whitelisting].
Piu` azzardate, ma in diverse occasioni interessanti, le liste:
list.dsbl.org
multihop.dsbl.org
ipwhois.rfc-ignorant.org
dnsbl.sorbs.net
Piu` azzardate per vari motivi. Ad esempio, 
dnsbl.sorbs.net
, che aggrega
_tutte_ le liste mantenute da sorbs, contiene una lista problematica
(per via della policy di uscita) come 
spam.dnsbl.sorbs.net
, che la rende
poco utilizzabile quando ricevete posta da provider. Se usate queste, e`
praticamente impossibile non effettuare un whitelisting dei provider
italiani/da cui ricevete posta, o respingere diverse mail valide.
I discorsi dietro cio` sono lunghi, eventualmente, si approfondiscono a
parte.
Per ottenere le liste dei provider italiani, utilizzo le informazioni
che recupero da 
senderbase.org
. E` una procedura un po` scomoda, ma non
ne conosco una piu` semplice.
Il monitoraggio dei log di reject diventa fondamentale.
Interessanti sono le liste dedicate di sorbs, in cui consiglio di dare
un occhiata: 
http://www.dnsbl.au.sorbs.net/using.html
Poi vale la pena di impostare le seguenti restriction:
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
reject_non_fqdn_sender, reject_unknow_sender_domain nella valutazione
del sender.
Qui e` una questione di usi "personali", dovete fare una tara, di quanto
queste impostazioni sono "fascist" per il vostro utilizzo, ovvero YMMV.
Ricordo che questa e` una lista di cose "sufficientemente safe" non il
totale delle restriction disponibili in postfix.
Whitelist. E` assolutamente necessario, impostare fin da principio, le
opportune configurazione per fare whitelisting.
Ci sono cose che non devono essere filtrate, per qualunque motivo:
- postmaster@vostrodominio, ed eventuale abuse@vostrodominio. Questi
  sono indirizzi amministrativi, vanno accettati. Diversamente, state
  violando una rfc.
- isp territoriali. Il tuning delle rbl, e` un work in progress, e non
  ce ne e` uno uguale. Io trovo *saggio* fire whitelist dei principali
  provider italiani da cui ricevo posta. Voglio i benefici delle rbl, ma
  voglio ricevere posta dagli utenti di $provider-a-piacere.
  La mia attuale whitelist, comprende 
tin.it
, 
interbusiness.it
,
 
libero.it
, infostrada ecc. Purtroppo, dovete stanare i mailserver, con
  l'ausilio di strumenti come 
senderbase.org
.
- whitelist locali. Puo` verificarsi un caso, tale per cui, un blocco di
  rete finisca in una lista, e un nodo di essa vi manda posta legale. La
  mia pratica e` fare whitelist a chiunque me ne faccia richiesta. Salvo
  monitoraggio, e aspettativa di risoluzione di eventuali incidenti. Se 
  questo non succede, viene spostato in blacklist locale, da cui non si 
  esce piu`. (nemmeno se rimosso dalla rbl, visto che agisce cmq, la
  lista locale.
A condire il tutto, aggiungo un po` di blocchi mediante regex (pcre),
che mi permettono di filtrare alcune cose note, come certi tipi di
attchment, o altro.
Sono tutte oneliner, nonostante vengano qui wrappate. Nel caso, fate
attenzione a ricostruirle.
# block windows executables
/^(Content-(Disposition:
attachment;|Type:).*|\s+)(file)?name\s*=\s*"?.*\.(lnk|bat|c[ho]m|cmd|
com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh])"?\s*$/
REJECT No executable(1) (virus?) attachment allowed
/^begin [0-9]{1,4}
*\.(lnk|bat|c[ho]m|cmd|com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|
ws[fh])$/
REJECT No executable(2) (virus?) attachment allowed
# block iframe hack
/<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>/   REJECT No iframe
hack allowed
# various encoded URL formats.  if they're trying to disguise the URL
# then they're up to no good
/(ftp|https?):\/\/([^\/]*@)?([01]{10,})?(\d+|00+\d+(\.00+\d+){3}|
[\%0-9a-zA-Z\.\?_-]*\%[\%0-9a-zA-Z\.\?_-]+)(:\d+)?(\/|"|\s|$)/
REJECT Encoded url(1) intercepted. Please resend in clear text.
/(href=3D=22)?(ftp|https?)=3A=2F=2F|(<!--.*){3,}/       REJECT encoded
url(2) intercepted. please resend in clear text
# encoded form of "mailto:"
/\&\#109;\&\#97;\&\#105;\&\#108;\&\#116;\&\#111;\&\#58;/        REJECT
encoded mailto(1) intercepted. please resend in clear text
/^\W{4,6} (?:[a-z]{10,}|[A-Z]{10,}) \W{4,6}\s*$/        REJECT encoded
mailto(1) intercepted. please resend in clear text
Buon divertimento.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Programmer (n): One who makes the lies the salesman told come true.

 REJECT No executable(1) (virus?) attachment allowed
ci provo. tratto da 
securitysage.com
nel log rimane il tipo di allegato intercettato e il nome del file:
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+\.(ad[ep]|asd|ba[st]|
c[ho]m|cmd|cpl|crt|dbx|dll|exe|hlp|hta|in[fs]|isp|js|jse|lnk|md[etw]|
ms[cipt]|nws|ocx|ops|pcd|pi|pif|prf|reg|scf|scr|sct|sh[bms]|swf|uue|vb|
vb[esx]|vxd|wab|ws[cfh]))"?\s*$/	REJECT Files attached to emails 
that contain or end in "$3" are prohibited on this server as they may 
contain viruses. The file named "$2" was rejected.
tutto ovviamente su una riga.
Spero davvero che da questo thread esca qualcosa da incorniciare, da
lasciare ai posteri.
E chi ci mette il "X-No-Archive: yes" lo facciamo finire in qualche rbl 
-- 
Ciao, Manuel
Proposizione del Zuse per le Telefonate:
        Amore e'...  usare il protocollo di comunicazione piu' ridondante
        che esista.

 E chi ci mette il "X-No-Archive: yes" lo facciamo finire in qualche rbl 
:)
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Unix:  When you can't afford the very best.

 genere, che con postfix e' banale con quel ca^Wgioiello di qmail?
(risposta inutile da BOHF)
si, installa postfix !!!
Max

 genere, che con postfix e' banale con quel ca^Wgioiello di qmail?
Premettendo un "apt-get install postfix" alle istruzioni? <Grin>.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------


 Buon divertimento.
C'è sicuramente qualcosa di cui essere gioiosi :)
Tnk's Maurizio - Tannoiser - Lemmo
-- 
So many women and so little time
Rizio

 Mamma mamma... ma oggi è Natale ?!?
Contribuisci! :)
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
It's the good girls who keep diaries; the bad girls never have the time.

 Contribuisci! :)
Ok, allora io porto il bere :P
*/ seriamente/serenamente /*
Come posso contribuire se ho ancora capito metà di quello che passa in 
lista. Mi piacerebbe e dove posso non mi tiro indietro ma come ti scrissi 
in uno dei miei primi post; il tempo è troppo tiranno. E aggiungo che il 
mio livello d'esperienza è infinitesimale rispetto alla conoscenza del 
sistema che avete voi.
Diciamo che mi state facendo da maestri d'appoggio e sono lieto di imparare 
da voi, ma prima di poter aggiungere (sensatamente) qualcosa ad un post 
come questo ne ha da passà di acqua sotto i ponti per me. 
... ma quando sarò pronto ci mostreremo ai Jedi, Mio Signore ;P


 && make install clean" <G>
Attenzione che "puo` manifestarsi satana". :)
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------


 attchment, o altro.
assieme a tutti questi controlli, io uso anche (mime_header_checks):
/name=[^>]*your_details.zip/ REJECT Mail filters have determined that 
your email appears to be infected with the Sobig virus.
/^\s*Content-(Disposition|Type).*name\s*=\s*"?((Attach|Information|
TextDocument|Readme|Msg|Msginfo|Document|Info|Attachedfile|Attached
document|TextDocument|Text|TextFile|Letter|MoreInfo|Message)\.zip)"?\
s*$/ REJECT Mail filters have determined that your email appears to 
be infected with the Bagle virus.
/^\s*Content-(Disposition|Type).*name\s*=\s*"?((Patch|MS-Security|
MS-UD|UpDate|sys-patch|MS-Q).*\.zip)"?\s*$/ REJECT Mail filters have 
determined that your email appears to be infected with the Sober virus.
/^\s*Content-(Disposition|Type).*name\s*=\s*"?((doc_word3_|document_all_|
part01_|product_|letter_|information_|document_|details_|screensaver_|
website_|data_|text_|file_|prod_info_).*\.zip)"?\s*$/ REJECT Mail filters 
have determined that your email appears to be infected with Netsky virus.
giusto per non appesantire troppo amavisd-new.
introduco anche un 1/2 OT, pero' forse puo' interessare.
nel body_checks ci ho messo, tra gli altri:
/^TVqQAAMAAAAEAAAA\/\/8AALgAAAAAAAAAQAAA/    REJECT [4] Possible virus 
attachment
/^RSLxwtYBDB6FCv8ybBcS0zp9VU5of3K4BXuwyehTM0RI9IrSjVuwP94xfn0wgOjouKWz
GXHVk3qg$/        REJECT [5] Possible virus attachment
che dovrebbero bloccare alcune varianti di Sobig.
ma questo e' quello che fanno gli AV per intercettare un virus?
prendono una porzione di codice del virus e cercano un match?
se cosi' fosse, durante le grosse 'epidemie' di worm, e' una cavolata 
l'idea di prendere il virus, catturare una parte di codice ed 
inserirlo nei controlli sul body di postfix?
-- 
Ciao, Manuel
Tre carcerati in Russia.  "Io sono qui perche' ero contro Gorbaciov".
"E io perche' ero a favore.  E tu?".  "Io sono Gorbaciov!".

 inserirlo nei controlli sul body di postfix?
Non lo e` affatto, ed e` quello che fanno in diversi. Ovviamente devi
avere un carico mail che giustifichi uno sforzo del genere
(monitoraggio, spamtraps, pattern recognizing, estrazione del
match/sign).
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Quando omni flunkus moritati (when all else fails play dead)

 - whitelist locali.
[cut]
Mi sorge un dubbio.
come realizzi tali whitelist?
purtroppo non ho ideato un modo per verificare se da un host bloccato 
dalle rbl si riesce a raggiungere postmaster ed abuse...
dovrebbe essere la direttiva 
smtpd_recipient_restrictions =
 	check_client_access hash:/etc/postfix/access
va messa per prima, in modo che se intercetta quei 2 indirizzi ignora 
gli altri check?
Grazie!
-- 
Ciao, Manuel
-- Linux e' buono anche per te.
		-- Banzai, su IRC

 come realizzi tali whitelist?
Facciamo un po` di teoria:
Le restriction in postfix, sono "idealizzabili" come una funzione che
restituisce qualcosa tra: OK, REJECT e DUNNO.
Pensa alle access list di un router, o alle regole di netfilter per
qualcosa di simile.
Le restriction sono raggruppate in liste, e quindi valutate.
OK e REJECT fanno "uscire" dalla valutazione, diversamente postfix
procede nei due ordini: per lista, e all'interno della lista.
L'ordine delle liste e` il seguente:
smtpd_client_restrictions
smtpd_helo_restrictions
smtpd_sender_restrictions
sntpd_recipient_restrictions
Sapendo che ognuna, puo` incorporare quella/e precedenti.
header_checks e body_checks, agiscono subito dopo.
_MORALE_
whitelistare un ip, e` una cosa che faccio con:
smtpd_client_restrictions = check_client_access
hash:/etc/postfix/whitelist
e con gli IP e un OK.
whitelistare un recipient, e` una cosa che faccio con:
smtpd_recipient_restrictions = check_recipient_access
hash:/etc/postfix/allowlist
e con gli indirizzi e un OK.
_MA_ questo comporta che i controlli delle rbl devono avvenire a questo
stage, (e` possibile per l'ereditarieta` delle liste di restriction),
pena il REJECT _prima_ di arrivare al OK.
Per _testare_ questo genere di cose, si usano due "strumenti".
1. Il fatto che e` possibile usare il file di "whitelist" anche per
rejectare, scrivendo IP o indirizzo e REJECT (magari con un commento
apposito), quindi inviarsi una mail.
2. usando in fase di test l'ottima direttiva warn_if_reject prima di una
restrictions, che logga anziche` rejectare, es:
smtpd_recipient_restrictions = warn_if_reject, check_recipient_access
<blabla>
NB:
E` possibile avere un effetto del genere in header/body checks, usando
come responso WARN anziche` REJECT, nelle vostre regole.
Spero di essere stato chiaro, e di non aver scritto imprecisioni.
-- 
                          Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Sex is not the answer. Sex is the question. "Yes" is the answer.