Differences between revisions 5 and 6
Revision 5 as of 2022-06-17 08:41:14
Size: 4507
Editor: Kurgan
Comment:
Revision 6 as of 2022-06-29 13:44:43
Size: 6769
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Greylistd, un demone per gestire le greylist con Exim4 == = Greylistd, un demone per gestire le greylist con Exim4 =
Line 3: Line 3:
'''Configurazione verificata in Debian Squeeze e Wheezy'''
Line 6: Line 5:
In Debian Squeeze e Wheezy e` presente come pacchetto, e per installarlo e` sufficiente usare il comando
{{{
In Debian e` presente come pacchetto, e per installarlo e` sufficiente usare il comando
 {{{
Line 13: Line 12:
=== Configurazione di Greylistd === == Configurazione di Greylistd ==
Line 15: Line 14:
La configurazione di Greylistd e` in {{{/etc/greylistd/}}} ed e` semplice ma non totalmente documentata. Il file {{{config}}} contiene la configurazione minimale. Quella che sto usando io e` quella di default di Debian, con l'unica differenza che ho ridotto a 30 secondi il valore di "retryMin". La configurazione di Greylistd e` in {{{/etc/greylistd/}}} ed e` semplice ma non totalmente documentata. Il file {{{config}}} contiene la configurazione minimale. Quella che sto usando io e` quella di default di Debian, con tre modifiche:
 * H
o ridotto a 30 secondi il valore di "retryMin".
 * Ho messo a true le due variabili singlecheck e singleupdate, allo scopo di "ammorbidire" il controllo, facendo in modo che prima mail "buona" da un dato mail server "sblocchi" tutte le mail successive da quel mail server. (In altri termini una volta che una mail è stata accettata considero buone le email successive dal medesimo indirizzo ip anche se sono destinate ad utenti diversi dalla prima)
 {{{
retryMin = 30
singlecheck = true
singleupdate = true
}}}
Line 19: Line 25:
'''NOTA BENE: Il file /etc/greylistd/whitelist-hosts non viene usato in questa configurazione.'''
Line 20: Line 27:
=== Configurazione di Exim4 ===
== Configurazione di Exim4 ==
Line 25: Line 33:
{{{
Per evitare di avere ritardi mostruosi nelle email che vengono da sistemi che hanno centinaia di server SMTP (o per altri motivi) è possibile inserire degli indirizzi (anche con netmask) dentro al file definito nella variabile NOGREYLIST. Dentro questo file si possono inserire solo indirizzi ip (v4 e v6) con o senza una netmask; per esempio "192.168.0.0/24", uno per riga.



 {{{
  # Variabili che uso nella ACL
  # Se non volete usarle, potete semplicemente togliere le relative condition dalla ACL:
  GREYLISTING=enabled
  NOGREYLIST=/etc/exim4/nogrey.list
}}}

 {{{
  # implementazione delle greylist a mezzo del demone greylistd.
  # Se la mail non e` stata rifiutata prima, arriva qui e viene verificata la greylist prima
  # di venire eventualmente accettata dalle ACL che seguono.
  # notare che non considero il singolo host, ma la net /24 a cui esso appartiene.
  # questo e` un rilassamento del controllo per evitare di ritardare all'infinito mail che vengono
  # da sistemi che hanno diversi server smtp che lavorano in parallelo.
  # Se l'host si trova nella lista NOGREYLIST allora il controllo viene saltato e la mail accettata
  # immediatamente.
  defer message = Sender is greylisted. Please try again later.
         !authenticated = *
         condition = ${if eq {GREYLISTING} {enabled} {true}{false}}
         !hosts = ${if exists{NOGREYLIST}{net-iplsearch;NOGREYLIST}{}}
         condition = ${if eq {grey}\
                          {${readsocket{/var/run/greylistd/socket}\
                               {${mask:$sender_host_address/24} \
                               $sender_address \
                               $local_part@$domain}\
                               {5s}{}{} }}\
                          {true}{false}}
         log_message = Greylisted $sender_host_address $sender_address $local_part@$domain

}}}


Se preferite considerare ogni host singolarmente e non accettare mail da tutta la /24 relativa, la acl diventa:
 {{{
Line 29: Line 75:
          condition = ${if eq {grey}\
                          {${readsocket{/var/run/greylistd/socket}\
                                       {${mask:$sender_host_address/24} \
                                        $sender_address \
                                        $local_part@$domain}\
                                       {5s}{}{} }}\
                          {true}{false}}
         log_message = Greylisted $sender_host_address $sender_address $local_part@$domain
}}}


Se preferite considerare ogni host singolarmente, la acl diventa:
{{{
  # implementazione delle greylist a mezzo del demone greylistd.
  defer message = Sender is greylisted. Please try again later.
         !authenticated = *
          condition = ${if eq {grey}\
         condition = ${if eq {GREYLISTING} {enabled} {true}{false}}
         !hosts = ${if exists{NOGREYLIST}{net-iplsearch;NOGREYLIST}{}}
         condition = ${if eq {grey}\
Line 56: Line 88:
=== Gestione di greylistd === == Gestione di greylistd ==
Line 60: Line 92:
Per esempio, il comando {{{greylist list}}} vedete la lista attuale degli indirizzi email che sono nel database del demone, e con {{{graylist stats}}} vedete una statistica delle mail che si trovano nei vari stati di grey/white/black list. Per esempio ecco alcuni comandi:
 * il comando {{{greylist list}}} mostra la lista attuale degli indirizzi email che sono nella white list
 * il comando {{{greylist list --grey}}} mostra la lista attuale degli indirizzi email che sono nella grey list
 * il comando {{{greylist list --black}}} mostra la lista attuale degli indirizzi email che sono nella black list
 * il comando {{{graylist stats}}} mostra una statistica delle mail che si trovano nei vari stati di grey/white/black list.


== Script per aiutarsi a generare whitelist ==

Volendo, come descritto prima, inserire per esempio tutti gli host SMTP di Google o quelli di Office365 dentro il file NOGREYLIST, possiamo usare uno script come questo: https://github.com/equk/spf_list/

Trovate una copia degli script anche in allegato a questa pagina, nel caso in cui quel repo un giorno venga cancellato.
Line 64: Line 107:
=== Consigli vari === == Consigli vari ==
Line 66: Line 109:
Se avete piu` di un MX (avete un secondario) vi consiglio di mettere il secondario in whitelist sul primario in qualche modo in modo che il suo traffico verso il primario non sia greylistato, e inoltre DOVETE abilitare il greylisting, e in generale le stesse ACL antispam, anche sul secondario. Se non lo fate, la mail che sarebbe stata bloccata vi arrivera` tutta lo stesso, a mezzo del vostro secondario.


Se volete ridurre la "durezza" del controllo, e avere meno ritardi sulla consegna delle email, forse ha senso che la prima mail "buona" da un dato mail server "sblocchi" tutte le mail successive da quel mail server. Per farlo potete impostare, nella configurazione di graylistd, queste due righe:

{{{
singlecheck = true
singleupdate = true
}}}
Se avete piu` di un MX (avete un secondario) vi consiglio di mettere il secondario in whitelist sul primario in qualche modo in modo che il suo traffico verso il primario non sia greylistato, e inoltre DOVETE abilitare il greylisting, e in generale le stesse ACL antispam che adottate sul primario anche sul secondario. Se non lo fate, la mail che sarebbe stata bloccata vi arrivera` tutta lo stesso, a mezzo del vostro secondario che è più permissivo del primario.

Greylistd, un demone per gestire le greylist con Exim4

Greylistd e` un semplice demone che permette, interrogato da Exim via socket, di gestire il greylisting delle mail in arrivo. In Debian e` presente come pacchetto, e per installarlo e` sufficiente usare il comando

  • apt install greylistd

Se usate la configurazione standard debian di Exim, troverete una pagina di help che spiega cosa fare per attivarlo come ultimo passo della procedura di installazione. Se invece usate una configurazione personalizzata di Exim dovrete fare da soli. In questa pagina spiego come Greylistd interagisce con la configurazione di Exim che e` descritta qui: ../Exim4-Dovecot

Configurazione di Greylistd

La configurazione di Greylistd e` in /etc/greylistd/ ed e` semplice ma non totalmente documentata. Il file config contiene la configurazione minimale. Quella che sto usando io e` quella di default di Debian, con tre modifiche:

  • Ho ridotto a 30 secondi il valore di "retryMin".
  • Ho messo a true le due variabili singlecheck e singleupdate, allo scopo di "ammorbidire" il controllo, facendo in modo che prima mail "buona" da un dato mail server "sblocchi" tutte le mail successive da quel mail server. (In altri termini una volta che una mail è stata accettata considero buone le email successive dal medesimo indirizzo ip anche se sono destinate ad utenti diversi dalla prima)
    retryMin = 30
    singlecheck = true
    singleupdate = true

Modificata la configurazione, riavviare greylistd con il solito /etc/init.d/greylistd restart

NOTA BENE: Il file /etc/greylistd/whitelist-hosts non viene usato in questa configurazione.

Configurazione di Exim4

Se avete installato la configurazione che trovate in ../Exim4-Docevot allora non dovete fare altro che abilitare l'uso delle greylist come indicato in ../Exim4-Docevot.

Se state configurando il vostro Exim per i cavoli vostri, questo e` un esempio di ACL che usa greylistd, da mettere nella vostra configurazione di Exim, nel gruppo delle ACL che fanno il check dell' RCPT (acl_smtp_rcpt). Questa acl considera le subnet /24 e non i singoli host, per evitare di greylistare enne volte quelle mail che vengono da sistemi grandi che hanno piu` server smtp che ci contattano a rotazione per mandarci la stessa mail. E` ovvio che non e` una soluzione che funziona al 100%, ma e` meglio che niente.

Per evitare di avere ritardi mostruosi nelle email che vengono da sistemi che hanno centinaia di server SMTP (o per altri motivi) è possibile inserire degli indirizzi (anche con netmask) dentro al file definito nella variabile NOGREYLIST. Dentro questo file si possono inserire solo indirizzi ip (v4 e v6) con o senza una netmask; per esempio "192.168.0.0/24", uno per riga.

  •   # Variabili che uso nella ACL
      # Se non volete usarle, potete semplicemente togliere le relative condition dalla ACL:
      GREYLISTING=enabled
      NOGREYLIST=/etc/exim4/nogrey.list
      # implementazione delle greylist a mezzo del demone greylistd.
      # Se la mail non e` stata rifiutata prima, arriva qui e viene verificata la greylist prima
      # di venire eventualmente accettata dalle ACL che seguono.
      # notare che non considero il singolo host, ma la net /24 a cui esso appartiene.
      # questo e` un rilassamento del controllo per evitare di ritardare all'infinito mail che vengono
      # da sistemi che hanno diversi server smtp che lavorano in parallelo.
      # Se l'host si trova nella lista NOGREYLIST allora il controllo viene saltato e la mail accettata
      # immediatamente. 
      defer  message        = Sender is greylisted. Please try again later.
             !authenticated = *
             condition      = ${if eq {GREYLISTING} {enabled} {true}{false}}
             !hosts         = ${if exists{NOGREYLIST}{net-iplsearch;NOGREYLIST}{}}
             condition      = ${if eq {grey}\
                              {${readsocket{/var/run/greylistd/socket}\
                                   {${mask:$sender_host_address/24} \
                                   $sender_address \
                                   $local_part@$domain}\
                                   {5s}{}{} }}\
                              {true}{false}}
             log_message    = Greylisted $sender_host_address $sender_address $local_part@$domain

Se preferite considerare ogni host singolarmente e non accettare mail da tutta la /24 relativa, la acl diventa:

  •   # implementazione delle greylist a mezzo del demone greylistd.
      defer  message        = Sender is greylisted. Please try again later.
             !authenticated = *
             condition      = ${if eq {GREYLISTING} {enabled} {true}{false}}
             !hosts         = ${if exists{NOGREYLIST}{net-iplsearch;NOGREYLIST}{}}
             condition     = ${if eq {grey}\
                              {${readsocket{/var/run/greylistd/socket}\
                                            $sender_host_address \
                                            $sender_address \
                                            $local_part@$domain}\
                                           {5s}{}{} }}\
                              {true}{false}}
             log_message    = Greylisted $sender_host_address $sender_address $local_part@$domain

Gestione di greylistd

Potete "fare cose" a greylistd mentre gira con il comando greylist

Per esempio ecco alcuni comandi:

  • il comando greylist list mostra la lista attuale degli indirizzi email che sono nella white list

  • il comando greylist list --grey mostra la lista attuale degli indirizzi email che sono nella grey list

  • il comando greylist list --black mostra la lista attuale degli indirizzi email che sono nella black list

  • il comando graylist stats mostra una statistica delle mail che si trovano nei vari stati di grey/white/black list.

Script per aiutarsi a generare whitelist

Volendo, come descritto prima, inserire per esempio tutti gli host SMTP di Google o quelli di Office365 dentro il file NOGREYLIST, possiamo usare uno script come questo: https://github.com/equk/spf_list/

Trovate una copia degli script anche in allegato a questa pagina, nel caso in cui quel repo un giorno venga cancellato.

Consigli vari

Se avete piu` di un MX (avete un secondario) vi consiglio di mettere il secondario in whitelist sul primario in qualche modo in modo che il suo traffico verso il primario non sia greylistato, e inoltre DOVETE abilitare il greylisting, e in generale le stesse ACL antispam che adottate sul primario anche sul secondario. Se non lo fate, la mail che sarebbe stata bloccata vi arrivera` tutta lo stesso, a mezzo del vostro secondario che è più permissivo del primario.

LinuxDebian/GreyListd (last edited 2022-06-29 14:05:00 by Kurgan)