Note that exim contains tracker-specific configuration
[mirror/dsa-puppet.git] / modules / roles / manifests / mta.pp
1 # Every one of our hosts has an MTA
2 #
3 # @param type exim4 or postfix.  exim4 is our default MTA
4 # @param heavy receive email from the internet and thus do spam filtering etc
5 # @param mailrelay receive mail on other hosts' behalf.  implies heavy
6 class roles::mta(
7   Enum['exim4', 'postfix'] $type = 'exim4',
8   Boolean $heavy = false,
9   Boolean $mailrelay = false,
10 ) {
11   if $type == 'exim4' {
12     if $mailrelay {
13       include roles::mailrelay
14     } elsif $heavy {
15       include exim::mx
16     } else {
17       include exim
18     }
19   } elsif $type == 'postfix' {
20     if $mailrelay {
21       fail("Unsupported: mailrelay on type ${type}")
22     }
23     include postfix
24   } else {
25     fail("Unexpected mta type ${type}")
26   }
27
28
29   $mxdata = dig($deprecated::nodeinfo, 'ldap', 'mXRecord')
30   $mailport = lookup( { 'name' => 'exim::mail_port', 'default_value' => 25 } )
31
32   if $mxdata and $mxdata.any |$item| { $item =~ /INCOMING-MX/ } {
33     # a mail satellite.  Gets mail via the mailrelays and sends out mail via the mail relays
34
35     exim::manualroute{ $::fqdn: }
36
37     @@ferm::rule::simple { "submission-from-${::fqdn}":
38       tag   => 'smtp::server::submission::to::mail-relay',
39       chain => 'submission',
40       saddr => $base::public_addresses,
41     }
42
43     Ferm::Rule::Simple <<| tag == 'smtp::server::to::mail-satellite' |>> {
44       port => $mailport
45     }
46
47   } else {
48     # not a mail satellite
49
50     if ! defined(Class['exim::mx']) and ! defined(Class['postfix']) {
51       fail('We are not an exim::mx (or a postfix) yet do not have set our MXs to INCOMING-MX.')
52     }
53
54     # firewall allow is done by the exim::mx class
55   }
56
57   $autocertdir = hiera('paths.auto_certs_dir')
58   dnsextras::tlsa_record{ 'tlsa-mailport':
59     zone     => 'debian.org',
60     certfile => "${autocertdir}/${::fqdn}.crt",
61     port     => $mailport,
62     hostname => $::fqdn,
63   }
64 }