use fail2ban to block some abusive smtp clients on our MXs (re: RT#7515)
[mirror/dsa-puppet.git] / modules / exim / manifests / mx.pp
1 class exim::mx inherits exim {
2         include clamav
3         include postgrey
4         include fail2ban::exim
5
6         file { '/etc/exim4/ccTLD.txt':
7                 source => 'puppet:///modules/exim/common/ccTLD.txt',
8         }
9         file { '/etc/exim4/surbl_whitelist.txt':
10                 source => 'puppet:///modules/exim/common/surbl_whitelist.txt',
11         }
12         file { '/etc/exim4/exim_surbl.pl':
13                 source  => 'puppet:///modules/exim/common/exim_surbl.pl',
14                 notify  => Service['exim4'],
15         }
16
17         # 20181010 many connections:
18         #  188.165.219.27
19         #  125.72.232.*
20         #  140.224.61.*
21         #  117.24.36.0/22
22         #  115.235.157.28
23         #  113.110.47.180
24         #  121.226.141.*
25         @ferm::rule { 'dsa-mail-abusers':
26                 prio  => "000",
27                 rule  => "saddr (188.165.219.27 125.72.232.0/24 140.224.61.0/24 117.24.38.0/22 115.235.157.28 113.110.47.180 121.226.141.0/24) DROP",
28         }
29
30         # MXs used as smarthosts
31         @ferm::rule { 'dsa-exim-submission':
32                 description => 'Allow SMTP',
33                 rule        => '&SERVICE_RANGE(tcp, submission, $SMTP_SOURCES)'
34         }
35         @ferm::rule { 'dsa-exim-v6-submission':
36                 description => 'Allow SMTP',
37                 domain      => 'ip6',
38                 rule        => '&SERVICE_RANGE(tcp, submission, $SMTP_V6_SOURCES)',
39         }
40         $autocertdir = hiera('paths.auto_certs_dir')
41         dnsextras::tlsa_record{ "tlsa-submission":
42                 zone => 'debian.org',
43                 certfile => "${autocertdir}/${::fqdn}.crt",
44                 port => 587,
45                 hostname => "$::fqdn",
46         }
47         package { 'nagios-plugins-standard':
48                 ensure => installed,
49         }
50
51         if has_role('mailrelay') {
52                 concat::fragment { 'dsa-puppet-stuff--email-virtualdomains':
53                         target => '/etc/cron.d/dsa-puppet-stuff',
54                         content  => @(EOF)
55                                 @hourly  root if [ ! -d /etc/exim4/email-virtualdomains ]; then cd /etc/exim4 && git clone mail-git:email-virtualdomains ; fi && cd /etc/exim4/email-virtualdomains && git pull --quiet --ff-only
56                                 | EOF
57                 }
58         }
59         file { '/etc/cron.d/dsa-email-virtualdomains': ensure => absent, }
60 }