Attachment 'exim4.conf-deb8910-devuan123.txt'

Download

   1 ### Confiugrazione per Exim4
   2 ### Realizzata da Kurgan (kurgan at kurgan dot org)
   3 ### versione del 25/06/2021 (THE COVID VACCINE EDITION)
   4 ### Compatibile Debian 8 9 e 10 e Devuan Jessie Ascii e Beowulf
   5 
   6 
   7 ##
   8 ## MODIFICARE QUESTE IMPOSTAZIONI PER LA VOSTRA INSTALLAZIONE
   9 ##
  10 
  11 # Indirizzo mail del postmaster per tutti i domini gestiti dal server.
  12 # NON USARE un utente che sia "postmaster@<uno dei domini locali>
  13 # altrimenti si crea un loop.
  14 POSTMASTER=postmaster@ilvostrodominio.tld
  15 
  16 
  17 # dove si trovano i files delle mailbox
  18 MAIL=/var/vmail
  19 
  20 # dove si trova la configurazione di exim4
  21 EXIM4=/etc/exim4
  22 
  23 # Dove si trovano le chiavi per DKIM
  24 DKIM_FILE = EXIM4/dkim/${lc:$sender_address_domain}-private.pem
  25 
  26 # dove si trovano i files di configurazione degli utenti dei domini virtuali
  27 VIRTUALS=/etc/vmail
  28 
  29 # white e black list degli host da cui accettare connessioni SMTP
  30 WHITELIST=EXIM4/white.list
  31 BLACKLIST=EXIM4/black.list
  32 
  33 # gli alias per i soli utenti di sistema della macchina
  34 SYS_ALIASES=/etc/aliases
  35 
  36 
  37 # Il livello di spam oltre il quale spamassassin rifiuta lo spam a livello smtp
  38 # in qualsiasi caso (moltiplicato per 10!) (metterlo a 65534 e` come dire
  39 # che lo spam riconosciuto come tale per contenuto non viene mai rifiutato
  40 # a livello SMTP ma viene sempre accettato e marcato)
  41 SPAM_SCORE_DENY=100
  42 
  43 
  44 # Il livello di spam oltre il quale marco il messaggio come spam pero` lo accetto
  45 # comunque (lo rifiuto pero` se il livello supera "SPAM_SCORE_DENY" indicato sopra)
  46 # La marcatura setta acl_m5 a 1 e consente poi di filtrare il messaggio in un filtro
  47 SPAM_SCORE_MARK=50
  48 
  49 
  50 # Voglio che il check del mittente setti un warning o rifiuti la mail in caso
  51 # di mittente inesistente? (usare "warn", "refuse" o  "none" per disattivarlo)
  52 # il check del mittente e` considerato pratica erronea, anche se funziona, 
  53 # quindi e` meglio disattivarlo per essere dei "buoni cittadini di internet"
  54 SPAM_CHECK_SENDER_ADDRESS=none
  55 
  56 
  57 # Voglio verificare che il DOMINIO del mittente esita? A differenza del check
  58 # precedente, questo non effettua nessuna connessione al mail server del mittente
  59 # ma si basa solo sul DNS. Questo check non è "pratica non gradita" e quindi 
  60 # lo posso usare senza problemi.
  61 # (usare "warn", "refuse" o  "none" per disattivarlo)
  62 SPAM_CHECK_SENDER_DOMAIN=refuse
  63 
  64 
  65 # Configurazione delle blacklist per INDIRIZZO IP
  66 # Voglio che il check delle RBL setti un warning o rifiuti la mail in caso
  67 # il cui l'ip del mittente sia in una RBL? (usare "warn" o "refuse" o "none")
  68 SPAM_CHECK_RBL=refuse
  69 
  70 
  71 # Configurazione delle blacklist per INDIRIZZO IP
  72 # Quali RBL uso per il check precedente (barracudacentral vuole una registrazione)
  73 SPAM_RBL_DNSLIST=zen.spamhaus.org
  74 #SPAM_RBL_DNSLIST=zen.spamhaus.org : b.barracudacentral.org
  75 
  76 
  77 # Configurazione delle blacklist per DOMINIO DEL MITTENTE (MAIL FROM)
  78 # Uso della RBL "DBL" di Spamhaus che si basa sui nomi di dominio e non sugli
  79 # indirizzi IP: (usare "warn", "refuse" o  "none" per disattivarlo)
  80 SPAM_CHECK_DOMAIN=refuse
  81 
  82 
  83 # Configurazione delle blacklist per DOMINIO DEL MITTENTE (MAIL FROM)
  84 # Elenco delle RBL che uso per il controllo del dominio del mittente:
  85 # Notare che qui devo indicare ogni lista con la stringa "/$sender_address_domain" in coda. 
  86 # Se ho diverse entry, le separo con un ":", ad esempio come segue:
  87 # SPAM_DBL_LIST=lista1/$sender_address_domain : lista2/$sender_address_domain
  88 SPAM_DBL_DNSLIST=dbl.spamhaus.org/$sender_address_domain
  89 
  90 
  91 
  92 # Abilita la funzionalita` di greylisting usando greylistd. (usare "enabled" o "disabled")
  93 # Richiede che graylistd sia installato e configurato. Se non usate Debian,
  94 # controllate i permessi e il path del socket di graylistd.
  95 GREYLISTING=disabled
  96 
  97 
  98 # Scelta del trasporto da usare per il delivery locale agli utenti dei domini virtuali.
  99 # Se si vogliono usare i filtri sieve, occorre usare il delivery che passa per Dovecot LDA
 100 # Altrimenti si puo` usare il delivery interno di exim.
 101 # Le scelte possibili sono: 
 102 #  - virtual_user_delivery per quello interno di Exim
 103 #  - virtual_user_dovecot_delivery per l' LDA di Dovecot con il supporto per Sieve
 104 # vedasi https://kb.kurgan.org/LinuxDebian/Dovecot-Sieve
 105 VIRTUAL_DELIVERY = virtual_user_delivery
 106 # VIRTUAL_DELIVERY = virtual_user_dovecot_delivery
 107 
 108 
 109 
 110 # Rate limit: per limitare il rischio di spam da parte di un account compromesso
 111 # vengono applicati dei rate limit al numero di email inviate per periodo di tempo,
 112 # a mezzo delle ACL "ratelimit". Qui sono hardcoded i default, che possono poi essere
 113 # modificati (per gli utenti autenticati) nel file di definizione degli utenti.
 114 
 115 # Per gli utenti autenticati: 40 email ogni 5 minuti
 116 RATELIMIT_LIMIT=40
 117 RATELIMIT_TIME=5m
 118 
 119 
 120 # Per gli host che possono fare relay e non sono utenti autenticati. (Se sono autenticati
 121 # si applica la regola precedente in ogni caso). Se serve che un host superi questi valori
 122 # mettere l'host in whitelist.
 123 RATELIMIT_HOST_LIMIT=40
 124 RATELIMIT_HOST_TIME=5m
 125 
 126 # Per l'allarme in caso di superamento del rate limit: indirizzo email a cui mandare un allarme
 127 RATELIMIT_ALARM_RECEIVER=indirizzo@email.tld
 128 
 129 
 130 
 131 # Variabile interna per definire il numero di campi separati da ":" nel file degli utenti
 132 # La versione "minimale" prevede 3 campi: username:password:parametri (opzionali) e 
 133 # quindi il numero di ":" per arrivare ai parametri opzionali e` 2.
 134 # Se uso la modifica per le quote, dovecot mi obbliga a 8 campi, di cui sono usati solo
 135 # il primo, il secondo, e l'ottavo. In questo caso il numero di ":" diventa 7.
 136 # Questo parametro non va modificato se non si sa cosa si sta facendo.
 137 
 138 # Usare "2" per un file utenti cosi` fatto:
 139 # username:password:parametri opzionali
 140 # Usare "7" per un file utenti cosi` fatto:
 141 # username:password::::::parametri opzionali
 142 USERFILE_FIELDS=2
 143 
 144 
 145 #
 146 # Disabilitare il supporto per ipv6 e` necessario per riuscire 
 147 # a mandare email a gmail, almeno per il momento.
 148 # Se mandi da ipv6 sei sempre uno spammer
 149 #
 150 disable_ipv6=true
 151 
 152 
 153 # Porte sulle quali ascolta l' SMTP. 
 154 # Uso la 25 e la 587 (submit) e la 465 per smtps.
 155 #
 156 daemon_smtp_ports=25 : 587 : 465
 157 tls_on_connect_ports = 465
 158 
 159 
 160 # Se il vostro mail server e` dietro ad un NAT e` meglio inserire qui l' IP pubblico 
 161 # del NAT, in modo da evitare che il mail server si mandi la mail da solo creando un loop.
 162 # questo problema si verifica tipicamente sull' MX secondario quando il primario e` down.
 163 #
 164 #hosts_treat_as_local = 1.2.3.4
 165 
 166 
 167 # hostname della macchina e dominio locale
 168 # Il dominio locale idealmente non va usato per gli utenti
 169 # ma solo per servizio. Notare: il dominio locale è "host.dominio.tld" e non
 170 # dominio.tld, quindi va benissimo avere "mail.test.com" per servire le email
 171 # degli utenti del dominio "test.com" (che non e` uguale a "mail.test.com)
 172 # entrambi questi parametri ha senso che sian impostati al valore dell'hostname della macchina.
 173 #
 174 primary_hostname = hostname.ilvostrodominio.tld
 175 qualify_domain = hostname.ilvostrodominio.tld
 176 
 177 
 178 # domini per i quali faccio relay ma non sono locali (lasciare vuoto, ovvero non scrivere nulla 
 179 # dopo il carattere "=", per non fare relay per nessun dominio a parte i locali)
 180 # esempio: domainlist relay_to_domains = dominio1.com : dominio2.it 
 181 domainlist relay_to_domains = 
 182 
 183 
 184 # host per i quali faccio relay (i miei client in LAN)
 185 hostlist  relay_from_hosts = 127.0.0.1/32 : ::::1
 186 
 187 
 188 # se questo file e` presente, exim blocca il delivery contestuale alla ricezione. 
 189 # lo uso come "stop" in caso di allarme sul rate limit. In realta` non e`
 190 # uno stop quanto un delay, perche` ad ogni queue run comunque la mail esce.
 191 # se volessi un vero stop dovrei fermare exim.
 192 queue_only_file = /tmp/exim_queue_only
 193 
 194 
 195 # Configurazione dello scanner antivirus. Indica che scanner uso 
 196 # e come contattarlo. Qui uso clamd (daemon di clamav) su socket locale.
 197 av_scanner = clamd:/var/run/clamav/clamd.ctl
 198 
 199 # Se spamd usa il socket e non la porta tcp, questa riga va scommentata. Se
 200 # volete usare la porta tcp di default su localhost potete commentare questa riga.
 201 spamd_address = /var/run/spamd.ctl
 202 
 203 
 204 # trusted_users contiene anche www-data se si usa una webmail che ne ha bisogno. 
 205 # altrimenti si puo` anche togliere
 206 never_users = root
 207 trusted_users = mail : www-data
 208 
 209 #  Disattivo le richieste ident, tanto quasi nessuno le onora.
 210 # rfc1413_hosts = *
 211 rfc1413_query_timeout = 0s
 212 
 213 
 214 # limiti sul file system per non ingrippare la macchina, e sulle dimensioni delle mail
 215 # e dei bounce
 216 check_spool_space = 100M
 217 return_size_limit = 10k
 218 message_size_limit = 100M
 219 
 220 
 221 # limiti sulle sessioni smtp.
 222 smtp_accept_max_per_connection = 100
 223 smtp_accept_queue = 150
 224 
 225 
 226 # configurazioni dei retry delle mail fallite e dell'eliminazione di quelle che non si
 227 # riescono a consegnare
 228 ignore_bounce_errors_after = 2d
 229 timeout_frozen_after = 7d
 230 auto_thaw = 12h
 231 
 232 
 233 # Logging verboso
 234 # log_selector = +address_rewrite +all_parents +delivery_size +received_recipients +received_sender +subject
 235 
 236 # logging molto verboso (da usarsi al posto di quella di prima)
 237 log_selector = +all -arguments
 238 
 239 
 240 # Configurazione SSL server (per smtps o STARTTLS)
 241 # scommentare tutte e tre le righe e puntare a certificati validi
 242 #tls_certificate = /etc/letsencrypt/ilmiodominio.cert
 243 #tls_privatekey =  /etc/letsencrypt/ilmiodominio.key
 244 #tls_advertise_hosts = *
 245 #tls_try_verify_hosts = *
 246 
 247 
 248 # siccome ci sono host remoti che non rispettano gli standard, mi piego 
 249 # a non rispettarli nemmeno io, consentendo l'invio di mail a un MX
 250 # indicato nel DNS con l' ip e non con l'hostname.
 251 allow_mx_to_ip = true
 252 
 253 
 254 
 255 
 256 ##################################################################
 257 ##################################################################
 258 ## Fine della parte di configurazione che va modificata         ##
 259 ## per installare Exim. Da qui in poi dovrebbe andare bene      ##
 260 ## cosi` come e`.                                               ##
 261 ##################################################################
 262 ##################################################################
 263 
 264 
 265 # Tento di nascondere che MTA uso, magari aiuta contro eventuali
 266 # attacchi zero-day.
 267 smtp_banner="ESMTP server ready"
 268 
 269 
 270 # Exim 4.86.2-2 e successivi, introducono questi due parametri. Se non li valorizzo
 271 # (anche vuoti) Exim scrive warning dappertutto. Questa configurazione funziona anche
 272 # con l'environment piallato totalmente, comunuqe ci mettiamo una cosa sensata.
 273 # (non tiene nulla dell'environment del chiamante, e ci mette il path standard)
 274 add_environment = <; PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 275 # add_environment = <; PATH=/bin:/usr/bin
 276 keep_environment =
 277 
 278 
 279 # Configurazione delle ACL
 280 acl_smtp_rcpt = acl_check_rcpt      
 281 acl_smtp_data = acl_check_contents 
 282 acl_smtp_mime = acl_check_mime
 283 
 284 
 285 # I virtuali sono definiti come nomi di files in una directory. Il dominio e` locale
 286 # se esiste nella directory VIRTUALS un file che si chiama come il dominio.
 287 # Qui non occorre specificare il nome della macchina, che viene preso gia`
 288 # in considerazione (nei posti giusti) usando quello indicato prima in 
 289 # "$primary_hostname". Lo stesso vale per "localhost".
 290 
 291 domainlist local_domains = dsearch;VIRTUALS/users
 292 
 293 
 294 
 295 
 296 ######################################################################
 297 #                       ACL CONFIGURATION                            #
 298 #         Specifies access control lists for incoming SMTP mail      #
 299 ######################################################################
 300 
 301 # NOTA: un "accept" o un "deny" che matchano le condizioni
 302 # provocano l'accettazione o il rifiuto della mail immediatamente,
 303 # quindi tutte le condizioni che seguono in ordine di apparizione 
 304 # vengono totalmente ignorate.
 305 
 306 begin acl
 307 
 308 
 309 # Questa ACL viene verificata al momento in cui il remoto mi manda il comando "RCPT TO"
 310 acl_check_rcpt:
 311 
 312   # Deny if the local part contains @ or % or / or | or !. These are rarely
 313   # found in genuine local parts, but are often tried by people looking to
 314   # circumvent relaying restrictions.
 315   deny    local_parts   = ^.*[@%!/|]
 316 
 317   # salvo in due variabili domain e local_part del destinatario, mi serviranno
 318   # nella acl successiva per decidere se fare o meno il controllo dello spam.
 319   # per farlo uso una acl "warn" alla quale dico di settare due variabili senza
 320   # fare alcuna altra azione.
 321   warn 
 322        set acl_m0 = $local_part
 323        set acl_m1 = $domain
 324 
 325   # Whitelist / Blacklist
 326   accept hosts = ${if exists{WHITELIST}{WHITELIST}{}}
 327   	 set acl_c0 = no_spam_check
 328 
 329   deny hosts = ${if exists{BLACKLIST}{BLACKLIST}{}}
 330 
 331 
 332 
 333   # Rate limt per gli utenti autenticati: si applica solo agli utenti
 334   # autenticati, da qualsiasi  host provengano (conta lo username,
 335   # non l'host di provenienza)
 336   # Legge, se ci sono, due parametri ratelimit_limit e ratelimit_time
 337   # dal file degli utenti e applica questi limiti Se non ci sono usa
 338   # i valori hard-coded all'inizio del file di configurazione.
 339   # la mostruosa stringa qui sotto si traduce di fatto in una chiamata
 340   # a ratelimit cosi` fatta:
 341   # ratelimit = limite / tempo / strict / $authenticated_id.
 342   # La complessita` sta nel fatto di leggere i valori per limite e tempo
 343   # dal file degli utenti per ogni utente e gestire il fallback al default
 344   # in assenza di questi valori.
 345   # Questa ACL blocca l'invio di ulteriore mail fino a che non si scende
 346   # sotto il rate limit impostato, inoltre manda una mail usando
 347   # lo script indicato nella riga "continue" ad un indirizzo codificato
 348   # all'inizio del file di configurazione (RATELIMIT_ALARM_RECEIVER).
 349   # Lo script puo` anche creare un file che inibisce il delivery delle email,
 350   # file che andra` cancellato a mano dopo essere intervenuti sul
 351   # problema. Questo file pero` non impedisce il delivery ogni tot minuti
 352   # che fa exim (vedi /etc/default/exim4) e quindi non impedisce l'eventuale
 353   # delivery dello spam ma lo ritarda solo di un poco.
 354 
 355 
 356   deny  authenticated = *
 357         ratelimit = ${extract{ratelimit_limit} {${extract{USERFILE_FIELDS}{:} {${lookup {${local_part:$authenticated_id}} lsearch {VIRTUALS/users/${domain:$authenticated_id}}}} }}{$value}{RATELIMIT_LIMIT} } / ${extract{ratelimit_time} {${extract{USERFILE_FIELDS}{:} {${lookup {${local_part:$authenticated_id}} lsearch {VIRTUALS/users/${domain:$authenticated_id}}}} }}{$value}{RATELIMIT_TIME} } / strict / $authenticated_id
 358         log_message = RATELIMIT AUTH: $authenticated_id $sender_host_address - $sender_rate/$sender_rate_period (max $sender_rate_limit)
 359         message = Utente bloccato per eccessivo invio di email. Rivolgesri all'amministratore del sistema
 360         continue = ${run{/bin/bash -c "EXIM4/ratelimitalert.sh RATELIMIT_ALARM_RECEIVER $authenticated_id $sender_host_address $sender_rate $sender_rate_period $sender_rate_limit"}}
 361 
 362 
 363 
 364   # Rate limt per gli host nella LAN: si applica agli host che possono fare relay
 365   # e non usano autenticazione. Se invece usano l'autenticazione, allora questa
 366   # non si applica e si applica la precedente.
 367   # Se occorre che un host non sia limitato da questa regola, va messo in whitelist.
 368   # Se dovesse servire in futuro rendero` questa regola configurabile per ogni host
 369   # in modo diverso, ma per ora non ne ho voglia.
 370 
 371   deny  hosts = +relay_from_hosts
 372         !authenticated =  *
 373         ratelimit = RATELIMIT_HOST_LIMIT / RATELIMIT_HOST_TIME / strict / $sender_host_address
 374         log_message = RATELIMIT HOST: $sender_host_address - $sender_rate/$sender_rate_period (max $sender_rate_limit)
 375         message = Host bloccato per eccessivo invio di email. Rivolgesri all'amministratore del sistema
 376         continue = ${run{/bin/bash -c "EXIM4/ratelimitalert.sh RATELIMIT_ALARM_RECEIVER '' $sender_host_address $sender_rate $sender_rate_period $sender_rate_limit"}}
 377 
 378 
 379 
 380   # Accept if the source is local SMTP (i.e. not over TCP/IP). We do this by
 381   # testing for an empty sending host field.
 382   # Qui dovro` ragionare sul rate limit.
 383   accept  hosts = :
 384 
 385 
 386   # Se la mail viene dagli host dai quali accetto il relay (tipicamente la mia LAN)
 387   # la accetto e  setto una variabile per evitare di fare il check dello spam 
 388   # sui messaggi che vengono dalla mia rete.
 389   accept hosts = +relay_from_hosts
 390          set acl_c0 = no_spam_check
 391 
 392 
 393   # Accept mail to postmaster  and other administrative addresses in any local domain, 
 394   # regardless of the source, and without verifying the sender.
 395   accept  local_parts   = postmaster : bayes : revoke
 396           domains       = +local_domains : +relay_to_domains : $primary_hostname : localhost : lsearch;VIRTUALS/domain_aliases
 397 
 398 
 399   # Se il destinatario e` listato nel file VIRTUALS/allowed_recipients allora
 400   # lo accetto comunque, ignorando tutti i controlli sul mittente.
 401   accept recipients = ${if exists{VIRTUALS/allowed_recipients}{VIRTUALS/allowed_recipients}{}}
 402 	set acl_c0 = no_spam_check
 403 
 404 
 405   # Se la mail viene da un client autenticato, la accetto comunque.
 406   # Inoltre imposto una variabile che usero` per saltare la scansione antispam della mail
 407   # proveniente da una connessione autenticata, che ritengo sicura.
 408   accept  authenticated = *
 409           set acl_c0 = no_spam_check
 410 
 411 
 412   # Rifiuta se non c'e' l'HELO
 413   deny    message       = HELO/EHLO required by SMTP RFC
 414           condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
 415 
 416   # Rifiuta se l'IP in HELO e' uguale al mio...
 417   deny    message       = My IP detected in HELO
 418           condition     = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}
 419 
 420   # Rifiuta se l'hostname usato in HELO e' il mio
 421   deny    message       = Forged hostname detected in HELO
 422           !authenticated = *
 423           condition     = ${if match_domain{$sender_helo_name}{+local_domains}{yes}{no}}
 424 
 425   # Solo un destinatario se il mittente e' nullo
 426   deny    message       = Only one recipient accepted for NULL sender
 427           senders       = :
 428           condition     = ${if >{$rcpt_count}{1} {1}}
 429 
 430 
 431   # Blacklist per indirizzo IP del mittente:
 432   # RBL Check (se non e` nella lista degli host da cui faccio relay, ovvero la mia LAN,
 433   # allora controllo presso i vari provider di RBL e poi rejecto con un messaggio personalizzabile)
 434   deny	  hosts    = ! +relay_from_hosts
 435 	  condition = ${if eq {SPAM_CHECK_RBL} {refuse} {true}{false}}          
 436           dnslists = SPAM_RBL_DNSLIST
 437 	  message  = rejected because $sender_host_address is in a black list at $dnslist_domain
 438 
 439 
 440   # Blacklist per indirizzo IP del mittente:
 441   # Altro tipo di RBL check, come prima ma la mail viene accettata comunque, con un 
 442   # warning in un header e l'impostazione della variabile acl_m5, utile se si vuole
 443   # usare il router che salva lo spam in un folder imap separato.
 444   # imposta anche la variabile acl_m5 per indicare che un controllo antispam ha dato esito positivo
 445   warn    message       = X-Warning: $sender_host_address is in a black list at $dnslist_domain
 446 	  condition = ${if eq {SPAM_CHECK_RBL} {warn} {true}{false}}
 447           hosts    	 = ! +relay_from_hosts
 448           log_message   = RBL check: $sender_host_address found in black list at $dnslist_domain
 449           dnslists = SPAM_RBL_DNSLIST
 450           set acl_m5    = 1
 451 
 452 
 453   # Blacklist per DOMINIO del mittente:
 454   # RBL Check (se non e` nella lista degli host da cui faccio relay, ovvero la mia LAN,
 455   # allora controllo presso i vari provider di RBL e poi rejecto con un messaggio personalizzabile)
 456   deny    hosts    = ! +relay_from_hosts
 457           condition = ${if eq {SPAM_CHECK_DOMAIN} {refuse} {true}{false}}
 458           dnslists = SPAM_DBL_DNSLIST
 459           message  = rejected because the domain $sender_address_domain is in a black list at $dnslist_domain
 460 
 461 
 462   # Blacklist per DOMINIO del mittente:
 463   # Altro tipo di RBL check, come prima ma la mail viene accettata comunque, con un 
 464   # warning in un header e l'impostazione della variabile acl_m5, utile se si vuole
 465   # usare il router che salva lo spam in un folder imap separato.
 466   # imposta anche la variabile acl_m5 per indicare che un controllo antispam ha dato esito positivo
 467   warn    message       = X-Warning: domain $sender_address_domain is in a black list at $dnslist_domain
 468           condition = ${if eq {SPAM_CHECK_DOMAIN} {warn} {true}{false}}
 469           hosts          = ! +relay_from_hosts
 470           log_message   = RBL check: domain $sender_address_domain found in black list at $dnslist_domain
 471           dnslists = SPAM_DBL_DNSLIST
 472           set acl_m5    = 1
 473 
 474 
 475   # Verifico se il dominio del mittente esiste verificando semplicemente se ha un record DNS
 476   # Se il domnio non esiste, rifiuto la mail. Nota: non verifico se esiste l'indirizzo email
 477   # ma solo il dominio del mittente. Questa pratica è "safe" e la posso usare senza patemi.
 478   deny    condition     =  ${if eq {SPAM_CHECK_SENDER_DOMAIN} {refuse} {true}{false}}
 479           !verify       = sender
 480 
 481 
 482   # Variante del controllo precedente che imposta un header se il dominio del mittente non esiste
 483   warn    condition     =  ${if eq {SPAM_CHECK_SENDER_DOMAIN} {warn} {true}{false}}
 484           !verify       = sender
 485           message       = X-Warning: sender domain verify failed: $acl_verify_message
 486           hosts         = ! +relay_from_hosts
 487           log_message   = sender domain verify failed: $acl_verify_message
 488           set acl_m5    = 1
 489 
 490 
 491   # Verifico se il mittente esiste facendo una chiamata al suo mail server e fingendo di
 492   # volergli mandare una mail. Se il mittente non esiste, rifiuto la mail. Se il suo mail server
 493   # non risponde, la accetto lo stesso. Questa pratica non è considerata civile quindi meglio
 494   # non usarla.
 495   deny	  condition     =  ${if eq {SPAM_CHECK_SENDER_ADDRESS} {refuse} {true}{false}}
 496     	  !verify       = sender/callout=10s,connect=5s/defer_ok
 497  
 498 
 499   # Variante del controllo precedente che imposta un header se il mittente non esiste (2010-01-13)
 500   # imposta anche la variabile acl_m5 per indicare che un controllo antispam ha dato esito positivo
 501   # Questa pratica non è considerata civile quindi meglio non usarla.
 502   warn    condition     =  ${if eq {SPAM_CHECK_SENDER_ADDRESS} {warn} {true}{false}}
 503           !verify       = sender/callout=10s,connect=5s/defer_ok
 504 	  message	= X-Warning: sender address verify failed: $acl_verify_message
 505 	  hosts         = ! +relay_from_hosts
 506           log_message   = sender address verify failed: $acl_verify_message
 507 	  set acl_m5    = 1
 508 
 509 	  
 510   # implementazione delle greylist a mezzo del demone greylistd.
 511   # Se la mail non e` stata rifiutata prima, arriva qui e viene verificata la greylist prima
 512   # di venire eventualmente accettata dalle ACL che seguono.
 513   # notare che non considero il singolo host, ma la net /24 a cui esso appartiene.
 514   # questo e` un rilassamento del controllo per evitare di ritardare all'infinito mail che vengono
 515   # da sistemi che hanno diversi smpt server che lavorano in parallelo.
 516   defer  message        = Sender is greylisted. Please try again later.
 517          !authenticated = *
 518          condition      = ${if eq {GREYLISTING} {enabled} {true}{false}}
 519          condition      = ${if eq {grey}\
 520                           {${readsocket{/var/run/greylistd/socket}\
 521                                {${mask:$sender_host_address/24} \
 522                                $sender_address \
 523                                $local_part@$domain}\
 524                                {5s}{}{}}}\
 525                           {true}{false}}
 526          log_message    = Greylisted $sender_host_address $sender_address $local_part@$domain
 527 
 528 
 529   # Accept if the address is in a local domain, but only if the recipient can
 530   # be verified. Otherwise deny. The "endpass" line is the border between
 531   # passing on to the next ACL statement (if tests above it fail) or denying
 532   # access (if tests below it fail).
 533   accept  domains       = +local_domains : $primary_hostname : localhost : lsearch;VIRTUALS/domain_aliases
 534           endpass
 535           message       = unknown user
 536           verify        = recipient
 537 
 538   # Accetto la mail se sono un MX secondario, ma tento di verificarla presso il primario.
 539   # Se il primario non risponde, la accetto (defer_ok), mentre se risponde verifico se 
 540   # il destinatario esiste o meno. Se non esiste, la rifiuto. Questo evita di affogare
 541   # il secondario nello spam che il primario ha rifiutato.
 542   accept  domains       = +relay_to_domains
 543           endpass
 544           message       = unrouteable address or unknown user
 545           verify        = recipient/callout=5s/defer_ok
 546 
 547   # If control reaches this point, the domain is neither in +local_domains
 548   # nor in +relay_to_domains.
 549 
 550 
 551   # Reaching the end of the ACL causes a "deny", but we might as well give
 552   # an explicit message.
 553   deny    message       = relay not permitted
 554 
 555 
 556 
 557 # Questa ACL viene verificata dopo aver ricevuto il body (DATA), quindi di fatto subito prima della
 558 # fine della connessione SMTP.
 559 acl_check_contents:
 560 
 561   # check virus. Lascio che il messaggio passi se il virus scanner non funziona (defer_ok)
 562   # I contenuti mime del messaggio sono gia` stati decodificati nella acl "acl_check_mime".
 563   # DISATTIVAZIONE: il controllo antivirus e` sempre attivo a meno che nel file degli utenti
 564   # del dominio non sia specificato "virus=off" fra i paramentri dopo la password.
 565   deny    message = This message contains a virus ($malware_name) and has been rejected
 566           condition = ${if or{ {!exists{VIRTUALS/users/$acl_m1}} {!eq {${extract{virus} {${extract{USERFILE_FIELDS}{:} {${lookup {$acl_m0} lsearch {VIRTUALS/users/$acl_m1}}} }} }} {off}}} {true} {false} }
 567           malware = */defer_ok
 568 
 569 
 570   # Check spam: Se il messaggio non e` stato mandato dai miei utenti, e
 571   # se non e` troppo grosso per scannarlo, lo scanno e mi segno i punteggi
 572   # dentro delle variabili
 573   warn 
 574 	condition = ${if !eq {$acl_c0} {no_spam_check} }
 575 	spam = mail:true/defer_ok
 576 	logwrite = SpamScore  $spam_score
 577 	set acl_m2 = $spam_score_int
 578 	set acl_m3 = $spam_report
 579         set acl_m4 = [SPAM]($spam_score) $rh_Subject
 580   
 581   # Check spam: se a livello di sistema e` impostata una soglia di "spammosita`"
 582   # oltre la quale lo spam viene rifiutato, lo rifiuto a livello smtp
 583   deny
 584 	condition = ${if > {$spam_score_int}{SPAM_SCORE_DENY} {true}{false}}
 585 	log_message = Message refused by system configuration (spam score $spam_score_int is too high)
 586 	message = This message is considered to be spam based on its contents
 587 
 588   # Check spam: se a livello di sistema e` impostata una soglia di spammosita` per il marking, 
 589   # marco il messaggio con un header e setto la acl_m5 a 1 per indicare che un controllo 
 590   # antispam ha dato esito positivo (2010-01-15)
 591   warn
 592 	condition = ${if > {$spam_score_int}{SPAM_SCORE_MARK} {true}{false}}
 593         log_message = Message marked as spam by system configuration (spam score $spam_score_int is too high)
 594         set acl_m5  = 1
 595 	message     = X-Warning: Spamassassin score $spam_score_int is higher than system-wide threshold 
 596 
 597 
 598   
 599   # Check spam: se il destinatario ha impostato il parametro spam_smtp_deny, 
 600   # leggo il punteggio e decido se rifiutare la mail (in base al punteggio)
 601   # Se spam_smtp_deny non e` impostato, salto questo controllo
 602   deny
 603 	condition = ${if exists{VIRTUALS/users/$acl_m1} {true}{false} }
 604 	condition = ${if !eq {} {${extract{spam_smtp_deny} {${extract{USERFILE_FIELDS}{:} {${lookup {$acl_m0} lsearch {VIRTUALS/users/$acl_m1}}} }} }} }
 605 	condition = ${if > {$spam_score_int} {${extract{spam_smtp_deny} {${extract{USERFILE_FIELDS}{:} {${lookup {$acl_m0} lsearch {VIRTUALS/users/$acl_m1}}} }} }} }
 606 	log_message = Messagre refused by recipient (user) configuration (spam score too high)
 607 	message = This message is considered to be spam based on its contents
 608 
 609 
 610   # Check spam: come sopra, pero` nel file degli alias e non nel file
 611   # degli utenti. Teoricamente dovrei verificare se esite un alias
 612   # con lo stesso indirizzo di un utente, e nel caso applicare solo il
 613   # check dell'alias e non quello dell'utente, al momento li 
 614   # applico entrambi, col risultato che il piu` restrittivo decide la sorte
 615   # del messaggio.
 616   deny
 617 	condition = ${if exists{VIRTUALS/aliases/$acl_m1} {true}{false} }
 618 	condition = ${if !eq {} {${extract{spam_smtp_deny} {${extract{2}{:} {${lookup {$acl_m0} lsearch {VIRTUALS/aliases/$acl_m1}}} }} }} }
 619 	condition = ${if > {$spam_score_int} {${extract{spam_smtp_deny} {${extract{2}{:} {${lookup {$acl_m0} lsearch {VIRTUALS/aliases/$acl_m1}}} }} }} }
 620 	log_message = Messagre refused by recipient (alias) configuration (spam score too high)
 621 	message = This message is considered to be spam based on its contents
 622 
 623 
 624   # Check spam: come sopra, pero` nel file dei domain alias. 
 625   # in questo caso pero` e` possibile indicare solo un valore
 626   # per tutti gli utenti del dominio aliasato
 627  deny
 628         condition = ${if exists{VIRTUALS/domain_aliases} {true}{false} }
 629         condition = ${if !eq {} {${extract{spam_smtp_deny} {${extract{2}{:} {${lookup {$acl_m1} lsearch {VIRTUALS/domain_aliases}}} }} }} }
 630         condition = ${if > {$spam_score_int} {${extract{spam_smtp_deny} {${extract{2}{:} {${lookup {$acl_m1} lsearch {VIRTUALS/domain_aliases}}} }} }} }
 631         log_message = Messagre refused by recipient (domain alias) configuration (spam score too high)
 632         message = This message is considered to be spam based on its contents
 633 
 634   
 635   # Alla fine accetto tutto quello che e` passato fino a qui.
 636   accept
 637 
 638 
 639 # Questa ACL si applica ai contenuti MIME. In pratica qui non faccio nessun
 640 # controllo sul contenuto, ma mi limito a decodificarlo in modo da poter
 641 # poi eseguire il controllo antivirus sui contenuti decodificati.
 642 acl_check_mime:
 643   warn decode = default
 644   accept
 645 
 646 
 647 
 648 ######################################################################
 649 #                      ROUTERS CONFIGURATION                         #
 650 #               Specifies how addresses are handled                  #
 651 ######################################################################
 652 #     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #
 653 # An address is passed to each router in turn until it is accepted.  #
 654 ######################################################################
 655 
 656 begin routers
 657 
 658 # This router routes addresses that are not in local domains by doing a DNS
 659 # lookup on the domain name. These are sent via SMTP.
 660 # Any domain that resolves to 0.0.0.0 or to a loopback interface address 
 661 # (127.0.0.0/8) is treated as if it had no DNS entry. 
 662 # If the DNS lookup fails, no further routers are tried because of
 663 # the no_more setting, and consequently the address is unrouteable.
 664 dnslookup:
 665   driver = dnslookup
 666   domains = ! +local_domains : ! $primary_hostname : ! localhost : ! lsearch;VIRTUALS/domain_aliases
 667   transport = remote_smtp
 668   ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
 669   no_more
 670 
 671 
 672 # gestione autoreply
 673 # Se esiste un file VIRTUALS/autoreply/domain/user allora fa un autoreply per questo utente
 674 # usando come testo della risposta il contenuto del file
 675 autoreply:
 676    driver = accept
 677    condition = ${if exists{VIRTUALS/autoreply/$domain/$local_part} {true}{false} }
 678    no_verify
 679    no_expn
 680    unseen
 681    transport = autoreply
 682    senders = ! ^.*-request@.*:\
 683              ! ^bounce-.*@.*:\
 684              ! ^.*-bounce@.*:\
 685              ! ^owner-.*@.*:\
 686              ! ^postmaster@.*:\
 687              ! ^abuse@.*:\
 688              ! ^webmaster@.*:\
 689              ! ^listmaster@.*:\
 690              ! ^mailer-daemon@.*:\
 691              ! ^root@.*
 692 
 693 
 694 # gestione dei files .forward per gli utenti locali della macchina
 695 userforward:
 696     driver = redirect
 697     check_local_user
 698     condition = ${if exists{$home/.forward} {true}{false} }
 699     domains = ${primary_hostname} : localhost
 700     file = $home/.forward
 701     no_verify
 702     no_expn
 703     check_ancestor
 704   # allow_filter
 705     file_transport = address_file
 706     pipe_transport = address_pipe
 707     reply_transport = address_reply
 708 
 709 
 710 # alias di sistema presi da /etc/aliases, solo per l'hostname locale
 711 system_aliases:
 712   driver = redirect
 713   allow_fail
 714   allow_defer
 715   domains = ${primary_hostname} : localhost
 716   data = ${lookup {$local_part} lsearch{SYS_ALIASES} }
 717   file_transport = address_file
 718   pipe_transport = address_pipe
 719 
 720 
 721 # delivery della mail per gli utenti locali della macchina
 722 localuser:
 723     driver = accept
 724     domains = ${primary_hostname} : localhost
 725     check_local_user
 726     transport = local_delivery
 727 
 728 # alias di sistema presi da /etc/aliases, solo per l'hostname locale
 729 # Questa volta cerco con l' asterisco, in modo che se alla fine del file aliases metto una voce
 730 # che dice "*:indirizzo", un qualsiasi indirizzo che non sia stato trovato prima (ne` fra gli alias
 731 # ne` fra gli utenti) venga diretto all'indirizzo indicato dopo l'asterisco.
 732 # questo sistema bruttino di fare due volte la ricerca degli alias serve per consentire di avere
 733 # un ordine preciso: prima gli alias (Senza asterisco) poi gli utenti, e per finire l'alias con
 734 # l'asterisco (se c'e`)
 735 system_aliases_wildcard:
 736   driver = redirect
 737   allow_fail
 738   allow_defer
 739   domains = ${primary_hostname} : localhost
 740   data = ${lookup {$local_part} lsearch*{SYS_ALIASES} }
 741   file_transport = address_file
 742   pipe_transport = address_pipe
 743 
 744 
 745 # Redirect di tutte le mail indirizzate ai vari postmaster, sia
 746 # dei domini locali (virtuali), sia a quello della macchina
 747 # Queste vanno tutte a qualcuno che sappia cosa farne.
 748 domain_postmaster:
 749   driver = redirect
 750   local_parts = postmaster
 751   domains = +local_domains : ${primary_hostname} : localhost
 752   check_ancestor
 753   retry_use_local_part
 754   data = POSTMASTER
 755 
 756 ##### ATTENZIONE: questo pezzo e` incompleto e non va usato se non viene prima sistemato #####
 757 ## Istruiamo spamassassin. Le mail indirizzate a bayes e revoke vanno mandate a
 758 ## un trasporto speciale che addestra il filtro bayesiano e riporta a razor
 759 #bayes_report:
 760 #  driver = accept
 761 #  local_parts = bayes : revoke
 762 #  domains = +local_domains
 763 #  transport = bayes_update
 764 
 765 
 766 # gli indirizzi real-email@domain non passano per l'espansione degli alias
 767 real_virtual_user:
 768   driver = accept
 769   local_part_prefix = real-
 770   domains = +local_domains
 771   condition = ${lookup {$local_part} lsearch{VIRTUALS/users/$domain} }
 772   retry_use_local_part
 773   transport = VIRTUAL_DELIVERY
 774 
 775 
 776 
 777 # alias virtuali, redirect ad altri indirizzi e/o pipe verso comandi
 778 virtual_aliases:
 779   driver = redirect
 780   allow_defer
 781   allow_fail
 782   domains = +local_domains
 783   condition = ${if exists{VIRTUALS/aliases/$domain} {true}{false} }
 784   pipe_transport = address_pipe
 785   file_transport = address_file
 786   data = ${extract{1}{:} {${lookup {$local_part} lsearch{VIRTUALS/aliases/${domain}} } }}
 787   user=${extract{pipe_user} {${extract{2}{:}{${lookup {$local_part} lsearch{VIRTUALS/aliases/${domain}} }}}} {$value} {Debian-exim}}
 788   group=${extract{pipe_group} {${extract{2}{:}{${lookup {$local_part} lsearch{VIRTUALS/aliases/${domain}} }}}} {$value} {Debian-exim}}
 789 
 790 
 791 
 792 
 793 # Prima del delivery finale agli utenti virtuali applico eventuali 
 794 # regole per lo spam definite nel file VIRTUALS/users/$domain 
 795 # per l'utente in questione. (i prossimi due router)
 796 
 797 # Questo router mette lo spam nel gufo se cosi` e` 
 798 # richiesto dalla configurazione utente. Attenzione che
 799 # qui si perdono i messaggi se si sbaglia configurazione
 800 virtual_spam_owl:
 801   driver = redirect
 802   domains = +local_domains
 803   no_verify
 804   condition = ${if > {$spam_score_int} {${extract{spam_blackhole} {${extract{USERFILE_FIELDS}{:} {${lookup {$local_part} lsearch {VIRTUALS/users/$domain}}} }}{$value}{65535} }} }
 805   data=:blackhole:
 806 
 807 # Questo router modifica il subject se richiesto
 808 # nella configurazione dell'utente. Per velocita` 
 809 # faccio in modo di non ripassare tutti i router da capo
 810 # ma di passare direttamente al successivo (redirect_router)
 811 virtual_spam_add_subject:
 812   driver = redirect
 813   domains = +local_domains
 814   no_verify
 815   condition = ${if > {$spam_score_int} {${extract{spam_subject} {${extract{USERFILE_FIELDS}{:} {${lookup {$local_part} lsearch {VIRTUALS/users/$domain}}} }}{$value}{65535} }} }
 816   headers_remove = Subject
 817   headers_add = Subject: $acl_m4
 818   data = $local_part@$domain
 819   redirect_router = virtual_filter
 820 
 821 
 822 
 823 # Delivery dello spam in una cartella IMAP apposta (2010-01-15)
 824 # Questo, se l'utente ha il parametro spam_folder settato e la variabile acl_m5 e` uguale a 1
 825 # (quindi la mail in questione ha fatto scattare almeno uno dei controlli antispam)
 826 # salva la mail in un folder che ha il nome indicato nel parametro spam_folder
 827 # (piu` esattamente chiama un trasporto apposta che provvedera` all'uopo)
 828 virtual_spam_folder:
 829   driver=accept
 830   domains = +local_domains
 831   condition = ${if and{ { !eq{}{${lookup {$local_part} lsearch{VIRTUALS/users/$domain}}}}  {={$acl_m5}{1}}  {={1}{ ${extract{spam_folder} { ${extract{USERFILE_FIELDS}{:} {${lookup {$local_part} lsearch {VIRTUALS/users/$domain}}} }}{1}{0}} }} } }
 832   headers_remove = X-Spam-Score:X-Spam-Report
 833   headers_add = X-Spam-Score: $acl_m2\nX-Spam-Report: $acl_m3\nX-Spam-Boolean: $acl_m5\n
 834   transport = virtual_user_spam_delivery
 835 
 836 
 837 
 838 
 839 # Filtri per gli utenti dei domini virtuali.
 840 # Questo router applica un filtro alle mail in transito per l'utente
 841 # se esiste un file VIRTUALS/filters/$domain/$local_part
 842 # Questo sistema non e` sicuro se i filtri possono essere impostati da qualcuno che 
 843 # ha cattive intenzioni. Idealmente i files dei filtri dovrebbero essere creati solo
 844 # dal sysadmin su richiesta degli utenti.
 845 virtual_filter:
 846     user=mail
 847     group=mail
 848     driver = redirect
 849     domains = +local_domains
 850     condition = ${if exists{VIRTUALS/filters/$domain/$local_part} {true}{false} }
 851     file = VIRTUALS/filters/$domain/$local_part
 852     headers_remove = X-Spam-Score:X-Spam-Report
 853     headers_add = X-Spam-Score: $acl_m2\nX-Spam-Report: $acl_m3\nX-Spam-Boolean: $acl_m5\n
 854     no_verify
 855     allow_filter
 856     allow_freeze
 857     directory_transport = address_directory
 858     file_transport = address_file
 859     pipe_transport = address_pipe
 860     reply_transport = autoreply
 861 
 862 
 863 # Delivery agli utenti dei domini virtuali 
 864 virtual_user:
 865   driver = accept
 866   domains = +local_domains
 867   condition = ${lookup {$local_part} lsearch{VIRTUALS/users/$domain} }
 868   headers_remove = X-Spam-Score:X-Spam-Report
 869   headers_add = X-Spam-Score: $acl_m2\nX-Spam-Report: $acl_m3\nX-Spam-Boolean: $acl_m5\n
 870   retry_use_local_part
 871   transport = VIRTUAL_DELIVERY
 872 
 873 
 874 # Questo router cerca un indirizzo del tipo "user-ggmmaaaa@domain.tld" e se lo trova lo ridirige a
 875 # user@domain.tld senza il "-ggmmaaaa". Serve a fornire ad ogni utente un indirizzo mail "temporaneo"
 876 # valido solo per la data odierna, utile per iscriversi a quei servizi che poi magari ti spammano
 877 # a morte, perche` da domani questo non e` piu` valido.
 878 auto_daily_alias:
 879   driver = redirect
 880   check_ancestor
 881   condition = ${if eq {${substr{-9}{10}{$local_part}}} {-${substr{6}{2}{$tod_logfile}}${substr{4}{2}{$tod_logfile}}${substr{0}{4}{$tod_logfile}}} {true}{false}}
 882   data = ${substr{-9}{$local_part}}@$domain
 883 
 884  
 885 # alias virtuali, redirect ad altri indirizzi e/o pipe verso comandi
 886 # questa volta anche con l'asterisco, come per gli aliases locali
 887 virtual_aliases_wildcard:
 888   driver = redirect
 889   allow_defer
 890   allow_fail
 891   domains = +local_domains
 892   condition = ${if exists{VIRTUALS/aliases/$domain} {true}{false} }
 893   pipe_transport = address_pipe
 894   file_transport = address_file
 895   data = ${extract{1}{:} {${lookup {$local_part} lsearch*{VIRTUALS/aliases/${domain}} } }}
 896   user=${extract{pipe_user} {${extract{2}{:}{${lookup {$local_part} lsearch{VIRTUALS/aliases/${domain}} }}}} {$value} {Debian-exim}}
 897   group=${extract{pipe_group} {${extract{2}{:}{${lookup {$local_part} lsearch{VIRTUALS/aliases/${domain}} }}}} {$value} {Debian-exim}}
 898 
 899 
 900 
 901 
 902 # alias dei domini. Se esiste un file che si chiama VIRTUALS/domain_aliases
 903 # questo consente di ridirigere tutta la mail per un dominio su un'altro.
 904 # la sintassi del file domain_aliases e` "dominio_origine:dominio_destinazione[:variabili]"
 905 # (una coppia per riga). In questo modo quando riceviamo una mail per 
 906 # utente@dominio_origine, prima viene verificato se esiste l'utente nel 
 907 # dominio originale. Se l'utente non esiste, o se proprio non esiste il file
 908 # degli utenti del dominio originale, allora la mail viene ridiretta a 
 909 # utente@dominio_destinazione.
 910 domain_aliases:
 911   driver = redirect
 912   condition = ${if and{ {exists{VIRTUALS/domain_aliases}} {!eq {${lookup {$domain} lsearch{VIRTUALS/domain_aliases}}} {}}}{true}{false}}
 913   data = ${quote:$local_part}@${extract{1}{:} {${lookup {$domain} lsearch{VIRTUALS/domain_aliases}}}}
 914 
 915 
 916 
 917 ######################################################################
 918 #                      TRANSPORTS CONFIGURATION                      #
 919 ######################################################################
 920 #                       ORDER DOES NOT MATTER                        #
 921 #     Only one appropriate transport is called for each delivery.    #
 922 ######################################################################
 923 
 924 begin transports
 925 
 926 # Delivery via SMTP all' MX del dominio remoto
 927 remote_smtp:
 928   driver = smtp
 929   dkim_canon = relaxed
 930   dkim_selector = dkim
 931   dkim_domain = ${lc:$sender_address_domain}
 932   dkim_private_key = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
 933   # fallback_hosts = your.provider.smtp.server
 934   ###  hosts_avoid_esmtp = *
 935   # interface = 89.40.12.236
 936 
 937 # Delivery locale per gli utenti fisici della macchina. (files in /var/mail)
 938 local_delivery:
 939   driver = appendfile
 940   file = /var/mail/$local_part
 941   group=mail
 942   delivery_date_add
 943   envelope_to_add
 944   return_path_add
 945 
 946 # Pipe ad un programma, per i vari files di forward
 947 address_pipe:
 948   driver = pipe
 949   return_output
 950 
 951 # Scrittura su un file, per i vari files di forward
 952 address_file:
 953   driver = appendfile
 954   delivery_date_add
 955   envelope_to_add
 956   return_path_add
 957 
 958 # Scrittura su una maildir, per i vari files di forward
 959 address_directory:
 960   driver=appendfile
 961   delivery_date_add
 962   envelope_to_add
 963   return_path_add
 964   maildir_format
 965 
 966 # Reply a mezzo email, per i vari files di forward. Questo NON va usato per vacation
 967 # perche` non ha protezioni tipo once o simili.
 968 address_reply:
 969     driver = autoreply
 970 
 971 # Insegnamento a spamassassin
 972 # Mai testato e mai usato. Al momento lo commento e lo tengo buono per il futuro.
 973 # Come sistema di insegnamento a spamassassin, usiamo quello via IMAP.
 974 #spam_update:
 975 #  driver = pipe
 976 #  user = mail
 977 #  group = mail
 978 #  return_output
 979 #  command = spamassassin if{ eq {$local_part}{revoke} {-k}{-r}}
 980 
 981 
 982 # Delivery locale agli utenti virtuali (il trasporto fondamentale)
 983 # Questa e` la versione che NON USA Dovecot LDA e quindi NON funziona con SIEVE.
 984 virtual_user_delivery:
 985   driver = appendfile
 986   directory = MAIL/$domain/$local_part
 987   maildir_format
 988   user = mail
 989   group = mail
 990   mode = 0600
 991   directory_mode = 0700
 992 
 993 
 994 # Delivery locale agli utenti virtuali con Dovecot LDA e supporto SIEVE 
 995 # vedasi https://mater.kurgan.org/kb/LinuxDebian/Dovecot-Sieve
 996 virtual_user_dovecot_delivery:
 997   driver = pipe
 998   command = /usr/lib/dovecot/dovecot-lda -d $local_part@$domain  -f $sender_address -a $original_local_part@$original_domain
 999   message_prefix =
