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.You are not allowed to attach a file to this page.