Make the manualroute explicitly send to port 25 by default as that simplifies the...
[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     @@concat::fragment { "manualroute-to-${::fqdn}":
36       tag     => 'exim::manualroute::to::mailrelay',
37       target  => '/etc/exim4/manualroute',
38       content => "${::fqdn}:   ${::fqdn}::${mailport}",
39     }
40
41     @@ferm::rule::simple { "submission-from-${::fqdn}":
42       tag   => 'smtp::server::submission::to::mail-relay',
43       chain => 'submission',
44       saddr => $base::public_addresses,
45     }
46
47     Ferm::Rule::Simple <<| tag == 'smtp::server::to::mail-satellite' |>> {
48       port => $mailport
49     }
50
51   } else {
52     # not a mail satellite
53
54     if ! defined(Class['exim::mx']) and ! defined(Class['postfix']) {
55       fail('We are not an exim::mx (or a postfix) yet do not have set our MXs to INCOMING-MX.')
56     }
57
58     ferm::rule::simple { 'dsa-smtp':
59       description => 'Allow smtp access from the world',
60       port        => '25',
61     }
62   }
63 }