Opnsense OpenVpn Status auslesen

Started by fox-octi, December 29, 2021, 08:36:27 PM

Previous topic - Next topic
Hi,

wo finde ich das Status File von openvpn Dienst? Der Webdienst muss hier ja auch ran kommen, hab es leider nicht gefunden. Hab das Thema, das einige VPN Clients nicht auf Ping antworten, ich jedoch trotzdem gern die Verbindungen im Monitoring haben möchte, daher die Idee.

Gruß

Chris

December 29, 2021, 08:52:35 PM #1 Last Edit: December 29, 2021, 09:16:16 PM by fox-octi
Noch ein wenig geschaut und folgendes File gefunden:
/usr/local/www/status_openvpn.php

bei mir ist es somit:
echo "status 2" | socat UNIX-CONNECT:/var/etc/openvpn/server1.sock -


die Sockets bekommt ihr hiermit raus:
cat /var/etc/openvpn/*.conf | grep management


um es später ins Monitoring zu bekommen:
https://github.com/opnsense/plugins/issues/2713




Hi,

ich habe es mit Check_mk Nun doch gebaut, nach dem das Feedback ein bissel ernüchtern war, was die Integration in Opnsense angeht.

Ergebnis:


Es sind aber an Checks dem ganzen keine grenzen gesetzt.

Auf Check_MK Instanz:
1.SSH Key erstellen "ssh-keygen -t rsa" und den Key hinterlegen unter CheckMK instanz /instanz/ssh


Unter Opnsense

  • 1.Benutzer für Monitoring erstellen und SSH Pub Key hinterlegen
  • 2.eine Gruppe erstellen für den SSH Zugriff und den Root Benutzer sowie den Monitoring Nutzer hinzufügen.
  • 3.Unter System Einstellungen ->Verwaltung SSH Konfigurieren und Anmeldegruppe auf die SSH Gruppe ändern

Auf Opnsense als ROOT SSH:

  • Installieren von benötigten tools: 'pkg install libstatgrab bash wget'

  • Berechtigungen erweitern auf die Sockets von openvpn, dabei wird jeden Benutzer aber Änderungsrechte auf die Filestruktur von Openvpn Konfiguration gegeben '/bin/chmod +rwx /var/etc/openvpn ; /bin/chmod -R 777 /var/log/openvpn ;/bin/chmod -R +rx /var/etc/openvpn-csc';chown -R cmkfirewall /usr/local/lib/check_mk_agent

Auf Check_mk Instanz:

  • Skript erstellen, was den CheckMK Agent bei Bedarf bereitstellt und anschließend aufruft:
    ####cmk-firewall.sh####
    if [ ! -f '/home/cmkfirewall/bin/check_mk_agent.freebsd' ]; then echo "rm -r ~/bin ; mkdir ~/bin ; wget -P ~/bin https://raw.githubusercontent.com/tribe29/checkmk/master/agents/check_mk_agent.freebsd ; chmod +x ~/bin/check_mk_agent.freebsd; mkdir -p /usr/local/lib/check_mk_agent/plugins ;mkdir -p /usr/local/lib/check_mk_agent/local ;" >~/cmk.sh && sh ~/cmk.sh ; fi;
    #### openvpn status opnsense
    #!/bin/bash
    rm /var/log/openvpn/openvpn-status.log
    for i in $(ls /var/etc/openvpn/*.sock); do
    echo "status" | socat UNIX-CONNECT:${i} - >>/var/log/openvpn/openvpn-status.log 2> /dev/null
    #echo "$i";
    done;

    ###
    ~/bin/check_mk_agent.freebsd
    echo ""
    #####cmk-firewall.sh End####

  • Testaufruf:
    ssh -i $OMD_ROOT/ssh/firewall.id -T cmkfirewall@172.16.222.224 'sh -s' <$OMD_ROOT/ssh/cmk-firewall.sh

  • der Instanz die Berechtigungen auf die Files geben: chown -R instanz $OMD_ROOT/ssh

  • damit wir ein Script haben, welches LocalChecks Synct und gleichzeitig die Abfrage machen, erstellt man ein Bash Script:
    ####cmk_ssh.sh######
    while [[ $# > 0 ]]
    do
            case "$1" in

                    -a|--sshkey)
                            sshkey="$2"
                            shift
                            ;;

                    -b|--sshuser)
                            sshuser="$2"
                            shift
                            ;;
                    -s|--sshscript)
                            sshscript="$2"
                            shift
                            ;;
                    -h|--host)
                            host="$2"
                            shift
                            ;;

                    --help|*)
                            echo "$1 Usage:"
                            echo "    --valueA \"value\""
                            echo "    --valueB \"value\""
                            echo "    --help"
                            exit 1
                            ;;
            esac
            shift
    done

    ssh -i ${sshkey} -T $sshuser@$host 'sh -s' <$sshscript
    scp -i ${sshkey} $OMD_ROOT/ssh/localchecks/* $sshuser@$host:/usr/local/lib/check_mk_agent/local 2> /dev/null
    echo ""
    ######

  • mit dem instanz nutzer einmal zum Ziel ssh aufbauen, damit der Hostkey abgelegt wird.
    In CheckMK entsprechend: https://docs.checkmk.com/latest/de/agent_linux.html SSH Part arbeiten
    1: Setup->Agents->Other integrations ->Individual program call instead of agent access:
    SkriptVariante inkl. Localchecks Sync:   bash $OMD_ROOT/ssh/cmk_ssh.sh --sshkey $OMD_ROOT/ssh/firewall.id --sshuser 'cmkfirewall' --host $HOSTADDRESS$ --sshscript $OMD_ROOT/ssh/cmk-firewall.sh
    Nur SSH: ssh -i $OMD_ROOT/ssh/firewall.id -T cmkfirewall@$HOSTADDRESS$ 'sh -s' <$OMD_ROOT/ssh/cmk-firewall.sh


Testen und glücklich sein. OpenVPN Status ist damit drin und für meine Historie von Openvpn habe ich noch folgenden Check erstellt:
###$OMD_ROOT/ssh/localchecks/openvpn-stat.sh
for i in $(ls /var/etc/openvpn-csc); do
        for s in $(ls /var/etc/openvpn-csc/$i); do
        cat /var/log/openvpn/openvpn-status.log | grep $s >/dev/null
        retVal=$?
                if [ $retVal -ne 0 ]; then
                        echo "0 OpenVPN_$s State=0 OK - OpenVPN Nutzer $s is offline"
                else
                        echo "0 OpenVPN_$s State=1 OK - OpenVPN Nutzer $s is online"
                fi
        done;
done;


Ergebnis:

Moin,

falls da noch jemand Interesse hat. Wir haben da so ein bisschen was gebaut.

https://github.com/bashclub/check-opnsense

Hat keine Abhängigkeiten.
Installation
fetch -o /usr/local/etc/rc.syshook.d/start/99-checkmk_agent https://github.com/bashclub/check-opnsense/raw/main/opnsense_checkmk_agent.py
chmod +x /usr/local/etc/rc.syshook.d/start/99-checkmk_agent
/usr/local/etc/rc.syshook.d/start/99-checkmk_agent


Status so fast Beta.

Derzeit implementiert

Firmware alter aktuelle Version/neue Version verfübar
Interfaces (mit Namen aus Description)
Gateways
OpenVPN Server/Client
OpenVPN je Client (kann über Client Specific Overrides konfiguriert werden ... nur common name des Zertifikats oder Username angeben / Description kann benutzt werden um den Servicenamen zu ändern)


Das Script ist derzeit auf --start parameter dauer eingestellt, damit es über den syshook Ordner einfach mitstartet.

Es sind aber eigentlich alle Funktionen die AFAIK für einen Dienst unter OPNsense benötigt werden vorhanden --start,--stop,--status, daher sollte eine Migration zu einem Plugin leicht möglich sein. CC @mimugmail wenn du vielleicht Lust zu helfen hättest.

Das Plug-in würde mich auch sehr interessieren. Gibt es hier schon Neuigkeiten?

Hallo zusammen,

ich bin auch sehr an dem CheckMK plugin für opnsense interessiert und möchte dieses gerne einbinden. Zusätzlich möchte ich dann die lokalen check's per bash/python für checkmk erweitern.
Bspw. wenn updates per opk upgrade anstehen ...

Habe mir dies hier angeschaut: https://docs.checkmk.com/latest/de/agent_freebsd.html
Jedoch habe nun mehrfach gelesen, dass man ssh anstelle von inetd verwenden soll, da bei jedem update/upgrade von opnsense sonst die Konfiguration überschrieben wird ;(

Danke & Gruß,

Du kannst das https://github.com/bashclub/check-opnsense/tree/testing doch nehmen, ja kannst du auch erweitern mit zusätzlichen scripts wie beim original.

Pfad ist ein wenig spackig. /usr/local/local bzw. auch /usr/local/local/300 ablegen wie beim orginal um nur alle 5min abzurufen.

PS: das testing branch ist aus welchen Gründen auch immer noch nicht ins main geschoben. Das ist aber bei vielen Leuten so im Einsatz. 0.99 ist die aktuelle Version

herzlichen Dank schonmal für das Plugin. Hat sich das schon jemand umgeschrieben für die "neuen" OpenVPN Instanzen?