1000   message_suffix =
1001   delivery_date_add
1002   envelope_to_add
1003   return_path_add
1004   log_output
1005   user = mail
1006   temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
1007 
1008 
1009 
1010 # Delivery locale agli utenti virtuali della mail che e` considerata spam
1011 # Questo viene chiamato se si decide di accettare lo spam anziche` rimbalzarlo
1012 # e fa delivery in un folder imap apposito, specificato nella configurazione
1013 # dell'utente alla voce "spam_folder". Viene chiamato dal router "virtual_spam_folder".
1014 virtual_user_spam_delivery:
1015   driver = appendfile
1016   directory = MAIL/$domain/$local_part/.${extract{spam_folder} { ${extract{USERFILE_FIELDS}{:} {${lookup {$local_part} lsearch {VIRTUALS/users/$domain}}} }}{$value}{}}
1017   # directory = MAIL/$domain/$local_part/.testspam
1018   maildir_format
1019   user = mail
1020   group = Debian-exim
1021   mode = 0600
1022   directory_mode = 0700
1023 
1024 
1025 
1026 
1027 # Trasporto di replay con funzione di limitazione con file once.
1028 # funziona per il router autoreplay oppure se chiamato in un filtro.
1029 # imposta il subject a un valore standard, e il testo al contenuto del file di autoreply oppure
1030 # ad un valore standard se questo file non esiste. I valori possono essere overridati nel filtro.
1031 autoreply:
1032   driver = autoreply
1033   to = ${sender_address}
1034   from = "${local_part}@${domain}"
1035   subject = "Autoreply from: ${local_part}@${domain}"
1036   text =  ${if exists{VIRTUALS/autoreply/$domain/$local_part}{${readfile{VIRTUALS/autoreply/$domain/$local_part}{\n}}}{"This autoreply text should always be overridden"}}
1037   user = mail
1038   group = mail
1039   once = MAIL/$domain/${local_part}_autoreply.once
1040   once_file_size = 10k
1041   once_repeat = 1d
1042 
1043 
1044 
1045 
1046 
1047 ######################################################################
1048 #                      RETRY CONFIGURATION                           #
1049 ######################################################################
1050 
1051 begin retry
1052 
1053 
1054 # Regle di retry.
1055 # Se ho un errore 4xx (segno di una greylist) allora riprovo spesso
1056 # Se ho errori diversi, riprovo in modo meno insistente
1057 
1058 # ATTENZIONE: perche` questi retry cosi` veloci (2 minuti) funzionino
1059 # occorre che Exim esegua il "queue run" spesso. Se lo fa solo ogni 30
1060 # minuti allora ovviamente la mail partira` ogni 30 minuti e non piu`
1061 # spesso. 
1062 
1063 # Domain               Error       Retries
1064 # ------               -----       -------
1065 *                      rcpt_4xx     F,1h,2m;  F,23h,30m; G,3d,1h,1.1
1066 *                      mail_4xx     F,1h,2m;  F,23h,30m; G,3d,1h,1.1
1067 *                      data_4xx     F,1h,2m;  F,23h,30m; G,3d,1h,1.1
1068 *                      *            F,2h,15m; F,23h,1h;  G,3d,1h,1.1
1069 
1070 
1071 
1072 ######################################################################
1073 #                      REWRITE CONFIGURATION                         #
1074 ######################################################################
1075 
1076 # There are no rewriting specifications in this default configuration file.
1077 begin rewrite
1078 
1079 ######################################################################
1080 #                   AUTHENTICATION CONFIGURATION                     #
1081 ######################################################################
1082 
1083 begin authenticators
1084 
1085 
1086 ###
1087 ### Autenticazione su file di testo
1088 ###
1089 
1090 #cram:
1091 #        driver = cram_md5
1092 #        public_name = CRAM-MD5
1093 #        server_secret = ${lookup{$auth1}lsearch{EXIM4/passwd.smtp}{$value}fail}
1094 #        server_set_id = $1
1095 
1096 
1097 #plain:
1098 #     driver = plaintext
1099 #     public_name = PLAIN
1100 #     server_prompts = :
1101 #     server_condition = "\
1102 #      ${if and {{!eq{$2}{}}{!eq{$3}{}} \
1103 #      {eq{$3}{${extract{1}{:} \
1104 #      {${lookup{$2}lsearch{EXIM4/passwd.smtp}{$value}}}}}}}{1}{0}}"
1105 #     server_set_id = $2
1106 
1107 #login:
1108 #        driver = plaintext
1109 #        public_name = LOGIN
1110 #        server_prompts = "Username:: : Password::"
1111 #        server_condition = "\
1112 #          ${if and {{!eq{$1}{}}{!eq{$2}{}} \
1113 #          {eq{$2}{${extract{1}{:} \
1114 #          {${lookup{$1}lsearch{EXIM4/passwd.smtp}{$value}}}}}}}{1}{0}}"
1115 #        server_set_id = $1
1116 
1117 
1118 ###
1119 ### Autenticazione su Dovecot
1120 ###
1121 
1122 # questo sistema richiede che Dovecot sia configurato per fornire autenticazione sul socket
1123 # definito qui in "server_socket" e che supporti tutti i metodi di autenticazione definiti
1124 # qui in alla voce "public_name".
1125 
1126 
1127 dovecot_cram:
1128 	driver = dovecot
1129         public_name = CRAM-MD5
1130 	server_socket = /var/run/dovecot/auth-client
1131 	server_set_id = $auth1
1132 
1133 dovecot_plain:
1134 	driver = dovecot
1135         public_name = PLAIN
1136 	server_socket = /var/run/dovecot/auth-client
1137 	server_set_id = $auth1
1138 
1139 dovecot_login:
1140 	driver = dovecot
1141         public_name = LOGIN
1142 	server_socket = /var/run/dovecot/auth-client
1143 	server_set_id = $auth1
1144 
1145 dovecot_ntlm:
1146 	driver = dovecot
1147         public_name = NTLM
1148 	server_socket = /var/run/dovecot/auth-client
1149 	server_set_id = $auth1
1150 
1151 
1152 
1153 
1154 ######################################################################
1155 #                   CONFIGURATION FOR local_scan()                   #
1156 ######################################################################
1157 
1158 # If you have built Exim to include a local_scan() function that contains
1159 # tables for private options, you can define those options here. Remember to
1160 # uncomment the "begin" line. It is commented by default because it provokes
1161 # an error with Exim binaries that are not built with LOCAL_SCAN_HAS_OPTIONS
1162 # set in the Local/Makefile.
1163 
1164 # begin local_scan
1165 
1166 # End of Exim configuration file

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2021-06-25 20:04:00, 47.0 KB) [[attachment:exim4.conf-deb8910-devuan123.txt]]
  • [get | view] (2019-11-29 13:34:50, 43.1 KB) [[attachment:exim4.conf.deb8-9-devuan1-2.txt]]
  • [get | view] (2018-07-30 19:28:41, 35.3 KB) [[attachment:exim4.conf.etch-lenny-squeeze]]
  • [get | view] (2018-07-30 19:28:41, 42.9 KB) [[attachment:exim4.conf.jessie-stretch]]
  • [get | view] (2018-07-30 19:28:41, 24.3 KB) [[attachment:exim4.conf.sarge]]
  • [get | view] (2018-07-30 19:28:41, 41.5 KB) [[attachment:exim4.conf.wheezy-jessie]]
  • [get | view] (2018-07-30 19:28:41, 6.9 KB) [[attachment:sa-stats.pl]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.