# exim4 utilisateur et domaines virtuels avec mysql

**URL:** <https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829>\
**Category:** Trucs et Astuces\
**Created:** [Février 20, 2016, 6:56 UTC](https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829 "2016-02-20T18:56:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![alexmath](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8edcca/32.png) [@alexmath](https://www.debian-fr.org/u/alexmath)\
**Post date:** [Février 20, 2016, 6:56 UTC](https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829/1 "2016-02-20T18:56:27Z")

</div>

ayant passé pas mal de temps pour mettre en place la gestion des utilisateurs et des domaines via une base mysql pour exim comme MTA et Dovecot comme MUA, voici les fichiers de config que j’utilise pour ces 2 outils ainsi que la structure des tables. a noter que les fichiers de config sont très dépouillé, peu voir aucun commentaire, et il n’y a aucun mécanisme de prévu pour le traitement du spam.  
le fichier exim4.conf.template

[code]######################################################################

# MAIN CONFIGURATION SETTINGS

######################################################################

# MySQL defines

MYSQL\_SERVER=localhost  
MYSQL\_USER= a completer  
MYSQL\_PASSWORD= a completer  
MYSQL\_DB= a completer  
MYSQL\_EMAILTABLE=emailtable  
MYSQL\_DOMAINTABLE=domaintable  
MYSQL\_DOMAINRTABLE=relaytable

# MySQL queries

MYSQL\_Q\_ISAWAY=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND is\_away=‘yes’  
MYSQL\_Q\_AWAYTEXT=SELECT away\_text FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_FORWARD=SELECT forward FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND forward != ‘‘  
MYSQL\_Q\_CC=SELECT cc FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_LOCAL=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND box != ‘‘  
MYSQL\_Q\_WCLOCAL=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’_’ AND forward != ‘‘  
MYSQL\_Q\_WCLOCFW=SELECT forward FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’_’ AND forward != ‘‘  
MYSQL\_Q\_LDOMAIN=SELECT DISTINCT domain FROM MYSQL\_DOMAINTABLE WHERE domain=’$domain’  
MYSQL\_Q\_RDOMAIN=SELECT DISTINCT domain FROM MYSQL\_DOMAINRTABLE WHERE domain=’$domain’  
MYSQL\_Q\_BOXNAME=SELECT box FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_DISABLED=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND is\_enabled=‘no’  
MYSQL\_Q\_AUTHPWD2=SELECT local\_part FROM MYSQL\_EMAILTABLE WHERE local\_part=’$1’ AND password=MD5(’$2’)

# MySQL connection

hide mysql\_servers = “MYSQL\_SERVER/MYSQL\_DB/MYSQL\_USER/MYSQL\_PASSWORD”

# starting ‘normal’ config

primary\_hostname = mail.

domainlist local\_domains = mysql;MYSQL\_Q\_LDOMAIN  
domainlist relay\_to\_domains = mysql;MYSQL\_Q\_RDOMAIN  
hostlist relay\_from\_hosts = 127.0.0.1

acl\_smtp\_rcpt = acl\_check\_rcpt

DCsmarthost = a completer

qualify\_domain = a completer

# qualify\_recipient =

# allow\_domain\_literals

never\_users = root  
#trusted\_users = amavis : list

host\_lookup = \*  
rfc1413\_hosts = \*  
rfc1413\_query\_timeout = 15s

check\_spool\_space = 50M  
check\_log\_space = 20M  
return\_size\_limit = 20k  
message\_size\_limit = 20M

# sender\_unqualified\_hosts =

# recipient\_unqualified\_hosts =

# percent\_hack\_domains =

ignore\_bounce\_errors\_after = 2d  
timeout\_frozen\_after = 7d

deliver\_queue\_load\_max = 8  
queue\_only\_load = 10  
remote\_max\_parallel = 15

tls\_certificate = /etc/exim4/exim.crt  
tls\_privatekey = /etc/exim4/exim.key  
tls\_advertise\_hosts = \*  
UPEX4CmacrosUPEX4C = 1  
######################################################################

# ACL CONFIGURATION

# Specifies access control lists for incoming SMTP mail

######################################################################

begin acl

acl\_check\_rcpt:  
accept hosts = :  
deny domains = +local\_domains  
local\_parts = ^[.] : ^._[@%!/|]  
deny domains = !+local\_domains  
local\_parts = ^[./|] : ^._[@%!] : ^.\*/\.\./  
accept local\_parts = postmaster  
domains = +local\_domains  
require verify = sender  
accept domains = +local\_domains  
endpass  
verify = recipient  
accept domains = +relay\_to\_domains  
endpass  
verify = recipient  
accept hosts = +relay\_from\_hosts  
accept authenticated = \*  
deny message = relay not permitted

######################################################################

# ROUTERS CONFIGURATION

# Specifies how addresses are handled

######################################################################

begin routers

fail\_router:  
driver = redirect  
domains = ${lookup mysql {MYSQL\_Q\_DISABLED}{$value}}  
data = ":fail:"  
allow\_fail

smarthost:  
debug\_print = "R: smarthost for $local\_part@$domain"  
driver = manualroute  
domains = ! +local\_domains  
transport = remote\_smtp\_smarthost  
route\_list = \* DCsmarthost byname  
host\_find\_failed = defer  
same\_domain\_copy\_routing = yes  
no\_more

system\_aliases:  
driver = redirect  
allow\_fail  
allow\_defer  
data = ${lookup{$local\_part}lsearch{/etc/aliases}}  
user = mailvirt  
file\_transport = address\_file  
pipe\_transport = address\_pipe

vacation\_director:  
driver = accept  
domains = ${lookup mysql {MYSQL\_Q\_ISAWAY}{$value}}  
transport = vacation\_autoreply  
unseen

virtual\_cc\_director:  
driver = redirect  
data = ${lookup mysql {MYSQL\_Q\_CC}{$value}}  
unseen

virtual\_forward\_director:  
driver = redirect  
data = ${lookup mysql {MYSQL\_Q\_FORWARD}{$value}}

virtual\_local\_mailbox:  
driver = accept  
domains = ${lookup mysql {MYSQL\_Q\_LOCAL}{$value}}  
transport = virtual\_local\_md\_delivery

virtual\_wclocal\_redirect:  
driver = redirect  
domains = ${lookup mysql {MYSQL\_Q\_WCLOCAL}{$value}}  
data = ${lookup mysql {MYSQL\_Q\_WCLOCFW}{$value}}

######################################################################

# TRANSPORTS CONFIGURATION

######################################################################

begin transports

remote\_smtp\_smarthost:  
debug\_print = "T: remote\_smtp\_smarthost for $local\_part@$domain"  
driver = smtp  
hosts\_try\_auth = ${if exists{CONFDIR/passwd.client}   
{  
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host\_address}}  
}  
{}   
}

