diff options
Diffstat (limited to 'puppet/modules')
14 files changed, 288 insertions, 45 deletions
| diff --git a/puppet/modules/opendkim/manifests/init.pp b/puppet/modules/opendkim/manifests/init.pp new file mode 100644 index 00000000..9e67569e --- /dev/null +++ b/puppet/modules/opendkim/manifests/init.pp @@ -0,0 +1,38 @@ +# configure opendkim service (#5924) +class opendkim { + +  $domain_hash = hiera('domain') +  $domain      = $domain_hash['full_suffix'] +  $dkim        = hiera('dkim') +  $selector    = $dkim['dkim_selector'] + +  include site_config::x509::dkim::key +  $dkim_key    = "${x509::variables::keys}/dkim.key" + +  ensure_packages(['opendkim', 'libopendkim7', 'libvbr2']) + +  # postfix user needs to be in the opendkim group +  # in order to access the opendkim socket located at: +  # local:/var/run/opendkim/opendkim.sock +  user { 'postfix': +    groups => 'opendkim'; +  } + +  service { 'opendkim': +    ensure     => running, +    enable     => true, +    hasstatus  => true, +    hasrestart => true, +    require    => Class['Site_config::X509::Dkim::Key'], +    subscribe  => File[$dkim_key]; +  } + +  file { '/etc/opendkim.conf': +    ensure  => present, +    content => template('opendkim/opendkim.conf'), +    mode    => '0644', +    owner   => root, +    group   => root, +    notify  => Service['opendkim'], +    require => Package['opendkim']; +} diff --git a/puppet/modules/opendkim/templates/opendkim.conf b/puppet/modules/opendkim/templates/opendkim.conf new file mode 100644 index 00000000..46ddb7a8 --- /dev/null +++ b/puppet/modules/opendkim/templates/opendkim.conf @@ -0,0 +1,44 @@ +# This is a basic configuration that can easily be adapted to suit a standard +# installation. For more advanced options, see opendkim.conf(5) and/or +# /usr/share/doc/opendkim/examples/opendkim.conf.sample. + +# Log to syslog +Syslog                  yes +SyslogSuccess           yes +LogWhy                  no +# Required to use local socket with MTAs that access the socket as a non- +# privileged user (e.g. Postfix) +UMask                   002 + +Domain                  <%= @domain %> +SubDomains              yes + +# set internal hosts to all the known hosts, like mydomains? + +# can we generate a larger key and get it in dns? +KeyFile                 <%= @dkim_key %> + +# what selector do we use? +Selector                <%= @selector %> + +# Commonly-used options; the commented-out versions show the defaults. +Canonicalization        relaxed +#Mode                   sv +#ADSPDiscard            no + +# Always oversign From (sign using actual From and a null From to prevent +# malicious signatures header fields (From and/or others) between the signer +# and the verifier.  From is oversigned by default in the Debian pacakge +# because it is often the identity key used by reputation systems and thus +# somewhat security sensitive. +OversignHeaders         From + +# List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures +# (ATPS) (experimental) + +#ATPSDomains            example.com + +RemoveOldSignatures     yes + +Mode                    sv +BaseDirectory           /var/tmp diff --git a/puppet/modules/postfwd/files/postfwd_default b/puppet/modules/postfwd/files/postfwd_default new file mode 100644 index 00000000..79d0e3de --- /dev/null +++ b/puppet/modules/postfwd/files/postfwd_default @@ -0,0 +1,19 @@ +### This file managed by Puppet +# Global options for postfwd(8). + +# Set to '1' to enable startup (daemon mode) +STARTUP=1 + +# Config file +CONF=/etc/postfix/postfwd.cf +# IP where listen to +INET=127.0.0.1 +# Port where listen to +PORT=10040 +# run as user postfwd +RUNAS="postfw" +# Arguments passed on start (--daemon implied) +# RISEUP disable summary and cache-no-size +#ARGS="--summary=600 --cache=600 --cache-rdomain-only --cache-no-size" +ARGS="--cache=600 --cache-rdomain-only --no-rulestats" + diff --git a/puppet/modules/postfwd/manifests/init.pp b/puppet/modules/postfwd/manifests/init.pp new file mode 100644 index 00000000..b00bb071 --- /dev/null +++ b/puppet/modules/postfwd/manifests/init.pp @@ -0,0 +1,49 @@ +# This class provides rate-limiting for outgoing SMTP, using postfwd +# it is configured with some limits that seem reasonable for a generic +# use-case. Each of the following applies to sasl_authenticated users: +# +# . 150 recipients at a time +# . no more than 50 messages in 60 minutes +# . no more than 250 recipients in 60 minutes. +# +# This class could be easily extended to add overrides to these rules, +# maximum sizes per client, or additional rules +class postfwd { + +  ensure_packages(['libnet-server-perl', 'libnet-dns-perl', 'postfwd']) + +  file { +    '/etc/default/postfwd': +      source  => 'puppet:///modules/postfwd/postfwd', +      mode    => '0644', +      owner   => root, +      group   => root, +      require => Package['postfwd']; + +    '/etc/postfix/postfwd.cf': +      content => template('postfwd/postfwd.cf.erb'), +      mode    => '0644', +      owner   => root, +      group   => root, +      require => File['/etc/postfix']; +  } + +  exec { +    '/etc/init.d/postfwd reload': +      refreshonly => true, +      subscribe   => [ File['/etc/postfix/postfwd.cf'], +                       File['/etc/default/postfwd'] ]; +  } + +  service { +    'postfwd': +      ensure     => running, +      name       => postfwd, +      pattern    => '/usr/sbin/postfwd', +      enable     => true, +      hasrestart => true, +      hasstatus  => false, +      require    => [ File['/etc/default/postfwd'], +                      File['/etc/postfix/postfwd.cf']]; +  } +} diff --git a/puppet/modules/postfwd/templates/postfwd.cf.erb b/puppet/modules/postfwd/templates/postfwd.cf.erb new file mode 100644 index 00000000..6460994a --- /dev/null +++ b/puppet/modules/postfwd/templates/postfwd.cf.erb @@ -0,0 +1,31 @@ +### This file managed by Puppet +# Before deploying a rule +# 1. test with an additional "sender==test@domain.org;" in the rule so it +#   only applies to your test account +# 2. then when ready to test for all users, use WARN and watch the logs +#   for a few days and make sure it working the way you like +# 3. Then when ready to deploy for real set a proper error code + +## Overrides - make like the following example +# id=exampleuser; sasl_username==exampleuser; action=dunno + +## Rules that apply to all senders +# Recipient Per Message Limit +# We only receive mail via smtp from sasl authenticated users +# directly. We want to limit to a lower amount to prevent phished accounts +# spamming +id=RCPTSENDER; recipient_count=150; action=REJECT Too many recipients, please try again. Contact http://<%= @domain %>/tickets/new if this is in error. ERROR:RCPTSENDER  + +# Message Rate Limit +# This limits sasl authenticated users to no more than 50/60mins +# NOTE: sasl_username needs to be set to something or this check will fail +id=MSGRATE ; sasl_username=!!(^$); action==rate($$sasl_username/100/3600/450 4.7.1 exceeded message rate. Contact Contact http://<%= @domain %>/tickets/new if this is in error. ERROR:MSGRATE) + +# Total Recipient Rate Limit +# This adds up the recipients for all the sasl authenticated users messages +# and can't exceed more than 250/60min +# NOTE: sasl_username needs to be set to something or this check will fail +id=RCPTRATE ; sasl_username=!!(^$); action==rcpt($$sasl_username/500/3600/450 4.7.1 exceeded message rate. Contact http://<%= @domain %>/tickets/new if this is in error. ERROR:RCPTRATE) + +# Size per client Limit +id=SENDSIZE ;  state==END_OF_DATA ;  client_address==!!(10.0.1.0/24); action==size($$client_address/314572800/3600/450 4.7.1 Sorry you have sent too much data. Contact http://<%= @domain %>/tickets/new if this is in error. ERROR:SENDSIZE) diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/bigcouch.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/bigcouch.cfg new file mode 100644 index 00000000..f53f0780 --- /dev/null +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/bigcouch.cfg @@ -0,0 +1,5 @@ +# on one-node bigcouch setups, we'll get this msg +# a lot, so we ignore it here until we fix +# https://leap.se/code/issues/5244 + I epmd: got partial packet only on file descriptor + diff --git a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg index f546135a..5f8d5b95 100644 --- a/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg +++ b/puppet/modules/site_check_mk/files/agent/logwatch/syslog/couchdb.cfg @@ -1,7 +1,2 @@   C /usr/local/bin/couch-doc-update.*failed   C /usr/local/bin/couch-doc-update.*ERROR -# on one-node bigcouch setups, we'll get this msg -# a lot, so we ignore it here until we fix -# https://leap.se/code/issues/5244 - I epmd: got partial packet only on file descriptor - diff --git a/puppet/modules/site_check_mk/manifests/agent/couchdb.pp b/puppet/modules/site_check_mk/manifests/agent/couchdb.pp index 8de5121b..1554fd3c 100644 --- a/puppet/modules/site_check_mk/manifests/agent/couchdb.pp +++ b/puppet/modules/site_check_mk/manifests/agent/couchdb.pp @@ -1,40 +1,18 @@ -# configure logwatch and nagios checks for couchdb +# configure logwatch and nagios checks for couchdb (both bigcouch and plain +# couchdb installations)  class site_check_mk::agent::couchdb { -  # watch bigcouch logs -  # currently disabled because bigcouch is too noisy -  # see https://leap.se/code/issues/7375 for more details -  # and site_config::remove_files for removing leftovers -  #file { '/etc/check_mk/logwatch.d/bigcouch.cfg': -  #  source => 'puppet:///modules/site_check_mk/agent/logwatch/bigcouch.cfg', -  #} - -  # check syslog msg from: -  # - empd -  # - /usr/local/bin/couch-doc-update    concat::fragment { 'syslog_couchdb':      source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/couchdb.cfg',      target  => '/etc/check_mk/logwatch.d/syslog.cfg',      order   => '02';    } - -  # check bigcouch processes -  augeas { -    'Bigcouch_epmd_procs': -      incl    => '/etc/check_mk/mrpe.cfg', -      lens    => 'Spacevars.lns', -      changes => [ -        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_epmd_procs', -        'set Bigcouch_epmd_procs \'/usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/epmd\'' ], -      require => File['/etc/check_mk/mrpe.cfg']; -    'Bigcouch_beam_procs': -      incl    => '/etc/check_mk/mrpe.cfg', -      lens    => 'Spacevars.lns', -      changes => [ -        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_beam_procs', -        'set Bigcouch_beam_procs \'/usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/beam\'' ], -      require => File['/etc/check_mk/mrpe.cfg']; +  # check different couchdb stats +  file { '/usr/lib/check_mk_agent/local/leap_couch_stats.sh': +    source  => 'puppet:///modules/site_check_mk/agent/local_checks/couchdb/leap_couch_stats.sh', +    mode    => '0755', +    require => Package['check_mk-agent']    }    # check open files for bigcouch proc @@ -44,20 +22,13 @@ class site_check_mk::agent::couchdb {      mode   => '0755'    }    augeas { -    'Bigcouch_open_files': +    'Couchdb_open_files':        incl    => '/etc/check_mk/mrpe.cfg',        lens    => 'Spacevars.lns',        changes => [ -        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_open_files', -        'set Bigcouch_open_files \'/srv/leap/nagios/plugins/check_unix_open_fds.pl -a beam -w 28672,28672 -c 30720,30720\'' ], +        'rm /files/etc/check_mk/mrpe.cfg/Couchdb_open_files', +        'set Couchdb_open_files \'/srv/leap/nagios/plugins/check_unix_open_fds.pl -a beam -w 28672,28672 -c 30720,30720\'' ],        require => File['/etc/check_mk/mrpe.cfg'];    } - -  # check different couchdb stats -  file { '/usr/lib/check_mk_agent/local/leap_couch_stats.sh': -    source  => 'puppet:///modules/site_check_mk/agent/local_checks/couchdb/leap_couch_stats.sh', -    mode    => '0755', -    require => Package['check_mk-agent'] -  }  } diff --git a/puppet/modules/site_check_mk/manifests/agent/couchdb/bigcouch.pp b/puppet/modules/site_check_mk/manifests/agent/couchdb/bigcouch.pp new file mode 100644 index 00000000..82c3ac72 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/couchdb/bigcouch.pp @@ -0,0 +1,49 @@ +# configure logwatch and nagios checks for bigcouch +class site_check_mk::agent::couchdb::bigcouch { + +  # watch bigcouch logs +  # currently disabled because bigcouch is too noisy +  # see https://leap.se/code/issues/7375 for more details +  # and site_config::remove_files for removing leftovers +  #file { '/etc/check_mk/logwatch.d/bigcouch.cfg': +  #  source => 'puppet:///modules/site_check_mk/agent/logwatch/bigcouch.cfg', +  #} + +  # check syslog msg from: +  # - empd +  # - /usr/local/bin/couch-doc-update +  concat::fragment { 'syslog_bigcouch': +    source  => 'puppet:///modules/site_check_mk/agent/logwatch/syslog/bigcouch.cfg', +    target  => '/etc/check_mk/logwatch.d/syslog.cfg', +    order   => '02'; +  } + +  # check bigcouch processes +  augeas { +    'Bigcouch_epmd_procs': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => [ +        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_epmd_procs', +        'set Bigcouch_epmd_procs \'/usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/epmd\'' ], +      require => File['/etc/check_mk/mrpe.cfg']; +    'Bigcouch_beam_procs': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => [ +        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_beam_procs', +        'set Bigcouch_beam_procs \'/usr/lib/nagios/plugins/check_procs -w 1:1 -c 1:1 -a /opt/bigcouch/erts-5.9.1/bin/beam\'' ], +      require => File['/etc/check_mk/mrpe.cfg']; +  } + +  augeas { +    'Bigcouch_open_files': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => [ +        'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_open_files', +        'set Bigcouch_open_files \'/srv/leap/nagios/plugins/check_unix_open_fds.pl -a beam -w 28672,28672 -c 30720,30720\'' ], +      require => File['/etc/check_mk/mrpe.cfg']; +  } + +} diff --git a/puppet/modules/site_check_mk/manifests/agent/couchdb/master.pp b/puppet/modules/site_check_mk/manifests/agent/couchdb/master.pp new file mode 100644 index 00000000..291b87d1 --- /dev/null +++ b/puppet/modules/site_check_mk/manifests/agent/couchdb/master.pp @@ -0,0 +1,23 @@ +# configure logwatch and nagios checks for plain single couchdb master +class site_check_mk::agent::couchdb::master { + +  # remove bigcouch leftovers +  augeas { +    'Bigcouch_epmd_procs': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => 'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_epmd_procs', +      require => File['/etc/check_mk/mrpe.cfg']; +    'Bigcouch_beam_procs': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => 'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_beam_procs', +      require => File['/etc/check_mk/mrpe.cfg']; +    'Bigcouch_open_files': +      incl    => '/etc/check_mk/mrpe.cfg', +      lens    => 'Spacevars.lns', +      changes => 'rm /files/etc/check_mk/mrpe.cfg/Bigcouch_open_files', +      require => File['/etc/check_mk/mrpe.cfg']; +  } + +} diff --git a/puppet/modules/site_config/manifests/x509/dkim/key.pp b/puppet/modules/site_config/manifests/x509/dkim/key.pp new file mode 100644 index 00000000..c63a7e94 --- /dev/null +++ b/puppet/modules/site_config/manifests/x509/dkim/key.pp @@ -0,0 +1,13 @@ +class site_config::x509::dkim::key { + +  ## +  ## This is for the DKIM key that is used exclusively for DKIM +  ## signing + +  $x509 = hiera('x509') +  $key  = $x509['dkim_key'] + +  x509::key { 'dkim': +    content => $key +  } +} diff --git a/puppet/modules/site_couchdb/manifests/bigcouch.pp b/puppet/modules/site_couchdb/manifests/bigcouch.pp index 469a2783..2de3d4d0 100644 --- a/puppet/modules/site_couchdb/manifests/bigcouch.pp +++ b/puppet/modules/site_couchdb/manifests/bigcouch.pp @@ -44,4 +44,7 @@ class site_couchdb::bigcouch {      require => Package['couchdb'],      notify  => Service['couchdb']    } + +  include site_check_mk::agent::couchdb::bigcouch +  } diff --git a/puppet/modules/site_couchdb/manifests/master.pp b/puppet/modules/site_couchdb/manifests/master.pp index c28eee7d..5dab6325 100644 --- a/puppet/modules/site_couchdb/manifests/master.pp +++ b/puppet/modules/site_couchdb/manifests/master.pp @@ -6,4 +6,6 @@ class site_couchdb::master {      chttpd_bind_address => '127.0.0.1',      pwhash_alg          => $site_couchdb::couchdb_pwhash_alg    } + +  include site_check_mk::agent::couchdb::master  } diff --git a/puppet/modules/site_postfix/manifests/mx.pp b/puppet/modules/site_postfix/manifests/mx.pp index f0a2554a..71d61621 100644 --- a/puppet/modules/site_postfix/manifests/mx.pp +++ b/puppet/modules/site_postfix/manifests/mx.pp @@ -50,7 +50,7 @@ class site_postfix::mx {      'local_recipient_maps':        value => '$alias_maps';      'smtpd_milters': -      value => 'unix:/run/clamav/milter.ctl'; +      value => 'unix:/run/clamav/milter.ctl,unix:/var/run/opendkim/opendkim.sock';      'milter_default_action':        value => 'accept';    } @@ -62,6 +62,7 @@ class site_postfix::mx {    include site_postfix::mx::static_aliases    include site_postfix::mx::rewrite_openpgp_header    include clamav +  include postfwd    # greater verbosity for debugging, take out for production    #include site_postfix::debug | 
