diff options
Diffstat (limited to 'puppet/modules')
34 files changed, 275 insertions, 72 deletions
| diff --git a/puppet/modules/couchdb b/puppet/modules/couchdb -Subproject f01b3586215bdc10f0067fa0f6d940be8e88bce +Subproject 4c0d5673df02fe42e1bbadfee7d4ea1ca1f88e9 diff --git a/puppet/modules/site_apache/templates/vhosts.d/api.conf.erb b/puppet/modules/site_apache/templates/vhosts.d/api.conf.erb index 3360ac59..e4732289 100644 --- a/puppet/modules/site_apache/templates/vhosts.d/api.conf.erb +++ b/puppet/modules/site_apache/templates/vhosts.d/api.conf.erb @@ -2,18 +2,20 @@    ServerName <%= api_domain %>    RewriteEngine On    RewriteRule ^.*$ https://<%= api_domain -%>:<%= api_port -%>%{REQUEST_URI} [R=permanent,L] +  CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log common  </VirtualHost>  Listen 0.0.0.0:<%= api_port %>  <VirtualHost *:<%= api_port -%>>    ServerName <%= api_domain %> +  CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log common    SSLEngine on -  SSLProtocol all -SSLv2 +  SSLProtocol all -SSLv2 -SSLv3    SSLHonorCipherOrder on    SSLCompression off -  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK" +  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK"    SSLCACertificatePath /etc/ssl/certs    SSLCertificateChainFile <%= scope.lookupvar('x509::variables::local_CAs') %>/<%= scope.lookupvar('site_config::params::ca_name') %>.crt diff --git a/puppet/modules/site_apache/templates/vhosts.d/common.conf.erb b/puppet/modules/site_apache/templates/vhosts.d/common.conf.erb index ed430510..a9733a97 100644 --- a/puppet/modules/site_apache/templates/vhosts.d/common.conf.erb +++ b/puppet/modules/site_apache/templates/vhosts.d/common.conf.erb @@ -3,18 +3,20 @@    ServerAlias www.<%= domain %>    RewriteEngine On    RewriteRule ^.*$ https://<%= domain -%>%{REQUEST_URI} [R=permanent,L] +  CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log common  </VirtualHost>  <VirtualHost *:443>    ServerName <%= domain_name %>    ServerAlias <%= domain %>    ServerAlias www.<%= domain %> +  CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log common    SSLEngine on -  SSLProtocol all -SSLv2 +  SSLProtocol all -SSLv2 -SSLv3    SSLHonorCipherOrder on    SSLCompression off -  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK" +  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK"    SSLCACertificatePath /etc/ssl/certs    SSLCertificateChainFile <%= scope.lookupvar('x509::variables::local_CAs') %>/<%= scope.lookupvar('site_config::params::commercial_ca_name') %>.crt diff --git a/puppet/modules/site_apache/templates/vhosts.d/hidden_service.conf.erb b/puppet/modules/site_apache/templates/vhosts.d/hidden_service.conf.erb new file mode 100644 index 00000000..0c6f3b8e --- /dev/null +++ b/puppet/modules/site_apache/templates/vhosts.d/hidden_service.conf.erb @@ -0,0 +1,33 @@ +<VirtualHost 127.0.0.1:80> +  ServerName <%= tor_domain %> + +  <IfModule mod_headers.c> +    Header always unset X-Powered-By +    Header always unset X-Runtime +  </IfModule> + +<% if (defined? @services) and (@services.include? 'webapp') -%> +  DocumentRoot /srv/leap/webapp/public + +  RewriteEngine On +  # Check for maintenance file and redirect all requests +  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f +  RewriteCond %{SCRIPT_FILENAME} !maintenance.html +  RewriteCond %{REQUEST_URI} !/images/maintenance.jpg +  RewriteRule ^.*$ %{DOCUMENT_ROOT}/system/maintenance.html [L] + +  # http://www.modrails.com/documentation/Users%20guide%20Apache.html#_passengerallowencodedslashes_lt_on_off_gt +  AllowEncodedSlashes on +  PassengerAllowEncodedSlashes on +  PassengerFriendlyErrorPages off +  SetEnv TMPDIR /var/tmp + +  # Allow rails assets to be cached for a very long time (since the URLs change whenever the content changes) +  <Location /assets/> +    Header unset ETag +    FileETag None +    ExpiresActive On +    ExpiresDefault "access plus 1 year" +  </Location> +<% end -%> +</VirtualHost> diff --git a/puppet/modules/site_apt/files/Debian/50unattended-upgrades b/puppet/modules/site_apt/files/Debian/50unattended-upgrades new file mode 100644 index 00000000..f2f574fc --- /dev/null +++ b/puppet/modules/site_apt/files/Debian/50unattended-upgrades @@ -0,0 +1,16 @@ +// this file is managed by puppet ! + +Unattended-Upgrade::Allowed-Origins { +        "${distro_id}:stable"; +        "${distro_id}:${distro_codename}-security"; +        "${distro_id}:${distro_codename}-updates"; +        "${distro_id} Backports:${distro_codename}-backports"; +        "leap.se:stable"; +}; + +APT::Periodic::Update-Package-Lists "1"; +APT::Periodic::Download-Upgradeable-Packages "1"; +APT::Periodic::Unattended-Upgrade "1"; + +Unattended-Upgrade::Mail "root"; +Unattended-Upgrade::MailOnlyOnError "true"; diff --git a/puppet/modules/site_apt/manifests/init.pp b/puppet/modules/site_apt/manifests/init.pp index 9facf4cc..633ccf1e 100644 --- a/puppet/modules/site_apt/manifests/init.pp +++ b/puppet/modules/site_apt/manifests/init.pp @@ -1,4 +1,4 @@ -class site_apt  { +class site_apt {    class { 'apt':      custom_key_dir     => 'puppet:///modules/site_apt/keys' @@ -11,7 +11,7 @@ class site_apt  {      content => 'Acquire::PDiffs "false";';    } -  include ::apt::unattended_upgrades +  include ::site_apt::unattended_upgrades    apt::sources_list { 'secondary.list.disabled':      content => template('site_apt/secondary.list'); diff --git a/puppet/modules/site_apt/manifests/leap_repo.pp b/puppet/modules/site_apt/manifests/leap_repo.pp index 6b3d9919..2d4ba0e1 100644 --- a/puppet/modules/site_apt/manifests/leap_repo.pp +++ b/puppet/modules/site_apt/manifests/leap_repo.pp @@ -1,6 +1,9 @@  class site_apt::leap_repo { +  $platform = hiera_hash('platform') +  $major_version = $platform['major_version'] +    apt::sources_list { 'leap.list': -    content => 'deb http://deb.leap.se/debian stable main', +    content => "deb http://deb.leap.se/${major_version} wheezy main\n",      before  => Exec[refresh_apt]    } diff --git a/puppet/modules/site_apt/manifests/preferences/rsyslog.pp b/puppet/modules/site_apt/manifests/preferences/rsyslog.pp index 132a6e24..bfeaa7da 100644 --- a/puppet/modules/site_apt/manifests/preferences/rsyslog.pp +++ b/puppet/modules/site_apt/manifests/preferences/rsyslog.pp @@ -1,9 +1,13 @@  class site_apt::preferences::rsyslog { -  apt::preferences_snippet { 'rsyslog_anon_depends': -    package  => 'libestr0 librelp0 rsyslog*', -    priority => '999', -    pin      => 'release a=wheezy-backports', -    before   => Class['rsyslog::install'] +  apt::preferences_snippet { +    'rsyslog_anon_depends': +      package  => 'libestr0 librelp0 rsyslog*', +      priority => '999', +      pin      => 'release a=wheezy-backports', +      before   => Class['rsyslog::install']; + +    'fixed_rsyslog_anon_package': +      ensure => absent;    }  } diff --git a/puppet/modules/site_apt/manifests/unattended_upgrades.pp b/puppet/modules/site_apt/manifests/unattended_upgrades.pp new file mode 100644 index 00000000..daebffab --- /dev/null +++ b/puppet/modules/site_apt/manifests/unattended_upgrades.pp @@ -0,0 +1,10 @@ +class site_apt::unattended_upgrades inherits apt::unattended_upgrades { +  # override unattended-upgrades package resource to make sure +  # that it is upgraded on every deploy (#6245) + +  include ::apt::unattended_upgrades + +  Package['unattended-upgrades'] { +    ensure => latest +  } +} diff --git a/puppet/modules/site_check_mk/files/host_contactgroups.mk b/puppet/modules/site_check_mk/files/host_contactgroups.mk new file mode 100644 index 00000000..e89323fb --- /dev/null +++ b/puppet/modules/site_check_mk/files/host_contactgroups.mk @@ -0,0 +1,3 @@ +host_contactgroups = [ +  ( "admins", ALL_HOSTS ), +] diff --git a/puppet/modules/site_check_mk/manifests/server.pp b/puppet/modules/site_check_mk/manifests/server.pp index e544ef0d..388ae94b 100644 --- a/puppet/modules/site_check_mk/manifests/server.pp +++ b/puppet/modules/site_check_mk/manifests/server.pp @@ -5,11 +5,12 @@ class site_check_mk::server {    $type     = $ssh_hash['authorized_keys']['monitor']['type']    $seckey   = $ssh_hash['monitor']['private_key'] -  $nagios_hiera   = hiera_hash('nagios') -  $nagios_hosts   = $nagios_hiera['hosts'] +  $nagios_hiera     = hiera_hash('nagios') +  $nagios_hosts     = $nagios_hiera['hosts'] -  $hosts          = hiera_hash('hosts') -  $all_hosts      = inline_template ('<% @hosts.keys.sort.each do |key| -%>"<%= @hosts[key]["domain_internal"] %>", <% end -%>') +  $hosts            = hiera_hash('hosts') +  $all_hosts        = inline_template ('<% @hosts.keys.sort.each do |key| -%>"<%= @hosts[key]["domain_internal"] %>", <% end -%>') +  $domains_internal = $nagios_hiera['domains_internal']    package { 'check-mk-server':      ensure => installed, @@ -35,6 +36,14 @@ class site_check_mk::server {        content => template('site_check_mk/use_ssh.mk'),        notify  => Exec['check_mk-refresh'],        require => Package['check-mk-server']; +    '/etc/check_mk/conf.d/hostgroups.mk': +      content => template('site_check_mk/hostgroups.mk'), +      notify  => Exec['check_mk-refresh'], +      require => Package['check-mk-server']; +    '/etc/check_mk/conf.d/host_contactgroups.mk': +      source => 'puppet:///modules/site_check_mk/host_contactgroups.mk', +      notify  => Exec['check_mk-refresh'], +      require => Package['check-mk-server'];      '/etc/check_mk/all_hosts_static':        content => $all_hosts,        notify  => Exec['check_mk-refresh'], @@ -59,6 +68,5 @@ class site_check_mk::server {        require => Package['nagios-plugins-basic'];    } -    include check_mk::agent::local_checks  } diff --git a/puppet/modules/site_check_mk/templates/hostgroups.mk b/puppet/modules/site_check_mk/templates/hostgroups.mk new file mode 100644 index 00000000..79b7f92f --- /dev/null +++ b/puppet/modules/site_check_mk/templates/hostgroups.mk @@ -0,0 +1,4 @@ +host_groups = [ +  <% @domains_internal.each do |domain| %>( '<%= domain %>', [<% @nagios_hosts.keys.sort.each do |key| -%><% if @nagios_hosts[key]['domain_internal'] == key+'.'+domain -%>'<%= key %>.<%= domain %>', <% end -%><% end -%>] ), +  <% end -%> +] diff --git a/puppet/modules/site_config/manifests/default.pp b/puppet/modules/site_config/manifests/default.pp index 42359a00..a20ffc3b 100644 --- a/puppet/modules/site_config/manifests/default.pp +++ b/puppet/modules/site_config/manifests/default.pp @@ -56,10 +56,10 @@ class site_config::default {      include site_postfix::satellite    } -  # if class site_custom exists, include it. +  # if class custom exists, include it.    # possibility for users to define custom puppet recipes -  if defined( '::site_custom') { -    include ::site_custom +  if defined( '::custom') { +    include ::custom    }    include site_check_mk::agent diff --git a/puppet/modules/site_couchdb/files/runit_config b/puppet/modules/site_couchdb/files/runit_config new file mode 100644 index 00000000..169b4832 --- /dev/null +++ b/puppet/modules/site_couchdb/files/runit_config @@ -0,0 +1,6 @@ +#!/bin/bash +exec 2>&1 +export HOME=/home/bigcouch +ulimit -H -n 32768 +ulimit -S -n 32768 +exec chpst -u bigcouch /opt/bigcouch/bin/bigcouch diff --git a/puppet/modules/site_couchdb/manifests/bigcouch.pp b/puppet/modules/site_couchdb/manifests/bigcouch.pp index d3352000..82c85b52 100644 --- a/puppet/modules/site_couchdb/manifests/bigcouch.pp +++ b/puppet/modules/site_couchdb/manifests/bigcouch.pp @@ -1,12 +1,12 @@  class site_couchdb::bigcouch { -  $config         = $couchdb_config['bigcouch'] +  $config         = $::site_couchdb::couchdb_config['bigcouch']    $cookie         = $config['cookie']    $ednp_port      = $config['ednp_port']    class { 'couchdb': -    admin_pw            => $couchdb_admin_pw, -    admin_salt          => $couchdb_admin_salt, +    admin_pw            => $::site_couchdb::couchdb_admin_pw, +    admin_salt          => $::site_couchdb::couchdb_admin_salt,      bigcouch            => true,      bigcouch_cookie     => $cookie,      ednp_port           => $ednp_port, @@ -20,7 +20,7 @@ class site_couchdb::bigcouch {      -> Class['site_config::resolvconf']      -> Class['couchdb::bigcouch::package::cloudant']      -> Service['shorewall'] -    -> Service['stunnel'] +    -> Exec['refresh_stunnel']      -> Class['site_couchdb::setup']      -> Class['site_couchdb::bigcouch::add_nodes']      -> Class['site_couchdb::bigcouch::settle_cluster'] @@ -32,4 +32,14 @@ class site_couchdb::bigcouch {    file { '/var/log/bigcouch':      ensure => directory    } + +  file { '/etc/sv/bigcouch/run': +    ensure  => present, +    source  => 'puppet:///modules/site_couchdb/runit_config', +    owner   => root, +    group   => root, +    mode    => '0755', +    require => Package['couchdb'], +    notify  => Service['couchdb'] +  }  } diff --git a/puppet/modules/site_couchdb/manifests/init.pp b/puppet/modules/site_couchdb/manifests/init.pp index 5a4fb936..a11f6309 100644 --- a/puppet/modules/site_couchdb/manifests/init.pp +++ b/puppet/modules/site_couchdb/manifests/init.pp @@ -42,13 +42,13 @@ class site_couchdb {    $couchdb_backup           = $couchdb_config['backup']    $couchdb_mode             = $couchdb_config['mode'] -  if $couchdb_mode == "multimaster" { include site_couchdb::bigcouch } -  if $couchdb_mode == "master"      { include site_couchdb::master } -  if $couchdb_mode == "mirror"      { include site_couchdb::mirror } +  if $couchdb_mode == 'multimaster' { include site_couchdb::bigcouch } +  if $couchdb_mode == 'master'      { include site_couchdb::master } +  if $couchdb_mode == 'mirror'      { include site_couchdb::mirror }    Class['site_config::default']      -> Service['shorewall'] -    -> Service['stunnel'] +    -> Exec['refresh_stunnel']      -> Class['couchdb']      -> Class['site_couchdb::setup'] diff --git a/puppet/modules/site_nagios/manifests/server.pp b/puppet/modules/site_nagios/manifests/server.pp index 85443917..b195c880 100644 --- a/puppet/modules/site_nagios/manifests/server.pp +++ b/puppet/modules/site_nagios/manifests/server.pp @@ -3,12 +3,19 @@ class site_nagios::server inherits nagios::base {    # First, purge old nagios config (see #1467)    class { 'site_nagios::server::purge': } -  $nagios_hiera   = hiera('nagios') -  $nagiosadmin_pw = htpasswd_sha1($nagios_hiera['nagiosadmin_pw']) -  $nagios_hosts   = $nagios_hiera['hosts'] +  $nagios_hiera     = hiera('nagios') +  $nagiosadmin_pw   = htpasswd_sha1($nagios_hiera['nagiosadmin_pw']) +  $nagios_hosts     = $nagios_hiera['hosts'] +  $domains_internal = $nagios_hiera['domains_internal'] -  include nagios::defaults    include nagios::base +  include nagios::defaults::commands +  include nagios::defaults::contactgroups +  include nagios::defaults::contacts +  include nagios::defaults::templates +  include nagios::defaults::timeperiods +  include nagios::defaults::plugins +    class {'nagios':      # don't manage apache class from nagios, cause we already include      # it in site_apache::common @@ -55,4 +62,6 @@ class site_nagios::server inherits nagios::base {          'set missingok missingok', 'set ifempty notifempty',          'set copytruncate copytruncate' ]    } + +  ::site_nagios::server::hostgroup { $domains_internal: }  } diff --git a/puppet/modules/site_nagios/manifests/server/hostgroup.pp b/puppet/modules/site_nagios/manifests/server/hostgroup.pp new file mode 100644 index 00000000..035ba7d1 --- /dev/null +++ b/puppet/modules/site_nagios/manifests/server/hostgroup.pp @@ -0,0 +1,3 @@ +define site_nagios::server::hostgroup { +  nagios_hostgroup { $name: } +} diff --git a/puppet/modules/site_nickserver/templates/nickserver-proxy.conf.erb b/puppet/modules/site_nickserver/templates/nickserver-proxy.conf.erb index ae06410e..56a8d9f6 100644 --- a/puppet/modules/site_nickserver/templates/nickserver-proxy.conf.erb +++ b/puppet/modules/site_nickserver/templates/nickserver-proxy.conf.erb @@ -9,9 +9,10 @@ Listen 0.0.0.0:<%= @nickserver_port -%>    ServerAlias <%= @address_domain %>    SSLEngine on -  SSLProtocol -all +SSLv3 +TLSv1 -  SSLCipherSuite HIGH:MEDIUM:!aNULL:!SSLv2:!MD5:@STRENGTH +  SSLProtocol all -SSLv2 -SSLv3    SSLHonorCipherOrder on +  SSLCompression off +  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK"    SSLCACertificatePath /etc/ssl/certs    SSLCertificateChainFile <%= scope.lookupvar('x509::variables::local_CAs') %>/<%= scope.lookupvar('site_config::params::ca_name') %>.crt diff --git a/puppet/modules/site_obfsproxy/manifests/init.pp b/puppet/modules/site_obfsproxy/manifests/init.pp index 40b7fba8..6275ebee 100644 --- a/puppet/modules/site_obfsproxy/manifests/init.pp +++ b/puppet/modules/site_obfsproxy/manifests/init.pp @@ -11,13 +11,13 @@ class site_obfsproxy {    $dest_ip      = $obfsproxy['gateway_address']    $dest_port    = '443' -   if $::services =~ /\bopenvpn\b/ { -     $openvpn      = hiera('openvpn') -     $bind_address = $openvpn['gateway_address'] -   } -   elsif $::services =~ /\bobfsproxy\b/ { -     $bind_address = hiera('ip_address') -   } +  if member($::services, 'openvpn') { +    $openvpn      = hiera('openvpn') +    $bind_address = $openvpn['gateway_address'] +  } +  elsif member($::services, 'obfsproxy') { +    $bind_address = hiera('ip_address') +  }    include site_apt::preferences::twisted    include site_apt::preferences::obfsproxy diff --git a/puppet/modules/site_openvpn/manifests/init.pp b/puppet/modules/site_openvpn/manifests/init.pp index b6331f12..d6f9150b 100644 --- a/puppet/modules/site_openvpn/manifests/init.pp +++ b/puppet/modules/site_openvpn/manifests/init.pp @@ -148,13 +148,17 @@ class site_openvpn {    exec { 'restart_openvpn':      command     => '/etc/init.d/openvpn restart',      refreshonly => true, -    subscribe   => File['/etc/openvpn'], +    subscribe   => [ +                    File['/etc/openvpn'], +                    Class['Site_config::X509::Key'], +                    Class['Site_config::X509::Cert'], +                    Class['Site_config::X509::Ca_bundle'] ],      require     => [ -      Package['openvpn'], -      File['/etc/openvpn'], -      Class['Site_config::X509::Key'], -      Class['Site_config::X509::Cert'], -      Class['Site_config::X509::Ca_bundle'] ]; +                    Package['openvpn'], +                    File['/etc/openvpn'], +                    Class['Site_config::X509::Key'], +                    Class['Site_config::X509::Cert'], +                    Class['Site_config::X509::Ca_bundle'] ];    }    cron { 'add_gateway_ips.sh': diff --git a/puppet/modules/site_openvpn/manifests/server_config.pp b/puppet/modules/site_openvpn/manifests/server_config.pp index 97cf2842..466f6d00 100644 --- a/puppet/modules/site_openvpn/manifests/server_config.pp +++ b/puppet/modules/site_openvpn/manifests/server_config.pp @@ -85,6 +85,18 @@ define site_openvpn::server_config(          key     => 'tcp-nodelay',          server  => $openvpn_configname;      } +  } elsif $proto == 'udp' { +    if $config['fragment'] != 1500 { +      openvpn::option { +        "fragment ${openvpn_configname}": +          key    => 'fragment', +          value  => $config['fragment'], +          server => $openvpn_configname; +        "mssfix ${openvpn_configname}": +          key    => 'mssfix', +          server => $openvpn_configname; +      } +    }    }    openvpn::option { diff --git a/puppet/modules/site_shorewall/manifests/dnat_rule.pp b/puppet/modules/site_shorewall/manifests/dnat_rule.pp index aa298408..f9fbe950 100644 --- a/puppet/modules/site_shorewall/manifests/dnat_rule.pp +++ b/puppet/modules/site_shorewall/manifests/dnat_rule.pp @@ -4,41 +4,45 @@ define site_shorewall::dnat_rule {    if $port != 1194 {      if $site_openvpn::openvpn_allow_unlimited {        shorewall::rule { -          "dnat_tcp_port_$port": +          "dnat_tcp_port_${port}":              action          => 'DNAT',              source          => 'net',              destination     => "\$FW:${site_openvpn::unlimited_gateway_address}:1194",              proto           => 'tcp',              destinationport => $port, +            originaldest    => $site_openvpn::unlimited_gateway_address,              order           => 100;        }        shorewall::rule { -          "dnat_udp_port_$port": +          "dnat_udp_port_${port}":              action          => 'DNAT',              source          => 'net',              destination     => "\$FW:${site_openvpn::unlimited_gateway_address}:1194",              proto           => 'udp',              destinationport => $port, +            originaldest    => $site_openvpn::unlimited_gateway_address,              order           => 100;        }      }      if $site_openvpn::openvpn_allow_limited {        shorewall::rule { -          "dnat_free_tcp_port_$port": +          "dnat_free_tcp_port_${port}":              action          => 'DNAT',              source          => 'net',              destination     => "\$FW:${site_openvpn::limited_gateway_address}:1194",              proto           => 'tcp',              destinationport => $port, +            originaldest    => $site_openvpn::unlimited_gateway_address,              order           => 100;        }        shorewall::rule { -          "dnat_free_udp_port_$port": +          "dnat_free_udp_port_${port}":              action          => 'DNAT',              source          => 'net',              destination     => "\$FW:${site_openvpn::limited_gateway_address}:1194",              proto           => 'udp',              destinationport => $port, +            originaldest    => $site_openvpn::unlimited_gateway_address,              order           => 100;        }      } diff --git a/puppet/modules/site_sshd/manifests/init.pp b/puppet/modules/site_sshd/manifests/init.pp index 9a05b6ed..1da2f1d5 100644 --- a/puppet/modules/site_sshd/manifests/init.pp +++ b/puppet/modules/site_sshd/manifests/init.pp @@ -53,7 +53,7 @@ class site_sshd {    ##    class { '::sshd':      manage_nagios => false, -    ports         => $ssh['port'], +    ports         => [ $ssh['port'] ],      use_pam       => 'yes',      hardened_ssl  => 'yes',      print_motd    => 'no', diff --git a/puppet/modules/site_static/templates/apache.conf.erb b/puppet/modules/site_static/templates/apache.conf.erb index 07ac481d..9b516a10 100644 --- a/puppet/modules/site_static/templates/apache.conf.erb +++ b/puppet/modules/site_static/templates/apache.conf.erb @@ -46,10 +46,10 @@    #RewriteLogLevel 3    SSLEngine on -  SSLProtocol all -SSLv2 +  SSLProtocol all -SSLv2 -SSLv3    SSLHonorCipherOrder on    SSLCompression off -  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK" +  SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK"  <%- if @tls_only -%>    Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains" diff --git a/puppet/modules/site_stunnel/manifests/client.pp b/puppet/modules/site_stunnel/manifests/client.pp index 12d664b4..3b10ecb8 100644 --- a/puppet/modules/site_stunnel/manifests/client.pp +++ b/puppet/modules/site_stunnel/manifests/client.pp @@ -35,10 +35,7 @@ define site_stunnel::client (      pid        => "/var/run/stunnel4/${pid}.pid",      rndfile    => $rndfile,      debuglevel => $debuglevel, -    subscribe  => [ -      Class['Site_config::X509::Key'], -      Class['Site_config::X509::Cert'], -      Class['Site_config::X509::Ca'] ]; +    sslversion => 'TLSv1';    }    site_shorewall::stunnel::client { $name: diff --git a/puppet/modules/site_stunnel/manifests/init.pp b/puppet/modules/site_stunnel/manifests/init.pp index b292f1cd..2e0cf5b8 100644 --- a/puppet/modules/site_stunnel/manifests/init.pp +++ b/puppet/modules/site_stunnel/manifests/init.pp @@ -28,5 +28,7 @@ class site_stunnel {    $clients = $stunnel['clients']    $client_sections = keys($clients)    site_stunnel::clients { $client_sections: } + +  include site_stunnel::override_service  } diff --git a/puppet/modules/site_stunnel/manifests/override_service.pp b/puppet/modules/site_stunnel/manifests/override_service.pp new file mode 100644 index 00000000..96187048 --- /dev/null +++ b/puppet/modules/site_stunnel/manifests/override_service.pp @@ -0,0 +1,13 @@ +class site_stunnel::override_service inherits stunnel::debian { + +  include site_config::x509::cert +  include site_config::x509::key +  include site_config::x509::ca + +  Service[stunnel] { +    subscribe => [ +                  Class['Site_config::X509::Key'], +                  Class['Site_config::X509::Cert'], +                  Class['Site_config::X509::Ca'] ] +  } +} diff --git a/puppet/modules/site_stunnel/manifests/servers.pp b/puppet/modules/site_stunnel/manifests/servers.pp index b1da5c59..b6fac319 100644 --- a/puppet/modules/site_stunnel/manifests/servers.pp +++ b/puppet/modules/site_stunnel/manifests/servers.pp @@ -35,10 +35,7 @@ define site_stunnel::servers (      pid        => "/var/run/stunnel4/${pid}.pid",      rndfile    => '/var/lib/stunnel4/.rnd',      debuglevel => $debuglevel, -    require    => [ -      Class['Site_config::X509::Key'], -      Class['Site_config::X509::Cert'], -      Class['Site_config::X509::Ca'] ]; +    sslversion => 'TLSv1';    }    # allow incoming connections on $accept_port diff --git a/puppet/modules/site_tor/manifests/init.pp b/puppet/modules/site_tor/manifests/init.pp index e62cb12d..d14e813d 100644 --- a/puppet/modules/site_tor/manifests/init.pp +++ b/puppet/modules/site_tor/manifests/init.pp @@ -11,23 +11,31 @@ class site_tor {    $address        = hiera('ip_address') +  $openvpn        = hiera('openvpn', undef) +  if $openvpn { +    $openvpn_ports = $openvpn['ports'] +  } +  else { +    $openvpn_ports = [] +  } +      class { 'tor::daemon': }    tor::daemon::relay { $nickname: -    port             => 9001, -    address          => $address, -    contact_info     => obfuscate_email($contact_emails), -    bandwidth_rate   => $bandwidth_rate, -    my_family        => $family +    port           => 9001, +    address        => $address, +    contact_info   => obfuscate_email($contact_emails), +    bandwidth_rate => $bandwidth_rate, +    my_family      => $family    }    if ( $tor_type == 'exit'){ -    tor::daemon::directory { $::hostname: port => 80 } +    # Only enable the daemon directory if the node isn't also a webapp node +    # or running openvpn on port 80 +    if ! member($::services, 'webapp') and ! member($openvpn_ports, '80') { +      tor::daemon::directory { $::hostname: port => 80 } +    }    }    else { -    tor::daemon::directory { $::hostname: -      port            => 80, -      port_front_page => ''; -    }      include site_tor::disable_exit    } diff --git a/puppet/modules/site_webapp/manifests/hidden_service.pp b/puppet/modules/site_webapp/manifests/hidden_service.pp new file mode 100644 index 00000000..ac0e8a37 --- /dev/null +++ b/puppet/modules/site_webapp/manifests/hidden_service.pp @@ -0,0 +1,43 @@ +class site_webapp::hidden_service { +  $tor              = hiera('tor') +  $hidden_service   = $tor['hidden_service'] +  $tor_domain       = "${hidden_service['address']}.onion" + +  include site_apache::common +  include site_apache::module::headers +  include site_apache::module::alias +  include site_apache::module::expires +  include site_apache::module::removeip + +  include tor::daemon +  tor::daemon::hidden_service { 'webapp': ports => '80 127.0.0.1:80' } + +  file { +    '/var/lib/tor/webapp/': +      ensure  => directory, +      owner   => 'debian-tor', +      group   => 'debian-tor', +      mode    => '2700'; + +    '/var/lib/tor/webapp/private_key': +      ensure  => present, +      source  => '/srv/leap/files/nodes/web/tor.key', +      owner   => 'debian-tor', +      group   => 'debian-tor', +      mode    => '0600'; + +    '/var/lib/tor/webapp/hostname': +      ensure  => present, +      content => $tor_domain, +      owner   => 'debian-tor', +      group   => 'debian-tor', +      mode    => '0600'; +  } + +  apache::vhost::file { +    'hidden_service': +      content => template('site_apache/vhosts.d/hidden_service.conf.erb') +  } + +  include site_shorewall::tor +}
\ No newline at end of file diff --git a/puppet/modules/site_webapp/manifests/init.pp b/puppet/modules/site_webapp/manifests/init.pp index 17b010f3..752993c1 100644 --- a/puppet/modules/site_webapp/manifests/init.pp +++ b/puppet/modules/site_webapp/manifests/init.pp @@ -10,6 +10,7 @@ class site_webapp {    $webapp           = hiera('webapp')    $api_version      = $webapp['api_version']    $secret_token     = $webapp['secret_token'] +  $tor              = hiera('tor', false)    Class['site_config::default'] -> Class['site_webapp'] @@ -157,6 +158,13 @@ class site_webapp {        notify  => Service['apache'];    } +  if $tor { +    $hidden_service = $tor['hidden_service'] +    if $hidden_service['active'] { +      include site_webapp::hidden_service +    } +  } +    include site_shorewall::webapp    include site_check_mk::agent::webapp  } diff --git a/puppet/modules/site_webapp/templates/config.yml.erb b/puppet/modules/site_webapp/templates/config.yml.erb index 9205438b..0c75f3ca 100644 --- a/puppet/modules/site_webapp/templates/config.yml.erb +++ b/puppet/modules/site_webapp/templates/config.yml.erb @@ -19,6 +19,7 @@ production:    default_service_level: "<%= @webapp['default_service_level'] %>"    service_levels: <%= @webapp['service_levels'].to_json %>    allow_registration: <%= @webapp['allow_registration'].inspect %> +  handle_blacklist: <%= @webapp['forbidden_usernames'].inspect %>  <%- if @webapp['engines'] && @webapp['engines'].any? -%>    engines:  <%-   @webapp['engines'].each do |engine| -%> diff --git a/puppet/modules/sshd b/puppet/modules/sshd -Subproject 5c23b33200fc6229ada7f4e13672b5da0d4bdd8 +Subproject 750a497758d94c2f5a6cad23cecc3dbde2d2f92 | 