devnull\_delivery:  
driver = appendfile  
file = /dev/null  
group = mail

address\_pipe:  
driver = pipe  
return\_output

address\_file:  
driver = appendfile  
delivery\_date\_add  
envelope\_to\_add  
return\_path\_add

address\_reply:  
driver = autoreply

virtual\_local\_md\_delivery:  
driver = appendfile  
directory = /home/mailvirt/$domain/${lookup mysql {MYSQL\_Q\_BOXNAME}{$value}}  
maildir\_format  
user = 1001  
group = 1001  
mode = 0660  
directory\_mode = 0770

vacation\_autoreply:  
driver = autoreply  
to = ${sender\_address}  
from = "vacation@${domain}"  
subject = "Message absence ${local\_part}@${domain}"  
text = ${lookup mysql {MYSQL\_Q\_AWAYTEXT}{$value}}

devnull\_transport:  
driver = appendfile  
file = /dev/null  
user = mailvirt

######################################################################

# RETRY CONFIGURATION

######################################################################

begin retry

# Domain Error Retries

# ------ ----- -------

- 

```
                 * F,2h,15m; G,16h,1h,1.5; F,4d,6h

```

######################################################################

# REWRITE CONFIGURATION

######################################################################

# There are no rewriting specifications in this default configuration file.

begin rewrite

######################################################################

# AUTHENTICATION CONFIGURATION

######################################################################

# There are no authenticator specifications in this default configuration file.

begin authenticators

fixed\_plain:  
driver = plaintext  
public\_name = PLAIN  
server\_condition = ${lookup mysql{MYSQL\_Q\_AUTHPWD1}{1}fail}  
server\_set\_id = $2  
server\_advertise\_condition = ${if eq{$tls\_cipher}{}{}{\*}}

