provizioning 0.9.17 → 0.9.18
Sign up to get free protection for your applications and to get access to all the features.
- data/bootstrap/bootstrap.sh +2 -1
- data/lib/provizioning/puppet.rb +3 -3
- data/lib/provizioning/version.rb +1 -1
- data/puppet/classes/apache.pp +1 -2
- data/puppet/modules/ssh/manifests/init.pp +16 -71
- data/puppet/modules/ufw/Gemfile +8 -0
- data/puppet/modules/ufw/LICENSE +19 -0
- data/puppet/modules/ufw/Modulefile +13 -0
- data/puppet/modules/ufw/README.md +63 -0
- data/puppet/modules/ufw/Rakefile +17 -0
- data/puppet/modules/ufw/manifests/allow.pp +31 -0
- data/puppet/modules/ufw/manifests/deny.pp +29 -0
- data/puppet/modules/ufw/manifests/init.pp +21 -9
- data/puppet/modules/ufw/manifests/limit.pp +7 -0
- data/puppet/modules/ufw/metadata.json +33 -0
- data/puppet/modules/ufw/spec/spec.opts +6 -0
- data/puppet/modules/ufw/spec/spec_helper.rb +18 -0
- data/puppet/modules/ufw/tests/allow.pp +10 -0
- data/puppet/modules/ufw/tests/deny.pp +10 -0
- data/puppet/modules/ufw/tests/init.pp +5 -0
- data/puppet/modules/ufw/tests/limit.pp +5 -0
- data/puppet/modules/ufw.old/manifests/init.pp +12 -0
- data/puppet/site.pp +1 -1
- metadata +18 -6
- data/puppet/modules/ssh/README +0 -4
- data/puppet/modules/ssh/manifests/auth.pp +0 -39
- data/puppet/modules/ssh/manifests/auth.pp.good +0 -340
- data/puppet/modules/ssh/manifests/eal4.pp +0 -69
data/bootstrap/bootstrap.sh
CHANGED
@@ -77,6 +77,7 @@ apt-get -y autoremove
|
|
77
77
|
##############################################################################
|
78
78
|
|
79
79
|
gem install puppet --no-ri --no-rdoc
|
80
|
-
|
80
|
+
groupadd puppet
|
81
|
+
#puppet resource group puppet ensure=present
|
81
82
|
puppet resource user puppet ensure=present gid=puppet shell='/sbin/nologin'
|
82
83
|
reboot
|
data/lib/provizioning/puppet.rb
CHANGED
@@ -12,7 +12,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
12
12
|
desc "Deploy our puppet recipes to the server"
|
13
13
|
task :deploy_recipes do
|
14
14
|
with_puppet_user do
|
15
|
-
run "rm -rf #{puppet_path}"
|
15
|
+
run "#{try_sudo} rm -rf #{puppet_path}"
|
16
16
|
upload File.expand_path("../../../puppet", __FILE__), puppet_path
|
17
17
|
end
|
18
18
|
end
|
@@ -35,7 +35,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
35
35
|
desc 'Bootstrap puppet'
|
36
36
|
task :bootstrap do
|
37
37
|
with_puppet_user do
|
38
|
-
run "wget -q -O - https://raw.github.com/seasonlabs/provizioning/master/bootstrap/bootstrap.sh | sh"
|
38
|
+
run "wget -q -O - https://raw.github.com/seasonlabs/provizioning/master/bootstrap/bootstrap.sh | #{try_sudo} sh"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -70,7 +70,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
70
70
|
dryrun_option = fetch('puppet_dryrun') ? "--noop " : ""
|
71
71
|
debug_option = fetch('puppet_debug') ? "-d " : ""
|
72
72
|
with_puppet_user do
|
73
|
-
run "puppet apply --modulepath '#{puppet_app_modules_path}:#{puppet_path}/modules' --templatedir #{puppet_path}/classes #{dryrun_option}-v #{debug_option}#{manifest}", options
|
73
|
+
run "#{try_sudo} puppet apply --modulepath '#{puppet_app_modules_path}:#{puppet_path}/modules' --templatedir #{puppet_path}/classes #{dryrun_option}-v #{debug_option}#{manifest}", options
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
data/lib/provizioning/version.rb
CHANGED
data/puppet/classes/apache.pp
CHANGED
@@ -1,74 +1,19 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Manage a bit of ssh properties
|
3
2
|
class ssh {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
},
|
9
|
-
ensure => present,
|
3
|
+
define append_ssh_key_to_root($key) {
|
4
|
+
append_ssh_key_to_user {$name:
|
5
|
+
user => "root",
|
6
|
+
key => $key,
|
10
7
|
}
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
}
|
9
|
+
|
10
|
+
define append_ssh_key_to_user($user, $key, $key_type="ssh-rsa") {
|
11
|
+
ssh_authorized_key {$name:
|
12
|
+
ensure => present,
|
13
|
+
user => $user,
|
14
|
+
key => $key,
|
15
|
+
name => $name,
|
16
|
+
type => $key_type,
|
17
17
|
}
|
18
|
-
|
19
|
-
}
|
20
|
-
|
21
|
-
class ssh::server {
|
22
|
-
|
23
|
-
include ssh
|
24
|
-
|
25
|
-
package { sshd:
|
26
|
-
name => $operatingsystem ? {
|
27
|
-
default => "openssh-server",
|
28
|
-
},
|
29
|
-
ensure => present,
|
30
|
-
}
|
31
|
-
|
32
|
-
service { sshd:
|
33
|
-
name => $operatingsystem ? {
|
34
|
-
default => "sshd",
|
35
|
-
},
|
36
|
-
ensure => running,
|
37
|
-
enable => true,
|
38
|
-
hasrestart => true,
|
39
|
-
hasstatus => true,
|
40
|
-
require => Package["sshd"],
|
41
|
-
subscribe => File["sshd.conf"],
|
42
|
-
}
|
43
|
-
|
44
|
-
file {
|
45
|
-
"sshd_config":
|
46
|
-
mode => 600, owner => root, group => root,
|
47
|
-
require => Package[ssh-server],
|
48
|
-
ensure => present,
|
49
|
-
path => $operatingsystem ?{
|
50
|
-
default => "/etc/ssh/sshd_config",
|
51
|
-
},
|
52
|
-
}
|
53
|
-
|
54
|
-
}
|
55
|
-
|
56
|
-
define ssh::config ($value) {
|
57
|
-
|
58
|
-
# Augeas version.
|
59
|
-
augeas {
|
60
|
-
"sshd_config_$name":
|
61
|
-
context => "/files/etc/ssh/sshd_config",
|
62
|
-
changes => "set $name $value",
|
63
|
-
onlyif => "get $name != $value",
|
64
|
-
# onlyif => "match $name/*[.='$value'] size == 0",
|
65
|
-
}
|
66
|
-
|
67
|
-
# Davids' replaceline version (to fix)
|
68
|
-
# replaceline {
|
69
|
-
# "sshd_config_$name":
|
70
|
-
# file => "/etc/ssh/sshd_config",
|
71
|
-
# pattern => "$name",
|
72
|
-
# replacement => "^$name $value",
|
73
|
-
# }
|
74
|
-
}
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (C) 2011 by Eivind Uggedal <eivind@uggedal.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
@@ -0,0 +1,13 @@
|
|
1
|
+
name 'uggedal-puppet-module-ufw'
|
2
|
+
version '1.0.0'
|
3
|
+
|
4
|
+
author 'Eivind Uggedal <eivind@uggedal.com>'
|
5
|
+
license 'MIT License'
|
6
|
+
project_page 'https://github.com/uggedal/puppet-module-ufw'
|
7
|
+
source 'git://github.com/uggedal/puppet-module-ufw.git'
|
8
|
+
summary 'Puppet UFW Module'
|
9
|
+
description 'Module for configuring UFW (Uncomplicated Firewall).
|
10
|
+
|
11
|
+
Tested on Debian GNU/Linux 6.0 Squeeze and Ubuntu 10.4 LTS with
|
12
|
+
Puppet 2.6. Patches for other operating systems are welcome.'
|
13
|
+
dependency 'puppetlabs/stdlib', '>=2.2.1'
|
@@ -0,0 +1,63 @@
|
|
1
|
+
Puppet UFW Module
|
2
|
+
=================
|
3
|
+
|
4
|
+
Module for configuring UFW (Uncomplicated Firewall).
|
5
|
+
|
6
|
+
Tested on Debian GNU/Linux 6.0 Squeeze and Ubuntu 10.4 LTS with
|
7
|
+
Puppet 2.6. Patches for other operating systems are welcome.
|
8
|
+
|
9
|
+
|
10
|
+
Installation
|
11
|
+
------------
|
12
|
+
|
13
|
+
Clone this repo to a ufw directory under your Puppet modules directory:
|
14
|
+
|
15
|
+
git clone git://github.com/uggedal/puppet-module-ufw.git ufw
|
16
|
+
|
17
|
+
If you don't have a Puppet Master you can create a manifest file
|
18
|
+
based on the notes below and run Puppet in stand-alone mode
|
19
|
+
providing the module directory you cloned this repo to:
|
20
|
+
|
21
|
+
puppet apply --modulepath=modules test_ufw.pp
|
22
|
+
|
23
|
+
|
24
|
+
Usage
|
25
|
+
-----
|
26
|
+
|
27
|
+
If you include the ufw class the package will be installed, the service
|
28
|
+
will be enabled, and all incomming connections will be denied:
|
29
|
+
|
30
|
+
include ufw
|
31
|
+
|
32
|
+
Note that you'll need to define a global search path for the `exec`
|
33
|
+
resource to make this module function properly. This should ideally be
|
34
|
+
placed in `manifests/site.pp`:
|
35
|
+
|
36
|
+
Exec {
|
37
|
+
path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
38
|
+
}
|
39
|
+
|
40
|
+
You can then allow certain connections:
|
41
|
+
|
42
|
+
ufw::allow { "allow-ssh-from-all":
|
43
|
+
port => 22,
|
44
|
+
}
|
45
|
+
|
46
|
+
ufw::allow { "allow-all-from-trusted":
|
47
|
+
from => "10.0.0.145",
|
48
|
+
}
|
49
|
+
|
50
|
+
ufw::allow { "allow-http-on-specific-interface":
|
51
|
+
port => 80,
|
52
|
+
ip => "10.0.0.20",
|
53
|
+
}
|
54
|
+
|
55
|
+
ufw::allow { "allow-dns-over-udp":
|
56
|
+
port => 53,
|
57
|
+
proto => "udp",
|
58
|
+
}
|
59
|
+
|
60
|
+
You can also rate limit certain ports (the IP is blocked if it initiates
|
61
|
+
6 or more connections within 30 seconds):
|
62
|
+
|
63
|
+
ufw::limit { 22: }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'puppet-lint/tasks/puppet-lint'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
retry
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
12
|
+
t.pattern = 'spec/*/*_spec.rb'
|
13
|
+
end
|
14
|
+
|
15
|
+
task :test => [:spec, :lint]
|
16
|
+
|
17
|
+
task :default => :test
|
@@ -0,0 +1,31 @@
|
|
1
|
+
define ufw::allow($proto='tcp', $port='all', $ip='', $from='any') {
|
2
|
+
|
3
|
+
if $::ipaddress_eth0 != undef {
|
4
|
+
$ipadr = $ip ? {
|
5
|
+
'' => $::ipaddress_eth0,
|
6
|
+
default => $ip,
|
7
|
+
}
|
8
|
+
} else {
|
9
|
+
$ipadr = 'any'
|
10
|
+
}
|
11
|
+
|
12
|
+
$from_match = $from ? {
|
13
|
+
'any' => 'Anywhere',
|
14
|
+
default => $from,
|
15
|
+
}
|
16
|
+
|
17
|
+
exec { "ufw-allow-${proto}-from-${from}-to-${ipadr}-port-${port}":
|
18
|
+
command => $port ? {
|
19
|
+
'all' => "ufw allow proto $proto from $from to $ipadr",
|
20
|
+
default => "ufw allow proto $proto from $from to $ipadr port $port",
|
21
|
+
},
|
22
|
+
unless => "$ipadr:$port" ? {
|
23
|
+
'any:all' => "ufw status | grep -E \" +ALLOW +$from_match\"",
|
24
|
+
/[0-9]:all$/ => "ufw status | grep -E \"$ipadr/$proto +ALLOW +$from_match\"",
|
25
|
+
/^any:[0-9]/ => "ufw status | grep -E \"$port/$proto +ALLOW +$from_match\"",
|
26
|
+
default => "ufw status | grep -E \"$ipadr $port/$proto +ALLOW +$from_match\"",
|
27
|
+
},
|
28
|
+
require => Exec['ufw-default-deny'],
|
29
|
+
before => Exec['ufw-enable'],
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
define ufw::deny($proto='tcp', $port='all', $ip='', $from='any') {
|
2
|
+
|
3
|
+
if $::ipaddress_eth0 != undef {
|
4
|
+
$ipadr = $ip ? {
|
5
|
+
'' => $::ipaddress_eth0,
|
6
|
+
default => $ip,
|
7
|
+
}
|
8
|
+
} else {
|
9
|
+
$ipadr = 'any'
|
10
|
+
}
|
11
|
+
|
12
|
+
$from_match = $from ? {
|
13
|
+
'any' => 'Anywhere',
|
14
|
+
default => "$from/$proto",
|
15
|
+
}
|
16
|
+
|
17
|
+
exec { "ufw-deny-${proto}-from-${from}-to-${ipadr}-port-${port}":
|
18
|
+
command => $port ? {
|
19
|
+
'all' => "ufw deny proto $proto from $from to $ipadr",
|
20
|
+
default => "ufw deny proto $proto from $from to $ipadr port $port",
|
21
|
+
},
|
22
|
+
unless => $port ? {
|
23
|
+
'all' => "ufw status | grep -E \"$ipadr/$proto +DENY +$from_match\"",
|
24
|
+
default => "ufw status | grep -E \"$ipadr $port/$proto +DENY +$from_match\"",
|
25
|
+
},
|
26
|
+
require => Exec['ufw-default-deny'],
|
27
|
+
before => Exec['ufw-enable'],
|
28
|
+
}
|
29
|
+
}
|
@@ -1,12 +1,24 @@
|
|
1
1
|
class ufw {
|
2
|
-
package{
|
3
|
-
ensure =>
|
2
|
+
package { 'ufw':
|
3
|
+
ensure => present,
|
4
4
|
}
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
command =>
|
10
|
-
|
5
|
+
|
6
|
+
Package['ufw'] -> Exec['ufw-default-deny'] -> Exec['ufw-enable']
|
7
|
+
|
8
|
+
exec { 'ufw-default-deny':
|
9
|
+
command => 'ufw default deny',
|
10
|
+
unless => 'ufw status verbose | grep "Default: deny (incoming), allow (outgoing)"',
|
11
11
|
}
|
12
|
-
|
12
|
+
|
13
|
+
exec { 'ufw-enable':
|
14
|
+
command => 'yes | ufw enable',
|
15
|
+
unless => 'ufw status | grep "Status: active"',
|
16
|
+
}
|
17
|
+
|
18
|
+
service { 'ufw':
|
19
|
+
ensure => running,
|
20
|
+
enable => true,
|
21
|
+
hasstatus => true,
|
22
|
+
subscribe => Package['ufw'],
|
23
|
+
}
|
24
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "uggedal-puppet-module-ufw",
|
3
|
+
"author": "Eivind Uggedal \u003ceivind@uggedal.com\u003e",
|
4
|
+
"description": "Module for configuring UFW (Uncomplicated Firewall).\n\nTested on Debian GNU/Linux 6.0 Squeeze and Ubuntu 10.4 LTS with\nPuppet 2.6. Patches for other operating systems are welcome.",
|
5
|
+
"license": "MIT License",
|
6
|
+
"project_page": "https://github.com/uggedal/puppet-module-ufw",
|
7
|
+
"source": "git://github.com/uggedal/puppet-module-ufw.git",
|
8
|
+
"summary": "Puppet UFW Module",
|
9
|
+
"version": "1.0.0",
|
10
|
+
"checksums": {
|
11
|
+
"Gemfile": "7a90ba90918a5972eb038190feaf7fb4",
|
12
|
+
"LICENSE": "2d9c14720c9adef6ab3197a70adb690c",
|
13
|
+
"Modulefile": "996b93de77287312124328bf7aa9f6dd",
|
14
|
+
"README.md": "361ee8c51c9ab4c2983f100dbc500ace",
|
15
|
+
"Rakefile": "30135290361360248d8139853a15c8a2",
|
16
|
+
"manifests/allow.pp": "2d6bcf6fbd6565d5c523feecfa5a0a2f",
|
17
|
+
"manifests/deny.pp": "99d3a9e0415b1b3c37114acd51caedb8",
|
18
|
+
"manifests/init.pp": "fa6506b5c8d4926453c2a9539ef0c65a",
|
19
|
+
"manifests/limit.pp": "096c50250cbdbe4401ceae423714ea67",
|
20
|
+
"spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c",
|
21
|
+
"spec/spec_helper.rb": "ca19ec4f451ebc7fdb035b52eae6e909",
|
22
|
+
"tests/allow.pp": "6c792330a86393231d9a5c5a2e0e9949",
|
23
|
+
"tests/deny.pp": "96377cee0084b96c14ff1a828961946f",
|
24
|
+
"tests/init.pp": "0571b366ccfc29695d3df3651845a9b3",
|
25
|
+
"tests/limit.pp": "6e4fe2cae76ef2488dc9e6263736e162"
|
26
|
+
},
|
27
|
+
"dependencies": [
|
28
|
+
{
|
29
|
+
"name": "puppetlabs/stdlib",
|
30
|
+
"version_requirement": "\u003e\u003d2.2.1"
|
31
|
+
}
|
32
|
+
]
|
33
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
dir = Pathname.new(__FILE__).parent
|
3
|
+
$LOAD_PATH.unshift(dir, dir + 'lib', dir + '../lib')
|
4
|
+
|
5
|
+
require 'mocha'
|
6
|
+
require 'puppet'
|
7
|
+
gem 'rspec', '=1.2.9'
|
8
|
+
require 'spec/autorun'
|
9
|
+
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
config.mock_with :mocha
|
12
|
+
end
|
13
|
+
|
14
|
+
# We need this because the RAL uses 'should' as a method. This
|
15
|
+
# allows us the same behaviour but with a different method name.
|
16
|
+
class Object
|
17
|
+
alias :must :should
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class ufw {
|
2
|
+
package{ "ufw":
|
3
|
+
ensure => installed,
|
4
|
+
}
|
5
|
+
|
6
|
+
exec { "Set default rules":
|
7
|
+
user => "root",
|
8
|
+
path => "/usr/bin:/usr/sbin:/bin",
|
9
|
+
command => "ufw allow to 0.0.0.0/0 port 80 && ufw allow to 0.0.0.0/0 port 443 && ufw allow to 0.0.0.0/0 port 3000 && ufw allow 10000:10020/tcp && ufw allow to 0.0.0.0/0 port 22",
|
10
|
+
require => Package["ufw"],
|
11
|
+
}
|
12
|
+
}
|
data/puppet/site.pp
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: provizioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.18
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -217,17 +217,29 @@ files:
|
|
217
217
|
- puppet/modules/rvm/manifests/definitions/system_user.pp
|
218
218
|
- puppet/modules/rvm/manifests/init.pp
|
219
219
|
- puppet/modules/rvm/templates/passenger-apache.conf.erb
|
220
|
-
- puppet/modules/ssh/README
|
221
|
-
- puppet/modules/ssh/manifests/auth.pp
|
222
|
-
- puppet/modules/ssh/manifests/auth.pp.good
|
223
|
-
- puppet/modules/ssh/manifests/eal4.pp
|
224
220
|
- puppet/modules/ssh/manifests/init.pp
|
225
221
|
- puppet/modules/stow/manifests/init.pp
|
226
222
|
- puppet/modules/sudo/files/sudoers
|
227
223
|
- puppet/modules/sudo/manifests/init.pp
|
228
224
|
- puppet/modules/sudo/manifests/install.pp
|
229
225
|
- puppet/modules/sudo/manifests/sudoers.pp
|
226
|
+
- puppet/modules/ufw.old/manifests/init.pp
|
227
|
+
- puppet/modules/ufw/Gemfile
|
228
|
+
- puppet/modules/ufw/LICENSE
|
229
|
+
- puppet/modules/ufw/Modulefile
|
230
|
+
- puppet/modules/ufw/README.md
|
231
|
+
- puppet/modules/ufw/Rakefile
|
232
|
+
- puppet/modules/ufw/manifests/allow.pp
|
233
|
+
- puppet/modules/ufw/manifests/deny.pp
|
230
234
|
- puppet/modules/ufw/manifests/init.pp
|
235
|
+
- puppet/modules/ufw/manifests/limit.pp
|
236
|
+
- puppet/modules/ufw/metadata.json
|
237
|
+
- puppet/modules/ufw/spec/spec.opts
|
238
|
+
- puppet/modules/ufw/spec/spec_helper.rb
|
239
|
+
- puppet/modules/ufw/tests/allow.pp
|
240
|
+
- puppet/modules/ufw/tests/deny.pp
|
241
|
+
- puppet/modules/ufw/tests/init.pp
|
242
|
+
- puppet/modules/ufw/tests/limit.pp
|
231
243
|
- puppet/modules/webmin/manifests/init.pp
|
232
244
|
- puppet/roles/blank.pp
|
233
245
|
- puppet/site.pp
|
data/puppet/modules/ssh/README
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# Fake null class
|
2
|
-
|
3
|
-
class ssh::auth {
|
4
|
-
|
5
|
-
define key ($ensure = "present", $filename = "", $force = false, $group = "puppet", $home = "", $keytype = "rsa", $length = 2048, $maxdays = "", $mindate = "", $options = "", $user = "") {
|
6
|
-
|
7
|
-
}
|
8
|
-
|
9
|
-
|
10
|
-
class keymaster {
|
11
|
-
} # class keymaster
|
12
|
-
|
13
|
-
|
14
|
-
define client ($ensure = "", $filename = "", $group = "", $home = "", $user = "") {
|
15
|
-
} # define client
|
16
|
-
|
17
|
-
|
18
|
-
define server ($ensure = "", $group = "", $home = "", $options = "", $user = "") {
|
19
|
-
} # define server
|
20
|
-
|
21
|
-
} # class ssh::auth
|
22
|
-
|
23
|
-
|
24
|
-
define ssh_auth_key_master ($ensure, $force, $keytype, $length, $maxdays, $mindate) {
|
25
|
-
|
26
|
-
} # define ssh_auth_key_master
|
27
|
-
|
28
|
-
define ssh_auth_key_client ($ensure, $filename, $group, $home, $user) {
|
29
|
-
|
30
|
-
} # define ssh_auth_key_client
|
31
|
-
|
32
|
-
define ssh_auth_key_server ($ensure, $group, $home, $options, $user) {
|
33
|
-
|
34
|
-
} # define ssh_auth_key_server
|
35
|
-
|
36
|
-
|
37
|
-
define ssh_auth_key_namecheck ($parm, $value) {
|
38
|
-
} # define namecheck
|
39
|
-
|
@@ -1,340 +0,0 @@
|
|
1
|
-
# This class has been written by Andrew E. Schulman
|
2
|
-
# It has been imported in Example42 under the terms of GPL3
|
3
|
-
#
|
4
|
-
# =========
|
5
|
-
# ssh::auth
|
6
|
-
# =========
|
7
|
-
#
|
8
|
-
# The latest official release and documentation for ssh::auth can always
|
9
|
-
# be found at http://reductivelabs.com/trac/puppet/wiki/Recipes/ModuleSSHAuth .
|
10
|
-
#
|
11
|
-
# Version: 0.3.2
|
12
|
-
# Release date: 2009-12-29
|
13
|
-
|
14
|
-
class ssh::auth {
|
15
|
-
|
16
|
-
$keymaster_storage = "/var/lib/keys"
|
17
|
-
|
18
|
-
Exec { path => "/usr/bin:/usr/sbin:/bin:/sbin" }
|
19
|
-
Notify { withpath => false }
|
20
|
-
|
21
|
-
|
22
|
-
##########################################################################
|
23
|
-
|
24
|
-
|
25
|
-
# ssh::auth::key
|
26
|
-
|
27
|
-
# Declare keys. The approach here is just to define a bunch of
|
28
|
-
# virtual resources, representing key files on the keymaster, client,
|
29
|
-
# and server. The virtual keys are then realized by
|
30
|
-
# ssh::auth::{keymaster,client,server}, respectively. The reason for
|
31
|
-
# doing things that way is that it makes ssh::auth::key into a "one
|
32
|
-
# stop shop" where users can declare their keys with all of their
|
33
|
-
# parameters, whether those parameters apply to the keymaster, server,
|
34
|
-
# or client. The real work of creating, installing, and removing keys
|
35
|
-
# is done in the private definitions called by the virtual resources:
|
36
|
-
# ssh_auth_key_{master,server,client}.
|
37
|
-
|
38
|
-
define key ($ensure = "present", $filename = "", $force = false, $group = "puppet", $home = "", $keytype = "rsa", $length = 2048, $maxdays = "", $mindate = "", $options = "", $user = "") {
|
39
|
-
|
40
|
-
ssh_auth_key_namecheck { "${title}-title": parm => "title", value => $title }
|
41
|
-
|
42
|
-
# apply defaults
|
43
|
-
$_filename = $filename ? { "" => "id_${keytype}", default => $filename }
|
44
|
-
$_length = $keytype ? { "rsa" => $length, "dsa" => 1024 }
|
45
|
-
$_user = $user ? {
|
46
|
-
"" => regsubst($title, '^([^@]*)@?.*$', '\1'),
|
47
|
-
default => $user,
|
48
|
-
}
|
49
|
-
$_home = $home ? { "" => "/home/$_user", default => $home }
|
50
|
-
|
51
|
-
ssh_auth_key_namecheck { "${title}-filename": parm => "filename", value => $_filename }
|
52
|
-
|
53
|
-
@ssh_auth_key_master { $title:
|
54
|
-
ensure => $ensure,
|
55
|
-
force => $force,
|
56
|
-
keytype => $keytype,
|
57
|
-
length => $_length,
|
58
|
-
maxdays => $maxdays,
|
59
|
-
mindate => $mindate,
|
60
|
-
}
|
61
|
-
@ssh_auth_key_client { $title:
|
62
|
-
ensure => $ensure,
|
63
|
-
filename => $_filename,
|
64
|
-
group => $group,
|
65
|
-
home => $_home,
|
66
|
-
user => $_user,
|
67
|
-
}
|
68
|
-
@ssh_auth_key_server { $title:
|
69
|
-
ensure => $ensure,
|
70
|
-
group => $group,
|
71
|
-
home => $_home,
|
72
|
-
options => $options,
|
73
|
-
user => $_user,
|
74
|
-
}
|
75
|
-
}
|
76
|
-
|
77
|
-
|
78
|
-
##########################################################################
|
79
|
-
|
80
|
-
|
81
|
-
# ssh::auth::keymaster
|
82
|
-
#
|
83
|
-
# Keymaster host:
|
84
|
-
# Create key storage; create, regenerate, and remove key pairs
|
85
|
-
|
86
|
-
class keymaster {
|
87
|
-
|
88
|
-
# Set up key storage
|
89
|
-
|
90
|
-
file { $ssh::auth::keymaster_storage:
|
91
|
-
ensure => directory,
|
92
|
-
owner => puppet,
|
93
|
-
group => puppet,
|
94
|
-
mode => 644,
|
95
|
-
}
|
96
|
-
|
97
|
-
# Realize all virtual master keys
|
98
|
-
Ssh_auth_key_master <| |>
|
99
|
-
|
100
|
-
} # class keymaster
|
101
|
-
|
102
|
-
|
103
|
-
##########################################################################
|
104
|
-
|
105
|
-
|
106
|
-
# ssh::auth::client
|
107
|
-
#
|
108
|
-
# Install generated key pairs onto clients
|
109
|
-
|
110
|
-
define client ($ensure = "", $filename = "", $group = "", $home = "", $user = "") {
|
111
|
-
|
112
|
-
# Realize the virtual client keys.
|
113
|
-
# Override the defaults set in ssh::auth::key, as needed.
|
114
|
-
if $ensure { Ssh_auth_key_client <| title == $title |> { ensure => $ensure } }
|
115
|
-
if $filename { Ssh_auth_key_client <| title == $title |> { filename => $filename } }
|
116
|
-
if $group { Ssh_auth_key_client <| title == $title |> { group => $group } }
|
117
|
-
|
118
|
-
if $user { Ssh_auth_key_client <| title == $title |> { user => $user, home => "/home/$user" } }
|
119
|
-
if $home { Ssh_auth_key_client <| title == $title |> { home => $home } }
|
120
|
-
|
121
|
-
realize Ssh_auth_key_client[$title]
|
122
|
-
|
123
|
-
} # define client
|
124
|
-
|
125
|
-
|
126
|
-
##########################################################################
|
127
|
-
|
128
|
-
|
129
|
-
# ssh::auth::server
|
130
|
-
#
|
131
|
-
# Install public keys onto clients
|
132
|
-
|
133
|
-
define server ($ensure = "", $group = "", $home = "", $options = "", $user = "") {
|
134
|
-
|
135
|
-
# Realize the virtual server keys.
|
136
|
-
# Override the defaults set in ssh::auth::key, as needed.
|
137
|
-
if $ensure { Ssh_auth_key_server <| title == $title |> { ensure => $ensure } }
|
138
|
-
if $group { Ssh_auth_key_server <| title == $title |> { group => $group } }
|
139
|
-
if $options { Ssh_auth_key_server <| title == $title |> { options => $options } }
|
140
|
-
|
141
|
-
if $user { Ssh_auth_key_server <| title == $title |> { user => $user, home => "/home/$user" } }
|
142
|
-
if $home { Ssh_auth_key_server <| title == $title |> { home => $home } }
|
143
|
-
|
144
|
-
realize Ssh_auth_key_server[$title]
|
145
|
-
|
146
|
-
} # define server
|
147
|
-
|
148
|
-
} # class ssh::auth
|
149
|
-
|
150
|
-
|
151
|
-
##########################################################################
|
152
|
-
|
153
|
-
|
154
|
-
# ssh_auth_key_master
|
155
|
-
#
|
156
|
-
# Create/regenerate/remove a key pair on the keymaster.
|
157
|
-
# This definition is private, i.e. it is not intended to be called directly by users.
|
158
|
-
# ssh::auth::key calls it to create virtual keys, which are realized in ssh::auth::keymaster.
|
159
|
-
|
160
|
-
define ssh_auth_key_master ($ensure, $force, $keytype, $length, $maxdays, $mindate) {
|
161
|
-
|
162
|
-
Exec { path => "/usr/bin:/usr/sbin:/bin:/sbin" }
|
163
|
-
File {
|
164
|
-
owner => puppet,
|
165
|
-
group => puppet,
|
166
|
-
mode => 600,
|
167
|
-
}
|
168
|
-
|
169
|
-
$keydir = "${ssh::auth::keymaster_storage}/${title}"
|
170
|
-
$keyfile = "${keydir}/key"
|
171
|
-
|
172
|
-
file {
|
173
|
-
"$keydir":
|
174
|
-
ensure => directory,
|
175
|
-
mode => 644;
|
176
|
-
"$keyfile":
|
177
|
-
ensure => $ensure;
|
178
|
-
"${keyfile}.pub":
|
179
|
-
ensure => $ensure,
|
180
|
-
mode => 644;
|
181
|
-
}
|
182
|
-
|
183
|
-
if $ensure == "present" {
|
184
|
-
|
185
|
-
# Remove the existing key pair, if
|
186
|
-
# * $force is true, or
|
187
|
-
# * $maxdays or $mindate criteria aren't met, or
|
188
|
-
# * $keytype or $length have changed
|
189
|
-
|
190
|
-
$keycontent = file("${keyfile}.pub", "/dev/null")
|
191
|
-
if $keycontent {
|
192
|
-
|
193
|
-
if $force {
|
194
|
-
$reason = "force=true"
|
195
|
-
}
|
196
|
-
if !$reason and $mindate and generate("/usr/bin/find", $keyfile, "!", "-newermt", "${mindate}") {
|
197
|
-
$reason = "created before ${mindate}"
|
198
|
-
}
|
199
|
-
if !$reason and $maxdays and generate("/usr/bin/find", $keyfile, "-mtime", "+${maxdays}") {
|
200
|
-
$reason = "older than ${maxdays} days"
|
201
|
-
}
|
202
|
-
if !$reason and $keycontent =~ /^ssh-... [^ ]+ (...) (\d+)$/ {
|
203
|
-
if $keytype != $1 { $reason = "keytype changed: $1 -> $keytype" }
|
204
|
-
else { if $length != $2 { $reason = "length changed: $2 -> $length" } }
|
205
|
-
}
|
206
|
-
if $reason {
|
207
|
-
exec { "Revoke previous key ${title}: ${reason}":
|
208
|
-
command => "rm $keyfile ${keyfile}.pub",
|
209
|
-
before => Exec["Create key $title: $keytype, $length bits"],
|
210
|
-
}
|
211
|
-
}
|
212
|
-
}
|
213
|
-
|
214
|
-
# Create the key pair.
|
215
|
-
# We "repurpose" the comment field in public keys on the keymaster to
|
216
|
-
# store data about the key, i.e. $keytype and $length. This avoids
|
217
|
-
# having to rerun ssh-keygen -l on every key at every run to determine
|
218
|
-
# the key length.
|
219
|
-
exec { "Create key $title: $keytype, $length bits":
|
220
|
-
command => "ssh-keygen -t ${keytype} -b ${length} -f ${keyfile} -C \"${keytype} ${length}\" -N \"\"",
|
221
|
-
user => "puppet",
|
222
|
-
group => "puppet",
|
223
|
-
creates => $keyfile,
|
224
|
-
require => File[$keydir],
|
225
|
-
before => File[$keyfile, "${keyfile}.pub"],
|
226
|
-
}
|
227
|
-
|
228
|
-
} # if $ensure == "present"
|
229
|
-
|
230
|
-
} # define ssh_auth_key_master
|
231
|
-
|
232
|
-
|
233
|
-
##########################################################################
|
234
|
-
|
235
|
-
|
236
|
-
# ssh_auth_key_client
|
237
|
-
#
|
238
|
-
# Install a key pair into a user's account.
|
239
|
-
# This definition is private, i.e. it is not intended to be called directly by users.
|
240
|
-
|
241
|
-
define ssh_auth_key_client ($ensure, $filename, $group, $home, $user) {
|
242
|
-
|
243
|
-
File {
|
244
|
-
owner => $user,
|
245
|
-
group => $group,
|
246
|
-
mode => 600,
|
247
|
-
require => User[$user],
|
248
|
-
}
|
249
|
-
|
250
|
-
$key_src_file = "${ssh::auth::keymaster_storage}/${title}/key" # on the keymaster
|
251
|
-
$key_tgt_file = "${home}/.ssh/${filename}" # on the client
|
252
|
-
|
253
|
-
$key_src_content_pub = file("${key_src_file}.pub", "/dev/null")
|
254
|
-
if $ensure == "absent" or $key_src_content_pub =~ /^(ssh-...) ([^ ]+)/ {
|
255
|
-
$keytype = $1
|
256
|
-
$modulus = $2
|
257
|
-
file {
|
258
|
-
$key_tgt_file:
|
259
|
-
ensure => $ensure,
|
260
|
-
content => file($key_src_file, "/dev/null");
|
261
|
-
"${key_tgt_file}.pub":
|
262
|
-
ensure => $ensure,
|
263
|
-
content => "$keytype $modulus $title\n",
|
264
|
-
mode => 644;
|
265
|
-
}
|
266
|
-
} else {
|
267
|
-
notify { "Private key file $key_src_file for key $title not found on keymaster; skipping ensure => present": }
|
268
|
-
}
|
269
|
-
|
270
|
-
} # define ssh_auth_key_client
|
271
|
-
|
272
|
-
|
273
|
-
##########################################################################
|
274
|
-
|
275
|
-
|
276
|
-
# ssh_auth_key_server
|
277
|
-
#
|
278
|
-
# Install a public key into a server user's authorized_keys(5) file.
|
279
|
-
# This definition is private, i.e. it is not intended to be called directly by users.
|
280
|
-
|
281
|
-
define ssh_auth_key_server ($ensure, $group, $home, $options, $user) {
|
282
|
-
|
283
|
-
# on the keymaster:
|
284
|
-
$key_src_dir = "${ssh::auth::keymaster_storage}/${title}"
|
285
|
-
$key_src_file = "${key_src_dir}/key.pub"
|
286
|
-
# on the server:
|
287
|
-
$key_tgt_file = "${home}/.ssh/authorized_keys"
|
288
|
-
|
289
|
-
File {
|
290
|
-
owner => $user,
|
291
|
-
group => $group,
|
292
|
-
require => User[$user],
|
293
|
-
mode => 600,
|
294
|
-
}
|
295
|
-
Ssh_authorized_key {
|
296
|
-
user => $user,
|
297
|
-
target => $key_tgt_file,
|
298
|
-
}
|
299
|
-
|
300
|
-
if $ensure == "absent" {
|
301
|
-
ssh_authorized_key { $title: ensure => "absent" }
|
302
|
-
}
|
303
|
-
else {
|
304
|
-
$key_src_content = file($key_src_file, "/dev/null")
|
305
|
-
if ! $key_src_content {
|
306
|
-
notify { "Public key file $key_src_file for key $title not found on keymaster; skipping ensure => present": }
|
307
|
-
} else { if $ensure == "present" and $key_src_content !~ /^(ssh-...) ([^ ]*)/ {
|
308
|
-
err("Can't parse public key file $key_src_file")
|
309
|
-
notify { "Can't parse public key file $key_src_file for key $title on the keymaster: skipping ensure => $ensure": }
|
310
|
-
} else {
|
311
|
-
$keytype = $1
|
312
|
-
$modulus = $2
|
313
|
-
ssh_authorized_key { $title:
|
314
|
-
ensure => "present",
|
315
|
-
type => $keytype,
|
316
|
-
key => $modulus,
|
317
|
-
options => $options ? { "" => undef, default => $options },
|
318
|
-
}
|
319
|
-
}} # if ... else ... else
|
320
|
-
} # if ... else
|
321
|
-
|
322
|
-
} # define ssh_auth_key_server
|
323
|
-
|
324
|
-
|
325
|
-
##########################################################################
|
326
|
-
|
327
|
-
|
328
|
-
# ssh_auth_key_namecheck
|
329
|
-
#
|
330
|
-
# Check a name (e.g. key title or filename) for the allowed form
|
331
|
-
|
332
|
-
define ssh_auth_key_namecheck ($parm, $value) {
|
333
|
-
if $value !~ /^[A-Za-z0-9]/ {
|
334
|
-
fail("ssh::auth::key: $parm '$value' not allowed: must begin with a letter or digit")
|
335
|
-
}
|
336
|
-
if $value !~ /^[A-Za-z0-9_.:@-]+$/ {
|
337
|
-
fail("ssh::auth::key: $parm '$value' not allowed: may only contain the characters A-Za-z0-9_.:@-")
|
338
|
-
}
|
339
|
-
} # define namecheck
|
340
|
-
|
@@ -1,69 +0,0 @@
|
|
1
|
-
class ssh::eal4 {
|
2
|
-
|
3
|
-
# Cripto settings
|
4
|
-
ssh::config { Protocol:
|
5
|
-
value => "2",
|
6
|
-
}
|
7
|
-
|
8
|
-
ssh::config { Ciphers:
|
9
|
-
value => "3des-cbc",
|
10
|
-
}
|
11
|
-
|
12
|
-
# X11 forwarding (You MAY allow)
|
13
|
-
ssh::config { X11Forwarding:
|
14
|
-
value => "no",
|
15
|
-
}
|
16
|
-
|
17
|
-
|
18
|
-
# Login settings
|
19
|
-
ssh::config { UsePAM:
|
20
|
-
value => "yes",
|
21
|
-
}
|
22
|
-
|
23
|
-
ssh::config { PermitRootLogin:
|
24
|
-
value => "no",
|
25
|
-
}
|
26
|
-
|
27
|
-
ssh::config { PermitEmptyPasswords:
|
28
|
-
value => "no",
|
29
|
-
}
|
30
|
-
|
31
|
-
ssh::config { PasswordAuthentication:
|
32
|
-
value => "no",
|
33
|
-
}
|
34
|
-
|
35
|
-
ssh::config { ChallengeResponseAuthentication:
|
36
|
-
value => "yes",
|
37
|
-
}
|
38
|
-
|
39
|
-
# Disables other authentication methods (you MAY want to change some of these settings)
|
40
|
-
|
41
|
-
ssh::config { IgnoreRhosts:
|
42
|
-
value => "yes",
|
43
|
-
}
|
44
|
-
|
45
|
-
ssh::config { HostbasedAuthentication:
|
46
|
-
value => "no",
|
47
|
-
}
|
48
|
-
|
49
|
-
ssh::config { PubkeyAuthentication:
|
50
|
-
value => "no",
|
51
|
-
}
|
52
|
-
|
53
|
-
ssh::config { RhostsRSAAuthentication:
|
54
|
-
value => "no",
|
55
|
-
}
|
56
|
-
|
57
|
-
ssh::config { RSAAuthentication:
|
58
|
-
value => "no",
|
59
|
-
}
|
60
|
-
|
61
|
-
ssh::config { KerberosAuthentication:
|
62
|
-
value => "no",
|
63
|
-
}
|
64
|
-
|
65
|
-
ssh::config { GSSAPIAuthentication:
|
66
|
-
value => "no",
|
67
|
-
}
|
68
|
-
|
69
|
-
}
|