diff options
Diffstat (limited to 'manifests')
-rw-r--r-- | manifests/daemon.pp | 269 | ||||
-rw-r--r-- | manifests/init.pp | 17 | ||||
-rw-r--r-- | manifests/munin.pp | 23 | ||||
-rw-r--r-- | manifests/polipo/base.pp | 2 | ||||
-rw-r--r-- | manifests/torsocks.pp | 3 |
5 files changed, 308 insertions, 6 deletions
diff --git a/manifests/daemon.pp b/manifests/daemon.pp new file mode 100644 index 0000000..07066c6 --- /dev/null +++ b/manifests/daemon.pp @@ -0,0 +1,269 @@ +# tor::daemon +class tor::daemon inherits tor { + + # config variables + $data_dir = '/var/lib/tor' + $config_file = '/etc/tor/torrc' + $spool_dir = '/var/lib/puppet/modules/tor' + $snippet_dir = "${spool_dir}/torrc.d" + + # packages, user, group + Service['tor'] { + subscribe => File[$config_file], + } + + Package[ 'tor' ] { + require => File[$data_dir], + } + + group { 'debian-tor': + ensure => present, + allowdupe => false, + } + + user { 'debian-tor': + allowdupe => false, + comment => 'tor user,,,', + ensure => present, + home => $data_dir, + shell => '/bin/bash', + gid => 'debian-tor', + require => Group['debian-tor'], + } + + # directories + file { "${data_dir}": + ensure => directory, + mode => 0700, + owner => 'debian-tor', + group => 'debian-tor', + require => User['debian-tor'], + } + + file { '/etc/tor': + ensure => directory, + mode => 0755, + owner => 'debian-tor', + group => 'debian-tor', + require => User['debian-tor'], + } + + file { "${spool_dir}": + ensure => directory, + owner => 'debian-tor', group => 'debian-tor', mode => 0755, + } + + file { "${snippet_dir}": + ensure => directory, + owner => 'debian-tor', group => 'debian-tor', mode => 0755, + require => File[$spool_dir], + } + + # tor configuration file + concatenated_file { "${config_file}": + dir => $snippet_dir, + mode => 0600, + owner => 'debian-tor', group => 'debian-tor', + } + + # config file headers + concatenated_file_part { '00.header': + dir => $snippet_dir, + content => template('tor/torrc.header.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => present, + } + + # global configurations + define global_opts( $data_dir = $tor::daemon::data_dir, + $log_rules = [ 'notice file /var/log/tor/notices.log' ], + $use_bridges = 0, + $automap_hosts_on_resolve = 0) { + + concatenated_file_part { '01.global': + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.global.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + } + } + + # socks definition + define socks( $port = 0, + $listen_addresses = [], + $policies = [] ) { + + concatenated_file_part { '02.socks': + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.socks.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + } + } + + # relay definition + define relay( $port = 0, + $listen_addresses = [], + $outbound_bindaddresses = $listen_addresses, + $bandwidth_rate = '', # KB/s, defaulting to using tor's default: 5120KB/s + $bandwidth_burst = '', # KB/s, defaulting to using tor's default: 10240KB/s + $relay_bandwidth_rate = 0, # KB/s, 0 for no limit. + $relay_bandwidth_burst = 0, # KB/s, 0 for no limit. + $accounting_max = 0, # GB, 0 for no limit. + $accounting_start = [], + $contact_info = '', + $my_family = '', # TODO: autofill with other relays + $address = "tor.${domain}", + $bridge_relay = 0, + $ensure = present ) { + $nickname = $name + + if $outbound_bindaddresses == [] { + $real_outbound_bindaddresses = $listen_addresses + } else { + $real_outbound_bindaddresses = $outbound_bindaddresses + } + + concatenated_file_part { '03.relay': + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.relay.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # control definition + define control( $port = 0, + $hashed_control_password = '', + $cookie_authentication = 0, + $cookie_auth_file = '', + $cookie_auth_file_group_readable = '', + $ensure = present ) { + + if $cookie_authentication == '0' and $hashed_control_password == '' and $ensure != 'absent' { + fail("You need to define the tor control password") + } + + if $cookie_authentication == 0 and ($cookie_auth_file != '' or $cookie_auth_file_group_readable != '') { + notice("You set a tor cookie authentication option, but do not have cookie_authentication on") + } + + concatenated_file_part { '04.control': + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.control.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0600, + ensure => $ensure, + } + } + + # hidden services definition + define hidden_service( $ports = [], + $data_dir = $tor::daemon::data_dir, + $ensure = present ) { + + concatenated_file_part { "05.hidden_service.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.hidden_service.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # directory advertising + define directory ( $port = 0, + $listen_addresses = [], + $port_front_page = '/etc/tor/tor.html', + $ensure = present ) { + + concatenated_file_part { '06.directory': + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.directory.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + + file { '/etc/tor/tor.html': + source => "puppet:///modules/tor/tor.html", + require => File['/etc/tor'], + ensure => $ensure, + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + } + } + + # exit policies + define exit_policy( $accept = [], + $reject = [], + $reject_private = 1, + $ensure = present ) { + + concatenated_file_part { "07.exit_policy.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.exit_policy.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # DNS definition + define dns( $port = 0, + $listen_addresses = [], + $ensure = present ) { + + concatenated_file_part { "08.dns.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.dns.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # Transparent proxy definition + define transparent( $port = 0, + $listen_addresses = [], + $ensure = present ) { + + concatenated_file_part { "09.transparent.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.transparent.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # Bridge definition + define bridge( $ip, + $port, + $fingerprint = false, + $ensure = present ) { + + concatenated_file_part { "10.bridge.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.bridge.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # map address definition + define map_address( $address = '', + $newaddress = '') { + + concatenated_file_part { "08.map_address.${name}": + dir => $tor::daemon::snippet_dir, + content => template('tor/torrc.map_address.erb'), + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + + # Arbitrary torrc snippet definition + define snippet( $content = '', + $ensure = present ) { + + concatenated_file_part { "99.snippet.${name}": + dir => $tor::daemon::snippet_dir, + content => $content, + owner => 'debian-tor', group => 'debian-tor', mode => 0644, + ensure => $ensure, + } + } + +} diff --git a/manifests/init.pp b/manifests/init.pp index 5d1c3d8..d916188 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,11 +1,20 @@ class tor { - package {'tor': - ensure => installed, + + if !$tor_ensure_version { $tor_ensure_version = 'installed' } + + package { [ "tor", "tor-geoipdb" ]: + ensure => $tor_ensure_version, } - service { "tor": + service { 'tor': ensure => running, - enable => true, + enable => true, + hasrestart => true, + hasstatus => true, require => Package['tor'], } + + if $use_munin { + include tor::munin + } } diff --git a/manifests/munin.pp b/manifests/munin.pp new file mode 100644 index 0000000..8504f89 --- /dev/null +++ b/manifests/munin.pp @@ -0,0 +1,23 @@ +class tor::munin { + + file { + "/usr/local/share/munin-plugins/tor_connections": + source => "puppet:///modules/tor/munin/tor_connections", + mode => 0755, owner => root, group => root; + + "/usr/local/share/munin-plugins/tor_routers": + source => "puppet:///modules/tor/munin/tor_routers", + mode => 0755, owner => root, group => root; + + "/usr/local/share/munin-plugins/tor_traffic": + source => "puppet:///modules/tor/munin/tor_traffic", + mode => 0755, owner => root, group => root; + } + + munin::plugin { + [ "tor_connections", "tor_routers", "tor_traffic" ]: + ensure => present, + config => "user debian-tor\n env.cookiefile /var/run/tor/control.authcookie", + script_path_in => "/usr/local/share/munin-plugins"; + } +} diff --git a/manifests/polipo/base.pp b/manifests/polipo/base.pp index a634920..fca4b21 100644 --- a/manifests/polipo/base.pp +++ b/manifests/polipo/base.pp @@ -11,11 +11,11 @@ class tor::polipo::base { source => "puppet:///modules/tor/polipo/polipo.conf", require => Package["polipo"], notify => Service["polipo"], - before => Service["tor"], } service { "polipo": ensure => running, enable => true, + require => [ Package["polipo"], Service["tor"] ], } } diff --git a/manifests/torsocks.pp b/manifests/torsocks.pp index e3221c9..7bb51ee 100644 --- a/manifests/torsocks.pp +++ b/manifests/torsocks.pp @@ -1,6 +1,7 @@ class tor::torsocks { + if !$torsocks_ensure_version { $torsocks_ensure_version = 'installed' } include ::tor package{'torsocks': - ensure => present, + ensure => $torsocks_ensure_version, } } |