summaryrefslogtreecommitdiffstats
path: root/roles
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2016-05-22 17:21:16 +0200
committerGuilhem Moulin <guilhem@fripost.org>2016-05-22 17:53:58 +0200
commit8cf4032ecec5b9f58d829e89f231179170432539 (patch)
tree24947cc32af42e98bca3ed0b6319c69c77321262 /roles
parentf7a5a19edc504980e2e8f93ab027162756710d59 (diff)
Tunnel bacula (dir → {fd,sd} and fd → sd) traffic through IPSec.
Diffstat (limited to 'roles')
-rw-r--r--roles/bacula-dir/handlers/main.yml3
-rw-r--r--roles/bacula-dir/tasks/main.yml69
-rw-r--r--roles/bacula-dir/templates/etc/bacula/bacula-dir.conf.j223
-rw-r--r--roles/bacula-dir/templates/etc/stunnel/bacula-dir.conf.j281
-rw-r--r--roles/bacula-sd/files/lib/systemd/system/bacula-sd.service2
-rw-r--r--roles/bacula-sd/handlers/main.yml3
-rw-r--r--roles/bacula-sd/tasks/main.yml58
-rw-r--r--roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j25
-rw-r--r--roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j264
-rw-r--r--roles/common/files/lib/systemd/system/bacula-fd.service2
-rw-r--r--roles/common/handlers/main.yml3
-rw-r--r--roles/common/tasks/bacula.yml72
-rw-r--r--roles/common/templates/etc/bacula/bacula-fd.conf.j26
-rw-r--r--roles/common/templates/etc/iptables/services.j210
-rw-r--r--roles/common/templates/etc/stunnel/bacula-fd.conf.j273
15 files changed, 14 insertions, 460 deletions
diff --git a/roles/bacula-dir/handlers/main.yml b/roles/bacula-dir/handlers/main.yml
index 778a1c4..3f3c1bc 100644
--- a/roles/bacula-dir/handlers/main.yml
+++ b/roles/bacula-dir/handlers/main.yml
@@ -1,9 +1,6 @@
---
- name: systemctl daemon-reload
command: /bin/systemctl daemon-reload
-- name: Restart stunnel@bacula-dir
- service: name=stunnel4@bacula-dir state=restarted
-
- name: Restart bacula-director
service: name=bacula-director state=restarted
diff --git a/roles/bacula-dir/tasks/main.yml b/roles/bacula-dir/tasks/main.yml
index 8d182d2..30a25c1 100644
--- a/roles/bacula-dir/tasks/main.yml
+++ b/roles/bacula-dir/tasks/main.yml
@@ -1,89 +1,20 @@
-- name: Create /etc/stunnel/certs
- file: path=/etc/stunnel/certs
- state=directory
- owner=root group=root
- mode=0755
-
-- name: Generate a private key and a X.509 certificate for Bacula Dir
- command: genkeypair.sh x509
- --pubkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-dir.pem
- --privkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-dir.key
- --ou=BaculaDir --cn={{ inventory_hostname }} --dns={{ inventory_hostname }}
- -t rsa -b 4096 -h sha512
- register: r1
- changed_when: r1.rc == 0
- failed_when: r1.rc > 1
- notify:
- - Restart stunnel@bacula-dir
- tags:
- - genkey
-
-- name: Fetch Bacula Dir X.509 certificate
- # Ensure we don't fetch private data
- become: False
- fetch_cmd: cmd="openssl x509"
- stdin=/etc/stunnel/certs/{{ inventory_hostname_short }}-dir.pem
- dest=certs/bacula/{{ inventory_hostname_short }}-dir.pem
- tags:
- - genkey
-
-- name: Copy Bacula SD X.509 certificates
- copy: src=certs/bacula/{{ hostvars[item].inventory_hostname_short }}-sd.pem
- dest=/etc/stunnel/certs/
- owner=root group=root
- mode=0644
- with_items: "{{ groups['bacula-sd'] | difference([inventory_hostname]) | sort }}"
- register: r2
- notify:
- - Restart stunnel@bacula-dir
-
-- name: Copy Bacula FD X.509 certificates
- copy: src=certs/bacula/{{ hostvars[item].inventory_hostname_short }}-fd.pem
- dest=/etc/stunnel/certs/
- owner=root group=root
- mode=0644
- with_items: "{{ groups.all | difference([inventory_hostname]) | sort }}"
- register: r3
- notify:
- - Restart stunnel@bacula-dir
-
-- name: Configure stunnel
- template: src=etc/stunnel/bacula-dir.conf.j2
- dest=/etc/stunnel/bacula-dir.conf
- owner=root group=root
- mode=0644
- register: r4
- notify:
- - Restart stunnel@bacula-dir
-
-- name: Enable stunnel@bacula-dir
- service: name=stunnel4@bacula-dir enabled=yes
-
-- name: Start stunnel@bacula-dir
- service: name=stunnel4@bacula-dir state=started
- when: not (r1.changed or r2.changed or r3.changed or r4.changed)
-
-- meta: flush_handlers
-
-
-
- name: Install bacula-director
apt: pkg={{ item }}
with_items:
- bacula-console
- bacula-director-mysql
- name: Create a 'bacula' SQL user
mysql_user2: name=bacula password= auth_plugin=auth_socket
state=present
notify:
- Restart bacula-director
# Create with:
# echo bconsole $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-dir
# echo $sd-sd $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-dir
# echo $fd-fd $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-dir
#
# then add the password for each FD / SD:
# echo $director-dir $password | sudo tee /etc/bacula/passwords-sd
# echo $director-dir $password | sudo tee /etc/bacula/passwords-fd
diff --git a/roles/bacula-dir/templates/etc/bacula/bacula-dir.conf.j2 b/roles/bacula-dir/templates/etc/bacula/bacula-dir.conf.j2
index 42b5f74..046ba01 100644
--- a/roles/bacula-dir/templates/etc/bacula/bacula-dir.conf.j2
+++ b/roles/bacula-dir/templates/etc/bacula/bacula-dir.conf.j2
@@ -1,39 +1,37 @@
#
# Default Bacula Director Configuration file
# For Bacula release 5.2.6 (21 February 2012) -- debian jessie/sid
#
Director { # define myself
Name = {{ inventory_hostname_short }}-dir
@|"sed -n '/^bconsole\\s/ {s//Password = /p; q}' /etc/bacula/passwords-dir"
Messages = Daemon
Working Directory = /var/lib/bacula
Pid Directory = /var/run/bacula
QueryFile = "/etc/bacula/scripts/query.sql"
Maximum Concurrent Jobs = 1
DirAddress = 127.0.0.1
- DirSourceAddress = 127.0.0.1
DirPort = 9101
FDConnectTimeout = 5 min
SDConnectTimeout = 5 min
- Heartbeat Interval = 1 min
}
JobDefs {
Name = DefaultJob
Type = Backup
Level = Incremental
Storage = {{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd
Messages = Standard
Accurate = yes
#Rerun Failed Levels = yes
Reschedule On Error = yes
Reschedule Interval = 17 min
Reschedule Times = 3
Pool = Default
Priority = 10
Write Bootstrap = "/var/lib/bacula/%n.bsr"
}
JobDefs {
@@ -348,72 +346,67 @@ FileSet {
Exclude = yes
}
File = /var/lib/bacula/tmp
}
}
FileSet {
Name = Mailboxes
Include {
Options {
signature = SHA1
verify = pins1
}
File = /home/mail/virtual
File = /home/mail/spamspool
}
}
# Client (File Services) to backup
-{% set n = 0 %}
{% for fd in groups.all | sort %}
-{% set n = n + 1 %}
Client {
Name = {{ hostvars[fd].inventory_hostname_short }}-fd
-{% if fd == inventory_hostname %}
- Address = 127.0.0.1
-{% else %}
- Address = 127.0.{{ n }}.1
-{% endif %}
- FDPort = 9112
+ Address = {{ ipsec[ hostvars[fd].inventory_hostname_short ] }}
+ FDPort = 9102
Catalog = MyCatalog
@|"sed -n '/^{{ hostvars[fd].inventory_hostname_short }}-fd\\s/ {s//Password = /p; q}' /etc/bacula/passwords-dir"
File Retention = 4 months
Job Retention = 5 months
AutoPrune = yes
#Maximum Bandwidth = 1mb/s
}
{% endfor %}
# Definition of file storage device
+{% for sd in groups['bacula-sd'] | sort %}
Storage {
- Name = {{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd
- Address = 127.0.0.1
- SDPort = 9113
- @|"sed -n '/^{{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd\\s/ {s//Password = /p; q}' /etc/bacula/passwords-dir"
+ Name = {{ hostvars[sd].inventory_hostname_short }}-sd
+ Address = {{ ipsec[ hostvars[sd].inventory_hostname_short ] }}
+ SDPort = 9103
+ @|"sed -n '/^{{ hostvars[sd].inventory_hostname_short }}-sd\\s/ {s//Password = /p; q}' /etc/bacula/passwords-dir"
Device = FileStorage
Media Type = File
- Heartbeat Interval = 1 min
}
+{% endfor %}
# Default pool definition
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 3 months
Maximum Volume Bytes = 5GB
Label Format = "Default-${NumVols:p/4/0/r}"
}
# Scratch pool definition
Pool {
Name = Scratch
Pool Type = Backup
Maximum Volume Bytes = 5GB
Label Format = "Scratch-${NumVols:p/4/0/r}"
}
diff --git a/roles/bacula-dir/templates/etc/stunnel/bacula-dir.conf.j2 b/roles/bacula-dir/templates/etc/stunnel/bacula-dir.conf.j2
deleted file mode 100644
index 6219aff..0000000
--- a/roles/bacula-dir/templates/etc/stunnel/bacula-dir.conf.j2
+++ /dev/null
@@ -1,81 +0,0 @@
-; **************************************************************************
-; * Global options *
-; **************************************************************************
-
-; setuid()/setgid() to the specified user/group in daemon mode
-setuid = stunnel4
-setgid = stunnel4
-
-; PID is created inside the chroot jail
-pid =
-foreground = yes
-
-; Only log messages at severity warning (4) and higher
-debug = 4
-
-; **************************************************************************
-; * Service defaults may also be specified in individual service sections *
-; **************************************************************************
-
-; Certificate/key is needed in server mode and optional in client mode
-cert = /etc/stunnel/certs/{{ inventory_hostname_short }}-dir.pem
-key = /etc/stunnel/certs/{{ inventory_hostname_short }}-dir.key
-client = yes
-socket = a:SO_BINDTODEVICE=lo
-
-socket = l:TCP_NODELAY=1
-socket = l:SO_KEEPALIVE=1
-socket = l:TCP_KEEPIDLE=60
-socket = l:TCP_KEEPINTVL=15
-socket = l:TCP_KEEPCNT=116
-
-socket = r:TCP_NODELAY=1
-socket = r:SO_KEEPALIVE=1
-socket = r:TCP_KEEPIDLE=60
-socket = r:TCP_KEEPINTVL=15
-socket = r:TCP_KEEPCNT=116
-
-; Prevent MITM attacks
-verify = 4
-
-; Disable support for insecure protocols
-options = NO_SSLv2
-options = NO_SSLv3
-options = NO_TLSv1
-options = NO_TLSv1.1
-
-options = NO_COMPRESSION
-
-; These options provide additional security at some performance degradation
-options = SINGLE_ECDH_USE
-options = SINGLE_DH_USE
-
-; Select permitted SSL ciphers
-ciphers = EECDH+AESGCM:!MEDIUM:!LOW:!EXP:!aNULL:!eNULL
-
-; **************************************************************************
-; * Service definitions (remove all services for inetd mode) *
-; **************************************************************************
-
-{% if 'bacula-sd' not in group_names %}
-[{{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd]
-accept = 127.0.{{ n }}.1:9113
-connect = {{ groups['bacula-sd'][0] }}:9103
-delay = yes
-CAfile = /etc/stunnel/certs/{{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd.pem
-{% endif %}
-
-{% set n = 0 %}
-{% for fd in groups.all | sort %}
-{% set n = n + 1 %}
-{% if fd != inventory_hostname %}
-[{{ hostvars[fd].inventory_hostname_short }}-fd]
-accept = 127.0.{{ n }}.1:9112
-connect = {{ fd }}:9102
-delay = yes
-CAfile = /etc/stunnel/certs/{{ hostvars[fd].inventory_hostname_short }}-fd.pem
-{% endif %}
-
-{% endfor %}
-
-; vim:ft=dosini
diff --git a/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service b/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service
index ca147a7..698ad17 100644
--- a/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service
+++ b/roles/bacula-sd/files/lib/systemd/system/bacula-sd.service
@@ -1,24 +1,24 @@
[Unit]
Description=Bacula Storage Daemon service
After=network.target
[Service]
Type=forking
-PIDFile=/var/run/bacula/bacula-sd.9113.pid
+PIDFile=/var/run/bacula/bacula-sd.9103.pid
StandardOutput=syslog
User=bacula
Group=tape
ExecStart=/usr/sbin/bacula-sd -c /etc/bacula/bacula-sd.conf
# Hardening
NoNewPrivileges=yes
PrivateDevices=yes
ProtectHome=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/bacula
ReadWriteDirectories=-/var/run/bacula
ReadWriteDirectories=/mnt/backup/bacula
[Install]
WantedBy=multi-user.target
diff --git a/roles/bacula-sd/handlers/main.yml b/roles/bacula-sd/handlers/main.yml
index c6adb80..3434333 100644
--- a/roles/bacula-sd/handlers/main.yml
+++ b/roles/bacula-sd/handlers/main.yml
@@ -1,9 +1,6 @@
---
- name: systemctl daemon-reload
command: /bin/systemctl daemon-reload
-- name: Restart stunnel@bacula-sd
- service: name=stunnel4@bacula-sd state=restarted
-
- name: Restart bacula-sd
service: name=bacula-sd state=restarted
diff --git a/roles/bacula-sd/tasks/main.yml b/roles/bacula-sd/tasks/main.yml
index 795804f..ad77db4 100644
--- a/roles/bacula-sd/tasks/main.yml
+++ b/roles/bacula-sd/tasks/main.yml
@@ -1,78 +1,20 @@
-- name: Create /etc/stunnel/certs
- file: path=/etc/stunnel/certs
- state=directory
- owner=root group=root
- mode=0755
-
-- name: Generate a private key and a X.509 certificate for Bacula SD
- command: genkeypair.sh x509
- --pubkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
- --privkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.key
- --ou=BaculaSD --cn={{ inventory_hostname }} --dns={{ inventory_hostname }}
- -t rsa -b 4096 -h sha512
- register: r1
- changed_when: r1.rc == 0
- failed_when: r1.rc > 1
- notify:
- - Restart stunnel@bacula-sd
- tags:
- - genkey
-
-- name: Fetch Bacula SD X.509 certificate
- # Ensure we don't fetch private data
- become: False
- fetch_cmd: cmd="openssl x509"
- stdin=/etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
- dest=certs/bacula/{{ inventory_hostname_short }}-sd.pem
- tags:
- - genkey
-
-- name: Copy Bacula Dir/FD X.509 certificates
- assemble: src=certs/bacula regexp="-(dir|fd)\.pem$" remote_src=no
- dest=/etc/stunnel/certs/bacula-dir+fds.pem
- owner=root group=root
- mode=0644
- register: r2
- notify:
- - Restart stunnel@bacula-sd
-
-- name: Configure stunnel
- template: src=etc/stunnel/bacula-sd.conf.j2
- dest=/etc/stunnel/bacula-sd.conf
- owner=root group=root
- mode=0644
- register: r3
- notify:
- - Restart stunnel@bacula-sd
-
-- name: Enable stunnel@bacula-sd
- service: name=stunnel4@bacula-sd enabled=yes
-
-- name: Start stunnel
- service: name=stunnel4@bacula-sd state=started
- when: not (r1.changed or r2.changed or r3.changed)
-
-- meta: flush_handlers
-
-
-
- name: Install bacula-sd
apt: pkg=bacula-sd
# Create with:
# echo $director-dir $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-sd
- name: Ensure /etc/bacula/passwords-sd exists
file: path=/etc/bacula/passwords-sd
state=file
owner=bacula group=bacula
mode=0600
- name: Configure bacula
template: src=etc/bacula/bacula-sd.conf.j2
dest=/etc/bacula/bacula-sd.conf
owner=root group=root
mode=0644
notify:
- Restart bacula-sd
- name: Copy bacula-sd.service
diff --git a/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2 b/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
index fbfdca5..5ffa17c 100644
--- a/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
+++ b/roles/bacula-sd/templates/etc/bacula/bacula-sd.conf.j2
@@ -1,40 +1,39 @@
#
# Default Bacula Storage Daemon Configuration file
#
# For Bacula release 5.2.6 (21 February 2012) -- debian jessie/sid
#
# You may need to change the name of your tape drive
# on the "Archive Device" directive in the Device
# resource. If you change the Name and/or the
# "Media Type" in the Device resource, please ensure
# that dird.conf has corresponding changes.
#
Storage { # define myself
Name = {{ inventory_hostname_short }}-sd
Working Directory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
- SDAddress = 127.0.0.1
- SDPort = 9113
- Heartbeat Interval = 1 min
+ SDAddress = {{ ipsec[inventory_hostname_short] }}
+ SDPort = 9103
}
#
# List Directors who are permitted to contact Storage daemon
#
{% for dir in groups['bacula-dir'] | sort %}
Director {
Name = {{ hostvars[dir].inventory_hostname_short }}-dir
@|"sed -n '/^{{ hostvars[dir].inventory_hostname_short }}-dir\\s/ {s//Password = /p; q}' /etc/bacula/passwords-sd"
}
#
# Send all messages to the Director,
# mount messages also are sent to the email address
#
Messages {
Name = Standard
director = {{ hostvars[dir].inventory_hostname_short }}-dir = all
}
{% endfor %}
diff --git a/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2 b/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2
deleted file mode 100644
index 051412c..0000000
--- a/roles/bacula-sd/templates/etc/stunnel/bacula-sd.conf.j2
+++ /dev/null
@@ -1,64 +0,0 @@
-; **************************************************************************
-; * Global options *
-; **************************************************************************
-
-; setuid()/setgid() to the specified user/group in daemon mode
-setuid = stunnel4
-setgid = stunnel4
-
-; PID is created inside the chroot jail
-pid =
-foreground = yes
-
-; Only log messages at severity warning (4) and higher
-debug = 4
-
-; **************************************************************************
-; * Service defaults may also be specified in individual service sections *
-; **************************************************************************
-
-; Certificate/key is needed in server mode and optional in client mode
-cert = /etc/stunnel/certs/{{ inventory_hostname_short }}-sd.pem
-key = /etc/stunnel/certs/{{ inventory_hostname_short }}-sd.key
-
-socket = l:TCP_NODELAY=1
-socket = l:SO_KEEPALIVE=1
-socket = l:TCP_KEEPIDLE=60
-socket = l:TCP_KEEPINTVL=15
-socket = l:TCP_KEEPCNT=116
-
-socket = r:TCP_NODELAY=1
-socket = r:SO_KEEPALIVE=1
-socket = r:TCP_KEEPIDLE=60
-socket = r:TCP_KEEPINTVL=15
-socket = r:TCP_KEEPCNT=116
-
-; Prevent MITM attacks
-verify = 4
-
-; Disable support for insecure protocols
-options = NO_SSLv2
-options = NO_SSLv3
-options = NO_TLSv1
-options = NO_TLSv1.1
-
-options = NO_COMPRESSION
-
-; These options provide additional security at some performance degradation
-options = SINGLE_ECDH_USE
-options = SINGLE_DH_USE
-
-; Select permitted SSL ciphers
-ciphers = EECDH+AESGCM:!MEDIUM:!LOW:!EXP:!aNULL:!eNULL
-
-; **************************************************************************
-; * Service definitions (remove all services for inetd mode) *
-; **************************************************************************
-
-[{{ inventory_hostname_short }}-sd]
-client = no
-accept = 9103
-connect = 127.0.0.1:9113
-CAfile = /etc/stunnel/certs/bacula-dir+fds.pem
-
-; vim:ft=dosini
diff --git a/roles/common/files/lib/systemd/system/bacula-fd.service b/roles/common/files/lib/systemd/system/bacula-fd.service
index 07bd2e5..ee5afe3 100644
--- a/roles/common/files/lib/systemd/system/bacula-fd.service
+++ b/roles/common/files/lib/systemd/system/bacula-fd.service
@@ -1,22 +1,22 @@
[Unit]
Description=Bacula File Daemon service
After=network.target
[Service]
Type=forking
-PIDFile=/var/run/bacula/bacula-fd.9112.pid
+PIDFile=/var/run/bacula/bacula-fd.9102.pid
StandardOutput=syslog
ExecStart=/usr/sbin/bacula-fd -c /etc/bacula/bacula-fd.conf
# Hardening
NoNewPrivileges=yes
PrivateDevices=yes
ProtectHome=read-only
ProtectSystem=full
PrivateTmp=yes
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib
ReadWriteDirectories=-/var/run/bacula
[Install]
WantedBy=multi-user.target
diff --git a/roles/common/handlers/main.yml b/roles/common/handlers/main.yml
index efab81b..250c77b 100644
--- a/roles/common/handlers/main.yml
+++ b/roles/common/handlers/main.yml
@@ -27,31 +27,28 @@
service: name=ipsec state=restarted
- name: Reload networking
# /etc/init.d/networking doesn't answer the status command; but since
# it should be "up" whenever ansible has access to the machine, we use
# pattern=init as a dummy assumption.
service: name=networking pattern=init state=reloaded
- name: Restart rsyslog
service: name=rsyslog state=restarted
- name: Restart ntp
service: name=ntp state=restarted
- name: Restart Postfix
service: name=postfix state=restarted
- name: Reload Postfix
service: name=postfix state=reloaded
-- name: Restart stunnel@bacula-fd
- service: name=stunnel4@bacula-fd state=restarted
-
- name: Restart bacula-fd
service: name=bacula-fd state=restarted
- name: Restart munin-node
service: name=munin-node state=restarted
- name: Restart freshclam
service: name=clamav-freshclam state=restarted
diff --git a/roles/common/tasks/bacula.yml b/roles/common/tasks/bacula.yml
index 1bd2b77..35666bd 100644
--- a/roles/common/tasks/bacula.yml
+++ b/roles/common/tasks/bacula.yml
@@ -1,92 +1,20 @@
-- name: Create /etc/stunnel/certs
- file: path=/etc/stunnel/certs
- state=directory
- owner=root group=root
- mode=0755
-
-- name: Generate a private key and a X.509 certificate for Bacula FD
- command: genkeypair.sh x509
- --pubkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-fd.pem
- --privkey=/etc/stunnel/certs/{{ inventory_hostname_short }}-fd.key
- --ou=BaculaFD --cn={{ inventory_hostname }} --dns={{ inventory_hostname }}
- -t rsa -b 4096 -h sha512
- register: r1
- changed_when: r1.rc == 0
- failed_when: r1.rc > 1
- notify:
- - Restart stunnel@bacula-fd
- tags:
- - genkey
-
-- name: Fetch Bacula FD X.509 certificate
- # Ensure we don't fetch private data
- become: False
- fetch_cmd: cmd="openssl x509"
- stdin=/etc/stunnel/certs/{{ inventory_hostname_short }}-fd.pem
- dest=certs/bacula/{{ inventory_hostname_short }}-fd.pem
- tags:
- - genkey
-
-- name: Copy Bacula Dir X.509 certificates
- assemble: src=certs/bacula regexp="-dir\.pem$" remote_src=no
- dest=/etc/stunnel/certs/bacula-dirs.pem
- owner=root group=root
- mode=0644
- register: r2
- when: "'bacula-dir' not in group_names"
- notify:
- - Restart stunnel@bacula-fd
-
-- name: Copy Bacula SD X.509 certificates
- copy: src=certs/bacula/{{ hostvars[item].inventory_hostname_short }}-sd.pem
- dest=/etc/stunnel/certs/
- owner=root group=root
- mode=0644
- register: r3
- with_items: "{{ groups['bacula-sd'] | difference([inventory_hostname]) }}"
- notify:
- - Restart stunnel@bacula-fd
-
-- name: Configure stunnel
- template: src=etc/stunnel/bacula-fd.conf.j2
- dest=/etc/stunnel/bacula-fd.conf
- owner=root group=root
- mode=0644
- register: r4
- when: "'bacula-dir' not in group_names or 'bacula-sd' not in group_names"
- notify:
- - Restart stunnel@bacula-fd
-
-- name: Enable stunnel@bacula-fd
- when: "'bacula-dir' not in group_names or 'bacula-sd' not in group_names"
- service: name=stunnel4@bacula-fd enabled=yes
-
-- name: Start stunnel@bacula-fd
- service: name=stunnel4@bacula-fd state=started
- when: ('bacula-dir' not in group_names or 'bacula-sd' not in group_names) and
- not (r1.changed or r2.changed or r3.changed or r4.changed)
-
-- meta: flush_handlers
-
-
-
- name: Install bacula-fd
apt: pkg=bacula-fd
- name: Create /var/lib/bacula/tmp
file: path=/var/lib/bacula/tmp
state=directory
owner=root group=root
mode=0700
- name: Delete /etc/bacula/common_default_passwords
file: path=/etc/bacula/common_default_passwords state=absent
# Create with:
# echo $director-dir $(pwgen -sn 64 1) | sudo tee -a /etc/bacula/passwords-fd
- name: Ensure /etc/bacula/passwords-fd exists
file: path=/etc/bacula/passwords-fd
state=file
owner=root group=root
mode=0600
diff --git a/roles/common/templates/etc/bacula/bacula-fd.conf.j2 b/roles/common/templates/etc/bacula/bacula-fd.conf.j2
index 432768b..d64ac86 100644
--- a/roles/common/templates/etc/bacula/bacula-fd.conf.j2
+++ b/roles/common/templates/etc/bacula/bacula-fd.conf.j2
@@ -10,31 +10,29 @@
Director {
Name = {{ hostvars[dir].inventory_hostname_short }}-dir
@|"sed -n '/^{{ hostvars[dir].inventory_hostname_short }}-dir\\s/ {s//Password = /p; q}' /etc/bacula/passwords-fd"
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = {{ hostvars[dir].inventory_hostname_short }}-dir = all, !skipped, !restored
}
{% endfor %}
#
# "Global" File daemon configuration specifications
#
FileDaemon { # define myself
Name = {{ inventory_hostname_short }}-fd
Working Directory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
- FDAddress = 127.0.0.1
- FDPort = 9112
- FDSourceAddress = 127.0.0.1
+ FDAddress = {{ ipsec[inventory_hostname_short] }}
+ FDPort = 9102
SDConnectTimeout = 5 min
- Heartbeat Interval = 1 min
PKI Signatures = Yes # Enable Data Signing
PKI Encryption = Yes # Enable Data Encryption
PKI Keypair = /etc/bacula/ssl/{{ inventory_hostname_short }}.pem # Public and Private Keys
PKI Master Key = /etc/bacula/ssl/master.pem # ONLY the Public Key
}
diff --git a/roles/common/templates/etc/iptables/services.j2 b/roles/common/templates/etc/iptables/services.j2
index 953cea5..ccbc735 100644
--- a/roles/common/templates/etc/iptables/services.j2
+++ b/roles/common/templates/etc/iptables/services.j2
@@ -44,34 +44,24 @@ out tcp {{ postfix_instance.out.port }}
{% if 'IMAP' in group_names %}
in tcp 993 # IMAPS
in tcp 4190 # MANAGESIEVE
{% endif %}
{% if 'MDA' in group_names and 'MX' not in group_names %}
in tcp {{ postfix_instance.IMAP.port }}
{% endif %}
{% if 'lists' in group_names and 'MX' not in group_names %}
in tcp {{ postfix_instance.lists.port }}
{% endif %}
{% if 'MSA' in group_names %}
in tcp 587 # SMTP-AUTH
{% endif %}
{% if 'webmail' in group_names or 'lists' in group_names or 'wiki' in group_names %}
in tcp 80,443 # HTTP/HTTPS
{% endif %}
{% if 'webmail' in group_names and 'IMAP' not in group_names %}
out tcp 993 # IMAP
out tcp 4190 # MANAGESIEVE
{% endif %}
-{% if 'bacula-dir' in group_names and groups.all | difference(groups['bacula-dir']) %}
-out tcp 9102 # BACULA-FD
-{% elif groups['bacula-dir'] | difference([inventory_hostname]) %}
-in tcp 9102 # BACULA-FD
-{% endif %}
-{% if 'bacula-sd' in group_names and groups.all | difference(groups['bacula-sd']) %}
-in tcp 9103 # BACULA-SD
-{% elif groups['bacula-sd'] | difference([inventory_hostname]) %}
-out tcp 9103 # BACULA-SD
-{% endif %}
{% if 'LDAP-provider' in group_names %}
out tcp 11371 # HKP
out tcp 43 # WHOIS
{% endif %}
diff --git a/roles/common/templates/etc/stunnel/bacula-fd.conf.j2 b/roles/common/templates/etc/stunnel/bacula-fd.conf.j2
deleted file mode 100644
index 057dc48..0000000
--- a/roles/common/templates/etc/stunnel/bacula-fd.conf.j2
+++ /dev/null
@@ -1,73 +0,0 @@
-; **************************************************************************
-; * Global options *
-; **************************************************************************
-
-; setuid()/setgid() to the specified user/group in daemon mode
-setuid = stunnel4
-setgid = stunnel4
-
-; PID is created inside the chroot jail
-pid =
-foreground = yes
-
-; Only log messages at severity warning (4) and higher
-debug = 4
-
-; **************************************************************************
-; * Service defaults may also be specified in individual service sections *
-; **************************************************************************
-
-; Certificate/key is needed in server mode and optional in client mode
-cert = /etc/stunnel/certs/{{ inventory_hostname_short }}-fd.pem
-key = /etc/stunnel/certs/{{ inventory_hostname_short }}-fd.key
-
-socket = l:TCP_NODELAY=1
-socket = l:SO_KEEPALIVE=1
-socket = l:TCP_KEEPIDLE=60
-socket = l:TCP_KEEPINTVL=15
-socket = l:TCP_KEEPCNT=116
-
-socket = r:TCP_NODELAY=1
-socket = r:SO_KEEPALIVE=1
-socket = r:TCP_KEEPIDLE=60
-socket = r:TCP_KEEPINTVL=15
-socket = r:TCP_KEEPCNT=116
-
-; Prevent MITM attacks
-verify = 4
-
-; Disable support for insecure protocols
-options = NO_SSLv2
-options = NO_SSLv3
-options = NO_TLSv1
-options = NO_TLSv1.1
-
-options = NO_COMPRESSION
-
-; These options provide additional security at some performance degradation
-options = SINGLE_ECDH_USE
-options = SINGLE_DH_USE
-
-; Select permitted SSL ciphers
-ciphers = EECDH+AESGCM:!MEDIUM:!LOW:!EXP:!aNULL:!eNULL
-
-; **************************************************************************
-; * Service definitions (remove all services for inetd mode) *
-; **************************************************************************
-
-[{{ inventory_hostname_short }}-fd]
-client = no
-accept = 9102
-connect = 9112
-CAfile = /etc/stunnel/certs/bacula-dirs.pem
-
-{% if 'bacula-sd' not in group_names %}
-[{{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd]
-client = yes
-accept = 127.0.0.1:9113
-connect = {{ groups['bacula-sd'][0] }}:9103
-delay = yes
-CAfile = /etc/stunnel/certs/{{ hostvars[ groups['bacula-sd'][0] ].inventory_hostname_short }}-sd.pem
-{% endif %}
-
-; vim:ft=dosini