diff options
Diffstat (limited to 'puppet')
| -rw-r--r-- | puppet/manifests/setup.pp | 2 | ||||
| -rw-r--r-- | puppet/modules/site_config/manifests/firewall.pp | 62 | ||||
| -rw-r--r-- | puppet/modules/site_config/templates/ipv4firewall_up.rules.erb | 20 | ||||
| -rw-r--r-- | puppet/modules/site_config/templates/ipv6firewall_up.rules.erb | 7 | ||||
| -rw-r--r-- | puppet/modules/site_shorewall/manifests/defaults.pp | 28 | ||||
| -rw-r--r-- | puppet/modules/site_shorewall/manifests/sshd.pp | 6 | 
6 files changed, 123 insertions, 2 deletions
| diff --git a/puppet/manifests/setup.pp b/puppet/manifests/setup.pp index d9e5229e..84e4c056 100644 --- a/puppet/manifests/setup.pp +++ b/puppet/manifests/setup.pp @@ -9,6 +9,8 @@ include concat::setup  include site_config::hosts +include site_config::initial_firewall +  include site_apt  package { 'facter': diff --git a/puppet/modules/site_config/manifests/firewall.pp b/puppet/modules/site_config/manifests/firewall.pp new file mode 100644 index 00000000..b9fc5ffe --- /dev/null +++ b/puppet/modules/site_config/manifests/firewall.pp @@ -0,0 +1,62 @@ +class site_config::initial_firewall { + +  # This class is intended to setup an initial firewall, before shorewall is +  # configured. The purpose of this is for the rare case where shorewall fails +  # to start, we should not expose services to the public. + +  $ssh_config = hiera('ssh') +  $ssh_port   = $ssh_config['port'] + +  package { 'iptables': +    ensure => present +  } + +  file { +    # This firewall enables ssh access, dns lookups and web lookups (for +    # package installation) but otherwise restricts all outgoing and incoming +    # ports +    '/etc/network/ipv4firewall_up.rules': +      content => template('site_config/ipv4firewall_up.rules.erb'), +      owner   => root, +      group   => 0, +      mode    => '0644'; + +    # This firewall denys all ipv6 traffic - we will need to change this +    # when we begin to support ipv6 +    '/etc/network/ipv6firewall_up.rules': +      content => template('site_config/ipv6firewall_up.rules.erb'), +      owner   => root, +      group   => 0, +      mode    => '0644'; + +    # Run the iptables-restore in if-pre-up so that the network is locked down +    # until the correct interfaces and ips are connected +    '/etc/network/if-pre-up.d/ipv4tables': +      content => "#!/bin/sh\n/sbin/iptables-restore < /etc/network/ipv4firewall_up.rules\n", +      owner   => root, +      group   => 0, +      mode    => '0744'; + +    # Same as above for IPv6 +    '/etc/network/if-pre-up.d/ipv6tables': +      content => "#!/bin/sh\n/sbin/ip6tables-restore < /etc/network/ipv6firewall_up.rules\n", +      owner   => root, +      group   => 0, +      mode    => '0744'; +  } + +  # Immediately setup these firewall rules, but only if shorewall is not running +  exec { +    'default_ipv4_firewall': +      command   => '/sbin/iptables-restore < /etc/network/ipv4firewall_up.rules', +      logoutput => true, +      unless    => '/sbin/shorewall status', +      require   => File['/etc/network/ipv4firewall_up.rules']; + +    'default_ipv6_firewall': +      command   => '/sbin/ip6tables-restore < /etc/network/ipv6firewall_up.rules', +      logoutput => true, +      unless    => '/sbin/shorewall status', +      require   => File['/etc/network/ipv6firewall_up.rules']; +  } +} diff --git a/puppet/modules/site_config/templates/ipv4firewall_up.rules.erb b/puppet/modules/site_config/templates/ipv4firewall_up.rules.erb new file mode 100644 index 00000000..c03716f3 --- /dev/null +++ b/puppet/modules/site_config/templates/ipv4firewall_up.rules.erb @@ -0,0 +1,20 @@ +# Generated by iptables-save v1.4.14 on Tue Aug 20 14:40:40 2013 +*filter +:INPUT DROP [0:0] +:FORWARD DROP [0:0] +:OUTPUT DROP [0:0] +-A INPUT -i lo -j ACCEPT +-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport <%= @ssh_port %> -j ACCEPT +-A INPUT -p udp -m udp --sport 53 -j ACCEPT +-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 +-A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A OUTPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT +-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport <%= @ssh_port %> -j ACCEPT +-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT +-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT +-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT +-A OUTPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 +COMMIT diff --git a/puppet/modules/site_config/templates/ipv6firewall_up.rules.erb b/puppet/modules/site_config/templates/ipv6firewall_up.rules.erb new file mode 100644 index 00000000..e7fae52e --- /dev/null +++ b/puppet/modules/site_config/templates/ipv6firewall_up.rules.erb @@ -0,0 +1,7 @@ +# Generated by ip6tables-save v1.4.20 on Tue Aug 20 12:19:43 2013 +*filter +:INPUT DROP [24:1980] +:FORWARD DROP [0:0] +:OUTPUT DROP [14:8030] +COMMIT +# Completed on Tue Aug 20 12:19:43 2013 diff --git a/puppet/modules/site_shorewall/manifests/defaults.pp b/puppet/modules/site_shorewall/manifests/defaults.pp index c62c9307..35e47982 100644 --- a/puppet/modules/site_shorewall/manifests/defaults.pp +++ b/puppet/modules/site_shorewall/manifests/defaults.pp @@ -1,4 +1,5 @@  class site_shorewall::defaults { +    include shorewall    include site_config::params @@ -18,8 +19,6 @@ class site_shorewall::defaults {      options   => 'tcpflags,blacklist,nosmurfs';    } -  shorewall::routestopped { $site_config::params::interface: } -    shorewall::policy {      'fw-to-all':        sourcezone      => 'fw', @@ -42,5 +41,30 @@ class site_shorewall::defaults {          order       => 200;    } +  package { 'shorewall-init': +    ensure => installed +  } + +  augeas { +    # stop instead of clear firewall on shutdown +    'shorewall_SAFESTOP': +      changes => 'set /files/etc/shorewall/shorewall.conf/SAFESTOP Yes', +      lens    => 'Shellvars.lns', +      incl    => '/etc/shorewall/shorewall.conf', +      notify  => Service[shorewall]; +    # require that the interface exist +    'shorewall_REQUIRE_INTERFACE': +      changes => 'set /files/etc/shorewall/shorewall.conf/REQUIRE_INTERFACE Yes', +      lens    => 'Shellvars.lns', +      incl    => '/etc/shorewall/shorewall.conf', +      notify  => Service[shorewall]; +    # configure shorewall-init +    'shorewall-init': +      changes => 'set /files/etc/default/shorewall-init/PRODUCTS shorewall', +      lens    => 'Shellvars.lns', +      incl    => '/etc/default/shorewall-init', +      require => [ Package['shorewall-init'], Service['shorewall'] ] +  } +    include site_shorewall::sshd  } diff --git a/puppet/modules/site_shorewall/manifests/sshd.pp b/puppet/modules/site_shorewall/manifests/sshd.pp index a8e09e42..88b4102c 100644 --- a/puppet/modules/site_shorewall/manifests/sshd.pp +++ b/puppet/modules/site_shorewall/manifests/sshd.pp @@ -21,4 +21,10 @@ class site_shorewall::sshd {          action      => 'leap_sshd(ACCEPT)',          order       => 200;    } + +  # setup a routestopped rule to allow ssh when shorewall is stopped +  shorewall::routestopped { $site_config::params::interface: +    options => "-   tcp   ${ssh_port}" +  } +  } | 