fixed\_login:  
driver = plaintext  
public\_name = LOGIN  
server\_prompts = "Username:: : Password::"  
server\_condition = ${lookup mysql{MYSQL\_Q\_AUTHPWD2}{1}fail}  
server\_set\_id = $1  
server\_advertise\_condition = ${if eq{$tls\_cipher}{}{}{\*}}  
[/code] Notez que l’usage de la conf avec ce fichier ne prend pas en compte ce qui est configuré via debconf (dpkg-reconfigure exim4-config). Notez aussi que j’utilise un relais smarthost pour l’envoi des mails.  
Pour dovecot, le fichier dovecot.conf [code]## Dovecot configuration file

# If you’re in a hurry, see [http://wiki.dovecot.org/QuickConfiguration](http://wiki.dovecot.org/QuickConfiguration)

#protocols = imap imaps  
protocols = imap imaps

listen = \*

disable\_plaintext\_auth = yes

# Log file to use for error messages, instead of sending them to syslog.

# /dev/stderr can be used to log into stderr.

log\_path = /var/log/dovecot/dovecot.log

# Log file to use for informational and debug messages.

# Default is the same as log\_path.

#info\_log\_path =

# Prefix for each line written to log file. % codes are in strftime(3)

# format.

#log\_timestamp = "%b %d %H:%M:%S "  
log\_timestamp = "%Y-%m-%d %H:%M:%S "

ssl\_disable = no

mail\_location = maildir:/home/mailvirt/%d/%n

mail\_privileged\_group = mail

protocol imap {  
mail\_plugins = quota imap\_quota  
}

protocol managesieve {  
sieve\_storage=~/sieve  
}

auth\_verbose = yes

auth default {  
mechanisms = plain

# SQL database \<doc/wiki/AuthDatabase.SQL.txt\>

passdb sql {  
args = /etc/dovecot/dovecot-sql.conf  
}

# static settings generated from template \<doc/wiki/UserDatabase.Static.txt\>

userdb static {  
# Template for the fields. Can return anything a userdb could normally  
# return. For example:  
#  
args = uid=1001 gid=1001 home=/home/mailvirt/%d/%n/  
}

# SQL database \<doc/wiki/AuthDatabase.SQL.txt\>

userdb sql {  
# Path for SQL configuration file  
args = /etc/dovecot/dovecot-sql.conf  
}  
user = root  
}

dict {  
#quota = mysql:/etc/dovecot-dict-quota.conf  
}

## 

## Plugin settings

## 

plugin {  
quota = maildir  
}[/code]  
le fichier dovecot-sql.conf [code]# Database driver: mysql, pgsql, sqlite  
driver = mysql

connect = host=localhost dbname=a-completer user=a-completer password=a-completer

default\_pass\_scheme = PLAIN-MD5

