base.m4: Allow arbitrary claimed envelope and header senders.
[exim-config] / exchange.m4
1 ### -*-m4-*-
2 ###
3 ### Transmission to remote hosts for distorted.org.uk Exim configuration.
4 ###
5 ### (c) 2012 Mark Wooding
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This program is free software; you can redistribute it and/or modify
11 ### it under the terms of the GNU General Public License as published by
12 ### the Free Software Foundation; either version 2 of the License, or
13 ### (at your option) any later version.
14 ###
15 ### This program is distributed in the hope that it will be useful,
16 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ### GNU General Public License for more details.
19 ###
20 ### You should have received a copy of the GNU General Public License
21 ### along with this program; if not, write to the Free Software Foundation,
22 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
24 ###--------------------------------------------------------------------------
25 ### Listen for incoming connections.
26
27 SECTION(global, daemon)m4_dnl
28 daemon_smtp_ports = CONF_smtp_port : CONF_submission_port
29
30 DIVERT(null)
31 ###--------------------------------------------------------------------------
32 ### Check source addresses for apparently local senders.
33
34 SECTION(acl, mail-hooks)m4_dnl
35 ## Check that a submitted message's sender address is allowable.
36 require acl = mail_client_addr
37
38 SECTION(acl, misc)m4_dnl
39 mail_client_addr:
40
41 ## If this is a message submission then that's handled elsewhere.
42 accept condition = ${if eq{$acl_c_mode}{submission}}
43
44 ## Make sure that the sender matches the client address. I feel like
45 ## I want to reject these, but that will break stuff. For example,
46 ## if I send mail to an externally hosted address which is really a
47 ## distribution list containing some local address, then we'll
48 ## (approximately legitimately) receive mail with an apparently-local
49 ## sender from a remote host.
50 warn !hosts = ${LOOKUP_DOMAIN($sender_address_domain,
51 {KV(hosts, {$value}{+allnets})},
52 {${if match_domain {$sender_address_domain} \
53 {+public} \
54 {+allnets}{! +allnets}}})}
55 add_header = :after_received:X-Distorted-Warning: \
56 RCLNTLSNDR \
57 Apparently local sender, but received from remote \
58 server.\n\t\
59 sender=$sender_address \
60 host=$sender_host_address
61
62 ## OK.
63 accept
64
65 DIVERT(null)
66 ###--------------------------------------------------------------------------
67 ### The obvious trivial router.
68
69 SECTION(routers, remote)m4_dnl
70 ## Send mail on to a host in our own network. We must apply extra security.
71 local:
72 driver = dnslookup
73 domains = ${if bool {${LOOKUP_DOMAIN($domain,
74 {KV(service, {$value}{true})},
75 {false})}} \
76 {}{ ! +public : \
77 CONF_master_domain : \
78 *.CONF_master_domain }}
79 self = fail
80 transport = smtp_local
81 no_more
82
83 ## Send mail on to unknown hosts.
84 remote:
85 driver = dnslookup
86 domains = ${if bool {${LOOKUP_DOMAIN($domain,
87 {KV(service, {$value}{true})},
88 {false})}} \
89 {}{ ! +public }}
90 self = fail
91 transport = smtp
92 no_more
93
94 DIVERT(null)
95 ###----- That's all, folks --------------------------------------------------