diff --git a/roles/prometheus_exporters/files/fail2ban-textcollector.sh b/roles/prometheus_exporters/files/fail2ban-textcollector.sh new file mode 100644 index 0000000000000000000000000000000000000000..1b382ead63a6facaf2846eb72087c173057a840a --- /dev/null +++ b/roles/prometheus_exporters/files/fail2ban-textcollector.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -o errexit +set -o nounset + +if (( $# != 1 )); then + echo "Missing textcollector directory argument" + exit 1 +fi + +TEXTFILE_COLLECTOR_DIR=${1} +PROM_FILE=$TEXTFILE_COLLECTOR_DIR/fail2ban.prom + +TMP_FILE=$PROM_FILE.$$ +[ -e $TMP_FILE ] && rm -f $TMP_FILE + +trap "rm -f $TMP_FILE" EXIT + +json=$(fail2ban-client banned | tr \' \") +len=$(echo $json | jq '. | length') + +echo "# HELP fail2ban_bans" >> $TMP_FILE +echo "# TYPE fail2ban_bans gauge" >> $TMP_FILE + +for ((i = 0; i < $len; i++ )); +do + jail=$(echo $json | jq -r ".[${i}] | keys | .[0]") + bans=$(echo $json | jq -r ".[${i}] | to_entries | .[0].value | length") + + echo "fail2ban_bans{jail=\"${jail}\"} $bans" >> $TMP_FILE +done + +mv -f $TMP_FILE $PROM_FILE diff --git a/roles/prometheus_exporters/tasks/main.yml b/roles/prometheus_exporters/tasks/main.yml index d06e84466be6e794f430d6919e889b0bbdecd277..87568bdfb82fc23879b982a24f715035abd745ba 100644 --- a/roles/prometheus_exporters/tasks/main.yml +++ b/roles/prometheus_exporters/tasks/main.yml @@ -58,6 +58,7 @@ - repository-textcollector.sh - btrfs-textcollector.sh - aur-textcollector.sh + - fail2ban-textcollector.sh - name: install arch textcollector service template: src=prometheus-arch-textcollector.service.j2 dest=/etc/systemd/system/prometheus-arch-textcollector.service owner=root group=root mode=644 @@ -80,6 +81,15 @@ systemd: name=prometheus-borg-textcollector.timer enabled=yes daemon_reload=yes state=started when: "'borg_clients' in group_names" +- name: install fail2ban textcollector service + template: src=prometheus-fail2ban-textcollector.service.j2 dest=/etc/systemd/system/prometheus-fail2ban-textcollector.service owner=root group=root mode=644 + +- name: install fail2ban textcollector timer + template: src=prometheus-fail2ban-textcollector.timer.j2 dest=/etc/systemd/system/prometheus-fail2ban-textcollector.timer owner=root group=root mode=644 + +- name: enable and start prometheus fail2ban textcollector timer + systemd: name=prometheus-fail2ban-textcollector.timer enabled=yes daemon_reload=yes state=started + - name: install blackbox exporter configuration copy: src=blackbox.yml dest=/etc/prometheus/blackbox.yml owner=root group=root mode=0644 when: "'prometheus' in group_names" diff --git a/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.service.j2 b/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..e27c42e2440634fcd058276a787ddd4d0bab0434 --- /dev/null +++ b/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.service.j2 @@ -0,0 +1,34 @@ +[Unit] +Description=Prometheus Fail2ban Exporter + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/fail2ban-textcollector.sh {{ prometheus_textfile_dir }} + +NoNewPrivileges=true +LockPersonality=true + +PrivateDevices=true +PrivateTmp=true +PrivateNetwork=true +ProtectSystem=strict +ProtectHome=read-only +ReadWritePaths={{ prometheus_textfile_dir }} + +MemoryDenyWriteExecute=true +RemoveIPC=true +RestrictRealtime=true +RestrictNamespaces=true +RestrictSUIDSGID=true + +RestrictAddressFamilies=~AF_PACKET +RestrictAddressFamilies=~AF_NETLINK + +ProtectHostname=true +ProtectControlGroups=true +ProtectKernelLogs=true +ProtectKernelTunables=true +ProtectKernelModules=true +ProtectClock=true + +SystemCallArchitectures=native diff --git a/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.timer.j2 b/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.timer.j2 new file mode 100644 index 0000000000000000000000000000000000000000..ed669cf2f7435b830e0398dc3f28c3e3844b4a9b --- /dev/null +++ b/roles/prometheus_exporters/templates/prometheus-fail2ban-textcollector.timer.j2 @@ -0,0 +1,10 @@ +[Unit] +Description=Prometheus Fail2ban Exporter TextCollector Timer + +[Timer] +OnUnitActiveSec=10min +OnBootSec=15min +RandomizedDelaySec=1min + +[Install] +WantedBy=timers.target