password\_query = SELECT password FROM emailtable WHERE local\_part = ‘%n’ AND domain = '%d’  
user\_query = SELECT concat(email, ‘@’, domain) AS user CONCAT(‘maildir:storage=’, quota) AS quota FROM emailtable WHERE local\_part = ‘%n’[/code] et la structure des tables : [code]CREATE TABLE IF NOT EXISTS `blacklist` (  
`address` varchar(50) NOT NULL default ‘’  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `domaintable` (  
`domain` varchar(30) NOT NULL default ‘’  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `emailtable` (  
`local_part` varchar(30) NOT NULL default ‘’,  
`domain` varchar(30) NOT NULL default ‘’,  
`cc` varchar(50) NOT NULL default ‘’,  
`forward` varchar(50) NOT NULL default ‘’,  
`box` varchar(7) NOT NULL default ‘’,  
`is_away` enum(‘yes’,‘no’) NOT NULL default ‘no’,  
`away_text` tinytext NOT NULL,  
`password` varchar(32) NOT NULL,  
`is_enabled` enum(‘yes’,‘no’) NOT NULL default ‘yes’  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `relaytable` (  
`domain` varchar(50) NOT NULL default ‘’  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

[/code]les mdp doivent etre hachés en md5 avant d’etre inséré dans la base. Je me suis basé la dessus :  
[xmn-berlin.de/~marte/exim/ex … sasin.html](http://www.xmn-berlin.de/~marte/exim/exim4_mysql_amavis_spamassasin.html)

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 6:56 UTC](https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829/2 "2016-02-20T18:56:43Z")

</div>

2 questions:

1. Sais tu comment limiter un scan par clamav aux mails entrant destinés à une liste de comptes donnés?

2. Idem pour le passage par spamassassin

Sous exim3, cela se faisait par un wrapper à clamav qui était appelé par exiscan et laq configuration

[code]# Spam Assassin  
spamcheck\_director:

# do not use this director when verifying a local-part at SMTP-time

```
no_verify

```

# When to scan a message :

# - it isn’t already flagged as spam

# - it isn’t already scanned

# - it didn’t originate locally (as long as I don’t harbor spammers :-))

condition = “${if and { {!def:h\_X-Spam-Flag:} {!eq {$received\_protocol}{spam-s  
canned}} {!eq {$received\_protocol}{local}} } {1}{0}}”

# et le compte est un compte local

require\_files = /var/filtrespam/$local\_part  
driver = smartuser  
transport = spamcheck

# Fin de SpamAssassin

[/code]

---

<div class="post-metadata">

**Author:** ![alexmath](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8edcca/32.png) [@alexmath](https://www.debian-fr.org/u/alexmath)\
**Post date:** [Février 20, 2016, 6:57 UTC](https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829/3 "2016-02-20T18:57:06Z")

</div>

jusqu’à présent je ne me suis pas penché sur tout ce qui concerne le filtrage du spam et des virus dans les mails reçus par les domaines locaux, mais le sujet m’intéresse. Je vais te répondre par une voir plusieurs questions :  
par rapport à ta première question, tu veux limiter le scan à une liste défini par toi, Sais -tu faire un scan sur tout ce qui entre ? si oui, il devrait suffire de créer un couple routeur transport qui vérifie si les mails qui arrive match la ou les conditions préalablement défini.

Autre possibilité, as-tu regardé du coté d’amavis pour faire la liaison entre le MTA et antispam/antivirus ? dans ce fichier de conf [xmn-berlin.de/~marte/exim/exim4.conf.php](http://www.xmn-berlin.de/~marte/exim/exim4.conf.php) ils utilisent amavis pour si j’ai bien compris scanner seulement si l’adresse de destination est dans la liste prédéfini. Peut-être une piste.

---

<div class="post-metadata">

**Author:** ![alexmath](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/8edcca/32.png) [@alexmath](https://www.debian-fr.org/u/alexmath)\
**Post date:** [Février 20, 2016, 8:17 UTC](https://www.debian-fr.org/t/exim4-utilisateur-et-domaines-virtuels-avec-mysql/17829/4 "2016-02-20T20:17:23Z")

</div>

mise à jour du fichier de conf principal d’exim, avec cette fois ci prise en compte de certaines valeurs renseignés dans le fichier update-exim4.conf.conf, via debconf ou à la main, notemment:  
dc\_eximconfig\_configtype qui definit si on utilise un smarthost, ou si ou envoi directement sur le net  
dc\_smarthost l’adresse du smarthost. Le fichier complet : [code]######################################################################

# MAIN CONFIGURATION SETTINGS

######################################################################

# MySQL defines

MYSQL\_SERVER=localhost  
MYSQL\_USER= a completer  
MYSQL\_PASSWORD= a completer  
MYSQL\_DB= a completer  
MYSQL\_EMAILTABLE=emailtable  
MYSQL\_DOMAINTABLE=domaintable  
MYSQL\_DOMAINRTABLE=relaytable

# MySQL queries

MYSQL\_Q\_ISAWAY=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND is\_away=‘yes’  
MYSQL\_Q\_AWAYTEXT=SELECT away\_text FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_FORWARD=SELECT forward FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND forward != ‘‘  
MYSQL\_Q\_CC=SELECT cc FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_LOCAL=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND box != ‘‘  
MYSQL\_Q\_WCLOCAL=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’_’ AND forward != ‘‘  
MYSQL\_Q\_WCLOCFW=SELECT forward FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’_’ AND forward != ‘‘  
MYSQL\_Q\_LDOMAIN=SELECT DISTINCT domain FROM MYSQL\_DOMAINTABLE WHERE domain=’$domain’  
MYSQL\_Q\_RDOMAIN=SELECT DISTINCT domain FROM MYSQL\_DOMAINRTABLE WHERE domain=’$domain’  
MYSQL\_Q\_BOXNAME=SELECT box FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}‘  
MYSQL\_Q\_DISABLED=SELECT domain FROM MYSQL\_EMAILTABLE WHERE domain=’${quote\_mysql:$domain}’ AND local\_part=’${quote\_mysql:$local\_part}’ AND is\_enabled=‘no’  
MYSQL\_Q\_AUTHPWD1=SELECT local\_part FROM MYSQL\_EMAILTABLE WHERE local\_part=’$2’ AND password=MD5(’$3’)  
MYSQL\_Q\_AUTHPWD2=SELECT local\_part FROM MYSQL\_EMAILTABLE WHERE local\_part=’$1’ AND password=MD5(’$2’)

# MySQL connection

hide mysql\_servers = “MYSQL\_SERVER/MYSQL\_DB/MYSQL\_USER/MYSQL\_PASSWORD”

# starting ‘normal’ config

primary\_hostname = mail.

UPEX4CmacrosUPEX4C = 1  
domainlist local\_domains = mysql;MYSQL\_Q\_LDOMAIN  
domainlist relay\_to\_domains = mysql;MYSQL\_Q\_RDOMAIN  
hostlist relay\_from\_hosts = MAIN\_RELAY\_NETS

acl\_smtp\_rcpt = acl\_check\_rcpt

.ifndef MAIN\_PRIMARY\_HOSTNAME\_AS\_QUALIFY\_DOMAIN  
.ifndef MAIN\_QUALIFY\_DOMAIN  
qualify\_domain = ETC\_MAILNAME  
.else  
qualify\_domain = MAIN\_QUALIFY\_DOMAIN  
.endif  
.endif

# qualify\_recipient =

allow\_domain\_literals

never\_users = root  
#trusted\_users = amavis : list

host\_lookup = \*  
rfc1413\_hosts = \*  
rfc1413\_query\_timeout = 15s

check\_spool\_space = 50M  
check\_log\_space = 20M  
return\_size\_limit = 20k  
message\_size\_limit = 20M

# sender\_unqualified\_hosts =

# recipient\_unqualified\_hosts =

# percent\_hack\_domains =

ignore\_bounce\_errors\_after = 2d  
timeout\_frozen\_after = 7d

deliver\_queue\_load\_max = 8  
queue\_only\_load = 10  
remote\_max\_parallel = 15

tls\_certificate = /etc/exim4/exim.crt  
tls\_privatekey = /etc/exim4/exim.key  
tls\_advertise\_hosts = \*  
######################################################################

# ACL CONFIGURATION

# Specifies access control lists for incoming SMTP mail

######################################################################

begin acl

acl\_check\_rcpt:  
accept hosts = :  
deny domains = +local\_domains  
local\_parts = ^[.] : ^._[@%!/|]  
deny domains = !+local\_domains  
local\_parts = ^[./|] : ^._[@%!] : ^.\*/\.\./  
accept local\_parts = postmaster  
domains = +local\_domains  
require verify = sender  
accept domains = +local\_domains  
endpass  
verify = recipient  
accept domains = +relay\_to\_domains  
endpass  
verify = recipient  
accept hosts = +relay\_from\_hosts  
accept authenticated = \*  
deny message = relay not permitted

######################################################################

# ROUTERS CONFIGURATION

# Specifies how addresses are handled

######################################################################

begin routers

fail\_router:  
driver = redirect  
domains = ${lookup mysql {MYSQL\_Q\_DISABLED}{$value}}  
data = ":fail:"  
allow\_fail

.ifdef DCconfig\_internet

dnslookup\_relay\_to\_domains:  
debug\_print = "R: dnslookup\_relay\_to\_domains for $local\_part@$domain"  
driver = dnslookup  
domains = ! +local\_domains : +relay\_to\_domains  
transport = remote\_smtp  
same\_domain\_copy\_routing = yes  
no\_more

dnslookup:  
debug\_print = "R: dnslookup for $local\_part@$domain"  
driver = dnslookup  
domains = ! +local\_domains  
transport = remote\_smtp  
same\_domain\_copy\_routing = yes

# ignore private rfc1918 and APIPA addresses

ignore\_target\_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :  
172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :  
255.255.255.255  
no\_more

.endif

.ifdef DCconfig\_local  
nonlocal:  
debug\_print = "R: nonlocal for $local\_part@$domain"  
driver = redirect  
domains = ! +local\_domains  
allow\_fail  
data = :fail: Mailing to remote domains not supported  
no\_more

.endif

.ifdef DCconfig\_smarthost DCconfig\_satellite  
smarthost:  
debug\_print = "R: smarthost for $local\_part@$domain"  
driver = manualroute  
domains = ! +local\_domains  
transport = remote\_smtp\_smarthost  
route\_list = \* DCsmarthost byname  
host\_find\_failed = defer  
same\_domain\_copy\_routing = yes  
no\_more  
.endif

system\_aliases:  
driver = redirect  
allow\_fail  
allow\_defer  
data = ${lookup{$local\_part}lsearch{/etc/aliases}}  
user = mailvirt  
file\_transport = address\_file  
pipe\_transport = address\_pipe

vacation\_director:  
driver = accept  
domains = ${lookup mysql {MYSQL\_Q\_ISAWAY}{$value}}  
transport = vacation\_autoreply  
unseen

virtual\_cc\_director:  
driver = redirect  
data = ${lookup mysql {MYSQL\_Q\_CC}{$value}}  
unseen

virtual\_forward\_director:  
driver = redirect  
data = ${lookup mysql {MYSQL\_Q\_FORWARD}{$value}}

virtual\_local\_mailbox:  
driver = accept  
domains = ${lookup mysql {MYSQL\_Q\_LOCAL}{$value}}  
transport = virtual\_local\_md\_delivery

virtual\_wclocal\_redirect:  
driver = redirect  
domains = ${lookup mysql {MYSQL\_Q\_WCLOCAL}{$value}}  
data = ${lookup mysql {MYSQL\_Q\_WCLOCFW}{$value}}

######################################################################

# TRANSPORTS CONFIGURATION

######################################################################

begin transports

remote\_smtp:  
debug\_print = "T: remote\_smtp for $local\_part@$domain"  
driver = smtp  
.ifdef REMOTE\_SMTP\_HOSTS\_AVOID\_TLS  
hosts\_avoid\_tls = REMOTE\_SMTP\_HOSTS\_AVOID\_TLS  
.endif  
.ifdef REMOTE\_SMTP\_HEADERS\_REWRITE  
headers\_rewrite = REMOTE\_SMTP\_HEADERS\_REWRITE  
.endif  
.ifdef REMOTE\_SMTP\_RETURN\_PATH  
return\_path = REMOTE\_SMTP\_RETURN\_PATH  
.endif  
.ifdef REMOTE\_SMTP\_HELO\_DATA  
helo\_data=REMOTE\_SMTP\_HELO\_DATA  
.endif

remote\_smtp\_smarthost:  
debug\_print = "T: remote\_smtp\_smarthost for $local\_part@$domain"  
driver = smtp  
hosts\_try\_auth = ${if exists{CONFDIR/passwd.client}   
{  
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host\_address}}  
}  
{}   
}

devnull\_delivery:  
driver = appendfile  
file = /dev/null  
group = mail

address\_pipe:  
driver = pipe  
return\_output

address\_file:  
driver = appendfile  
delivery\_date\_add  
envelope\_to\_add  
return\_path\_add

address\_reply:  
driver = autoreply

virtual\_local\_md\_delivery:  
driver = appendfile  
directory = /home/mailvirt/$domain/${lookup mysql {MYSQL\_Q\_BOXNAME}{$value}}  
maildir\_format  
user = 1006  
group = 1006  
mode = 0660  
directory\_mode = 0770

vacation\_autoreply:  
driver = autoreply  
to = ${sender\_address}  
from = "vacation@${domain}"  
subject = "Message absence ${local\_part}@${domain}"  
text = ${lookup mysql {MYSQL\_Q\_AWAYTEXT}{$value}}

devnull\_transport:  
driver = appendfile  
file = /dev/null  
user = mailvirt

######################################################################

# RETRY CONFIGURATION

######################################################################

begin retry

# Domain Error Retries

# ------ ----- -------

- 

```
                 * F,2h,15m; G,16h,1h,1.5; F,4d,6h

```

######################################################################

# REWRITE CONFIGURATION

######################################################################

# There are no rewriting specifications in this default configuration file.

begin rewrite

######################################################################

# AUTHENTICATION CONFIGURATION

######################################################################

# There are no authenticator specifications in this default configuration file.

begin authenticators

fixed\_plain:  
driver = plaintext  
public\_name = PLAIN  
server\_condition = ${lookup mysql{MYSQL\_Q\_AUTHPWD1}{1}fail}  
server\_set\_id = $2  
server\_advertise\_condition = ${if eq{$tls\_cipher}{}{}{\*}}

fixed\_login:  
driver = plaintext  
public\_name = LOGIN  
server\_prompts = "Username:: : Password::"  
server\_condition = ${lookup mysql{MYSQL\_Q\_AUTHPWD2}{1}fail}  
server\_set\_id = $1  
server\_advertise\_condition = ${if eq{$tls\_cipher}{}{}{\*}}  
######################################################################

# CONFIGURATION FOR local\_scan()

######################################################################

# begin local\_scan

# End of Exim configuration file[/code]
