mirror of
https://github.com/FAUSheppy/no-secrets-athq-ansible
synced 2026-06-20 01:52:37 +02:00
initial: no secrets
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
|
||||
NhAAAAAwEAAQAAAYEA2gAT8vYdNPb1EI/oHsL4SDvZA6VAZJFuXRs+h7A8aehS3mdCjjEz
|
||||
2ckZMDx5AtyXnvL5E5dnxYu8I14ZFkqT3ux/0RXZ+px3+UUrzOGhMIZIw+xNZb3/ZS0VF5
|
||||
yEnhVxTnQ94aUV6k+clT/TtUt0ZN2/ovRz5XMNbw5hR0uZmfq15sUEshw/LrsghC9UYuSD
|
||||
s/V8cnGifzB19l2h1lPsYK0Nrr1q74Z4mwd24bX/eBqxyUF0X41HOJxd0ht/d+xZHYreS6
|
||||
M7gxN/5i6DTej8F89d2dmnApaY4sjmUMaWtvk6cBOYtq1qGcLF7//8s6IR2wN9PqmEsSWE
|
||||
K2GdV0cjkjxVkqd8MHLo/MjDKjCU9nu+Wclmh7qGLop3ThVuFTEe6RaabLJ523Sx7yRnuT
|
||||
2TEg8ZcoVLZACuKdZ39pxJ4N1YwgXJ+lFitaaOQ0JnC8JHdHEG1ky8R4x+LALX8qewPI7B
|
||||
i164Vq2jDjqFNCVZGpma6tgbksmguUu/inbxgoN1AAAFiNBNJKrQTSSqAAAAB3NzaC1yc2
|
||||
EAAAGBANoAE/L2HTT29RCP6B7C+Eg72QOlQGSRbl0bPoewPGnoUt5nQo4xM9nJGTA8eQLc
|
||||
l57y+ROXZ8WLvCNeGRZKk97sf9EV2fqcd/lFK8zhoTCGSMPsTWW9/2UtFRechJ4VcU50Pe
|
||||
GlFepPnJU/07VLdGTdv6L0c+VzDW8OYUdLmZn6tebFBLIcPy67IIQvVGLkg7P1fHJxon8w
|
||||
dfZdodZT7GCtDa69au+GeJsHduG1/3gasclBdF+NRzicXdIbf3fsWR2K3kujO4MTf+Yug0
|
||||
3o/BfPXdnZpwKWmOLI5lDGlrb5OnATmLatahnCxe///LOiEdsDfT6phLElhCthnVdHI5I8
|
||||
VZKnfDBy6PzIwyowlPZ7vlnJZoe6hi6Kd04VbhUxHukWmmyyedt0se8kZ7k9kxIPGXKFS2
|
||||
QArinWd/acSeDdWMIFyfpRYrWmjkNCZwvCR3RxBtZMvEeMfiwC1/KnsDyOwYteuFatow46
|
||||
hTQlWRqZmurYG5LJoLlLv4p28YKDdQAAAAMBAAEAAAGAbms5r4eflZM83820SdiBf7zol+
|
||||
Mc8ZOELh69lmbawt4NE1+EI5eiZr5oRrlqpdtr5PO224iF5FZ5zgQ8esD9kx2BRDtoNHsK
|
||||
fbTekaD7TyPFOY+4SD9rXCjwlQwPVC8SPCW+rks7BXqbmjFBH4P/iZOUHIrrJR4YgNbsyP
|
||||
ru60JE3oWOclTCX/4iYzHB8XFDkGRYS3NpVjkKluYoMfJCOVmOI6MHxhj7f7LRMVRI+OG0
|
||||
iXbg5gEeQPtavjB1aR3JuajYIRaxbJUzKCgE4+yeljvObSdG9THUiuFOTEkXcdtYnPu3uy
|
||||
d2LcBQzLJ0BY6YvIoI4OFV6lqRRBXMleUSKzHFgkHUuRAKyPtVrE38HV/X5qQeBlg89/7/
|
||||
XuwZDq+A7fSm95uj85bmrUXBKBog/F31UW+1P3lZ7j/ZxmcPwcJTJvPTFOSweynimeSZB/
|
||||
lwFJpiDhxJjlfpWF0GxgIHdsjD4CZgSpSKCh/kI954f4HnhWEXbs8quoGwgrjIElTFAAAA
|
||||
wEbaLe1mPdp8LsvOTbWNiF9eT5pKO2pwkJPINJ20ylxwYaap0Xda79shdskkxKTCwIFvoA
|
||||
xjdE6B1HKqzsWHu7fiQ29/btdAZav+930tMSxemIwhNe9aHyOgoujNS8UaxaR/sSTnj19V
|
||||
7DyetxFPGW1H1A/KKnPm+muqgO7KARHoQ+0x3I6pJzM+XHN5DT5FNSdtVm+xWCNsXwL4bk
|
||||
t5d5vBU/VAspgNZVSge+aN3R2FGqA0dlDww4XX0nywbaO8WgAAAMEA/kwTKHc7W9eqYCzM
|
||||
yRrPXB1cRhrLYOJNX+ykl/xPPx4YeZmrDmNfzcC8DULC/5HkXEygpsxuzK1SbGM0eeQyMu
|
||||
LboVYxgslC0QjIfDS3x7CYUMsrK1r1nleGxYFpXRBTqKty6nNR53Unum2QAsGW90xfoD1N
|
||||
NEeb2d/wgG/QHmTh6BzJ6JYqjc/ATsqfR5aKoNnh1stRHu6TzrIK4Y/6e/HEoXElwOyeYX
|
||||
DadG5VfnD4jglgQR78sHtaSSIpvCADAAAAwQDbdcgfXQ93mIDnk97aXbrR/tP76+0QmsM2
|
||||
IImV3/mhnjwsYXHnYTBoci6t+L+zClpW2FIj532XKSBF+fxIOTpnMW4grKICivbWmcrCj+
|
||||
aA+w+mshv4K1A+TDlzfW4c+UHpp26UopkaFMrG9hvNoDcREyYqERf1YnxZCLTGgNQLpDUa
|
||||
rveYj+PzCjTzUzH2wgtNttIDWeekFxTJP/7a7sdaRe4DzMMn0B0UDVKGgKY7s5q1xL0IJq
|
||||
8oXFJvSt894ScAAAASc2hlcHB5QGF0bGFudGlzcGFkAQ==
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
@@ -0,0 +1,3 @@
|
||||
Host *
|
||||
User sheppy
|
||||
IdentityFile ~/.ssh/backup_priv_key
|
||||
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd
|
||||
BACKUP_NAME=backup_$(date +%Y%m%d).zip
|
||||
mkdir -p ~/ths_caldav_backups/
|
||||
mkdir -p ~/ths_carddav_backups/
|
||||
mkdir -p ~/ths_carddav_telefon_backups/
|
||||
|
||||
vdirsyncer -c vsyncdir.conf sync
|
||||
|
||||
zip -q -r ~/ths_caldav_backups/${BACKUP_NAME} ~/ths-caldav
|
||||
zip -q -r ~/ths_carddav_backups/${BACKUP_NAME} ~/ths-carddav
|
||||
zip -q -r ~/ths_carddav_telefon_backups/${BACKUP_NAME} ~/ths-carddav-telefon
|
||||
|
||||
~/backups/backup-tools/backup_manager.py ~/ths_caldav_backups/ --debug
|
||||
~/backups/backup-tools/backup_manager.py ~/ths_carddav_backups/ --debug
|
||||
~/backups/backup-tools/backup_manager.py ~/ths_carddav_telefon_backups/ --debug
|
||||
|
||||
# send to storrage box
|
||||
rsync --delete --rsh="/usr/bin/sshpass -p '' ssh -p23" -r ths_caldav_backups/* u244665-sub2@u244665.your-storagebox.de:./ths_caldav_backups/
|
||||
rsync --delete --rsh="/usr/bin/sshpass -p '' ssh -p23" -r ths_carddav_backups/* u244665-sub2@u244665.your-storagebox.de:./ths_caldav_backups/carddav/
|
||||
rsync --delete --rsh="/usr/bin/sshpass -p '' ssh -p23" -r ths_carddav_telefon_backups/* u244665-sub2@u244665.your-storagebox.de:./ths_caldav_backups/carddav_telefon/
|
||||
|
||||
curl -H "Content-Type: application/json" \
|
||||
-X POST https://async-icinga.atlantishq.de/report \
|
||||
-d '{ "service" : "ths_caldav_backup", "token" : "", "status" : "OK", "info" : "" }'
|
||||
@@ -0,0 +1,54 @@
|
||||
[general]
|
||||
status_path = "~/.vdirsyncer/status/"
|
||||
|
||||
[pair ths_caldav]
|
||||
a = "ths_remote_caldav"
|
||||
b = "ths_local_caldav"
|
||||
collections = ["from a"]
|
||||
|
||||
[storage ths_remote_caldav]
|
||||
type = "caldav"
|
||||
read_only = true
|
||||
url = "https://ths.atlantishq.de/remote.php/dav/calendars/backup/ths_shared_by_ths/"
|
||||
username = "backup"
|
||||
password = ""
|
||||
|
||||
[storage ths_local_caldav]
|
||||
type = "filesystem"
|
||||
path = "~/ths-caldav/"
|
||||
fileext = ".ics"
|
||||
|
||||
[pair ths_carddav]
|
||||
a = "ths_remote_carddav"
|
||||
b = "ths_local_carddav"
|
||||
collections = ["from a"]
|
||||
|
||||
[storage ths_remote_carddav]
|
||||
type = "carddav"
|
||||
read_only = true
|
||||
url = "https://ths.atlantishq.de/remote.php/dav/addressbooks/users/backup/ths_shared_by_ths/"
|
||||
username = "backup"
|
||||
password = ""
|
||||
|
||||
[storage ths_local_carddav]
|
||||
type = "filesystem"
|
||||
path = "~/ths-carddav/"
|
||||
fileext = ".vcf"
|
||||
|
||||
|
||||
[pair ths_carddav_telefon]
|
||||
a = "ths_remote_carddav_telefon"
|
||||
b = "ths_local_carddav_telefon"
|
||||
collections = ["from a"]
|
||||
|
||||
[storage ths_remote_carddav_telefon]
|
||||
type = "carddav"
|
||||
read_only = true
|
||||
url = "https://ths.atlantishq.de/remote.php/dav/addressbooks/users/backup/ths-telefon-1_shared_by_ths/"
|
||||
username = "backup"
|
||||
password = ""
|
||||
|
||||
[storage ths_local_carddav_telefon]
|
||||
type = "filesystem"
|
||||
path = "~/ths-carddav-telefon/"
|
||||
fileext = ".vcf"
|
||||
@@ -0,0 +1,76 @@
|
||||
- name: Install tools
|
||||
apt:
|
||||
pkg:
|
||||
- zip
|
||||
- vdirsyncer
|
||||
|
||||
- name: Copy Backup caldav script
|
||||
copy:
|
||||
src: ths_cal_backup.sh
|
||||
dest: /home/sheppy/ths_cal_backup.sh
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
|
||||
- name: Copy vdirsync config
|
||||
copy:
|
||||
src: vsyncdir.conf
|
||||
dest: /home/sheppy/vsyncdir.conf
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
|
||||
- name: Create backups dir
|
||||
file:
|
||||
path: /home/sheppy/backups/
|
||||
state: directory
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
|
||||
- name: Clone backup tools
|
||||
git:
|
||||
repo: https://github.com/FAUSheppy/backup-tools
|
||||
dest: /home/sheppy/backups/backup-tools/
|
||||
version: master
|
||||
become: yes
|
||||
become_user: sheppy
|
||||
|
||||
- name: Create SSH Dir
|
||||
file:
|
||||
path: /home/sheppy/.ssh/
|
||||
state: directory
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
|
||||
- name: Copy SSH config and backup priv key
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: "/home/sheppy/.ssh/{{ item }}"
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
mode: 0600
|
||||
with_items:
|
||||
- backup_priv_key
|
||||
- config
|
||||
|
||||
- name: template SLAPD backup script
|
||||
template:
|
||||
src: slapd_backup.sh
|
||||
dest: /home/sheppy/
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
mode: 0700
|
||||
|
||||
- name: Add slapd script to cron
|
||||
cron:
|
||||
minute: "10"
|
||||
hour: "1"
|
||||
name: SLAPD via rsync backup
|
||||
job: /home/sheppy/slapd_backup.sh
|
||||
user: sheppy
|
||||
|
||||
- name: Add ths nextcloud backup script to cron
|
||||
cron:
|
||||
minute: "0"
|
||||
hour: "1"
|
||||
name: THS Caldav Backup
|
||||
job: /home/sheppy/ths_cal_backup.sh
|
||||
user: sheppy
|
||||
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
DIR=/home/sheppy/slapd_backup
|
||||
|
||||
rsync -r --remove-source-files sheppy@192.168.122.112:$DIR /home/sheppy
|
||||
|
||||
~/backups/backup-tools/backup_manager.py --extensions ldif -- $DIR
|
||||
|
||||
rsync --delete --rsh="/usr/bin/sshpass -p ebHYlyVHgRnBcdkb ssh -p23" -r slapd_backup/* u244665-sub2@u244665.your-storagebox.de:./slapd_backup/
|
||||
|
||||
curl -H "Content-Type: application/json" \
|
||||
-X POST https://async-icinga.atlantishq.de/report \
|
||||
-d '{ "service" : "slapd_backup", "token" : "WX0yXFxSsb", "status" : "OK", "info" : "" }'
|
||||
@@ -0,0 +1,49 @@
|
||||
- name: Install packages
|
||||
apt:
|
||||
pkg:
|
||||
- rsync
|
||||
- zsh
|
||||
- net-tools
|
||||
- tcpdump
|
||||
- git
|
||||
- apt-file
|
||||
|
||||
- name: Ensure Opt dir exists and accessible
|
||||
file:
|
||||
name: /opt/
|
||||
state: directory
|
||||
mode: 0711
|
||||
|
||||
- name: Ensure backup info dir exists and accessible
|
||||
file:
|
||||
name: /opt/backup-info/
|
||||
state: directory
|
||||
mode: 0700
|
||||
|
||||
- name: Copy Backup Helper script
|
||||
copy:
|
||||
src: check_dir_size_for_backup.py
|
||||
dest: /opt/check_dir_size_for_backup.py
|
||||
mode: 0755
|
||||
|
||||
- name: Create sheppy .ssh dir
|
||||
file:
|
||||
path: /home/sheppy/.ssh/
|
||||
state: directory
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
mode: 0700
|
||||
|
||||
- name: Template Sheppy authorized keys
|
||||
template:
|
||||
src: authorized_keys_sheppy.j2
|
||||
dest: /home/sheppy/.ssh/authorized_keys
|
||||
owner: sheppy
|
||||
group: sheppy
|
||||
mode: 0600
|
||||
|
||||
- name: Add extra root keys
|
||||
lineinfile:
|
||||
path: /root/.ssh/authorized_keys
|
||||
line: "{{ item }}"
|
||||
loop: "{{ extra_root_keys }}"
|
||||
@@ -0,0 +1,3 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDoUijFwmZaYHbueDsa3T2BV5UfMxKpztbuJwSBZ5s0WbZlg/9E9SHeGztaN/SCyQZdtOA7bR6tQMWhx4fadvrjg5BrN1bjpNUb2/rAxuWw0yU0Yp2CWwE02m+3bMj4pXeaI2Mk/Ywubfl88W2/OrUpbhHoYeedAIblyzuOwDTS9MpjD/ita89d4CM9AdhGBw3qaggtIxD8A5hULbJWe0D5KdtBFG8RFOmBaEb/tmBvdpwja3i17/AejUdjfjQv8G3BSTbKvOvMRwmnmoE5YCstwHIFqrlmqorSGQIVo5knfcSqgFxs2wDv4OOrPJTWcmr3LmN5lVjHkjtzRQ8zE9sB sheppy-master
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDU2aDU+TOiOXzWpGDhqbpzFkhENPc0QYbsqfImaBIMlbSDs6gxuQRtO9QtqyThrDuPNWVQqooVRj5MgdR9i2uNd8eDr+HWhzuiymy+KAJm9e+E4VTvgTiD+EB0IKJ6Vqm86/M0nwLPu3KNY9k/jjG2DjKDNEqX5b6U9Psfq/HqB5NDNL/BvCTNknehSDCp8gyFYjrRijGz6vnVF8jfNGOaliJvwQI7GciV8/Q986J4RruF/KbIf2DhVjQogHOV1ZVtFpBffxA6+PkDR4kgLYnZM4L4WCHqOqS9Cen4lqJg+ZJMMDx/T0cWkJIdTq6+GUvNjNfrle6Ck72vT1aRAxpjNCo+w5FeV6PtSrE2yF6cLoca1ia7n9fBANI7Pb9WdPytLeBMvzGU3C8b2RilDS89Ri6UZr63YzDI1hmTVUCe73ct2aV5DnDw668Y3+9hT+vi2mC+zHcgfPfJ7erySDmxG1pi2yDlaJP9fLz4MMOtknTdq73nnQPF7MRbiHk1Ots= hypervisor
|
||||
{{ extra_sheppy_pubkeys }}
|
||||
@@ -0,0 +1,8 @@
|
||||
- name: reload async icinga settings
|
||||
uri:
|
||||
url: "http://localhost:5006/reload-configuration"
|
||||
status_code: [ 200, 204 ]
|
||||
|
||||
- name: restart hub
|
||||
shell:
|
||||
cmd: docker restart atlantis-hub_atlantis-hub_1
|
||||
@@ -0,0 +1,215 @@
|
||||
- include_vars: services.yaml
|
||||
|
||||
- name: Create data-dir
|
||||
file:
|
||||
name: /data/
|
||||
state: directory
|
||||
|
||||
- name: Create opt-dir
|
||||
file:
|
||||
name: /opt/
|
||||
state: directory
|
||||
|
||||
- name: Async Icinga mount directory
|
||||
file:
|
||||
name: /data/async-icinga
|
||||
state: directory
|
||||
|
||||
- name: Async Icinga database mount directory
|
||||
file:
|
||||
name: /data/async-icinga
|
||||
state: directory
|
||||
|
||||
- name: Async Icinga Service (static)
|
||||
template:
|
||||
src: async-config.json.j2
|
||||
dest: /data/async-icinga/config.json
|
||||
notify:
|
||||
- reload async icinga settings
|
||||
|
||||
- name: Async Icinga Service (static)
|
||||
template:
|
||||
src: async-icinga-config.json.j2
|
||||
dest: /data/async-icinga/async-icinga-config.json
|
||||
notify:
|
||||
- reload async icinga settings
|
||||
|
||||
- name: Async Icinga Service (dynamic from backup file)
|
||||
copy:
|
||||
src: async-icinga-config-dynamic.json
|
||||
dest: /data/async-icinga/
|
||||
notify:
|
||||
- reload async icinga settings
|
||||
|
||||
- name: Create data directories
|
||||
file:
|
||||
name: "/data/{{ item }}/"
|
||||
state: directory
|
||||
with_items:
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- event-dispatcher
|
||||
#- reactive-resume
|
||||
- hedgedoc
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
- gotify
|
||||
|
||||
- name: Copy AtlantisHub config
|
||||
copy:
|
||||
src: "atlantis-hub-content/config.yaml"
|
||||
dest: "/data/atlantis-hub/config.yaml"
|
||||
notify: restart hub
|
||||
|
||||
- name: Create AtlantisHubDirectories
|
||||
file:
|
||||
name: "/data/atlantis-hub/{{ item }}"
|
||||
state: directory
|
||||
with_items:
|
||||
- static-icons
|
||||
- instance
|
||||
- static-cache
|
||||
|
||||
- name: Copy AtlantisHub static icons
|
||||
copy:
|
||||
src: "atlantis-hub-content/static-icons/"
|
||||
dest: "/data/atlantis-hub/static-icons/"
|
||||
|
||||
- name: Copy AtlantisHub static icons
|
||||
template:
|
||||
src: "grafana.ini"
|
||||
dest: "/data/grafana/grafana.ini"
|
||||
|
||||
- name: Create compose directories
|
||||
file:
|
||||
name: "/opt/{{ item }}"
|
||||
state: directory
|
||||
with_items:
|
||||
- athq-landing
|
||||
- grafana
|
||||
- potaris
|
||||
- sector32
|
||||
- async-icinga
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- event-dispatcher
|
||||
- tor
|
||||
#- reactive-resume
|
||||
- hedgedoc
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
- gotify
|
||||
|
||||
- name: Copy compose templates
|
||||
template:
|
||||
src: "{{ item }}.yaml"
|
||||
dest: "/opt/{{ item }}/"
|
||||
with_items:
|
||||
- athq-landing
|
||||
- grafana
|
||||
- potaris
|
||||
- sector32
|
||||
- async-icinga
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- event-dispatcher
|
||||
- tor
|
||||
- hedgedoc
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
- gotify
|
||||
|
||||
- name: Log into private registry
|
||||
docker_login:
|
||||
registry: registry.atlantishq.de
|
||||
username: docker
|
||||
password: ""
|
||||
|
||||
- name: Deploy compose templates
|
||||
community.docker.docker_compose:
|
||||
project_src: "/opt/{{ item }}/"
|
||||
pull: true
|
||||
files:
|
||||
- "{{ item }}.yaml"
|
||||
with_items:
|
||||
- athq-landing
|
||||
- grafana
|
||||
- potaris
|
||||
- sector32
|
||||
- async-icinga
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- event-dispatcher
|
||||
- tor
|
||||
- hedgedoc
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
- gotify
|
||||
|
||||
- name: OAuth2Proxy directories
|
||||
file:
|
||||
path: "/opt/oauth2proxy/{{ item }}/"
|
||||
state: directory
|
||||
recurse: yes
|
||||
with_items:
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- async-icinga
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
#- reactive-resume
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
|
||||
- name: include services ports
|
||||
include_vars: services.yaml
|
||||
|
||||
- name: Deploy OAuth2Proxy compose files
|
||||
template:
|
||||
src: oauth-standalone-docker-compose.yaml
|
||||
dest: "/opt/oauth2proxy/{{ item }}/docker-compose.yaml"
|
||||
with_items:
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- async-icinga
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
#- reactive-resume
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
|
||||
- name: Deploy OAuth2Proxy
|
||||
community.docker.docker_compose:
|
||||
project_src: /opt/oauth2proxy/{{ item }}/
|
||||
pull: true
|
||||
with_items:
|
||||
- tmnf-replay-server
|
||||
- atlantis-hub
|
||||
- grafana
|
||||
- async-icinga
|
||||
- atlantis-verify
|
||||
- soundlib-interface
|
||||
- python-flask-picture-factory
|
||||
#- reactive-resume
|
||||
- money-balancer
|
||||
- atlantis-web-check
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"ICINGA_API_USER" : "{{ icinga_api_user }}",
|
||||
"ICINGA_API_PASS" : "{{ icinga_api_pass }}",
|
||||
"ICINGA_API_URL" : "{{ icinga_api_url }}",
|
||||
"ICINGA_WEB_URL" : "{{ icinga_web_url }}",
|
||||
"ASYNC_ICINGA_DUMMY_HOST" : "ASYNC_ICINGA"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
{% for service in async_icinga_static_services %}
|
||||
"{{ service['name'] }}" : {
|
||||
"timeout" : "{{ service['timeout'] }}",
|
||||
"token" : "{{ service['token'] }}",
|
||||
"owner" : "{{ service['owner'] }}"
|
||||
}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
async-icinga:
|
||||
volumes:
|
||||
- "/data/async-icinga/:/app/config"
|
||||
- "/data/async-icinga/instance/:/app/instance/"
|
||||
restart: always
|
||||
ports:
|
||||
- 6006:5000
|
||||
image: harbor-registry.atlantishq.de/atlantishq/async-icinga
|
||||
@@ -0,0 +1,5 @@
|
||||
athqlanding:
|
||||
ports:
|
||||
- 5002:5000
|
||||
image: registry.atlantishq.de/athq/landing-page
|
||||
restart: always
|
||||
@@ -0,0 +1,10 @@
|
||||
atlantis-hub:
|
||||
image: registry.atlantishq.de/atlantis-hub:latest
|
||||
restart: always
|
||||
ports:
|
||||
- 6011:5000
|
||||
volumes:
|
||||
- /data/atlantis-hub/config.yaml:/app/config.yaml
|
||||
- /data/atlantis-hub/static-icons/:/app/static/icons/
|
||||
- /data/atlantis-hub/sqlite-instance/:/app/instance/
|
||||
- /data/atlantis-hub/static-cache/:/app/static/cache/
|
||||
@@ -0,0 +1,28 @@
|
||||
atlantis-verify:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-verify:latest
|
||||
restart: always
|
||||
environment:
|
||||
|
||||
LDAP_SERVER: ldap://{{ ldap_server }}
|
||||
LDAP_BIND_DN: {{ ldap_bind_dn }}
|
||||
LDAP_BIND_PW: {{ ldap_password }}
|
||||
LDAP_BASE_DN: {{ ldap_user_dn }}
|
||||
|
||||
DISPATCH_SERVER: {{ event_dispatcher_address }}
|
||||
|
||||
SQLALCHEMY_DATABASE_URI: "instance/database.sqlite"
|
||||
|
||||
KEYCLOAK_URL: https://{{ keycloak_address }}
|
||||
KEYCLOAK_REALM: master
|
||||
KEYCLOAK_ADMIN_USER: admin
|
||||
KEYCLOAK_ADMIN_PASS: {{ keycloak_admin_password }}
|
||||
|
||||
MAIN_HOME: https://hub.atlantishq.de
|
||||
|
||||
DISPATCH_AUTH_USER: {{ event_dispatcher_user }}
|
||||
DISPATCH_AUTH_PASSWORD: {{ event_dispatcher_pass }}
|
||||
|
||||
ports:
|
||||
- {{ services[item].port + 1000 }}:5000
|
||||
volumes:
|
||||
- /data/atlantis-verify/instance/:/app/instance/
|
||||
@@ -0,0 +1,39 @@
|
||||
version: "3.3"
|
||||
services:
|
||||
master:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-webcheck-master:latest
|
||||
restart: always
|
||||
ports:
|
||||
- {{ services[item].port + 1000 }}:5000
|
||||
depends_on:
|
||||
- queue
|
||||
volumes:
|
||||
- /data/atlantis-web-check/instance/:/app/instance/
|
||||
environment:
|
||||
- QUEUE_HOST=queue
|
||||
- QUEUE_NAME=scheduled
|
||||
- DISPATCH_SERVER={{ event_dispatcher_address }}
|
||||
- DISPATCH_AUTH_USER={{ event_dispatcher_user }}
|
||||
- DISPATCH_AUTH_PASSWORD={{ event_dispatcher_pass }}
|
||||
scheduler:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-webcheck-scheduler:latest
|
||||
restart: always
|
||||
depends_on:
|
||||
- master
|
||||
environment:
|
||||
- MASTER_HOST=master:5000
|
||||
- SLEEP_TIME=1
|
||||
queue:
|
||||
image: rabbitmq
|
||||
restart: always
|
||||
ports:
|
||||
- 5672:5672
|
||||
worker:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-webcheck-worker:latest
|
||||
restart: always
|
||||
depends_on:
|
||||
- master
|
||||
environment:
|
||||
- MASTER_HOST=master:5000
|
||||
- QUEUE_HOST=queue
|
||||
- QUEUE_NAME=scheduled
|
||||
@@ -0,0 +1,9 @@
|
||||
version: 3
|
||||
service:
|
||||
collabora:
|
||||
ports:
|
||||
- 9980:9980
|
||||
image: collabora/code
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- "extra_params=--o:ssl.enable=false --o:ssl.termination=true"
|
||||
@@ -0,0 +1,14 @@
|
||||
event-dispatcher:
|
||||
ports:
|
||||
- 5007:5000
|
||||
image: registry.atlantishq.de/athq/event-dispatcher
|
||||
restart: always
|
||||
volumes:
|
||||
- "/data/event-dispatcher/instance/:/app/instance/"
|
||||
environment:
|
||||
SIGNAL_API_PASS: "{{ event_dispatcher_pass }}"
|
||||
LDAP_SERVER : "{{ ldap_connection_url }}"
|
||||
LDAP_BIND_DN : "{{ ldap_bind_dn }}"
|
||||
LDAP_BIND_PW : "{{ ldap_password }}"
|
||||
LDAP_BASE_DN : "{{ ldap_user_dn }}"
|
||||
SIGNAL_GATEWAY_PASS: "{{ event_dispatcher_token }}"
|
||||
@@ -0,0 +1,11 @@
|
||||
gotify:
|
||||
image: gotify/server
|
||||
restart: always
|
||||
environment:
|
||||
- TZ="Europe/Berlin"
|
||||
- GOTIFY_DEFAULTUSER_NAME={{ gotify_user }}
|
||||
- GOTIFY_DEFAULTUSER_PASS={{ gotify_password }}
|
||||
ports:
|
||||
- 4001:80
|
||||
volumes:
|
||||
- /data/gotify/data:/app/data
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
grafana:
|
||||
ports:
|
||||
- 4000:3000
|
||||
image: grafana/grafana-oss
|
||||
restart: always
|
||||
volumes:
|
||||
- "/data/grafana/grafana-var/:/var/lib/grafana"
|
||||
- "/data/grafana/grafana.ini:/etc/grafana/grafana.ini"
|
||||
environment:
|
||||
GF_INSTALL_PLUGINS : "grafana-clock-panel,grafana-simple-json-datasource"
|
||||
@@ -0,0 +1,39 @@
|
||||
version: '3'
|
||||
services:
|
||||
database:
|
||||
image: postgres:13.4-alpine
|
||||
environment:
|
||||
- POSTGRES_USER=hedgedoc
|
||||
- POSTGRES_PASSWORD=D7OIx5VBUa7nEzdy6f
|
||||
- POSTGRES_DB=hedgedoc
|
||||
volumes:
|
||||
- /data/hedgedoc/pgsql:/var/lib/postgresql/data
|
||||
restart: always
|
||||
app:
|
||||
# Make sure to use the latest release from https://hedgedoc.org/latest-release
|
||||
image: quay.io/hedgedoc/hedgedoc:1.9.9
|
||||
environment:
|
||||
- CMD_DB_URL=postgres://hedgedoc:D7OIx5VBUa7nEzdy6f@database:5432/hedgedoc
|
||||
- CMD_DOMAIN=hedgedoc.atlantishq.de
|
||||
- CMD_PROTOCOL_USESSL=true
|
||||
- CMD_ALLOW_ORIGIN=['hedgedoc.atlantishq.de']
|
||||
- CMD_EMAIL=false
|
||||
- CMD_ALLOW_EMAIL_REGISTER=false
|
||||
- CMD_OAUTH2_USER_PROFILE_URL=https://{{ keycloak_address }}/realms/master/protocol/openid-connect/userinfo
|
||||
- CMD_OAUTH2_TOKEN_URL=https://{{ keycloak_address }}/realms/master/protocol/openid-connect/token
|
||||
- CMD_OAUTH2_AUTHORIZATION_URL=https://{{ keycloak_address }}/realms/master/protocol/openid-connect/auth
|
||||
- CMD_OAUTH2_CLIENT_ID=z_hedgedoc
|
||||
- CMD_OAUTH2_CLIENT_SECRET=T4kvtI0ZF1JepEbmTm9bCksCJkuDOicGd
|
||||
- CMD_OAUTH2_SCOPE=openid email profile
|
||||
- CMD_OAUTH2_ROLES_CLAIM=roles
|
||||
- CMD_OAUTH2_PROVIDERNAME=AtlantisHQ Auth
|
||||
- CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR=preferred_username
|
||||
- CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR=name
|
||||
- CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR=email
|
||||
volumes:
|
||||
- /data/hedgedoc/uploads:/hedgedoc/public/uploads
|
||||
ports:
|
||||
- "5012:3000"
|
||||
restart: always
|
||||
depends_on:
|
||||
- database
|
||||
@@ -0,0 +1,10 @@
|
||||
heimdall:
|
||||
image: linuxserver/heimdall:latest
|
||||
restart: always
|
||||
ports:
|
||||
- 6011:80
|
||||
volumes:
|
||||
- /data/heimdall/:/config/
|
||||
environment:
|
||||
- PGID=1000
|
||||
- PUID=1000
|
||||
@@ -0,0 +1,15 @@
|
||||
version: "3"
|
||||
services:
|
||||
money-balancer:
|
||||
image: ghcr.io/dorianim/money-balancer
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- {{ services[item].port + 1000 }}:8000
|
||||
volumes:
|
||||
- /data/money-balancer:/data
|
||||
environment:
|
||||
- MONEYBALANCER_JWT_SECRET=Opta7EkHqgBWUDZULVypcP8FCxw511
|
||||
- MONEYBALANCER_AUTH_LOCAL_ENABLED=false
|
||||
- MONEYBALANCER_AUTH_PROXY_ENABLED=true
|
||||
- MONEYBALANCER_AUTH_PROXY_HEADERS_USERNAME=x-forwarded-preferred-username
|
||||
- MONEYBALANCER_AUTH_PROXY_HEADERS_NICKNAME=x-forwarded-preferred-username
|
||||
@@ -0,0 +1,6 @@
|
||||
potaris:
|
||||
ports:
|
||||
- 5003:5000
|
||||
- 5004:5000
|
||||
image: harbor-registry.atlantishq.de/atlantishq/potaris-next-gen-web
|
||||
restart: always
|
||||
@@ -0,0 +1,12 @@
|
||||
version: '3'
|
||||
services:
|
||||
image-factory:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-image-factory:latest
|
||||
restart: always
|
||||
ports:
|
||||
- "{{ services[item].port + 1000 }}:5000"
|
||||
environment:
|
||||
UPLOAD_ENABLED: "yes"
|
||||
PICTURES_DIRECTORY: pictures
|
||||
volumes:
|
||||
- "/data/image-factory/pictures/:/app/pictures/"
|
||||
@@ -0,0 +1,93 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio
|
||||
restart: unless-stopped
|
||||
command: server /data
|
||||
ports:
|
||||
- 9000:9000
|
||||
volumes:
|
||||
- /data/reactive-resume/minio/:/data
|
||||
networks:
|
||||
- resume
|
||||
environment:
|
||||
MINIO_ROOT_USER: minioadmin
|
||||
MINIO_ROOT_PASSWORD: WGTVrFT73kwv0CbKa0PR
|
||||
|
||||
db:
|
||||
image: postgres:13
|
||||
environment:
|
||||
- POSTGRES_USER=reactiveresume
|
||||
- POSTGRES_PASSWORD=pwMOJntCfXdwF9ExnjNi
|
||||
- POSTGRES_DB=reactiveresume
|
||||
restart: always
|
||||
volumes:
|
||||
- /data/reative-resume-postgres/:/var/lib/postgresql/data
|
||||
networks:
|
||||
- resume
|
||||
|
||||
redis:
|
||||
image: redis:latest
|
||||
environment:
|
||||
- TZ=Europe/Berlin
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- resume
|
||||
|
||||
chrome:
|
||||
image: browserless/chrome:latest
|
||||
networks:
|
||||
- resume
|
||||
|
||||
app:
|
||||
image: amruthpillai/reactive-resume:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- {{ services[item].port + 1000 }}:3000
|
||||
networks:
|
||||
- resume
|
||||
depends_on:
|
||||
- db
|
||||
- minio
|
||||
- redis
|
||||
- chrome
|
||||
environment:
|
||||
# -- Environment Variables --
|
||||
PORT: 3000
|
||||
NODE_ENV: production
|
||||
|
||||
# -- URLs --
|
||||
PUBLIC_URL: https://resume.atlantishq.de
|
||||
STORAGE_URL: http://localhost:9000
|
||||
|
||||
# -- Printer (Chrome) --
|
||||
CHROME_TOKEN: chrome_token
|
||||
CHROME_URL: ws://chrome:3000
|
||||
|
||||
# -- Database (Postgres) --
|
||||
DATABASE_URL: postgresql://reactiveresume:pwMOJntCfXdwF9ExnjNi@db:5432/postgres
|
||||
|
||||
# -- Auth --
|
||||
ACCESS_TOKEN_SECRET: 2EkPnUqJIE2EkPnUqJIE
|
||||
REFRESH_TOKEN_SECRET: cihib7NzMxcihib7NzMx
|
||||
|
||||
# -- Emails --
|
||||
MAIL_FROM: noreply@atlantishq.de
|
||||
SMTP_URL: smtp://{{ smtp_service_user }}@atlantishq.de:{{ smtp_service_pass }}@{{ smtp_internal_host }}:{{ smtp_internal_host_port }}
|
||||
|
||||
# -- Storage (Minio) --
|
||||
STORAGE_ENDPOINT: minio
|
||||
STORAGE_PORT: 9000
|
||||
STORAGE_BUCKET: default
|
||||
STORAGE_ACCESS_KEY: minioadmin
|
||||
STORAGE_SECRET_KEY: WGTVrFT73kwv0CbKa0PR
|
||||
|
||||
# -- Cache (Redis) --
|
||||
REDIS_URL: redis://default:password@redis:6379
|
||||
|
||||
# -- Email (Optional) --
|
||||
# DISABLE_EMAIL_AUTH: true
|
||||
# VITE_DISABLE_SIGNUPS: true
|
||||
|
||||
networks:
|
||||
resume:
|
||||
@@ -0,0 +1,5 @@
|
||||
sector32:
|
||||
ports:
|
||||
- 5001:5000
|
||||
image: registry.atlantishq.de/athq/sector32
|
||||
restart: always
|
||||
@@ -0,0 +1,14 @@
|
||||
version: '3'
|
||||
services:
|
||||
soundlib:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/atlantis-soundlib:latest
|
||||
restart: always
|
||||
ports:
|
||||
- "{{ services[item].port + 1000 }}:5000"
|
||||
environment:
|
||||
S3_BUCKET: soundlib
|
||||
AWS_ACCESS_KEY_ID: {{ SOUNDLIB_AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: {{ SOUNDLIB_AWS_SECRET_ACCESS_KEY }}
|
||||
S3_ENDPOINT: {{ SOUNDLIB_S3_ENDPOINT }}
|
||||
volumes:
|
||||
- /data/soundlib/instance/:/app/instance/
|
||||
@@ -0,0 +1,14 @@
|
||||
tmnf-replay-server:
|
||||
image: harbor-registry.atlantishq.de/atlantishq/tmnf-replay-server:latest
|
||||
restart: always
|
||||
ports:
|
||||
- 6010:5000
|
||||
volumes:
|
||||
- /data/tmnf-replay-server/data/:/app/data/
|
||||
- /data/tmnf-replay-server/uploads/:/app/uploads/
|
||||
environment:
|
||||
SQLITE_LOCATION: sqlite:////app/data/sqlite.db
|
||||
DISPATCH_SERVER: {{ event_dispatcher_address }}
|
||||
DISPATCH_AUTH_USER: {{ event_dispatcher_user }}
|
||||
DISPATCH_AUTH_PASSWORD: {{ event_dispatcher_pass }}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
version: "3.4"
|
||||
services:
|
||||
obfs4-bridge:
|
||||
image: thetorproject/obfs4-bridge:latest
|
||||
networks:
|
||||
- obfs4_bridge_external_network
|
||||
environment:
|
||||
- OR_PORT=20000
|
||||
- PT_PORT=20001
|
||||
- EMAIL=nobody@nowhere.com
|
||||
- NICKNAME=nowhere
|
||||
- OBFS4_ENABLE_ADDITIONAL_VARIABLES=1
|
||||
- OBFS4V_AddressDisableIPv6=1
|
||||
# - OBFS4V_PublishServerDescriptor=0
|
||||
volumes:
|
||||
- data:/var/lib/tor
|
||||
ports:
|
||||
- 20000:20000
|
||||
- 20001:20001
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
data:
|
||||
name: tor-datadir-20000-20001
|
||||
|
||||
networks:
|
||||
obfs4_bridge_external_network:
|
||||
@@ -0,0 +1,59 @@
|
||||
- name: nsca-ng service reload
|
||||
systemd:
|
||||
name: nsca-ng
|
||||
state: restarted
|
||||
enabled: yes
|
||||
daemon_reload: yes
|
||||
|
||||
- name: restart rsyslog
|
||||
systemd:
|
||||
name: rsyslog
|
||||
state: restarted
|
||||
|
||||
- name: restart collectd
|
||||
systemd:
|
||||
name: collectd
|
||||
state: restarted
|
||||
|
||||
- name: restart influxdb
|
||||
systemd:
|
||||
name: influxdb
|
||||
state: restarted
|
||||
|
||||
- name: restart postfix
|
||||
systemd:
|
||||
name: postfix
|
||||
state: restarted
|
||||
|
||||
- name: restart dovecot
|
||||
systemd:
|
||||
name: dovecot
|
||||
state: restarted
|
||||
|
||||
- name: restart nginx
|
||||
systemd:
|
||||
name: nginx
|
||||
state: restarted
|
||||
|
||||
- name: restart ldap
|
||||
systemd:
|
||||
name: ldap
|
||||
state: restarted
|
||||
|
||||
- name: restart opendkim
|
||||
systemd:
|
||||
name: opendkim
|
||||
state: restarted
|
||||
|
||||
- name: restart slapd
|
||||
systemd:
|
||||
name: slapd-custom
|
||||
state: restarted
|
||||
|
||||
- name: daemon reload
|
||||
systemd:
|
||||
daemon-reload: yes
|
||||
|
||||
- name: apt update
|
||||
apt:
|
||||
update_cache: yes
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"auth_mode": "oidc_auth",
|
||||
"oidc_name": "AtlantisHQ Accounts",
|
||||
"oidc_endpoint": "https://keycloak.atlantishq.de/realms/master",
|
||||
"oidc_groups_claim": "groups",
|
||||
"oidc_admin_group": "pki",
|
||||
"oidc_client_id": "z_harbor",
|
||||
"oidc_client_secret": "TODO MUST BE SET",
|
||||
"oidc_scope": "openid,email,profile",
|
||||
"oidc_verify_cert": "true",
|
||||
"oidc_auto_onboard": "true",
|
||||
"oidc_user_claim": "preferred_username"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
- name: restart harbor
|
||||
docker_compose:
|
||||
project_src: /opt/harbor/
|
||||
state: present
|
||||
restarted: yes
|
||||
@@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- global-handlers
|
||||
@@ -0,0 +1,50 @@
|
||||
- name: Install Docker prerequisites
|
||||
apt:
|
||||
state: present
|
||||
pkg:
|
||||
- docker.io
|
||||
- docker-compose
|
||||
|
||||
- name: Create /data/ dir
|
||||
file:
|
||||
path: /data/
|
||||
state: directory
|
||||
|
||||
- name: Download release
|
||||
get_url:
|
||||
url: https://github.com/goharbor/harbor/releases/download/{{ harbor_version }}/{{ harbor_file }}
|
||||
dest: /opt/{{ harbor_file }}
|
||||
|
||||
- name: Extract release
|
||||
unarchive:
|
||||
remote_src: true
|
||||
src: /opt/harbor-online-installer-v2.10.0.tgz
|
||||
dest: /opt/
|
||||
register: release
|
||||
|
||||
- name: Copy harbor config
|
||||
template:
|
||||
src: harbor.config.yaml
|
||||
dest: /opt/harbor/harbor.yml # mind the missing a
|
||||
register: config
|
||||
|
||||
- name: run installer
|
||||
shell:
|
||||
cmd: ./install.sh --with-trivy
|
||||
chdir: /opt/harbor/
|
||||
when: config.changed or release.changed
|
||||
notify: restart harbor
|
||||
|
||||
- name: Inject OIDC Config
|
||||
lineinfile:
|
||||
state: present
|
||||
path: /opt/harbor/common/config/core/env
|
||||
line: CONFIG_OVERWRITE_JSON={{ lookup('file','harbor-oidc.json') | from_json | to_json }}
|
||||
regex: CONFIG_OVERWRITE_JSON=
|
||||
notify: restart harbor
|
||||
|
||||
- name: Add @reboot compose job # harbor deps are meh, restart: always is not safe
|
||||
cron:
|
||||
name: "Harbor Up"
|
||||
special_time: "reboot"
|
||||
job: "/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml up"
|
||||
@@ -0,0 +1,306 @@
|
||||
# Configuration file of Harbor
|
||||
|
||||
# The IP address or hostname to access admin UI and registry service.
|
||||
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
|
||||
hostname: NOPE
|
||||
|
||||
# http related config
|
||||
http:
|
||||
# port for http, default is 80. If https enabled, this port will redirect to https port
|
||||
port: 80
|
||||
|
||||
# https related config
|
||||
#https:
|
||||
# # https port for harbor, default is 443
|
||||
# port: 443
|
||||
# # The path of cert and key files for nginx
|
||||
# certificate: /your/certificate/path
|
||||
# private_key: /your/private/key/path
|
||||
|
||||
# # Uncomment following will enable tls communication between all harbor components
|
||||
# internal_tls:
|
||||
# # set enabled to true means internal tls is enabled
|
||||
# enabled: true
|
||||
# # put your cert and key files on dir
|
||||
# dir: /etc/harbor/tls/internal
|
||||
# # enable strong ssl ciphers (default: false)
|
||||
# strong_ssl_ciphers: false
|
||||
|
||||
# Uncomment external_url if you want to enable external proxy
|
||||
# And when it enabled the hostname will no longer used
|
||||
external_url: https://harbor-registry.atlantishq.de
|
||||
|
||||
# The initial password of Harbor admin
|
||||
# It only works in first time to install harbor
|
||||
# Remember Change the admin password from UI after launching Harbor.
|
||||
harbor_admin_password: {{ harbor_admin_password }}
|
||||
|
||||
# Harbor DB configuration
|
||||
database:
|
||||
# The password for the root user of Harbor DB. Change this before any production use.
|
||||
password: {{ harbor_db_password }}
|
||||
# The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
|
||||
max_idle_conns: 100
|
||||
# The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
|
||||
# Note: the default number of connections is 1024 for postgres of harbor.
|
||||
max_open_conns: 900
|
||||
# The maximum amount of time a connection may be reused. Expired connections may be closed lazily before reuse. If it <= 0, connections are not closed due to a connection's age.
|
||||
# The value is a duration string. A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
|
||||
conn_max_lifetime: 5m
|
||||
# The maximum amount of time a connection may be idle. Expired connections may be closed lazily before reuse. If it <= 0, connections are not closed due to a connection's idle time.
|
||||
# The value is a duration string. A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as "300ms", "-1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
|
||||
conn_max_idle_time: 0
|
||||
|
||||
# The default data volume
|
||||
data_volume: /data/harbor/
|
||||
|
||||
# Harbor Storage settings by default is using /data dir on local filesystem
|
||||
# Uncomment storage_service setting If you want to using external storage
|
||||
# storage_service:
|
||||
# # ca_bundle is the path to the custom root ca certificate, which will be injected into the truststore
|
||||
# # of registry's containers. This is usually needed when the user hosts a internal storage with self signed certificate.
|
||||
# ca_bundle:
|
||||
|
||||
# # storage backend, default is filesystem, options include filesystem, azure, gcs, s3, swift and oss
|
||||
# # for more info about this configuration please refer https://docs.docker.com/registry/configuration/
|
||||
# filesystem:
|
||||
# maxthreads: 100
|
||||
# # set disable to true when you want to disable registry redirect
|
||||
# redirect:
|
||||
# disable: false
|
||||
|
||||
# Trivy configuration
|
||||
#
|
||||
# Trivy DB contains vulnerability information from NVD, Red Hat, and many other upstream vulnerability databases.
|
||||
# It is downloaded by Trivy from the GitHub release page https://github.com/aquasecurity/trivy-db/releases and cached
|
||||
# in the local file system. In addition, the database contains the update timestamp so Trivy can detect whether it
|
||||
# should download a newer version from the Internet or use the cached one. Currently, the database is updated every
|
||||
# 12 hours and published as a new release to GitHub.
|
||||
trivy:
|
||||
# ignoreUnfixed The flag to display only fixed vulnerabilities
|
||||
ignore_unfixed: false
|
||||
# skipUpdate The flag to enable or disable Trivy DB downloads from GitHub
|
||||
#
|
||||
# You might want to enable this flag in test or CI/CD environments to avoid GitHub rate limiting issues.
|
||||
# If the flag is enabled you have to download the `trivy-offline.tar.gz` archive manually, extract `trivy.db` and
|
||||
# `metadata.json` files and mount them in the `/home/scanner/.cache/trivy/db` path.
|
||||
skip_update: false
|
||||
#
|
||||
# The offline_scan option prevents Trivy from sending API requests to identify dependencies.
|
||||
# Scanning JAR files and pom.xml may require Internet access for better detection, but this option tries to avoid it.
|
||||
# For example, the offline mode will not try to resolve transitive dependencies in pom.xml when the dependency doesn't
|
||||
# exist in the local repositories. It means a number of detected vulnerabilities might be fewer in offline mode.
|
||||
# It would work if all the dependencies are in local.
|
||||
# This option doesn't affect DB download. You need to specify "skip-update" as well as "offline-scan" in an air-gapped environment.
|
||||
offline_scan: false
|
||||
#
|
||||
# Comma-separated list of what security issues to detect. Possible values are `vuln`, `config` and `secret`. Defaults to `vuln`.
|
||||
security_check: vuln
|
||||
#
|
||||
# insecure The flag to skip verifying registry certificate
|
||||
insecure: false
|
||||
# github_token The GitHub access token to download Trivy DB
|
||||
#
|
||||
# Anonymous downloads from GitHub are subject to the limit of 60 requests per hour. Normally such rate limit is enough
|
||||
# for production operations. If, for any reason, it's not enough, you could increase the rate limit to 5000
|
||||
# requests per hour by specifying the GitHub access token. For more details on GitHub rate limiting please consult
|
||||
# https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting
|
||||
#
|
||||
# You can create a GitHub token by following the instructions in
|
||||
# https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
|
||||
#
|
||||
# github_token: xxx
|
||||
|
||||
jobservice:
|
||||
# Maximum number of job workers in job service
|
||||
max_job_workers: 10
|
||||
# The jobLoggers backend name, only support "STD_OUTPUT", "FILE" and/or "DB"
|
||||
job_loggers:
|
||||
- STD_OUTPUT
|
||||
- FILE
|
||||
# - DB
|
||||
# The jobLogger sweeper duration (ignored if `jobLogger` is `stdout`)
|
||||
logger_sweeper_duration: 1 #days
|
||||
|
||||
notification:
|
||||
# Maximum retry count for webhook job
|
||||
webhook_job_max_retry: 3
|
||||
# HTTP client timeout for webhook job
|
||||
webhook_job_http_client_timeout: 3 #seconds
|
||||
|
||||
# Log configurations
|
||||
log:
|
||||
# options are debug, info, warning, error, fatal
|
||||
level: info
|
||||
# configs for logs in local storage
|
||||
local:
|
||||
# Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are removed rather than rotated.
|
||||
rotate_count: 50
|
||||
# Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the size is assumed to be in kilobytes.
|
||||
# If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G
|
||||
# are all valid.
|
||||
rotate_size: 200M
|
||||
# The directory on your host that store log
|
||||
location: /var/log/harbor
|
||||
|
||||
# Uncomment following lines to enable external syslog endpoint.
|
||||
# external_endpoint:
|
||||
# # protocol used to transmit log to external endpoint, options is tcp or udp
|
||||
# protocol: tcp
|
||||
# # The host of external endpoint
|
||||
# host: localhost
|
||||
# # Port of external endpoint
|
||||
# port: 5140
|
||||
|
||||
#This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY!
|
||||
_version: 2.10.0
|
||||
|
||||
# Uncomment external_database if using external database.
|
||||
# external_database:
|
||||
# harbor:
|
||||
# host: harbor_db_host
|
||||
# port: harbor_db_port
|
||||
# db_name: harbor_db_name
|
||||
# username: harbor_db_username
|
||||
# password: harbor_db_password
|
||||
# ssl_mode: disable
|
||||
# max_idle_conns: 2
|
||||
# max_open_conns: 0
|
||||
|
||||
# Uncomment redis if need to customize redis db
|
||||
# redis:
|
||||
# # db_index 0 is for core, it's unchangeable
|
||||
# # registry_db_index: 1
|
||||
# # jobservice_db_index: 2
|
||||
# # trivy_db_index: 5
|
||||
# # it's optional, the db for harbor business misc, by default is 0, uncomment it if you want to change it.
|
||||
# # harbor_db_index: 6
|
||||
# # it's optional, the db for harbor cache layer, by default is 0, uncomment it if you want to change it.
|
||||
# # cache_db_index: 7
|
||||
|
||||
# Uncomment redis if need to customize redis db
|
||||
# redis:
|
||||
# # db_index 0 is for core, it's unchangeable
|
||||
# # registry_db_index: 1
|
||||
# # jobservice_db_index: 2
|
||||
# # trivy_db_index: 5
|
||||
# # it's optional, the db for harbor business misc, by default is 0, uncomment it if you want to change it.
|
||||
# # harbor_db_index: 6
|
||||
# # it's optional, the db for harbor cache layer, by default is 0, uncomment it if you want to change it.
|
||||
# # cache_layer_db_index: 7
|
||||
|
||||
# Uncomment external_redis if using external Redis server
|
||||
# external_redis:
|
||||
# # support redis, redis+sentinel
|
||||
# # host for redis: <host_redis>:<port_redis>
|
||||
# # host for redis+sentinel:
|
||||
# # <host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>
|
||||
# host: redis:6379
|
||||
# password:
|
||||
# # Redis AUTH command was extended in Redis 6, it is possible to use it in the two-arguments AUTH <username> <password> form.
|
||||
# # there's a known issue when using external redis username ref:https://github.com/goharbor/harbor/issues/18892
|
||||
# # if you care about the image pull/push performance, please refer to this https://github.com/goharbor/harbor/wiki/Harbor-FAQs#external-redis-username-password-usage
|
||||
# # username:
|
||||
# # sentinel_master_set must be set to support redis+sentinel
|
||||
# #sentinel_master_set:
|
||||
# # db_index 0 is for core, it's unchangeable
|
||||
# registry_db_index: 1
|
||||
# jobservice_db_index: 2
|
||||
# trivy_db_index: 5
|
||||
# idle_timeout_seconds: 30
|
||||
# # it's optional, the db for harbor business misc, by default is 0, uncomment it if you want to change it.
|
||||
# # harbor_db_index: 6
|
||||
# # it's optional, the db for harbor cache layer, by default is 0, uncomment it if you want to change it.
|
||||
# # cache_layer_db_index: 7
|
||||
|
||||
# Uncomment uaa for trusting the certificate of uaa instance that is hosted via self-signed cert.
|
||||
# uaa:
|
||||
# ca_file: /path/to/ca
|
||||
|
||||
# Global proxy
|
||||
# Config http proxy for components, e.g. http://my.proxy.com:3128
|
||||
# Components doesn't need to connect to each others via http proxy.
|
||||
# Remove component from `components` array if want disable proxy
|
||||
# for it. If you want use proxy for replication, MUST enable proxy
|
||||
# for core and jobservice, and set `http_proxy` and `https_proxy`.
|
||||
# Add domain to the `no_proxy` field, when you want disable proxy
|
||||
# for some special registry.
|
||||
proxy:
|
||||
http_proxy:
|
||||
https_proxy:
|
||||
no_proxy:
|
||||
components:
|
||||
- core
|
||||
- jobservice
|
||||
- trivy
|
||||
|
||||
# metric:
|
||||
# enabled: false
|
||||
# port: 9090
|
||||
# path: /metrics
|
||||
|
||||
# Trace related config
|
||||
# only can enable one trace provider(jaeger or otel) at the same time,
|
||||
# and when using jaeger as provider, can only enable it with agent mode or collector mode.
|
||||
# if using jaeger collector mode, uncomment endpoint and uncomment username, password if needed
|
||||
# if using jaeger agetn mode uncomment agent_host and agent_port
|
||||
# trace:
|
||||
# enabled: true
|
||||
# # set sample_rate to 1 if you wanna sampling 100% of trace data; set 0.5 if you wanna sampling 50% of trace data, and so forth
|
||||
# sample_rate: 1
|
||||
# # # namespace used to differenciate different harbor services
|
||||
# # namespace:
|
||||
# # # attributes is a key value dict contains user defined attributes used to initialize trace provider
|
||||
# # attributes:
|
||||
# # application: harbor
|
||||
# # # jaeger should be 1.26 or newer.
|
||||
# # jaeger:
|
||||
# # endpoint: http://hostname:14268/api/traces
|
||||
# # username:
|
||||
# # password:
|
||||
# # agent_host: hostname
|
||||
# # # export trace data by jaeger.thrift in compact mode
|
||||
# # agent_port: 6831
|
||||
# # otel:
|
||||
# # endpoint: hostname:4318
|
||||
# # url_path: /v1/traces
|
||||
# # compression: false
|
||||
# # insecure: true
|
||||
# # # timeout is in seconds
|
||||
# # timeout: 10
|
||||
|
||||
# Enable purge _upload directories
|
||||
upload_purging:
|
||||
enabled: true
|
||||
# remove files in _upload directories which exist for a period of time, default is one week.
|
||||
age: 168h
|
||||
# the interval of the purge operations
|
||||
interval: 24h
|
||||
dryrun: false
|
||||
|
||||
# Cache layer configurations
|
||||
# If this feature enabled, harbor will cache the resource
|
||||
# `project/project_metadata/repository/artifact/manifest` in the redis
|
||||
# which can especially help to improve the performance of high concurrent
|
||||
# manifest pulling.
|
||||
# NOTICE
|
||||
# If you are deploying Harbor in HA mode, make sure that all the harbor
|
||||
# instances have the same behaviour, all with caching enabled or disabled,
|
||||
# otherwise it can lead to potential data inconsistency.
|
||||
cache:
|
||||
# not enabled by default
|
||||
enabled: false
|
||||
# keep cache for one day by default
|
||||
expire_hours: 24
|
||||
|
||||
# Harbor core configurations
|
||||
# Uncomment to enable the following harbor core related configuration items.
|
||||
# core:
|
||||
# # The provider for updating project quota(usage), there are 2 options, redis or db,
|
||||
# # by default is implemented by db but you can switch the updation via redis which
|
||||
# # can improve the performance of high concurrent pushing to the same project,
|
||||
# # and reduce the database connections spike and occupies.
|
||||
# # By redis will bring up some delay for quota usage updation for display, so only
|
||||
# # suggest switch provider to redis if you were ran into the db connections spike aroud
|
||||
# # the scenario of high concurrent pushing to same project, no improvment for other scenes.
|
||||
# quota_update_provider: redis # Or db
|
||||
@@ -0,0 +1,84 @@
|
||||
- name: Install iptables
|
||||
apt:
|
||||
state: present
|
||||
pkg:
|
||||
- iptables
|
||||
|
||||
- name: Allow related and established connections
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
ctstate: ESTABLISHED,RELATED
|
||||
jump: ACCEPT
|
||||
|
||||
- name: Allow Hypervisor
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.1
|
||||
jump: ACCEPT
|
||||
comment: "allow hypervisor"
|
||||
|
||||
- name: Allow ping from monitoring
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.107
|
||||
protocol: icmp
|
||||
jump: ACCEPT
|
||||
comment: "allow monitoring to ping"
|
||||
|
||||
- name: Allow TLS Check from monitoring on mail
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.107
|
||||
protocol: tcp
|
||||
destination_port: "{{ item }}"
|
||||
jump: ACCEPT
|
||||
comment: "allow monitoring to check mail TLS ports"
|
||||
with_items:
|
||||
- 465
|
||||
- 993
|
||||
|
||||
- name: Allow ping from zabbix
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.117
|
||||
protocol: icmp
|
||||
jump: ACCEPT
|
||||
comment: "allow zabbix to ping"
|
||||
|
||||
- name: Allow zabbix-agent from zabbix
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.117
|
||||
protocol: tcp
|
||||
destination_port: "10050"
|
||||
jump: ACCEPT
|
||||
comment: "allow zabbix to connect to agent"
|
||||
|
||||
- name: Allow node-exporter from prometheus
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.120
|
||||
protocol: tcp
|
||||
destination_port: "9100"
|
||||
jump: ACCEPT
|
||||
comment: "allow prometheus to access node-exporter"
|
||||
|
||||
- name: Open Configured internal ports
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
destination_port: "{{ item.port }}"
|
||||
source: 192.168.122.0/24
|
||||
protocol: "{{ item.protocol }}"
|
||||
comment: "{{ item.comment }}"
|
||||
jump: ACCEPT
|
||||
loop: "{{ extra_internal_iptables_ports_allow }}"
|
||||
when: extra_internal_iptables_ports_allow is defined
|
||||
|
||||
- name: Reject everything else in internal network
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
source: 192.168.122.0/24
|
||||
comment: "Block internal network"
|
||||
jump: REJECT
|
||||
reject_with: icmp-admin-prohibited
|
||||
state: present
|
||||
@@ -0,0 +1,122 @@
|
||||
# Enable installed protocols
|
||||
!include_try /usr/share/dovecot/protocols.d/*.protocol
|
||||
|
||||
# logs
|
||||
info_log_path = /var/dovecot/logs/dovecot_info.log
|
||||
log_path = /var/dovecot/logs/dovecot.log
|
||||
|
||||
protocols = imap pop3 lmtp
|
||||
|
||||
# We're using Maildir format
|
||||
mail_location = maildir:~/Maildir
|
||||
|
||||
# If you're using POP3, you'll need this:
|
||||
pop3_uidl_format = %g
|
||||
|
||||
# Authentication configuration:
|
||||
auth_verbose = yes
|
||||
auth_mechanisms = plain login
|
||||
disable_plaintext_auth = no
|
||||
|
||||
passdb {
|
||||
driver = passwd-file
|
||||
args = scheme=SHA512-CRYPT username_format=%n /var/dovecot/auth/passwd
|
||||
}
|
||||
userdb {
|
||||
driver = passwd-file
|
||||
args = username_format=%n /var/dovecot/auth/passwd
|
||||
}
|
||||
|
||||
# Postmaster
|
||||
protocol lda {
|
||||
postmaster_address = postmaster@example.com
|
||||
}
|
||||
|
||||
# Quotas mus be defined like this in passwd userdb_quota_rule=*:storage=100M
|
||||
mail_plugins = $mail_plugins quota
|
||||
protocol imap {
|
||||
mail_plugins = $mail_plugins imap_quota
|
||||
}
|
||||
plugin {
|
||||
quota = maildir
|
||||
}
|
||||
## SSL settings
|
||||
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
|
||||
ssl = yes
|
||||
ssl_cert = </etc/letsencrypt/live/atlantishq.de/fullchain.pem
|
||||
ssl_key = </etc/letsencrypt/live/atlantishq.de/privkey.pem
|
||||
ssl_min_protocol = TLSv1.1
|
||||
ssl_cipher_list = HIGH:!aNULL
|
||||
ssl_prefer_server_ciphers = yes
|
||||
|
||||
default_login_user = dovenull
|
||||
default_internal_user = dovecot
|
||||
|
||||
####### IMAP #######
|
||||
service imap-login {
|
||||
inet_listener imaps {
|
||||
port = 993
|
||||
ssl = yes
|
||||
}
|
||||
inet_listener imap {
|
||||
port = 0
|
||||
}
|
||||
|
||||
service_count = 1
|
||||
process_min_avail = 1
|
||||
vsz_limit = 100M
|
||||
}
|
||||
|
||||
protocol imap {
|
||||
imap_client_workarounds = tb-extra-mailbox-sep
|
||||
}
|
||||
service imap {
|
||||
vsz_limit = 100M
|
||||
process_limit = 100
|
||||
}
|
||||
|
||||
|
||||
####### POP3 #######
|
||||
service pop3-login {
|
||||
inet_listener pop3s {
|
||||
port = 995
|
||||
ssl = yes
|
||||
}
|
||||
inet_listener pop3 {
|
||||
port = 0
|
||||
}
|
||||
}
|
||||
service pop3 {
|
||||
process_limit = 100
|
||||
}
|
||||
|
||||
###### LMTP #######
|
||||
service lmtp {
|
||||
unix_listener /var/spool/postfix/private/dovecot_lmtp_target {
|
||||
mode = 0600
|
||||
group = postfix
|
||||
user = postfix
|
||||
}
|
||||
}
|
||||
|
||||
###### AUTH ######
|
||||
service auth {
|
||||
unix_listener auth-userdb {
|
||||
mode = 0600
|
||||
group = postfix
|
||||
user = postfix
|
||||
}
|
||||
# Postfix smtp-auth
|
||||
unix_listener /var/spool/postfix/private/auth {
|
||||
mode = 0600
|
||||
group = postfix
|
||||
user = postfix
|
||||
}
|
||||
user = dovecot
|
||||
}
|
||||
|
||||
service auth-worker {
|
||||
user = dovecot
|
||||
}
|
||||
|
||||
first_valid_uid = 100
|
||||
@@ -0,0 +1 @@
|
||||
noreply:{SHA512-CRYPT}$6$XXXXXXXXXXXXXXXXXXXuse this: $(mkpasswd -msha512crypt)XXXXX:106:113::/var/dovecot/noreply::userdb_mail=maildir:~/Maildir ::userdb_quota_rule=*:bytes=5000M
|
||||
@@ -0,0 +1 @@
|
||||
sqlite postfix-sqlite.so dict_sqlite_open
|
||||
@@ -0,0 +1,9 @@
|
||||
# Sender adress the user may use :)
|
||||
sheppy@atlantishq.de sheppy@atlantishq.de
|
||||
ths-nas@atlantishq.de ths-nas@atlantishq.de
|
||||
joerg@darknet-fashion.de joerg@darknet-fashion.de
|
||||
yannik.schmidt@potaris.de yannik.schmidt@potaris.de
|
||||
noreply@atlantishq.de noreply@atlantishq.de
|
||||
@darknet-fashion.de joerg
|
||||
@darknet-fashion.com joerg
|
||||
@atlantishq.de sheppy
|
||||
@@ -0,0 +1 @@
|
||||
/^X-Spam-Flag: YES/ REDIRECT spamsink@atlantishq.de
|
||||
@@ -0,0 +1,102 @@
|
||||
# let's confuse atackers
|
||||
smtpd_banner = $myhostname Postfix
|
||||
# appending .domain is the MUA's job.
|
||||
append_dot_mydomain = no
|
||||
# Uncomment the next line to generate "delayed mail" warnings
|
||||
# delay_warning_time = 10h
|
||||
|
||||
queue_directory = /var/spool/postfix
|
||||
|
||||
# TLS parameters
|
||||
smtpd_tls_cert_file=/etc/letsencrypt/live/atlantishq.de/fullchain.pem
|
||||
smtpd_tls_key_file=/etc/letsencrypt/live/atlantishq.de/privkey.pem
|
||||
smtpd_use_tls=yes
|
||||
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||
|
||||
# tls paramaters
|
||||
smtpd_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
|
||||
smtp_tls_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
|
||||
smtp_tls_ciphers = high
|
||||
smtpd_tls_ciphers = high
|
||||
smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
|
||||
smtp_tls_mandatory_protocols = TLSv1.2, TLSv1.1, !TLSv1, !SSLv2, !SSLv3
|
||||
smtp_tls_mandatory_ciphers = high
|
||||
smtpd_tls_mandatory_ciphers = high
|
||||
smtpd_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
|
||||
smtpd_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
|
||||
smtp_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
|
||||
smtp_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, eNULL, aNULL
|
||||
tls_preempt_cipherlist = yes
|
||||
|
||||
# breaks mailman for obvious reasons
|
||||
smtpd_tls_security_level=may
|
||||
smtpd_tls_auth_only = yes
|
||||
|
||||
# SMTP (mainly from dovecot documentation)
|
||||
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_non_fqdn_sender
|
||||
smtpd_sasl_path = private/auth
|
||||
smtpd_sasl_auth_enable = yes
|
||||
smtpd_sasl_type = dovecot
|
||||
smtpd_sasl_security_options = noanonymous
|
||||
smtpd_sasl_local_domain = $myhostname
|
||||
broken_sasl_auth_clients = yes
|
||||
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
|
||||
smtp_tls_mandatory_ciphers=high
|
||||
#smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
||||
smtp_sasl_security_options =
|
||||
smtpd_sender_login_maps=hash:/etc/postfix/enabled_senders
|
||||
## restrictions
|
||||
|
||||
# PERMIT MY NETWORKS MUST ALWAYS BE THE FIRST ARGUMENT OR YOU CANNOT SEND TO NON-LOCAL domains from NOT-DOVECOT
|
||||
#policyd-spf_time_limit = 3600
|
||||
smtpd_recipient_restrictions=permit_mynetworks,reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject_unauth_destination,check_policy_service unix:private/policyd-spf,check_sender_access hash:/etc/postfix/sender_blacklist
|
||||
#smtpd_recipient_restrictions=permit_mynetworks,reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject_unauth_destination,check_sender_access hash:/etc/postfix/sender_blacklist
|
||||
#smtpd_sender_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_sender
|
||||
smtpd_sender_restrictions=reject_authenticated_sender_login_mismatch,reject_non_fqdn_sender,permit_sasl_authenticated
|
||||
|
||||
# USER mappings (not reliant on unix users)
|
||||
|
||||
# MAILMAN #
|
||||
virtual_mailbox_domains = atlantishq.de,darknet-fashion.de,darknet-fashion.com,potaris.de
|
||||
virtual_alias_maps = hash:/etc/postfix/virtual
|
||||
#recipient_cononical_maps = hash:/etc/postfix/canonical-recipient
|
||||
|
||||
|
||||
virtual_transport = lmtp:unix:private/dovecot_lmtp_target
|
||||
#relocated_maps = hash:/etc/postfix/mail_redirect
|
||||
alias_maps = hash:/etc/aliases
|
||||
virtual_minimum_uid = 100
|
||||
virtual_uid_maps = static:1009
|
||||
virtual_gid_maps = static:1009
|
||||
#receive_override_options = no_address_mappings
|
||||
|
||||
# spam redirect happens here
|
||||
header_checks = regexp:/etc/postfix/header_checks
|
||||
|
||||
# random shit
|
||||
biff = no
|
||||
readme_directory = no
|
||||
compatibility_level = 2
|
||||
myhostname = mail.atlantishq.de
|
||||
#mydestination = localhost.divercitystudio.de,localhost.atlantishq.de, ,localhost
|
||||
mydestination = localhost
|
||||
#,localhost.esports-erlangen.de,esports-erlangen.de
|
||||
relayhost =
|
||||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
||||
mailbox_command = procmail -a "$EXTENSION"
|
||||
mailbox_size_limit = 0
|
||||
recipient_delimiter = +
|
||||
message_size_limit = 80480000
|
||||
inet_interfaces = all
|
||||
inet_protocols = all
|
||||
#alias_maps = hash:/etc/aliases
|
||||
|
||||
# Milter configuration
|
||||
milter_default_action = accept
|
||||
milter_protocol = 6
|
||||
smtpd_milters = inet:localhost:8892
|
||||
non_smtpd_milters = $smtpd_milters
|
||||
disable_mime_output_conversion = yes
|
||||
|
||||
authorized_submit_users = !check,static:all
|
||||
@@ -0,0 +1,58 @@
|
||||
# ==========================================================================
|
||||
# service type private unpriv chroot wakeup maxproc command + args
|
||||
# (yes) (yes) (no) (never) (100)
|
||||
# ==========================================================================
|
||||
smtp inet n - y - - smtpd
|
||||
-o content_filter=spamassassin
|
||||
8025 inet n - y - - smtpd
|
||||
spamassassin unix - n n - - pipe
|
||||
user=spamd argv=/usr/bin/spamc -f -e
|
||||
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
|
||||
#smtp inet n - y - 1 postscreen
|
||||
smtps inet n - y - - smtpd -v
|
||||
-o smtpd_tls_wrappermode=yes
|
||||
#smtpd pass - - y - - smtpd
|
||||
#dnsblog unix - - y - 0 dnsblog
|
||||
#tlsproxy unix - - y - 0 tlsproxy
|
||||
submission inet n - y - - smtpd
|
||||
#628 inet n - y - - qmqpd
|
||||
pickup unix n - y 60 1 pickup
|
||||
cleanup unix n - y - 0 cleanup
|
||||
qmgr unix n - n 300 1 qmgr
|
||||
#qmgr unix n - n 300 1 oqmgr
|
||||
tlsmgr unix - - y 1000? 1 tlsmgr
|
||||
rewrite unix - - y - - trivial-rewrite
|
||||
bounce unix - - y - 0 bounce
|
||||
defer unix - - y - 0 bounce
|
||||
trace unix - - y - 0 bounce
|
||||
verify unix - - y - 1 verify
|
||||
flush unix n - y 1000? 0 flush
|
||||
proxymap unix - - n - - proxymap
|
||||
proxywrite unix - - n - 1 proxymap
|
||||
smtp unix - - y - - smtp
|
||||
relay unix - - y - - smtp
|
||||
showq unix n - y - - showq
|
||||
error unix - - y - - error
|
||||
retry unix - - y - - error
|
||||
discard unix - - y - - discard
|
||||
local unix - n n - - local
|
||||
virtual unix - n n - - virtual
|
||||
lmtp unix - - y - - lmtp
|
||||
anvil unix - - y - 1 anvil
|
||||
scache unix - - y - 1 scache
|
||||
policyd-spf unix - n n - 0 spawn
|
||||
user=policyd-spf argv=/usr/bin/policyd-spf
|
||||
|
||||
########################## OTHER #############################
|
||||
maildrop unix - n n - - pipe
|
||||
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
|
||||
uucp unix - n n - - pipe
|
||||
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
|
||||
ifmail unix - n n - - pipe
|
||||
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
|
||||
bsmtp unix - n n - - pipe
|
||||
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
|
||||
scalemail-backend unix - n n - 2 pipe
|
||||
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
|
||||
dovecot unix - n n - - pipe
|
||||
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}@${nexthop} -m ${extension}
|
||||
@@ -0,0 +1,63 @@
|
||||
user www-data;
|
||||
worker_processes auto;
|
||||
pid /run/nginx.pid;
|
||||
include /etc/nginx/modules-enabled/*.conf;
|
||||
|
||||
events {
|
||||
worker_connections 768;
|
||||
# multi_accept on;
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
##
|
||||
# Basic Settings
|
||||
##
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
types_hash_max_size 2048;
|
||||
# server_tokens off;
|
||||
|
||||
# server_names_hash_bucket_size 64;
|
||||
# server_name_in_redirect off;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
##
|
||||
# SSL Settings
|
||||
##
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/atlantishq.de/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/atlantishq.de/privkey.pem;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
##
|
||||
# Logging Settings
|
||||
##
|
||||
|
||||
access_log /var/log/nginx/access.log;
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
##
|
||||
# Gzip Settings
|
||||
##
|
||||
|
||||
gzip on;
|
||||
|
||||
# gzip_vary on;
|
||||
# gzip_proxied any;
|
||||
# gzip_comp_level 6;
|
||||
# gzip_buffers 16 8k;
|
||||
# gzip_http_version 1.1;
|
||||
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
|
||||
##
|
||||
# Virtual Host Configs
|
||||
##
|
||||
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
server {
|
||||
|
||||
server_name mail.atlantishq.de autoconfig.atlantishq.de autodiscover.atlantishq.de autoconfig.potaris.de;
|
||||
listen 443 ssl;
|
||||
listen 80;
|
||||
listen [::]:443 ssl;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
auth_basic off;
|
||||
alias /var/www/.well-known/acme-challenge/;
|
||||
}
|
||||
|
||||
location /initdb {
|
||||
allow 127.0.0.1;
|
||||
deny all;
|
||||
}
|
||||
|
||||
location /{
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto http;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_pass http://localhost:8080;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
atlantishq atlantishq.de:default:/etc/opendkim/keys/atlantishq.de/default.private
|
||||
@@ -0,0 +1,86 @@
|
||||
# This is a basic configuration that can easily be adapted to suit a standard
|
||||
# installation. For more advanced options, see opendkim.conf(5) and/or
|
||||
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
|
||||
|
||||
# Log to syslog
|
||||
Syslog yes
|
||||
# Required to use local socket with MTAs that access the socket as a non-
|
||||
# privileged user (e.g. Postfix)
|
||||
UMask 007
|
||||
|
||||
# Sign for example.com with key in /etc/dkimkeys/dkim.key using
|
||||
# selector '2007' (e.g. 2007._domainkey.example.com)
|
||||
#Domain example.com
|
||||
#KeyFile /etc/dkimkeys/dkim.key
|
||||
#Selector 2007
|
||||
|
||||
# Commonly-used options; the commented-out versions show the defaults.
|
||||
#Canonicalization simple
|
||||
#Mode sv
|
||||
#SubDomains no
|
||||
|
||||
# Socket smtp://localhost
|
||||
#
|
||||
# ## Socket socketspec
|
||||
# ##
|
||||
# ## Names the socket where this filter should listen for milter connections
|
||||
# ## from the MTA. Required. Should be in one of these forms:
|
||||
# ##
|
||||
# ## inet:port@address to listen on a specific interface
|
||||
# ## inet:port to listen on all interfaces
|
||||
# ## local:/path/to/socket to listen on a UNIX domain socket
|
||||
#
|
||||
Socket inet:8892@localhost
|
||||
#Socket local:/var/run/opendkim/opendkim.sock
|
||||
#Socket local:/var/spool/postfix/opendkim/opendkim.sock
|
||||
|
||||
## PidFile filename
|
||||
### default (none)
|
||||
###
|
||||
### Name of the file where the filter should write its pid before beginning
|
||||
### normal operations.
|
||||
#
|
||||
PidFile /var/run/opendkim/opendkim.pid
|
||||
|
||||
|
||||
# Always oversign From (sign using actual From and a null From to prevent
|
||||
# malicious signatures header fields (From and/or others) between the signer
|
||||
# and the verifier. From is oversigned by default in the Debian pacakge
|
||||
# because it is often the identity key used by reputation systems and thus
|
||||
# somewhat security sensitive.
|
||||
OversignHeaders From
|
||||
|
||||
## ResolverConfiguration filename
|
||||
## default (none)
|
||||
##
|
||||
## Specifies a configuration file to be passed to the Unbound library that
|
||||
## performs DNS queries applying the DNSSEC protocol. See the Unbound
|
||||
## documentation at http://unbound.net for the expected content of this file.
|
||||
## The results of using this and the TrustAnchorFile setting at the same
|
||||
## time are undefined.
|
||||
## In Debian, /etc/unbound/unbound.conf is shipped as part of the Suggested
|
||||
## unbound package
|
||||
|
||||
# ResolverConfiguration /etc/unbound/unbound.conf
|
||||
|
||||
## TrustAnchorFile filename
|
||||
## default (none)
|
||||
##
|
||||
## Specifies a file from which trust anchor data should be read when doing
|
||||
## DNS queries and applying the DNSSEC protocol. See the Unbound documentation
|
||||
## at http://unbound.net for the expected format of this file.
|
||||
|
||||
TrustAnchorFile /usr/share/dns/root.key
|
||||
|
||||
## Userid userid
|
||||
### default (none)
|
||||
###
|
||||
### Change to user "userid" before starting normal operation? May include
|
||||
### a group ID as well, separated from the userid by a colon.
|
||||
#
|
||||
UserID opendkim
|
||||
ExternalIgnoreList /etc/opendkim/trusted.hosts
|
||||
InternalHosts /etc/opendkim/trusted.hosts
|
||||
|
||||
SigningTable refile:/etc/opendkim/signing.table
|
||||
KeyTable /etc/opendkim/key.table
|
||||
@@ -0,0 +1,3 @@
|
||||
*@atlantishq.de atlantishq
|
||||
*@lantia-it.de atlantishq
|
||||
*@esports-erlangen.de atlantishq
|
||||
@@ -0,0 +1,6 @@
|
||||
127.0.0.1
|
||||
localhost
|
||||
atlantishq.de
|
||||
192.168.122.112
|
||||
192.168.122.107
|
||||
192.168.122.117
|
||||
@@ -0,0 +1,16 @@
|
||||
# For a fully commented sample config file see policyd-spf.conf.commented
|
||||
|
||||
debugLevel = 1
|
||||
TestOnly = 1
|
||||
|
||||
#HELO_reject = Fail
|
||||
#Mail_From_reject = Fail
|
||||
|
||||
HELO_reject = False
|
||||
Mail_From_reject = False
|
||||
|
||||
PermError_reject = False
|
||||
TempError_Defer = False
|
||||
|
||||
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1,192.168.122.112,192.168.122.107
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
test@atlantishq.de sheppy@atlantishq.de
|
||||
@@ -0,0 +1,11 @@
|
||||
alyssa@catapult.gg REJECT
|
||||
service-expert.net REJECT
|
||||
yougetnow.com REJECT
|
||||
forestanes.pics REJECT
|
||||
stockcard.io REJECT
|
||||
zapingers.autos REJECT
|
||||
cleverep.com REJECT
|
||||
.ru REJECT
|
||||
allsip.ru REJECT
|
||||
sina.buffy@avantgarde-experts.de OK
|
||||
.avantgarde-experts.de OK
|
||||
@@ -0,0 +1,13 @@
|
||||
[atlantishq.de]:587 encrypt protocols=TLSv1.2 ciphers=high
|
||||
[atlantishq.de]:msa encrypt protocols=TLSv1.2 ciphers=high
|
||||
[atlantishq.de]:submission encrypt protocols=TLSv1.2 ciphers=high
|
||||
[esports-erlangen.de]:587 encrypt protocols=TLSv1.2 ciphers=high
|
||||
[esports-erlangen.de]:msa encrypt protocols=TLSv1.2 ciphers=high
|
||||
[esports-erlangen.de]:submission encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.de]:587 encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.de]:msa encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.de]:submission encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.com]:587 encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.com]:msa encrypt protocols=TLSv1.2 ciphers=high
|
||||
[darknet-fashion.com]:submission encrypt protocols=TLSv1.2 ciphers=high
|
||||
.datev.de encrypt
|
||||
@@ -0,0 +1,3 @@
|
||||
atlantishq.de lmtp:unix:private/dovecot_lmtp_target
|
||||
darknet-fashion.de lmtp:unix:private/dovecot_lmtp_target
|
||||
darknet-fashion.com lmtp:unix:private/dovecot_lmtp_target
|
||||
@@ -0,0 +1,38 @@
|
||||
# you can also so this: test-second-account@atlantishq.de test@atlantishq.de
|
||||
# which will give all incoming mails of test-second-account to test (sorta obvious)
|
||||
|
||||
# IMPORTANT >> IT IS _NOT_ NESSESARY TO DO THE FOLLOWING << IMPORTANT
|
||||
# user@atlantishq.de user@esports-erlangen.de
|
||||
# every user will get emails from both domains
|
||||
|
||||
# If a user also wants to _SEND_ mails, he also have to have an
|
||||
# entry in the /etc/postfix/enabled-senders
|
||||
|
||||
# CHANGES IN THIS FILE MUST BE MAPPED BEFORE RESTART (!)
|
||||
# postmap FILENAME
|
||||
# CHANGES IN THIS FILE WILL ONLY BE APPLIED ON POSTFIX RESTART, NOT RELOAD (!)
|
||||
|
||||
# sheppy
|
||||
insurgency@atlantishq.de sheppy@atlantishq.de
|
||||
yannik@atlantishq.de sheppy@atlantishq.de
|
||||
tac@atlantishq.de sheppy@atlantishq.de
|
||||
uplay@atlantishq.de sheppy@atlantishq.de
|
||||
#yannik.schmidt@potaris.de sheppy@atlantishq.de
|
||||
acc@atlantishq.de sheppy@atlantishq.de
|
||||
mail@potaris.de yannik.schmidt@potaris.de
|
||||
sector32@potaris.de yannik.schmidt@potaris.de
|
||||
root@atlantishq.de sheppy@atlantishq.de
|
||||
trackmania-2@atlantishq.de sheppy@atlantishq.de
|
||||
maria@atlantishq.de mondauge@icloud.com
|
||||
steam-potaris-1@atlantishq.de sheppy@atlantishq.de
|
||||
steam-potaris-2@atlantishq.de sheppy@atlantishq.de
|
||||
steam-potaris-3@atlantishq.de sheppy@atlantishq.de
|
||||
|
||||
# michy
|
||||
ipatix@atlantishq.de michael.panzlaff@fau.de
|
||||
|
||||
# catchall
|
||||
#@atlantishq.de root@atlantishq.de
|
||||
#@esports-erlangen.de root@atlantishq.de
|
||||
@darknet-fashion.com joerg@darknet-fashion.de
|
||||
@darknet-fashion.de joerg@darknet-fashion.de
|
||||
@@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- global-handlers
|
||||
@@ -0,0 +1,88 @@
|
||||
- name: Install Mail stuff
|
||||
apt:
|
||||
pkg:
|
||||
- postfix
|
||||
- dovecot-core
|
||||
- dovecot-imapd
|
||||
- spamassassin
|
||||
- nginx
|
||||
- postfix-policyd-spf-python
|
||||
- opendkim
|
||||
- opendkim-tools
|
||||
state: present
|
||||
|
||||
- name: Deploy Postfix config
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: "/etc/postfix/{{ item }}"
|
||||
with_items:
|
||||
- dynamicmaps.cf
|
||||
- enabled_senders
|
||||
- main.cf
|
||||
- master.cf
|
||||
- relocated
|
||||
- sender_blacklist
|
||||
- tls_policy
|
||||
- transport
|
||||
- virtual
|
||||
- header_checks
|
||||
notify: restart postfix
|
||||
|
||||
- name: Deploy dmark/opendkim config (main)
|
||||
copy:
|
||||
src: "opendkim/opendkim.conf"
|
||||
dest: "/etc/opendkim.conf"
|
||||
notify: restart opendkim
|
||||
|
||||
- name: Deploy dmark/opendkim config (config dir)
|
||||
copy:
|
||||
src: "opendkim/{{ item }}"
|
||||
dest: "/etc/opendkim/"
|
||||
with_items:
|
||||
- key.table
|
||||
- signing.table
|
||||
- trusted.hosts
|
||||
notify: restart opendkim
|
||||
|
||||
- name: Deploy policy spf config
|
||||
copy:
|
||||
src: "policy-spf/policyd-spf.conf"
|
||||
dest: "/etc/postfix-policyd-spf-python/"
|
||||
notify: restart postfix
|
||||
|
||||
- name: Deploy dmark/opendkim config (config dir)
|
||||
copy:
|
||||
src: "opendkim/{{ item }}"
|
||||
dest: "/etc/opendkim/"
|
||||
with_items:
|
||||
- key.table
|
||||
- signing.table
|
||||
notify: restart postfix
|
||||
|
||||
- name: Deploy Dovecot config
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: "/etc/dovecot/{{ item }}"
|
||||
with_items:
|
||||
- dovecot.conf
|
||||
notify: restart dovecot
|
||||
|
||||
- name: Deploy nginx-config
|
||||
copy:
|
||||
src: nginx.conf
|
||||
dest: /etc/nginx/nginx.conf
|
||||
notify: restart nginx
|
||||
|
||||
- name: Deploy nginx-config (page)
|
||||
copy:
|
||||
src: nginx_default.conf
|
||||
dest: /etc/nginx/sites-available/default
|
||||
notify: restart nginx
|
||||
|
||||
- name: Deploy user passwd config
|
||||
copy:
|
||||
src: dovecot_passwd
|
||||
dest: /var/dovecot/auth/passwd
|
||||
owner: dovecot
|
||||
group: dovecot
|
||||
notify: restart dovecot
|
||||
@@ -0,0 +1,2 @@
|
||||
kathi:$y$j9T$llGL4Qoz3NYzphDi4UcK41$O2DR8i5YMS6iiKohETw58Wt5m55F/H/MIHgH3qxAdz9
|
||||
sheppy:$y$j9T$nh0aLCxl0aZ9hczSkAUxP1$zEA6PI7Kwv.lfcfJJn91hQ4A4wCjQrGyZ0w47IeyYg8
|
||||
@@ -0,0 +1,28 @@
|
||||
map $http_x_nginx_cert_auth $basic_auth_val {
|
||||
default "private";
|
||||
true off;
|
||||
}
|
||||
|
||||
server {
|
||||
|
||||
|
||||
autoindex on;
|
||||
autoindex_localtime on;
|
||||
|
||||
listen 8000;
|
||||
root /var/www/media;
|
||||
|
||||
add_header Vary Accept-Encoding;
|
||||
add_header Access-Control-Allow-Origin $http_origin;
|
||||
|
||||
location /videos/{
|
||||
default_type video/mp4;
|
||||
limit_rate 2m;
|
||||
autoindex on;
|
||||
}
|
||||
|
||||
location /auth/{
|
||||
auth_basic $basic_auth_val;
|
||||
auth_basic_user_file /etc/nginx/htpasswd;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- global-handlers
|
||||
@@ -0,0 +1,17 @@
|
||||
- name: Install Nginx
|
||||
apt:
|
||||
pkg:
|
||||
- nginx
|
||||
state: present
|
||||
|
||||
- name: Deploy nginx-config (page)
|
||||
copy:
|
||||
src: nginx_media.conf
|
||||
dest: /etc/nginx/sites-available/media.conf
|
||||
notify: restart nginx
|
||||
|
||||
- name: Deploy nginx basic auth file
|
||||
copy:
|
||||
src: htpasswd
|
||||
dest: /etc/nginx/
|
||||
notify: restart nginx
|
||||
Executable
+687
@@ -0,0 +1,687 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# check_mailq - check to see how many messages are in the smtp queue awating
|
||||
# transmittal.
|
||||
#
|
||||
# Initial version support sendmail's mailq command
|
||||
# Support for mutiple sendmail queues (Carlos Canau)
|
||||
# Support for qmail (Benjamin Schmid)
|
||||
|
||||
# License Information:
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
# USA
|
||||
#
|
||||
############################################################################
|
||||
|
||||
use POSIX;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c $opt_t $opt_s
|
||||
$opt_M $mailq $status $state $msg $msg_q $msg_p $opt_W $opt_C $mailq @lines
|
||||
%srcdomains %dstdomains);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin";
|
||||
use utils qw(%ERRORS &print_revision &support &usage );
|
||||
|
||||
my ($sudo);
|
||||
|
||||
sub print_help ();
|
||||
sub print_usage ();
|
||||
sub process_arguments ();
|
||||
|
||||
$ENV{'PATH'}='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin';
|
||||
$ENV{'BASH_ENV'}='';
|
||||
$ENV{'ENV'}='';
|
||||
$PROGNAME = "check_mailq";
|
||||
$mailq = 'sendmail'; # default
|
||||
$msg_q = 0 ;
|
||||
$msg_p = 0 ;
|
||||
$state = $ERRORS{'UNKNOWN'};
|
||||
|
||||
Getopt::Long::Configure('bundling');
|
||||
$status = process_arguments();
|
||||
if ($status){
|
||||
print "ERROR: processing arguments\n";
|
||||
exit $ERRORS{"UNKNOWN"};
|
||||
}
|
||||
|
||||
if ($opt_s) {
|
||||
if (defined $utils::PATH_TO_SUDO && -x $utils::PATH_TO_SUDO) {
|
||||
$sudo = $utils::PATH_TO_SUDO;
|
||||
} else {
|
||||
print "ERROR: Cannot execute sudo\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
$sudo = "";
|
||||
}
|
||||
|
||||
$SIG{'ALRM'} = sub {
|
||||
print ("ERROR: timed out waiting for $utils::PATH_TO_MAILQ \n");
|
||||
exit $ERRORS{"WARNING"};
|
||||
};
|
||||
alarm($opt_t);
|
||||
|
||||
# switch based on MTA
|
||||
|
||||
if ($mailq eq "sendmail") {
|
||||
|
||||
## open mailq
|
||||
if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
|
||||
if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
|
||||
print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}elsif( defined $utils::PATH_TO_MAILQ){
|
||||
unless (-x $utils::PATH_TO_MAILQ) {
|
||||
print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
# single queue empty
|
||||
##/var/spool/mqueue is empty
|
||||
# single queue: 1
|
||||
## /var/spool/mqueue (1 request)
|
||||
##----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
|
||||
##h32E30p01763 2782 Wed Apr 2 15:03 <silvaATkpnqwest.pt>
|
||||
## 8BITMIME
|
||||
## <silvaATeunet.pt>
|
||||
|
||||
# multi queue empty
|
||||
##/var/spool/mqueue/q0/df is empty
|
||||
##/var/spool/mqueue/q1/df is empty
|
||||
##/var/spool/mqueue/q2/df is empty
|
||||
##/var/spool/mqueue/q3/df is empty
|
||||
##/var/spool/mqueue/q4/df is empty
|
||||
##/var/spool/mqueue/q5/df is empty
|
||||
##/var/spool/mqueue/q6/df is empty
|
||||
##/var/spool/mqueue/q7/df is empty
|
||||
##/var/spool/mqueue/q8/df is empty
|
||||
##/var/spool/mqueue/q9/df is empty
|
||||
##/var/spool/mqueue/qA/df is empty
|
||||
##/var/spool/mqueue/qB/df is empty
|
||||
##/var/spool/mqueue/qC/df is empty
|
||||
##/var/spool/mqueue/qD/df is empty
|
||||
##/var/spool/mqueue/qE/df is empty
|
||||
##/var/spool/mqueue/qF/df is empty
|
||||
## Total Requests: 0
|
||||
# multi queue: 1
|
||||
##/var/spool/mqueue/q0/df is empty
|
||||
##/var/spool/mqueue/q1/df is empty
|
||||
##/var/spool/mqueue/q2/df is empty
|
||||
## /var/spool/mqueue/q3/df (1 request)
|
||||
##----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
|
||||
##h32De2f23534* 48 Wed Apr 2 14:40 nocol
|
||||
## nouserATEUnet.pt
|
||||
## canau
|
||||
##/var/spool/mqueue/q4/df is empty
|
||||
##/var/spool/mqueue/q5/df is empty
|
||||
##/var/spool/mqueue/q6/df is empty
|
||||
##/var/spool/mqueue/q7/df is empty
|
||||
##/var/spool/mqueue/q8/df is empty
|
||||
##/var/spool/mqueue/q9/df is empty
|
||||
##/var/spool/mqueue/qA/df is empty
|
||||
##/var/spool/mqueue/qB/df is empty
|
||||
##/var/spool/mqueue/qC/df is empty
|
||||
##/var/spool/mqueue/qD/df is empty
|
||||
##/var/spool/mqueue/qE/df is empty
|
||||
##/var/spool/mqueue/qF/df is empty
|
||||
## Total Requests: 1
|
||||
|
||||
|
||||
while (<MAILQ>) {
|
||||
|
||||
# match email addr on queue listing
|
||||
if ( (/<.*@.*\.(\w+\.\w+)>/) || (/<.*@(\w+\.\w+)>/) ) {
|
||||
my $domain = $1;
|
||||
if (/^\w+/) {
|
||||
print "$utils::PATH_TO_MAILQ = srcdomain = $domain \n" if $verbose ;
|
||||
$srcdomains{$domain} ++;
|
||||
}
|
||||
next;
|
||||
}
|
||||
|
||||
#
|
||||
# ...
|
||||
# sendmail considers a message with more than one destiny, say N, to the same MX
|
||||
# to have N messages in queue.
|
||||
# we will only consider one in this code
|
||||
if (( /\s\(reply:\sread\serror\sfrom\s.*\.(\w+\.\w+)\.$/ ) || ( /\s\(reply:\sread\serror\sfrom\s(\w+\.\w+)\.$/ ) ||
|
||||
( /\s\(timeout\swriting\smessage\sto\s.*\.(\w+\.\w+)\.:/ ) || ( /\s\(timeout\swriting\smessage\sto\s(\w+\.\w+)\.:/ ) ||
|
||||
( /\s\(host\smap:\slookup\s\(.*\.(\w+\.\w+)\):/ ) || ( /\s\(host\smap:\slookup\s\((\w+\.\w+)\):/ ) ||
|
||||
( /\s\(Deferred:\s.*\s.*\.(\w+\.\w+)\.\)/ ) || ( /\s\(Deferred:\s.*\s(\w+\.\w+)\.\)/ ) ) {
|
||||
|
||||
print "$utils::PATH_TO_MAILQ = dstdomain = $1 \n" if $verbose ;
|
||||
$dstdomains{$1} ++;
|
||||
}
|
||||
|
||||
if (/\s+\(I\/O\serror\)/) {
|
||||
print "$utils::PATH_TO_MAILQ = dstdomain = UNKNOWN \n" if $verbose ;
|
||||
$dstdomains{'UNKNOWN'} ++;
|
||||
}
|
||||
|
||||
# Finally look at the overall queue length
|
||||
#
|
||||
if (/mqueue/) {
|
||||
print "$utils::PATH_TO_MAILQ = $_ "if $verbose ;
|
||||
if (/ \((\d+) request/) {
|
||||
#
|
||||
# single queue: first line
|
||||
# multi queue: one for each queue. overwrite on multi queue below
|
||||
$msg_q = $1 ;
|
||||
}
|
||||
} elsif (/^\s+Total\sRequests:\s(\d+)$/i) {
|
||||
print "$utils::PATH_TO_MAILQ = $_ \n" if $verbose ;
|
||||
#
|
||||
# multi queue: last line
|
||||
$msg_q = $1 ;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
## close mailq
|
||||
|
||||
close (MAILQ);
|
||||
|
||||
if ( $? ) {
|
||||
print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
|
||||
exit $ERRORS{CRITICAL};
|
||||
}
|
||||
|
||||
## shut off the alarm
|
||||
alarm(0);
|
||||
|
||||
|
||||
|
||||
## now check the queue length(s)
|
||||
|
||||
if ($msg_q == 0) {
|
||||
$msg = "OK: $mailq mailq is empty";
|
||||
$state = $ERRORS{'OK'};
|
||||
} else {
|
||||
print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
|
||||
|
||||
# overall queue length
|
||||
if ($msg_q < $opt_w) {
|
||||
$msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
|
||||
$state = $ERRORS{'OK'};
|
||||
}elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
|
||||
$msg = "WARNING: $mailq mailq is $msg_q (threshold w = $opt_w)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}else {
|
||||
$msg = "CRITICAL: $mailq mailq is $msg_q (threshold c = $opt_c)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
|
||||
# check for domain specific queue lengths if requested
|
||||
if (defined $opt_W) {
|
||||
|
||||
# Apply threshold to queue lengths FROM domain
|
||||
my @srckeys = sort { $srcdomains{$b} <=> $srcdomains{$a} } keys %srcdomains;
|
||||
my $srcmaxkey = $srckeys[0];
|
||||
print "src max is $srcmaxkey with $srcdomains{$srcmaxkey} messages\n" if $verbose;
|
||||
|
||||
if ($srcdomains{$srcmaxkey} >= $opt_W && $srcdomains{$srcmaxkey} < $opt_C) {
|
||||
if ($state == $ERRORS{'OK'}) {
|
||||
$msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
} elsif (($state == $ERRORS{'WARNING'}) || ($state == $ERRORS{'CRITICAL'})){
|
||||
$msg .= " -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
|
||||
} else {
|
||||
$msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}
|
||||
} elsif ($srcdomains{$srcmaxkey} >= $opt_C) {
|
||||
if ($state == $ERRORS{'OK'}) {
|
||||
$msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
} elsif ($state == $ERRORS{'WARNING'}) {
|
||||
$msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C) -and- " . $msg;
|
||||
$msg =~ s/WARNING: //;
|
||||
} elsif ($state == $ERRORS{'CRITICAL'}) {
|
||||
$msg .= " -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
|
||||
} else {
|
||||
$msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
} else {
|
||||
if ($srcdomains{$srcmaxkey} > 0) {
|
||||
$msg .= " $srcdomains{$srcmaxkey} msgs. FROM $srcmaxkey is below threshold ($opt_W/$opt_C)";
|
||||
}
|
||||
}
|
||||
|
||||
# Apply threshold to queue lengths TO domain
|
||||
my @dstkeys = sort { $dstdomains{$b} <=> $dstdomains{$a} } keys %dstdomains;
|
||||
my $dstmaxkey = $dstkeys[0];
|
||||
print "dst max is $dstmaxkey with $dstdomains{$dstmaxkey} messages\n" if $verbose;
|
||||
|
||||
if ($dstdomains{$dstmaxkey} >= $opt_W && $dstdomains{$dstmaxkey} < $opt_C) {
|
||||
if ($state == $ERRORS{'OK'}) {
|
||||
$msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
} elsif (($state == $ERRORS{'WARNING'}) || ($state == $ERRORS{'CRITICAL'})){
|
||||
$msg .= " -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
|
||||
} else {
|
||||
$msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}
|
||||
} elsif ($dstdomains{$dstmaxkey} >= $opt_C) {
|
||||
if ($state == $ERRORS{'OK'}) {
|
||||
$msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
} elsif ($state == $ERRORS{'WARNING'}) {
|
||||
$msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C) -and- " . $msg;
|
||||
$msg =~ s/WARNING: //;
|
||||
} elsif ($state == $ERRORS{'CRITICAL'}) {
|
||||
$msg .= " -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
|
||||
} else {
|
||||
$msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
} else {
|
||||
if ($dstdomains{$dstmaxkey} > 0) {
|
||||
$msg .= " $dstdomains{$dstmaxkey} msgs. TO $dstmaxkey is below threshold ($opt_W/$opt_C)";
|
||||
}
|
||||
}
|
||||
|
||||
} # End of queue length thresholds
|
||||
|
||||
}
|
||||
|
||||
} # end of ($mailq eq "sendmail")
|
||||
elsif ( $mailq eq "postfix" ) {
|
||||
|
||||
## open mailq
|
||||
if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
|
||||
if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
|
||||
print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}elsif( defined $utils::PATH_TO_MAILQ){
|
||||
unless (-x $utils::PATH_TO_MAILQ) {
|
||||
print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
|
||||
@lines = reverse <MAILQ>;
|
||||
|
||||
# close qmail-qstat
|
||||
close MAILQ;
|
||||
|
||||
if ( $? ) {
|
||||
print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
|
||||
exit $ERRORS{CRITICAL};
|
||||
}
|
||||
|
||||
## shut off the alarm
|
||||
alarm(0);
|
||||
|
||||
# check queue length
|
||||
if ($lines[0]=~/Kbytes in (\d+)/) {
|
||||
$msg_q = $1 ;
|
||||
}elsif ($lines[0]=~/Mail queue is empty/) {
|
||||
$msg_q = 0;
|
||||
}else{
|
||||
print "Couldn't match $utils::PATH_TO_MAILQ output\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
# check messages not processed
|
||||
#if ($lines[1]=~/^messages in queue but not yet preprocessed: (\d+)/) {
|
||||
# my $msg_p = $1;
|
||||
#}else{
|
||||
# print "Couldn't match $utils::PATH_TO_MAILQ output\n";
|
||||
# exit $ERRORS{'UNKNOWN'};
|
||||
#}
|
||||
|
||||
# check queue length(s)
|
||||
if ($msg_q == 0){
|
||||
$msg = "OK: $mailq mailq reports queue is empty";
|
||||
$state = $ERRORS{'OK'};
|
||||
} else {
|
||||
print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
|
||||
|
||||
# overall queue length
|
||||
if ($msg_q < $opt_w) {
|
||||
$msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
|
||||
$state = $ERRORS{'OK'};
|
||||
}elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
|
||||
$msg = "WARNING: $mailq mailq is $msg_q (threshold w = $opt_w)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}else {
|
||||
$msg = "CRITICAL: $mailq mailq is $msg_q (threshold c = $opt_c)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
|
||||
# check messages not yet preprocessed (only compare is $opt_W and $opt_C
|
||||
# are defined)
|
||||
|
||||
#if (defined $opt_W) {
|
||||
# $msg .= "[Preprocessed = $msg_p]";
|
||||
# if ($msg_p >= $opt_W && $msg_p < $opt_C ) {
|
||||
# $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
|
||||
# }elsif ($msg_p >= $opt_C ) {
|
||||
# $state = $ERRORS{"CRITICAL"} ;
|
||||
# }
|
||||
#}
|
||||
}
|
||||
} # end of ($mailq eq "postfix")
|
||||
elsif ( $mailq eq "qmail" ) {
|
||||
|
||||
# open qmail-qstat
|
||||
if ( defined $utils::PATH_TO_QMAIL_QSTAT && -x $utils::PATH_TO_QMAIL_QSTAT ) {
|
||||
if (! open (MAILQ, "$sudo $utils::PATH_TO_QMAIL_QSTAT | " ) ) {
|
||||
print "ERROR: could not open $utils::PATH_TO_QMAIL_QSTAT \n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}elsif( defined $utils::PATH_TO_QMAIL_QSTAT){
|
||||
unless (-x $utils::PATH_TO_QMAIL_QSTAT) {
|
||||
print "ERROR: $utils::PATH_TO_QMAIL_QSTAT is not executable by (uid $>:gid($)))\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
print "ERROR: \$utils::PATH_TO_QMAIL_QSTAT is not defined\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
@lines = <MAILQ>;
|
||||
|
||||
# close qmail-qstat
|
||||
close MAILQ;
|
||||
|
||||
if ( $? ) {
|
||||
print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
|
||||
exit $ERRORS{CRITICAL};
|
||||
}
|
||||
|
||||
## shut off the alarm
|
||||
alarm(0);
|
||||
|
||||
# check queue length
|
||||
if ($lines[0]=~/^messages in queue: (\d+)/) {
|
||||
$msg_q = $1 ;
|
||||
}else{
|
||||
print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
# check messages not processed
|
||||
if ($lines[1]=~/^messages in queue but not yet preprocessed: (\d+)/) {
|
||||
my $msg_p = $1;
|
||||
}else{
|
||||
print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
|
||||
# check queue length(s)
|
||||
if ($msg_q == 0){
|
||||
$msg = "OK: qmail-qstat reports queue is empty";
|
||||
$state = $ERRORS{'OK'};
|
||||
} else {
|
||||
print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
|
||||
|
||||
# overall queue length
|
||||
if ($msg_q < $opt_w) {
|
||||
$msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
|
||||
$state = $ERRORS{'OK'};
|
||||
}elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
|
||||
$msg = "WARNING: $mailq mailq is $msg_q (threshold w = $opt_w)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}else {
|
||||
$msg = "CRITICAL: $mailq mailq is $msg_q (threshold c = $opt_c)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
|
||||
# check messages not yet preprocessed (only compare is $opt_W and $opt_C
|
||||
# are defined)
|
||||
|
||||
if (defined $opt_W) {
|
||||
$msg .= "[Preprocessed = $msg_p]";
|
||||
if ($msg_p >= $opt_W && $msg_p < $opt_C ) {
|
||||
$state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
|
||||
}elsif ($msg_p >= $opt_C ) {
|
||||
$state = $ERRORS{"CRITICAL"} ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} # end of ($mailq eq "qmail")
|
||||
elsif ( $mailq eq "exim" ) {
|
||||
## open mailq
|
||||
if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
|
||||
if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
|
||||
print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}elsif( defined $utils::PATH_TO_MAILQ){
|
||||
unless (-x $utils::PATH_TO_MAILQ) {
|
||||
print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
while (<MAILQ>) {
|
||||
#22m 1.7K 19aEEr-0007hx-Dy <> *** frozen ***
|
||||
#root@exlixams.glups.fr
|
||||
|
||||
if (/\s[\w\d]{6}-[\w\d]{6}-[\w\d]{2}\s/) { # message id 19aEEr-0007hx-Dy
|
||||
$msg_q++ ;
|
||||
}
|
||||
}
|
||||
close(MAILQ) ;
|
||||
|
||||
if ( $? ) {
|
||||
print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
|
||||
exit $ERRORS{CRITICAL};
|
||||
}
|
||||
if ($msg_q < $opt_w) {
|
||||
$msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
|
||||
$state = $ERRORS{'OK'};
|
||||
}elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
|
||||
$msg = "WARNING: $mailq mailq is $msg_q (threshold w = $opt_w)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}else {
|
||||
$msg = "CRITICAL: $mailq mailq is $msg_q (threshold c = $opt_c)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
} # end of ($mailq eq "exim")
|
||||
|
||||
elsif ( $mailq eq "nullmailer" ) {
|
||||
## open mailq
|
||||
if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
|
||||
if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) {
|
||||
print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}elsif( defined $utils::PATH_TO_MAILQ){
|
||||
unless (-x $utils::PATH_TO_MAILQ) {
|
||||
print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
} else {
|
||||
print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
while (<MAILQ>) {
|
||||
#2006-06-22 16:00:00 282 bytes
|
||||
|
||||
if (/^[1-9][0-9]*-[01][0-9]-[0-3][0-9]\s[0-2][0-9]\:[0-2][0-9]\:[0-2][0-9]\s{2}[0-9]+\sbytes$/) {
|
||||
$msg_q++ ;
|
||||
}
|
||||
}
|
||||
close(MAILQ) ;
|
||||
if ($msg_q < $opt_w) {
|
||||
$msg = "OK: $mailq mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
|
||||
$state = $ERRORS{'OK'};
|
||||
}elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
|
||||
$msg = "WARNING: $mailq mailq is $msg_q (threshold w = $opt_w)";
|
||||
$state = $ERRORS{'WARNING'};
|
||||
}else {
|
||||
$msg = "CRITICAL: $mailq mailq is $msg_q (threshold c = $opt_c)";
|
||||
$state = $ERRORS{'CRITICAL'};
|
||||
}
|
||||
} # end of ($mailq eq "nullmailer")
|
||||
|
||||
# Perfdata support
|
||||
print "$msg|unsent=$msg_q;$opt_w;$opt_c;0\n";
|
||||
exit $state;
|
||||
|
||||
|
||||
#####################################
|
||||
#### subs
|
||||
|
||||
|
||||
sub process_arguments(){
|
||||
GetOptions
|
||||
("V" => \$opt_V, "version" => \$opt_V,
|
||||
"v" => \$opt_v, "verbose" => \$opt_v,
|
||||
"h" => \$opt_h, "help" => \$opt_h,
|
||||
"M:s" => \$opt_M, "mailserver:s" => \$opt_M, # mailserver (default sendmail)
|
||||
"w=i" => \$opt_w, "warning=i" => \$opt_w, # warning if above this number
|
||||
"c=i" => \$opt_c, "critical=i" => \$opt_c, # critical if above this number
|
||||
"t=i" => \$opt_t, "timeout=i" => \$opt_t,
|
||||
"s" => \$opt_s, "sudo" => \$opt_s,
|
||||
"W=i" => \$opt_W, # warning if above this number
|
||||
"C=i" => \$opt_C, # critical if above this number
|
||||
);
|
||||
|
||||
if ($opt_V) {
|
||||
print_revision($PROGNAME,'2.3.1');
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
if ($opt_h) {
|
||||
print_help();
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
if (defined $opt_v ){
|
||||
$verbose = $opt_v;
|
||||
}
|
||||
|
||||
unless (defined $opt_t) {
|
||||
$opt_t = $utils::TIMEOUT ; # default timeout
|
||||
}
|
||||
|
||||
unless ( defined $opt_w && defined $opt_c ) {
|
||||
print_usage();
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
if ( $opt_w >= $opt_c) {
|
||||
print "Warning (-w) cannot be greater than Critical (-c)!\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
|
||||
if (defined $opt_W && ! defined !$opt_C) {
|
||||
print "Need -C if using -W\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}elsif(defined $opt_W && defined $opt_C) {
|
||||
if ($opt_W >= $opt_C) {
|
||||
print "Warning (-W) cannot be greater than Critical (-C)!\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $opt_M) {
|
||||
if ($opt_M =~ /^(sendmail|qmail|postfix|exim|nullmailer)$/) {
|
||||
$mailq = $opt_M ;
|
||||
}elsif( $opt_M eq ''){
|
||||
$mailq = 'sendmail';
|
||||
}else{
|
||||
print "-M: $opt_M is not supported\n";
|
||||
exit $ERRORS{'UNKNOWN'};
|
||||
}
|
||||
}else{
|
||||
if (defined $utils::PATH_TO_QMAIL_QSTAT
|
||||
&& -x $utils::PATH_TO_QMAIL_QSTAT)
|
||||
{
|
||||
$mailq = 'qmail';
|
||||
}
|
||||
elsif (-d '/var/lib/postfix' || -d '/var/local/lib/postfix'
|
||||
|| -e '/usr/sbin/postfix' || -e '/usr/local/sbin/postfix')
|
||||
{
|
||||
$mailq = 'postfix';
|
||||
}
|
||||
elsif (-d '/usr/lib/exim4' || -d '/usr/local/lib/exim4'
|
||||
|| -e '/usr/sbin/exim' || -e '/usr/local/sbin/exim')
|
||||
{
|
||||
$mailq = 'exim';
|
||||
}
|
||||
elsif (-d '/usr/lib/nullmailer' || -d '/usr/local/lib/nullmailer'
|
||||
|| -e '/usr/sbin/nullmailer-send'
|
||||
|| -e '/usr/local/sbin/nullmailer-send')
|
||||
{
|
||||
$mailq = 'nullmailer';
|
||||
}
|
||||
else {
|
||||
$mailq = 'sendmail';
|
||||
}
|
||||
}
|
||||
|
||||
return $ERRORS{'OK'};
|
||||
}
|
||||
|
||||
sub print_usage () {
|
||||
print "Usage: $PROGNAME -w <warn> -c <crit> [-W <warn>] [-C <crit>] [-M <MTA>] [-t <timeout>] [-s] [-v]\n";
|
||||
}
|
||||
|
||||
sub print_help () {
|
||||
print_revision($PROGNAME,'2.3.1');
|
||||
print "Copyright (c) 2002 Subhendu Ghosh/Carlos Canau/Benjamin Schmid\n";
|
||||
print "\n";
|
||||
print_usage();
|
||||
print "\n";
|
||||
print " Checks the number of messages in the mail queue (supports multiple sendmail queues, qmail)\n";
|
||||
print " Feedback/patches to support non-sendmail mailqueue welcome\n\n";
|
||||
print "-w (--warning) = Min. number of messages in queue to generate warning\n";
|
||||
print "-c (--critical) = Min. number of messages in queue to generate critical alert ( w < c )\n";
|
||||
print "-W = Min. number of messages for same domain in queue to generate warning\n";
|
||||
print "-C = Min. number of messages for same domain in queue to generate critical alert ( W < C )\n";
|
||||
print "-t (--timeout) = Plugin timeout in seconds (default = $utils::TIMEOUT)\n";
|
||||
print "-M (--mailserver) = [ sendmail | qmail | postfix | exim | nullmailer ] (default = autodetect)\n";
|
||||
print "-s (--sudo) = Use sudo to call the mailq command\n";
|
||||
print "-h (--help)\n";
|
||||
print "-V (--version)\n";
|
||||
print "-v (--verbose) = debugging output\n";
|
||||
print "\n\n";
|
||||
print "Note: -w and -c are required arguments. -W and -C are optional.\n";
|
||||
print " -W and -C are applied to domains listed on the queues - both FROM and TO. (sendmail)\n";
|
||||
print " -W and -C are applied message not yet preproccessed. (qmail)\n";
|
||||
print " This plugin tries to autodetect which mailserver you are running,\n";
|
||||
print " you can override the autodetection with -M.\n";
|
||||
print " This plugin uses the system mailq command (sendmail) or qmail-stat (qmail)\n";
|
||||
print " to look at the queues. Mailq can usually only be accessed by root or \n";
|
||||
print " a TrustedUser. You will have to set appropriate permissions for the plugin to work.\n";
|
||||
print "";
|
||||
print "\n\n";
|
||||
support();
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
- name: Update apt-get repo and cache
|
||||
apt:
|
||||
update_cache: yes
|
||||
force_apt_get: yes
|
||||
cache_valid_time: 3600
|
||||
changed_when: False
|
||||
|
||||
- name: Install Dependencies
|
||||
apt:
|
||||
name:
|
||||
- python3-nagiosplugin
|
||||
- nagios-plugins-contrib
|
||||
- git
|
||||
state: present
|
||||
|
||||
- name: Clone Passive Monitoring
|
||||
git:
|
||||
repo: https://github.com/FAUSheppy/icinga-passive-checks-monitoring
|
||||
dest: "/etc/monitoring/"
|
||||
version: master
|
||||
|
||||
- name: Clone Monitoring Tools
|
||||
git:
|
||||
repo: https://github.com/FAUSheppy/monitoring-tools
|
||||
dest: "/etc/monitoring-tools/"
|
||||
version: master
|
||||
|
||||
- name: Copy send_nsca to /bin/
|
||||
copy:
|
||||
src: send_nsca
|
||||
dest: /bin/send_nsca
|
||||
mode: 0755
|
||||
|
||||
- name: Copy send nsca config
|
||||
template:
|
||||
src: send_nsca.cfg.j2
|
||||
dest: /etc/send_nsca.cfg
|
||||
mode: 0744
|
||||
|
||||
- name: Copy check_mailq
|
||||
copy:
|
||||
src: check_mailq
|
||||
dest: /usr/lib/nagios/plugins/check_mailq
|
||||
mode: 0755
|
||||
|
||||
- name: Copy systemd monitoring
|
||||
copy:
|
||||
src: pynagsystemd.py
|
||||
dest: /bin/pynagsystemd.py
|
||||
mode: 0755
|
||||
|
||||
- name: Check if PostgreSQL is installed
|
||||
command: dpkg -s postgresql
|
||||
register: postgresql_installed
|
||||
ignore_errors: true
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
check_mode: no
|
||||
|
||||
- name: Set has_postgres variable
|
||||
set_fact:
|
||||
has_postgres: "{{ postgresql_installed.rc == 0 }}"
|
||||
|
||||
- name: Template Remote Monitoring Config
|
||||
template:
|
||||
src: monitoring.conf.j2
|
||||
dest: /etc/monitoring.conf
|
||||
owner: root
|
||||
mode: 0644
|
||||
|
||||
- name: Add monitoring report cronjob
|
||||
cron:
|
||||
name: "monitoring"
|
||||
job: "/etc/monitoring/monitoring-report.py -c /etc/monitoring.conf --nsca-bin /bin/send_nsca --nsca-config /etc/send_nsca.cfg"
|
||||
|
||||
- name: Install Prometheus Node Exporter
|
||||
become: yes
|
||||
import_role:
|
||||
name: prometheus.prometheus.node_exporter
|
||||
vars:
|
||||
node_exporter_web_telemetry_path: "/node-exporter"
|
||||
@@ -0,0 +1,10 @@
|
||||
nobody disk-remote /usr/lib/nagios/plugins/check_disk -w 10% -c 5% -p /
|
||||
nobody load-remote /usr/lib/nagios/plugins/check_load -w 5,3,2 -c 10,6,4
|
||||
nobody procs-remote /usr/lib/nagios/plugins/check_procs
|
||||
nobody systemd /etc/monitoring-tools/pynagsystemd.py
|
||||
|
||||
{% if checks %}
|
||||
{% for entry in checks %}
|
||||
{{ entry["user"] }} {{ entry["name"] }} {{ entry["cmd"] }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
@@ -0,0 +1,5 @@
|
||||
identity = {{ group_names[0] }}
|
||||
password = {{ nsca_password }}
|
||||
server = {{ nsca_server }}
|
||||
port = 5668
|
||||
tls_ciphers = "PSK-AES256-CBC-SHA"
|
||||
@@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- global-handlers
|
||||
@@ -0,0 +1,45 @@
|
||||
- name: Copy influx apt keyring
|
||||
copy:
|
||||
src: influx-repo.gpg
|
||||
dest: /usr/share/keyrings/
|
||||
mode: 0644
|
||||
when: monitoring_master
|
||||
|
||||
- name: Add influx apt repo
|
||||
copy:
|
||||
src: influxdb.list
|
||||
dest: /etc/apt/sources.list.d/
|
||||
mode: 0644
|
||||
when: monitoring_master
|
||||
|
||||
- name: Install influxdb
|
||||
apt:
|
||||
name: influxdb
|
||||
state: present
|
||||
when: monitoring_master
|
||||
|
||||
- name: Influxdb master server config
|
||||
template:
|
||||
src: influxdb.conf.j2
|
||||
dest: /etc/influxdb/influxdb.conf
|
||||
when: monitoring_master
|
||||
notify:
|
||||
- restart influxdb
|
||||
|
||||
- name: Create Influx collectd-db
|
||||
shell: 'echo "CREATE DATABASE collectd;" | influx'
|
||||
changed_when: False
|
||||
when: monitoring_master
|
||||
|
||||
- name: Install collectd
|
||||
apt:
|
||||
name: collectd
|
||||
install_recommends: false
|
||||
state: present
|
||||
|
||||
- name: Collectd config
|
||||
template:
|
||||
src: collectd.conf.j2
|
||||
dest: /etc/collectd/collectd.conf
|
||||
notify:
|
||||
- restart collectd
|
||||
@@ -0,0 +1,34 @@
|
||||
FQDNLookup true
|
||||
LoadPlugin cpu
|
||||
LoadPlugin df
|
||||
LoadPlugin disk
|
||||
LoadPlugin entropy
|
||||
LoadPlugin interface
|
||||
LoadPlugin irq
|
||||
LoadPlugin load
|
||||
LoadPlugin memory
|
||||
LoadPlugin network
|
||||
LoadPlugin processes
|
||||
LoadPlugin swap
|
||||
LoadPlugin users
|
||||
LoadPlugin rrdtool
|
||||
<Plugin df>
|
||||
FSType rootfs
|
||||
FSType sysfs
|
||||
FSType proc
|
||||
FSType devtmpfs
|
||||
FSType devpts
|
||||
FSType tmpfs
|
||||
FSType fusectl
|
||||
FSType cgroup
|
||||
IgnoreSelected true
|
||||
</Plugin>
|
||||
<Plugin network>
|
||||
Server "internal.monitoring.atlantishq.de" "25826"
|
||||
</Plugin>
|
||||
<Plugin rrdtool>
|
||||
DataDir "/var/lib/collectd/rrd"
|
||||
</Plugin>
|
||||
<Include "/etc/collectd/collectd.conf.d">
|
||||
Filter "*.conf"
|
||||
</Include>
|
||||
@@ -0,0 +1,29 @@
|
||||
[meta]
|
||||
|
||||
dir = "/var/lib/influxdb/meta"
|
||||
|
||||
[data]
|
||||
|
||||
dir = "/var/lib/influxdb/data"
|
||||
wal-dir = "/var/lib/influxdb/wal"
|
||||
|
||||
[[collectd]]
|
||||
|
||||
enabled = true
|
||||
bind-address = ":25826"
|
||||
database = "collectd"
|
||||
retention-policy = ""
|
||||
|
||||
# security-level = "none"
|
||||
# auth-file = "/etc/collectd/auth_file"
|
||||
|
||||
batch-size = 5000
|
||||
batch-pending = 10
|
||||
batch-timeout = "10s"
|
||||
read-buffer = 0
|
||||
|
||||
# Multi-value plugins can be handled two ways.
|
||||
# "split" will parse and store the multi-value plugin data into separate measurements
|
||||
# "join" will parse and store the multi-value plugin as a single multi-value measurement.
|
||||
# "split" is the default behavior for backward compatability with previous versions of influxdb.
|
||||
# parse-multivalue-plugin = "split"
|
||||
@@ -0,0 +1,32 @@
|
||||
server {
|
||||
listen 80;
|
||||
listen 9080;
|
||||
server_name icinga.atlantishq.de;
|
||||
|
||||
#auth_basic "ICINGA";
|
||||
#auth_basic_user_file /etc/nginx/auth/stats_auth;
|
||||
|
||||
access_log /var/log/nginx/access-icinga.log;
|
||||
error_log /var/log/nginx/error-icinga.log;
|
||||
location = / {
|
||||
return 302 https://icinga.atlantishq.de/icingaweb2;
|
||||
}
|
||||
|
||||
##### ICINGA WEB #####
|
||||
location ~ ^/icingaweb2/index\.php(.*)$ {
|
||||
include fastcgi.conf;
|
||||
include fastcgi_params;
|
||||
# fastcgi_temp_path fastcgi;
|
||||
fastcgi_pass unix:/etc/alternatives/php-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
# fastcgi_param SCRIPT_NAME /usr/share/icingaweb2/public/index.php;
|
||||
fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
|
||||
fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
|
||||
fastcgi_param REMOTE_USER $http_x_forwarded_preferred_username;
|
||||
}
|
||||
location ~ ^/icingaweb2(.+)? {
|
||||
alias /usr/share/icingaweb2/public;
|
||||
index index.php;
|
||||
try_files $1 $uri $uri/ /icingaweb2/index.php$is_args$args;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
object Host "esports-erlangen.de" {
|
||||
|
||||
import "generic-host"
|
||||
|
||||
address = "esports-erlangen.de"
|
||||
name = "esports-erlangen.de"
|
||||
check_command = "hostalive4"
|
||||
vars.linux = "true"
|
||||
|
||||
|
||||
max_check_attempts = 5
|
||||
retry_interval = 1m
|
||||
|
||||
vars.notification["mail"] = {
|
||||
groups = ["ese"]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
apply Service "dovecot-imap-tls-993" {
|
||||
import "generic-service"
|
||||
check_command = "ssl"
|
||||
vars.host = host.address
|
||||
vars.port = 993
|
||||
assign where host.name == "esports-erlangen.de"
|
||||
}
|
||||
|
||||
apply Service "postfix-smtp-25" {
|
||||
import "generic-service"
|
||||
check_command = "smtp"
|
||||
vars.host = host.address
|
||||
vars.protocol = "smtp"
|
||||
vars.port = 25
|
||||
assign where host.name == "esports-erlangen.de"
|
||||
}
|
||||
|
||||
apply Service "postfix-smtp-starttls-25" {
|
||||
import "generic-service"
|
||||
check_command = "ssl"
|
||||
vars.host = host.address
|
||||
vars.protocol = "smtp"
|
||||
vars.port = 25
|
||||
assign where host.name == "esports-erlangen.de"
|
||||
}
|
||||
|
||||
apply Service "website-http" {
|
||||
import "generic-service"
|
||||
check_command = "http"
|
||||
vars.host = "www.esports-erlangen.de"
|
||||
vars.ssl = true
|
||||
assign where host.name == "esports-erlangen.de"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Monitoring Command Acceptor
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/nsca-ng
|
||||
Type=forking
|
||||
User=root
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,2 @@
|
||||
nagios sheppy-icinga /usr/local/bin/icinga/check_icinga_self
|
||||
nobody sheppy-mail /bin/true
|
||||
@@ -0,0 +1,4 @@
|
||||
identity = "atlantishq.de"
|
||||
password = ""
|
||||
server = "kraftwerk.ruderich.eu"
|
||||
tls_ciphers = "PSK-AES256-CBC-SHA"
|
||||
@@ -0,0 +1,147 @@
|
||||
object CheckCommand "gateway" {
|
||||
command = [ "/etc/icinga2/icinga-webhook-gateway/icinga-gateway-command.py" ]
|
||||
arguments = {
|
||||
"--protocol" = "$protocol$",
|
||||
"--host" = "$host$",
|
||||
"--port" = "$port$",
|
||||
"--service" = "$service_name$"
|
||||
}
|
||||
}
|
||||
|
||||
object Host "THS" {
|
||||
|
||||
import "generic-host"
|
||||
|
||||
address = "localhost"
|
||||
name = "THS"
|
||||
vars.async = "true"
|
||||
vars.linux = "true"
|
||||
|
||||
vars.ssl_address = "async-icinga.atlantishq.de"
|
||||
vars.ssl_port = "443"
|
||||
|
||||
check_command = "http"
|
||||
|
||||
max_check_attempts = 5
|
||||
retry_interval = 1m
|
||||
|
||||
}
|
||||
|
||||
object Host "atlantispc" {
|
||||
|
||||
import "generic-host"
|
||||
|
||||
address = "localhost"
|
||||
name = "atlantispc"
|
||||
vars.async = "true"
|
||||
vars.linux = "true"
|
||||
|
||||
vars.ssl_address = "async-icinga.atlantishq.de"
|
||||
vars.ssl_port = "443"
|
||||
|
||||
check_command = "http"
|
||||
|
||||
max_check_attempts = 5
|
||||
retry_interval = 1m
|
||||
|
||||
}
|
||||
|
||||
object Host "atlantislaptop" {
|
||||
|
||||
import "generic-host"
|
||||
|
||||
address = "localhost"
|
||||
name = "atlantislaptop"
|
||||
vars.async = "true"
|
||||
vars.linux = "true"
|
||||
|
||||
vars.ssl_address = "async-icinga.atlantishq.de"
|
||||
vars.ssl_port = "443"
|
||||
|
||||
check_command = "http"
|
||||
|
||||
max_check_attempts = 5
|
||||
retry_interval = 1m
|
||||
|
||||
}
|
||||
|
||||
apply Service "apt_atlantis_laptop" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "apt_atlantis_laptop"
|
||||
assign where host.name == "atlantislaptop"
|
||||
}
|
||||
|
||||
apply Service "apt_atlantis_pc" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "apt_atlantis_pc"
|
||||
assign where host.name == "atlantispc"
|
||||
}
|
||||
|
||||
apply Service "backup_atlantis_laptop" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "backup_atlantis_laptop"
|
||||
assign where host.name == "atlantispc"
|
||||
}
|
||||
|
||||
apply Service "backup_ths_storrage_box" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "backup_ths_storrage_box"
|
||||
assign where host.name == "atlantispc"
|
||||
}
|
||||
|
||||
apply Service "backup_ths" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "backup_ths"
|
||||
assign where host.name == "THS"
|
||||
}
|
||||
|
||||
apply Service "ths_auftragsdatenbank" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "ths_auftragsdatenbank"
|
||||
assign where host.name == "THS"
|
||||
}
|
||||
|
||||
apply Service "mail_atlantishq" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "mail_atlantishq"
|
||||
assign where host.name == "async_icinga"
|
||||
}
|
||||
|
||||
apply Service "ths_caldav_backup" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "ths_caldav_backup"
|
||||
assign where host.name == "async_icinga"
|
||||
}
|
||||
|
||||
apply Service "slapd_backup" {
|
||||
import "generic-service"
|
||||
check_command = "gateway"
|
||||
vars.protocol = "https"
|
||||
vars.host = "async-icinga.atlantishq.de"
|
||||
vars.service_name = "slapd_backup"
|
||||
assign where host.name == "async_icinga"
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
apply Service "systemd" {
|
||||
import "remote_passive"
|
||||
assign where host.vars.remote
|
||||
}
|
||||
|
||||
apply Service "disk-remote" {
|
||||
import "remote_passive"
|
||||
assign where host.vars.remote
|
||||
}
|
||||
|
||||
apply Service "load-remote" {
|
||||
import "remote_passive"
|
||||
assign where host.vars.remote
|
||||
}
|
||||
|
||||
apply Service "procs-remote" {
|
||||
import "remote_passive"
|
||||
assign where host.vars.remote
|
||||
}
|
||||
|
||||
apply Service "insurgency-1" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "steam"
|
||||
}
|
||||
|
||||
apply Service "insurgency-2" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "steam"
|
||||
}
|
||||
|
||||
apply Service "irc" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "irc"
|
||||
}
|
||||
|
||||
apply Service "wireguard-darknet-rudi" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "vpn"
|
||||
}
|
||||
|
||||
apply Service "wireguard-darknet-hase" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "vpn"
|
||||
}
|
||||
|
||||
#apply Service "darknet-reachable" {
|
||||
# import "remote_passive"
|
||||
# assign where host.name == "vpn"
|
||||
#}
|
||||
|
||||
apply Service "mail_queue" {
|
||||
import "remote_passive"
|
||||
assign where host.name == "mail"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
apply Service "MAIL-postfix-tls" {
|
||||
import "generic-service"
|
||||
check_command = "ssl"
|
||||
vars.ssl_address = "192.168.122.101"
|
||||
vars.ssl_port = "465"
|
||||
assign where host.name == "mail"
|
||||
}
|
||||
|
||||
apply Service "IMAP-dovecot-tls" {
|
||||
import "generic-service"
|
||||
check_command = "ssl"
|
||||
vars.ssl_address = "192.168.122.101"
|
||||
vars.ssl_port = "993"
|
||||
assign where host.name == "mail"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
apply Service for (http_vhost => config in host.vars.http_vhosts) {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "http"
|
||||
|
||||
vars += config
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
object User "michy" {
|
||||
import "generic-user"
|
||||
|
||||
display_name = "Michy Monitoring"
|
||||
groups = ["ese"]
|
||||
|
||||
email = "ipatix@atlantishq.de"
|
||||
}
|
||||
|
||||
object User "icingaadmin" {
|
||||
import "generic-user"
|
||||
|
||||
display_name = "Icinga 2 Admin"
|
||||
groups = [ "icingaadmins" ]
|
||||
|
||||
email = "sheppy@atlantishq.de"
|
||||
}
|
||||
|
||||
object UserGroup "icingaadmins" {
|
||||
display_name = "Icinga 2 Admin Group"
|
||||
}
|
||||
|
||||
object UserGroup "ese" {
|
||||
display_name = "ESports-Erlangen Gruppe"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
- name: restart icinga
|
||||
systemd:
|
||||
name: icinga2
|
||||
state: restarted
|
||||
|
||||
- name: restart telegraf
|
||||
systemd:
|
||||
name: telegraf
|
||||
state: restarted
|
||||
@@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- global-handlers
|
||||
@@ -0,0 +1,189 @@
|
||||
- name: Install Dependecies
|
||||
apt:
|
||||
pkg:
|
||||
- git
|
||||
- docker-compose
|
||||
- nginx
|
||||
state: present
|
||||
|
||||
- name: Clone Passive Monitoring
|
||||
git:
|
||||
repo: https://github.com/FAUSheppy/icinga-passive-checks-monitoring
|
||||
dest: "/etc/monitoring/"
|
||||
version: master
|
||||
|
||||
- name: Clone Monitoring tools
|
||||
git:
|
||||
repo: https://github.com/FAUSheppy/monitoring-tools
|
||||
dest: "/etc/monitoring-tools/"
|
||||
version: master
|
||||
notify: restart icinga
|
||||
|
||||
- name: Set monitoring tools permissions
|
||||
file:
|
||||
dest: /etc/monitoring-tools/
|
||||
owner: root
|
||||
mode: u=rwX,g=rX,o=rX
|
||||
recurse: yes
|
||||
|
||||
- name: Set monitoring permissions
|
||||
file:
|
||||
dest: /etc/monitoring/
|
||||
owner: root
|
||||
mode: u=rwX,g=rX,o=rX
|
||||
recurse: yes
|
||||
|
||||
- name: Copy nsca-ng and send_nsca to /bin/
|
||||
copy:
|
||||
src: nsca-ng
|
||||
dest: /bin/nsca-ng
|
||||
mode: 0755
|
||||
|
||||
- name: Copy nsca-ng and send_nsca to /bin/
|
||||
copy:
|
||||
src: send_nsca
|
||||
dest: /bin/send_nsca
|
||||
mode: 0755
|
||||
|
||||
- name: Create nsca server directory
|
||||
file:
|
||||
path: /etc/nsca-ng/
|
||||
mode: 0750
|
||||
owner: root
|
||||
group: nagios
|
||||
|
||||
- name: Copy nsca server config
|
||||
copy:
|
||||
src: nsca_server.conf
|
||||
dest: /etc/nsca-ng/nsca-ng.cfg
|
||||
owner: root
|
||||
group: nagios
|
||||
mode: 0644
|
||||
notify:
|
||||
- nsca-ng service reload
|
||||
|
||||
- name: Copy nsca systemd unit
|
||||
copy:
|
||||
src: nsca-ng.service
|
||||
dest: /etc/systemd/user/nsca-ng.service
|
||||
mode: 0644
|
||||
notify:
|
||||
- nsca-ng service reload
|
||||
|
||||
- name: Enable and start nsca-ng
|
||||
systemd:
|
||||
name: nsca-ng.service
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Copy icinga configuration
|
||||
copy:
|
||||
src: "{{ item }}"
|
||||
dest: /etc/icinga2/conf.d/
|
||||
owner: root
|
||||
group: nagios
|
||||
mode: 0640
|
||||
with_items:
|
||||
- icinga_master_hosts.conf
|
||||
- services_vhosts_http_checks.conf
|
||||
- services_passive.conf
|
||||
- services_passive_mail_extern.conf
|
||||
- services_async.conf
|
||||
- users.conf
|
||||
- michy-ese-server.conf
|
||||
- async-icinga-services-dynamic.conf
|
||||
notify:
|
||||
- restart icinga
|
||||
|
||||
- name: Template icinga configuration
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: /etc/icinga2/conf.d/
|
||||
owner: root
|
||||
group: nagios
|
||||
mode: 0640
|
||||
with_items:
|
||||
- mail_notifications.conf
|
||||
notify:
|
||||
- restart icinga
|
||||
|
||||
- name: Change icinga log level
|
||||
lineinfile:
|
||||
path: /etc/icinga2/features-enabled/mainlog.conf
|
||||
line: ' severity = "warning"'
|
||||
notify: restart icinga
|
||||
|
||||
- name: Add signal vars
|
||||
lineinfile:
|
||||
path: /etc/icinga2/constants.conf
|
||||
line: "{{ item }}"
|
||||
with_items:
|
||||
# WARNING ME LAZY BITCH, YOU HAVE TO DELETE THOSE ON THE SERVER OR IT WONT WORK #
|
||||
# i mean it will work because they will be added at the end and overwrite
|
||||
# previous definitions but ya know write a regex its fucking 03:39 am
|
||||
- 'const signal_gateway_host = "{{ event_dispatcher_host }}"'
|
||||
- 'const signal_gateway_port = "{{ event_dispatcher_port }}"'
|
||||
- 'const signal_gateway_proto = "{{ event_dispatcher_proto }}"'
|
||||
notify: restart icinga
|
||||
|
||||
- name: Signal command loaded from monitoring tools
|
||||
lineinfile:
|
||||
path: /etc/icinga2/icinga2.conf
|
||||
line: '"include /etc/monitoring-tools/commands.d/signal-notify.conf"'
|
||||
notify:
|
||||
- restart icinga
|
||||
|
||||
- name: OAuth2Proxy directories
|
||||
file:
|
||||
path: "/opt/oauth2proxy/{{ item }}/"
|
||||
state: directory
|
||||
recurse: yes
|
||||
with_items:
|
||||
- icinga
|
||||
|
||||
- name: include services ports
|
||||
include_vars: services.yaml
|
||||
|
||||
- name: Deploy OAuth2Proxy compose files
|
||||
template:
|
||||
src: oauth-standalone-docker-compose.yaml
|
||||
dest: "/opt/oauth2proxy/{{ item }}/docker-compose.yaml"
|
||||
with_items:
|
||||
- icinga
|
||||
|
||||
- name: Deploy OAuth2Proxy
|
||||
community.docker.docker_compose:
|
||||
project_src: /opt/oauth2proxy/{{ item }}/
|
||||
pull: true
|
||||
with_items:
|
||||
- icinga
|
||||
|
||||
- name: Copy icinga web nginx conf
|
||||
copy:
|
||||
src: icinga-nginx.conf
|
||||
dest: /etc/nginx/sites-enabled/icinga.conf
|
||||
mode: 0755
|
||||
notify:
|
||||
- restart nginx
|
||||
|
||||
- name: Copy icingaweb2-config
|
||||
template:
|
||||
src: "icingaweb2/{{ item }}"
|
||||
dest: "/etc/icingaweb2/{{ item }}"
|
||||
mode: 0660
|
||||
owner: root
|
||||
group: icingaweb2
|
||||
with_items:
|
||||
- resources.ini
|
||||
- roles.ini
|
||||
- config.ini
|
||||
- authentication.ini
|
||||
- groups.ini
|
||||
|
||||
- name: Template dispatcher gateway passfile
|
||||
template:
|
||||
src: dispatcher-pass-file.txt
|
||||
dest: /etc/icinga2/dispatcher-pass-file.txt
|
||||
mode: 0660
|
||||
owner: root
|
||||
group: nagios
|
||||
@@ -0,0 +1,11 @@
|
||||
- name: install postfix
|
||||
apt:
|
||||
pkg:
|
||||
- postfix
|
||||
|
||||
- name: copy postfix config
|
||||
template:
|
||||
src: postfix_main.cf
|
||||
dest: /etc/postfix/main.cf
|
||||
notify:
|
||||
- restart postfix
|
||||
@@ -0,0 +1,31 @@
|
||||
- name: Copy influx apt keyring
|
||||
copy:
|
||||
src: influx-repo.gpg
|
||||
dest: /usr/share/keyrings/
|
||||
mode: 0644
|
||||
notify:
|
||||
- apt update
|
||||
|
||||
- name: Add Influx repo
|
||||
copy:
|
||||
src: influxdb.list
|
||||
dest: /etc/apt/sources.list.d/influxdb.list
|
||||
mode: 0644
|
||||
notify:
|
||||
apt update
|
||||
|
||||
- meta: flush_handlers
|
||||
|
||||
- name: Install Telegraf
|
||||
apt:
|
||||
pkg:
|
||||
- telegraf
|
||||
|
||||
- name: Copy telegraf config files
|
||||
template:
|
||||
src: "{{ item }}"
|
||||
dest: /etc/telegraf/telegraf.d/
|
||||
with_items:
|
||||
- telegraf_influxdb.conf
|
||||
- telegraf_rsyslog_input.conf
|
||||
notify: restart telegraf
|
||||
@@ -0,0 +1,44 @@
|
||||
- name: Icinga
|
||||
include: icinga.yaml
|
||||
when: monitoring_master
|
||||
tags:
|
||||
- icinga
|
||||
- monitoring-master
|
||||
|
||||
- name: Postfix/Mail for icinga
|
||||
include: icinga_postfix.yaml
|
||||
when: monitoring_master
|
||||
tags:
|
||||
- icinga
|
||||
- monitoring-master
|
||||
|
||||
- name: logs.yaml
|
||||
include: logs.yaml
|
||||
when: monitoring_master
|
||||
tags:
|
||||
- grafana
|
||||
- monitoring-master
|
||||
|
||||
- name: Report to Rudi nsca cfg
|
||||
copy:
|
||||
src: report_to_rudi_send_nsca_rudi.cfg
|
||||
dest: /etc/report_to_rudi_send_nsca_rudi.cfg
|
||||
mode: 0666
|
||||
tags:
|
||||
- monitoring-master
|
||||
|
||||
- name: Report to Rudi monitoring cfg
|
||||
copy:
|
||||
src: report_to_rudi_monitoring.conf
|
||||
dest: /etc/report_to_rudi_monitoring.conf
|
||||
mode: 0666
|
||||
tags:
|
||||
- monitoring-master
|
||||
|
||||
- name: Add Report to Rudi cron
|
||||
cron:
|
||||
name: "Monitoring at Rudi"
|
||||
job: /etc/monitoring/monitoring-report.py -H atlantishq.de -c /etc/report_to_rudi_monitoring.conf --nsca-config /etc/report_to_rudi_send_nsca_rudi.cfg
|
||||
minute: "*"
|
||||
hour: "*"
|
||||
day: "*"
|
||||
@@ -0,0 +1,2 @@
|
||||
{{ event_dispatcher_user }}
|
||||
{{ event_dispatcher_pass }}
|
||||
@@ -0,0 +1,14 @@
|
||||
[icingaweb2]
|
||||
backend = "db"
|
||||
resource = "icingaweb_db"
|
||||
|
||||
[autologin]
|
||||
backend = "external"
|
||||
|
||||
[ldap_users]
|
||||
backend = ldap
|
||||
resource = ldap_auth
|
||||
group_backend = "ldap_groups"
|
||||
user_class = inetOrgPerson
|
||||
user_name_attribute = uid
|
||||
#filter = "memberOf=cn=icinga,cn=groups,cn=accounts,dc=icinga,dc=org"
|
||||
@@ -0,0 +1,10 @@
|
||||
[global]
|
||||
show_stacktraces = "1"
|
||||
show_application_state_messages = "1"
|
||||
config_backend = "db"
|
||||
config_resource = "icingaweb_db"
|
||||
|
||||
[logging]
|
||||
log = "file"
|
||||
level = "INFO"
|
||||
file = "/var/log/icingaweb2.log"
|
||||
@@ -0,0 +1,12 @@
|
||||
[icingaweb2]
|
||||
backend = "db"
|
||||
resource = "icingaweb_db"
|
||||
|
||||
[ldap_groups]
|
||||
backend = "ldap"
|
||||
resource = "ldap_groups_auth"
|
||||
group_class = "groupOfNames"
|
||||
group_name_attribute = "cn"
|
||||
user_name_attribute = "uid"
|
||||
user_backend = "ldap_users"
|
||||
user_class = "inetOrgPerson"
|
||||
@@ -0,0 +1,41 @@
|
||||
[icingaweb_db]
|
||||
type = "db"
|
||||
db = "pgsql"
|
||||
host = "localhost"
|
||||
port = "5432"
|
||||
dbname = "icinga_web"
|
||||
username = "icinga_web"
|
||||
password = ""
|
||||
charset = ""
|
||||
use_ssl = "0"
|
||||
|
||||
[icinga_ido]
|
||||
type = "db"
|
||||
db = "pgsql"
|
||||
host = "localhost"
|
||||
port = "5432"
|
||||
dbname = "icinga2"
|
||||
username = "icinga2"
|
||||
password = ""
|
||||
charset = ""
|
||||
use_ssl = "0"
|
||||
|
||||
[ldap_auth]
|
||||
type = "ldap"
|
||||
hostname = "{{ ldap_server }}"
|
||||
port = "389"
|
||||
encryption = "none"
|
||||
root_dn = "{{ ldap_user_dn }}"
|
||||
bind_dn = "{{ ldap_bind_dn }}"
|
||||
bind_pw = "{{ ldap_password }}"
|
||||
timeout = "5"
|
||||
|
||||
[ldap_groups_auth]
|
||||
type = "ldap"
|
||||
hostname = "{{ ldap_server }}"
|
||||
port = "389"
|
||||
encryption = "none"
|
||||
root_dn = "{{ ldap_group_dn }}"
|
||||
bind_dn = "{{ ldap_bind_dn }}"
|
||||
bind_pw = "{{ ldap_password }}"
|
||||
timeout = "5"
|
||||
@@ -0,0 +1,15 @@
|
||||
[Administrators]
|
||||
users = "sheppy"
|
||||
permissions = "*"
|
||||
groups = "Administrators"
|
||||
|
||||
[icinga]
|
||||
users = "*"
|
||||
groups = "icinga"
|
||||
monitoring/filter/objects = "_service_owner=$user:local_name$"
|
||||
permissions = "module/monitoring,monitoring/*"
|
||||
|
||||
[sheppy]
|
||||
users = "sheppy"
|
||||
monitoring/filter/objects = "*"
|
||||
permissions = "module/monitoring,monitoring/*"
|
||||
@@ -0,0 +1,25 @@
|
||||
apply Notification "mail-icingaadmin" to Host {
|
||||
import "mail-host-notification"
|
||||
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
|
||||
interval = 7d
|
||||
|
||||
vars.notification_logtosyslog = true
|
||||
vars.notification_from = "Icinga <{{ smtp_service_user }}@atlantishq.de>"
|
||||
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
|
||||
apply Notification "mail-icingaadmin" to Service {
|
||||
import "mail-service-notification"
|
||||
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
|
||||
interval = 7d
|
||||
vars.notification_logtosyslog = true
|
||||
vars.notification_from = "Icinga <{{ smtp_service_user }}@atlantishq.de>"
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
# Set username and password
|
||||
smtp_sasl_password_maps = static:{{ smtp_service_user }}:{{ smtp_service_pass }}
|
||||
smtp_sasl_security_options = noanonymous
|
||||
|
||||
# Turn on tls encryption
|
||||
# smtp_tls_security_level = encrypt
|
||||
header_size_limit = 4096000
|
||||
|
||||
# Set external SMTP relay host here IP or hostname accepted along with a port number.
|
||||
relayhost = {{ smtp_internal_host }}:25
|
||||
|
||||
# accept email from our web-server only (adjust to match your VPC/VLAN etc)
|
||||
inet_interfaces = 127.0.0.1
|
||||
@@ -0,0 +1,3 @@
|
||||
CREATE USER telegraf WITH PASSWORD {{ influxdb_telegraf_password }} WITH ALL PRIVILEGES
|
||||
CREATE DATABASE telegraf
|
||||
CREATE RETENTION POLICY "4Weeks" ON "telegraf" DURATION 4w REPLICATION 1 DEFAULT
|
||||
@@ -0,0 +1,4 @@
|
||||
[[outputs.influxdb]]
|
||||
database = "telegraf"
|
||||
username = "telegraf"
|
||||
password = "{{ influxdb_telegraf_password }}"
|
||||
@@ -0,0 +1,2 @@
|
||||
[[inputs.syslog]]
|
||||
server = "tcp://localhost:6514"
|
||||
@@ -0,0 +1,7 @@
|
||||
- name: Add slapd script to cron
|
||||
cron:
|
||||
minute: "0"
|
||||
hour: "0"
|
||||
name: Nextcloud cron-cleanup
|
||||
job: /usr/bin/php -f /var/www/nextcloud/cron.php
|
||||
user: www-data
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user