chore: Inital Code commit
This commit is contained in:
124
README.md
Normal file
124
README.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# Zabbix Template – TLS-Zertifikatüberwachung für Mail- und Webdienste
|
||||||
|
|
||||||
|
Dieses Zabbix-Template ermöglicht eine umfassende Überwachung von TLS-Zertifikaten, die für Webserver (HTTPS) sowie E-Mail-Dienste wie SMTP und IMAP verwendet werden. Es überprüft automatisch die Gültigkeit der Zertifikate, erkennt abgelaufene oder ungültige Zertifikate und gibt rechtzeitig Warnungen aus, bevor ein Zertifikat abläuft.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Funktionen
|
||||||
|
|
||||||
|
Das Template bietet eine Vielzahl nützlicher Funktionen zur Zertifikatsüberwachung:
|
||||||
|
|
||||||
|
- Automatische Prüfung der TLS-Zertifikatsgültigkeit (gültig oder ungültig)
|
||||||
|
- Frühzeitige Benachrichtigung, wenn ein Zertifikat kurz vor dem Ablauf steht
|
||||||
|
- Unterstützung mehrerer Protokolle, darunter HTTPS, SMTP und IMAP
|
||||||
|
- Integration von Triggern für unterschiedliche Zustände, wie z. B. abgelaufene oder bald ablaufende Zertifikate
|
||||||
|
- Konfigurierbare Schwellenwerte und Parameter mithilfe von Makros auf Host-Ebene
|
||||||
|
- Unterstützung moderner TLS-Funktionen wie STARTTLS, Server Name Indication (SNI) und benutzerdefinierbarer Verbindungszeitüberschreitungen (Timeouts)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Aufbau und enthaltene Dateien
|
||||||
|
|
||||||
|
Das Paket besteht aus folgenden zentralen Komponenten:
|
||||||
|
|
||||||
|
- **`templatemailcert_check.xml`**: Das eigentliche Zabbix-Template, das über das Webinterface importiert wird.
|
||||||
|
- **`userparameters_mailcert_check.conf`**: Konfigurationsdatei für den Zabbix-Agent, welche benutzerdefinierte Prüfbefehle bereitstellt.
|
||||||
|
- **`mailcert_check.sh`**: Ein Bash-Skript, das die Zertifikatsinformationen abfragt und verarbeitet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Installationsanleitung
|
||||||
|
|
||||||
|
### Schritt 1: Skript installieren
|
||||||
|
|
||||||
|
Kopiere das Bash-Skript in ein geeignetes Verzeichnis auf dem Zielsystem und mache es ausführbar:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo cp mailcert_check.sh /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/mailcert_check.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 2: Zabbix-Agent konfigurieren
|
||||||
|
|
||||||
|
Die Datei mit den benutzerdefinierten Parametern muss in das Konfigurationsverzeichnis des Zabbix-Agenten kopiert werden. Anschließend ist ein Neustart des Agenten erforderlich:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo cp userparameters_mailcert_check.conf /etc/zabbix/zabbix_agentd.d/
|
||||||
|
sudo systemctl restart zabbix-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
### Schritt 3: Template in Zabbix importieren
|
||||||
|
|
||||||
|
1. Melde dich im Zabbix-Frontend an.
|
||||||
|
2. Navigiere zu **Configuration → Templates**.
|
||||||
|
3. Klicke auf **Import**.
|
||||||
|
4. Wähle die Datei `template_mailcert_check.xml` aus und lade sie hoch.
|
||||||
|
5. Bestätige den Import.
|
||||||
|
|
||||||
|
### Schritt 4: Template einem Host zuweisen
|
||||||
|
|
||||||
|
1. Öffne im Zabbix-Frontend den gewünschten Host.
|
||||||
|
2. Gehe zum Reiter **Templates**.
|
||||||
|
3. Füge das Template **Template Mail Certificate Monitoring** hinzu.
|
||||||
|
4. Speichere die Änderungen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Konfiguration über Makros
|
||||||
|
|
||||||
|
Auf Host-Ebene lassen sich mithilfe von Makros die zu überwachenden Ziele und Parameter definieren. Hier ein Beispiel für die SMTP-Zertifikatsüberwachung:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
{$TLS_SMTP_DOMAIN} = mail.example.com
|
||||||
|
{$TLS_SMTP_PORT} = 587
|
||||||
|
{$TLS_SMTP_STARTTLS} = smtp
|
||||||
|
{$TLS_SMTP_SNI} = mail.example.com
|
||||||
|
{$TLS_SMTP_TIMEOUT} = 10
|
||||||
|
{$TLS_SMTP_UPDATEINTERVAL} = 3600
|
||||||
|
{$TLS_SMTP_EXPIRESWITHIN} = 14
|
||||||
|
```
|
||||||
|
|
||||||
|
Diese Makros ermöglichen eine flexible und gezielte Konfiguration pro Host.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Beispielhafte Darstellung in Zabbix
|
||||||
|
|
||||||
|
Nach erfolgreicher Einrichtung werden im Zabbix-Frontend automatisch Items und Trigger erstellt. Dazu zählen unter anderem:
|
||||||
|
|
||||||
|
- Einträge zur Restlaufzeit (in Tagen) eines Zertifikats
|
||||||
|
- Statusmeldungen zu ungültigen oder bald ablaufenden Zertifikaten
|
||||||
|
- Trigger, die bei Erreichen der definierten Schwellenwerte Warnungen auslösen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Manueller Test des Prüfskripts
|
||||||
|
|
||||||
|
Zur Überprüfung der Skriptfunktionalität kann ein manueller Aufruf wie folgt erfolgen:
|
||||||
|
|
||||||
|
```
|
||||||
|
/usr/local/bin/mailcert_check.sh expire mail.example.com 587/smtp mail.example.com 10
|
||||||
|
```
|
||||||
|
|
||||||
|
Dabei werden Domain, Port, Protokoll, SNI und Timeout übergeben.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Kompatibilität
|
||||||
|
|
||||||
|
- Unterstützt wird **Zabbix ab Version 6.4**
|
||||||
|
- Abhängigkeiten: `bash`, `openssl`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
Dieses Projekt steht unter der **MIT-Lizenz** und kann frei verwendet, modifiziert und verteilt werden.
|
||||||
BIN
assets/image-20250723220013360.png
Normal file
BIN
assets/image-20250723220013360.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
BIN
assets/image-20250726093817364.png
Normal file
BIN
assets/image-20250726093817364.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
188
mailcert_check.sh
Executable file
188
mailcert_check.sh
Executable file
@@ -0,0 +1,188 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DEBUG="${DEBUG:-0}" # Setze DEBUG=1 für Debug-Ausgaben
|
||||||
|
|
||||||
|
debug() {
|
||||||
|
if [[ "$DEBUG" == "1" ]]; then
|
||||||
|
echo "[DEBUG] $*" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Standardwerte
|
||||||
|
timeout_sec=5
|
||||||
|
err_code=-65535
|
||||||
|
valid_codes=(0)
|
||||||
|
|
||||||
|
print_usage() {
|
||||||
|
echo $err_code
|
||||||
|
if [ -t 1 ]; then
|
||||||
|
cat >&2 <<-EOT
|
||||||
|
|
||||||
|
Verwendung: $(basename "$0") expire|valid|json host|ip [port[/starttls-proto]] [tls_sni_domain] [timeout] [tls_option[,selfsigned_allowed]] [extra_s_client_args ... ]
|
||||||
|
|
||||||
|
Prüft SSL-Zertifikat auf Ablauf und Gültigkeit via OpenSSL.
|
||||||
|
|
||||||
|
Parameter:
|
||||||
|
- port: Standard 443
|
||||||
|
- starttls-proto: optional, z.B. smtp, ftp, ldap (z.B. 25/smtp)
|
||||||
|
- tls_sni_domain: Domain für TLS SNI, Standard: host
|
||||||
|
- timeout: max Wartezeit (Sek), Standard: $timeout_sec
|
||||||
|
- tls_option: tls1, tls1_2, tls_auto etc.
|
||||||
|
- selfsigned_allowed: erlaubt selbstsignierte Zertifikate
|
||||||
|
- extra_s_client_args: zusätzliche OpenSSL s_client Parameter
|
||||||
|
|
||||||
|
Rückgabewerte:
|
||||||
|
* expire:
|
||||||
|
Anzahl verbleibender Tage (0 oder negativ bei abgelaufen)
|
||||||
|
$err_code bei Fehler
|
||||||
|
* valid:
|
||||||
|
1 = gültig, 0 = ungültig, $err_code bei Fehler
|
||||||
|
* json:
|
||||||
|
JSON mit expire_days, valid, return_code, return_text
|
||||||
|
Oder JSON mit error_code und error_message bei Fehler
|
||||||
|
|
||||||
|
Fehler werden auf der Konsole nur bei Terminalausgabe angezeigt.
|
||||||
|
|
||||||
|
EOT
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
exit_with_error() {
|
||||||
|
local msg="$*"
|
||||||
|
if [[ "$mode" == "json" ]]; then
|
||||||
|
echo "{\"error_code\": $err_code, \"error_message\": \"$msg\"}"
|
||||||
|
else
|
||||||
|
echo $err_code
|
||||||
|
if [ -t 1 ]; then echo "Fehler: $msg" >&2; fi
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
output_and_exit() {
|
||||||
|
echo "$1"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
calculate_days_left() {
|
||||||
|
local expiry_str
|
||||||
|
expiry_str=$(printf "%s" "$openssl_output" \
|
||||||
|
| sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' \
|
||||||
|
| openssl x509 -noout -dates 2>/dev/null \
|
||||||
|
| grep '^notAfter=' | cut -d= -f2)
|
||||||
|
|
||||||
|
debug "Ablaufdatum: $expiry_str"
|
||||||
|
[[ -z "$expiry_str" ]] && exit_with_error "Konnte Ablaufdatum nicht ermitteln"
|
||||||
|
|
||||||
|
expiry_epoch=$($date_cmd -d "$expiry_str" +%s) || exit_with_error "Ungültiges Datum: $expiry_str"
|
||||||
|
now_epoch=$($date_cmd +%s)
|
||||||
|
|
||||||
|
debug "Epoch-Zeitpunkte: jetzt=$now_epoch, ablauf=$expiry_epoch"
|
||||||
|
|
||||||
|
echo $(( (expiry_epoch - now_epoch) / 86400 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Standard date Befehl ermitteln (Linux oder macOS mit gdate)
|
||||||
|
date_cmd="date"
|
||||||
|
if date --version 2>&1 | grep -qi 'busybox'; then
|
||||||
|
exit_with_error "Busybox date wird nicht unterstützt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prüfen auf benötigte Tools
|
||||||
|
for tool in timeout openssl $date_cmd; do
|
||||||
|
type "$tool" >/dev/null 2>&1 || exit_with_error "Benötigtes Programm nicht gefunden: $tool"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Eingabeparameter
|
||||||
|
mode="$1"
|
||||||
|
host="$2"
|
||||||
|
port_and_proto="${3:-443}"
|
||||||
|
tls_sni="${4:-$host}"
|
||||||
|
timeout="${5:-$timeout_sec}"
|
||||||
|
tls_opts="$6"
|
||||||
|
extra_args=("${@:7}")
|
||||||
|
|
||||||
|
debug "Modus: $mode"
|
||||||
|
debug "Host: $host"
|
||||||
|
debug "Port/Proto: $port_and_proto"
|
||||||
|
debug "SNI: $tls_sni"
|
||||||
|
debug "Timeout: $timeout"
|
||||||
|
debug "TLS-Optionen: $tls_opts"
|
||||||
|
debug "Extra-Args: ${extra_args[*]}"
|
||||||
|
|
||||||
|
# Port und optionales starttls-Protokoll extrahieren
|
||||||
|
IFS='/' read -r port proto <<< "$port_and_proto"
|
||||||
|
starttls_flag=""
|
||||||
|
starttls_proto=""
|
||||||
|
if [[ -n "$proto" && "$proto" != "tls" ]]; then
|
||||||
|
starttls_flag="-starttls"
|
||||||
|
starttls_proto="$proto"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parametervalidierung
|
||||||
|
[[ "$mode" =~ ^(expire|valid|json)$ ]] || exit_with_error "Ungültiger Modus: $mode"
|
||||||
|
[[ "$port" =~ ^[0-9]+$ ]] || exit_with_error "Port muss numerisch sein"
|
||||||
|
(( port >= 1 && port <= 65535 )) || exit_with_error "Port muss zwischen 1 und 65535 liegen"
|
||||||
|
[[ -z "$starttls_proto" || "$starttls_proto" =~ ^[a-z0-9]+$ ]] || exit_with_error "Ungültiges StartTLS-Protokoll"
|
||||||
|
[[ "$timeout" =~ ^[0-9]+$ ]] || exit_with_error "Timeout muss numerisch sein"
|
||||||
|
|
||||||
|
# Unterstützung für IDN Domains (Punycode)
|
||||||
|
if type idn >/dev/null 2>&1; then
|
||||||
|
host=$(idn "$host" 2>/dev/null || echo "$host")
|
||||||
|
tls_sni=$(idn "$tls_sni" 2>/dev/null || echo "$tls_sni")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TLS Optionen parsen
|
||||||
|
IFS=',' read -r -a tls_options_arr <<< "$tls_opts"
|
||||||
|
tls_flag=""
|
||||||
|
for opt in "${tls_options_arr[@]}"; do
|
||||||
|
if [[ "$opt" == "self_signed_ok" ]]; then
|
||||||
|
valid_codes+=(18 19 20 21)
|
||||||
|
elif [[ "$opt" == "tls_auto" ]]; then
|
||||||
|
:
|
||||||
|
elif [[ "$opt" == tls* || "$opt" == ssl* || "$opt" == dtls* ]]; then
|
||||||
|
tls_flag="-$opt"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Zertifikat abfragen
|
||||||
|
debug "Aufruf: openssl s_client $starttls_flag $starttls_proto -connect $host:$port -servername $tls_sni -verify_hostname $tls_sni $tls_flag ${extra_args[*]}"
|
||||||
|
|
||||||
|
openssl_output=$(timeout "$timeout" openssl s_client $starttls_flag $starttls_proto -connect "$host:$port" -servername "$tls_sni" -verify_hostname "$tls_sni" $tls_flag "${extra_args[@]}" 2>/dev/null <<<"")
|
||||||
|
|
||||||
|
debug "OpenSSL-Ausgabe erhalten"
|
||||||
|
debug "$(echo "$openssl_output" | head -n 10)"
|
||||||
|
|
||||||
|
# Prüfung, ob Ausgabe gültig ist
|
||||||
|
if ! grep -q '^ *Verify return code:' <<< "$openssl_output"; then
|
||||||
|
exit_with_error "Konnte Zertifikat nicht abrufen"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$mode" == "expire" ]]; then
|
||||||
|
days_left=$(calculate_days_left)
|
||||||
|
output_and_exit "$days_left"
|
||||||
|
else
|
||||||
|
verify_line=$(grep '^ *Verify return code:' <<< "$openssl_output" | head -n1 | tr -s ' ')
|
||||||
|
verify_code=$(cut -d' ' -f4 <<< "$verify_line")
|
||||||
|
verify_text=$(sed -n 's/^ *Verify return code: [0-9]* (\(.*\))/\1/p' <<< "$verify_line")
|
||||||
|
|
||||||
|
debug "Verify Code: $verify_code"
|
||||||
|
debug "Verify Text: $verify_text"
|
||||||
|
|
||||||
|
valid=0
|
||||||
|
for code in "${valid_codes[@]}"; do
|
||||||
|
if [[ "$code" == "$verify_code" ]]; then
|
||||||
|
valid=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$mode" == "valid" ]]; then
|
||||||
|
output_and_exit "$valid"
|
||||||
|
elif [[ "$mode" == "json" ]]; then
|
||||||
|
days_left=$(calculate_days_left)
|
||||||
|
printf '{"expire_days": %d, "valid": %d, "return_code": %s, "return_text": "%s"}\n' \
|
||||||
|
"$days_left" "$valid" "$verify_code" "$verify_text"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
267
template_mailcert_check.xml
Normal file
267
template_mailcert_check.xml
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<zabbix_export>
|
||||||
|
<version>6.4</version>
|
||||||
|
<template_groups>
|
||||||
|
<template_group>
|
||||||
|
<uuid>a571c0d144b14fd4a87a9d9b2aa9fcd6</uuid>
|
||||||
|
<name>Templates/Applications</name>
|
||||||
|
</template_group>
|
||||||
|
</template_groups>
|
||||||
|
<templates>
|
||||||
|
<template>
|
||||||
|
<uuid>c2b74f8e940244aea1c469c8a63e3a3a</uuid>
|
||||||
|
<template>Template Mail Certificate Monitoring</template>
|
||||||
|
<name>Template Mail Certificate Monitoring</name>
|
||||||
|
<groups>
|
||||||
|
<group>
|
||||||
|
<name>Templates/Applications</name>
|
||||||
|
</group>
|
||||||
|
</groups>
|
||||||
|
<items>
|
||||||
|
<item>
|
||||||
|
<uuid>161cd7c9ab6f4a15bd740ca33ab32c10</uuid>
|
||||||
|
<name>TLS: Days until WEB certificate expires</name>
|
||||||
|
<key>mailcert_check_expire[{$TLS_WEB_DOMAIN},{$TLS_WEB_PORT}/{$TLS_WEB_STARTTLS},{$TLS_WEB_SNI},{$TLS_WEB_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_WEB_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<units>d</units>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>dd76bdafc530428a99443a4e6211af38</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_expire[{$TLS_WEB_DOMAIN},{$TLS_WEB_PORT}/{$TLS_WEB_STARTTLS},{$TLS_WEB_SNI},{$TLS_WEB_TIMEOUT}])<{$TLS_WEB_EXPIRESWITHIN}</expression>
|
||||||
|
<name>WEB Certificate for {HOST.NAME} expires soon ({ITEM.VALUE} days left)</name>
|
||||||
|
<priority>AVERAGE</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<uuid>9e32e8f9af2740ea89437634e443c26e</uuid>
|
||||||
|
<name>TLS: WEB Certificate validity</name>
|
||||||
|
<key>mailcert_check_valid[{$TLS_WEB_DOMAIN},{$TLS_WEB_PORT}/{$TLS_WEB_STARTTLS},{$TLS_WEB_SNI},{$TLS_WEB_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_WEB_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>81cd1ee8eda946ebb216e90c1bffbcd1</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_valid[{$TLS_WEB_DOMAIN},{$TLS_WEB_PORT}/{$TLS_WEB_STARTTLS},{$TLS_WEB_SNI},{$TLS_WEB_TIMEOUT}])<>1</expression>
|
||||||
|
<name>SSL certificate invalid</name>
|
||||||
|
<priority>DISASTER</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<uuid>f2ab69c1fbb2436ca59b90cfe0efdd9b</uuid>
|
||||||
|
<name>TLS: Days until SMTP certificate expires</name>
|
||||||
|
<key>mailcert_check_expire[{$TLS_SMTP_DOMAIN},{$TLS_SMTP_PORT}/{$TLS_SMTP_STARTTLS},{$TLS_SMTP_SNI},{$TLS_SMTP_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_SMTP_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<units>d</units>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>3baec6e0f5a04a43b3cc9a0729a97106</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_expire[{$TLS_SMTP_DOMAIN},{$TLS_SMTP_PORT}/{$TLS_SMTP_STARTTLS},{$TLS_SMTP_SNI},{$TLS_SMTP_TIMEOUT}])<{$TLS_SMTP_EXPIRESWITHIN}</expression>
|
||||||
|
<name>SMTP Certificate for {HOST.NAME} expires soon ({ITEM.VALUE} days left)</name>
|
||||||
|
<priority>AVERAGE</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<uuid>22b9d1c4f7bb4418be3adbdac6c3ecef</uuid>
|
||||||
|
<name>TLS: SMTP Certificate validity</name>
|
||||||
|
<key>mailcert_check_valid[{$TLS_SMTP_DOMAIN},{$TLS_SMTP_PORT}/{$TLS_SMTP_STARTTLS},{$TLS_SMTP_SNI},{$TLS_SMTP_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_SMTP_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>18d377fe3b1c481f974fba1c18231804</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_valid[{$TLS_SMTP_DOMAIN},{$TLS_SMTP_PORT}/{$TLS_SMTP_STARTTLS},{$TLS_SMTP_SNI},{$TLS_SMTP_TIMEOUT}])<>1</expression>
|
||||||
|
<name>SSL certificate invalid</name>
|
||||||
|
<priority>DISASTER</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<uuid>e39f1312f1ab4287afb41694f3504c76</uuid>
|
||||||
|
<name>TLS: Days until IMAP certificate expires</name>
|
||||||
|
<key>mailcert_check_expire[{$TLS_IMAP_DOMAIN},{$TLS_IMAP_PORT}/{$TLS_IMAP_STARTTLS},{$TLS_IMAP_SNI},{$TLS_IMAP_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_IMAP_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<units>d</units>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>57517245a0c742559e36655cd85dd66d</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_expire[{$TLS_IMAP_DOMAIN},{$TLS_IMAP_PORT}/{$TLS_IMAP_STARTTLS},{$TLS_IMAP_SNI},{$TLS_IMAP_TIMEOUT}])<{$TLS_IMAP_EXPIRESWITHIN}</expression>
|
||||||
|
<name>IMAP Certificate for {HOST.NAME} expires soon ({ITEM.VALUE} days left)</name>
|
||||||
|
<priority>AVERAGE</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<uuid>78026be8b8ec4e009063c129c92493a1</uuid>
|
||||||
|
<name>TLS: IMAP Certificate validity</name>
|
||||||
|
<key>mailcert_check_valid[{$TLS_IMAP_DOMAIN},{$TLS_IMAP_PORT}/{$TLS_IMAP_STARTTLS},{$TLS_IMAP_SNI},{$TLS_IMAP_TIMEOUT}]</key>
|
||||||
|
<delay>{$TLS_IMAP_UPDATEINTERVAL}</delay>
|
||||||
|
<history>7d</history>
|
||||||
|
<trends>14d</trends>
|
||||||
|
<tags>
|
||||||
|
<tag>
|
||||||
|
<tag>Application</tag>
|
||||||
|
<value>Mail Certificates</value>
|
||||||
|
</tag>
|
||||||
|
</tags>
|
||||||
|
<triggers>
|
||||||
|
<trigger>
|
||||||
|
<uuid>1f94230b59824b5f83277204b2acb484</uuid>
|
||||||
|
<expression>last(/Template Mail Certificate Monitoring/mailcert_check_valid[{$TLS_IMAP_DOMAIN},{$TLS_IMAP_PORT}/{$TLS_IMAP_STARTTLS},{$TLS_IMAP_SNI},{$TLS_IMAP_TIMEOUT}])<>1</expression>
|
||||||
|
<name>SSL certificate invalid</name>
|
||||||
|
<priority>DISASTER</priority>
|
||||||
|
</trigger>
|
||||||
|
</triggers>
|
||||||
|
</item>
|
||||||
|
</items>
|
||||||
|
<macros>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_EXPIRESWITHIN}</macro>
|
||||||
|
<value>14</value>
|
||||||
|
<description>Number of days before the expiration of the certificate.</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_DOMAIN}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>WEB Domainname or IP to check</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_SNI}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>SNI value</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_PORT}</macro>
|
||||||
|
<value>443</value>
|
||||||
|
<description>Target port (usually 443)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_STARTTLS}</macro>
|
||||||
|
<value>tls</value>
|
||||||
|
<description>SSL Options (usually tls)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_TIMEOUT}</macro>
|
||||||
|
<value>10</value>
|
||||||
|
<description>Timeout in seconds</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_WEB_UPDATEINTERVAL}</macro>
|
||||||
|
<value>3600</value>
|
||||||
|
<description>How often to update certificate information in seconds</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_EXPIRESWITHIN}</macro>
|
||||||
|
<value>14</value>
|
||||||
|
<description>Number of days before the expiration of the certificate.</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_DOMAIN}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>SMTP Domainname or IP to check</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_SNI}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>SNI value</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_PORT}</macro>
|
||||||
|
<value>587</value>
|
||||||
|
<description>Target port (usually 587)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_STARTTLS}</macro>
|
||||||
|
<value>smtp</value>
|
||||||
|
<description>SSL Options (usually smtp)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_TIMEOUT}</macro>
|
||||||
|
<value>10</value>
|
||||||
|
<description>Timeout in seconds</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_SMTP_UPDATEINTERVAL}</macro>
|
||||||
|
<value>3600</value>
|
||||||
|
<description>How often to update certificate information in seconds</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_EXPIRESWITHIN}</macro>
|
||||||
|
<value>14</value>
|
||||||
|
<description>Number of days before the expiration of the certificate.</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_DOMAIN}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>IMAP Domainname or IP to check</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_SNI}</macro>
|
||||||
|
<value></value>
|
||||||
|
<description>SNI value</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_PORT}</macro>
|
||||||
|
<value>993</value>
|
||||||
|
<description>Target port (usually 993)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_STARTTLS}</macro>
|
||||||
|
<value>tls</value>
|
||||||
|
<description>SSL Options (usually tls)</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_TIMEOUT}</macro>
|
||||||
|
<value>10</value>
|
||||||
|
<description>Timeout in seconds</description>
|
||||||
|
</macro>
|
||||||
|
<macro>
|
||||||
|
<macro>{$TLS_IMAP_UPDATEINTERVAL}</macro>
|
||||||
|
<value>3600</value>
|
||||||
|
<description>How often to update certificate information in seconds</description>
|
||||||
|
</macro>
|
||||||
|
</macros>
|
||||||
|
</template>
|
||||||
|
</templates>
|
||||||
|
</zabbix_export>
|
||||||
|
|
||||||
5
userparameters_mailcert_check.conf
Normal file
5
userparameters_mailcert_check.conf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# Parameters:
|
||||||
|
# <hostname or IP> [port[/starttls protocol]] [domain for TLS SNI] [check timeout] [tls version] [tls_version,[self_signed_ok]]
|
||||||
|
UserParameter=mailcert_check_valid[*], /usr/local/bin/mailcert_check.sh valid "$1" "$2" "$3" "$4" "$5"
|
||||||
|
UserParameter=mailcert_check_expire[*], /usr/local/bin/mailcert_check.sh expire "$1" "$2" "$3" "$4" "$5"
|
||||||
|
UserParameter=mailcert_check_json[*], /usr/local/bin/mailcert_check.sh json "$1" "$2" "$3" "$4" "$5"
|
||||||
Reference in New Issue
Block a user