diff --git a/sevpn/README.md b/sevpn/README.md new file mode 100644 index 0000000..06eb760 --- /dev/null +++ b/sevpn/README.md @@ -0,0 +1,10 @@ +Soft ether vpn monitoring + +sevpn3.cfg - script config + +sevpn3.conf - zabbix config + +sevpn3.sh - script + +zbx3_sevpn3_active.xml - template for zabbix 3.x + diff --git a/sevpn/sevpn3.cfg b/sevpn/sevpn3.cfg new file mode 100644 index 0000000..77cb489 --- /dev/null +++ b/sevpn/sevpn3.cfg @@ -0,0 +1,5 @@ +#sevpn 3.0 configuration file +PWD="test" +URL="127.0.0.1:5555" +VCMD="/root/soft/vpnserver/vpncmd" + diff --git a/sevpn/sevpn3.conf b/sevpn/sevpn3.conf new file mode 100644 index 0000000..595f6aa --- /dev/null +++ b/sevpn/sevpn3.conf @@ -0,0 +1,2 @@ +#SoftEther VPN server +UserParameter=sevpn[*],sudo /etc/zabbix/scripts/sevpn3.sh "$1" "$2" "$3" diff --git a/sevpn/sevpn3.sh b/sevpn/sevpn3.sh new file mode 100755 index 0000000..83080ad --- /dev/null +++ b/sevpn/sevpn3.sh @@ -0,0 +1,270 @@ +#!/bin/bash +# ABOUT softether vpn for zabbix +# author mikedmorto 2020 year +export LC_ALL="" +export LANG="en_US.UTF-8" +version="3.2" + +. sevpn3.cfg + +JSON="" +##### PARAMETERS##### +METRIC="$1" +ITEM="$2" + +case "$METRIC" in +discovery) +HUBS=`$VCMD /server ${URL} /PASSWORD:${PWD} /CMD Hublist | grep "Virtual Hub Name" | awk -F"|" '{print $2}'` +JSON="{ \"data\":[" +HUBUSERS="" +HUBBRIDGES="" +HUBCASCADES="" + +#add all users from hub into habuser list + for HUB_NAME in ${HUBS}; do + USERS=`$VCMD /server ${URL} /adminhub:$HUB_NAME /PASSWORD:${PWD} /CMD UserList | grep "User Name" | awk -F"|" '{print $2}'` + for U in ${USERS}; do + HUBUSERS=${HUBUSERS}${HUB_NAME}","${U}" " + done + done + +#add all bridges from hub into hubbridge list + for HUB_NAME in ${HUBS}; do + BRIDGES=`$VCMD /server ${URL} /PASSWORD:${PWD} /CMD BridgeList | tr -d ' ' | awk '-F|' -v VH="${HUB_NAME}" '{if ($2==VH) print $3}'` + for B in ${BRIDGES}; do + HUBBRIDGES=${HUBBRIDGES}${HUB_NAME}","${B}" " + done + done +#add all cascades from hub into hubcascade list + for HUB_NAME in ${HUBS}; do + CAS=`$VCMD /server ${URL} /adminhub:$HUB_NAME /PASSWORD:${PWD} /CMD CascadeList | grep "Setting Name" | awk -F"|" '{print $2}'` + for C in ${CAS}; do + HUBCASCADES=${HUBCASCADES}${HUB_NAME}","${C}" " + done + done + +#show all hubs + for HUB_NAME in ${HUBS}; do + JSON=${JSON}" {\"{#HUB_NAME}\":\"${HUB_NAME}\"}," + done +#show all hubusers + for HUBUSER_NAME in ${HUBUSERS}; do + JSON=${JSON}" {\"{#HUB_USER_NAME}\":\"${HUBUSER_NAME}\"}," + done +#show all hubbridges + for HUBBRIDGE_NAME in ${HUBBRIDGES}; do + JSON=${JSON}" {\"{#HUB_BRIDGE_NAME}\":\"${HUBBRIDGE_NAME}\"}," + done +#show all hubcascades + for HUBCASCADE_NAME in ${HUBCASCADES}; do + JSON=${JSON}" {\"{#HUB_CASCADE_NAME}\":\"${HUBCASCADE_NAME}\"}," + done + +# delete last simbol and add the end +JSON=${JSON::-1} +JSON=${JSON}"]}" +echo ${JSON} +exit 0 +;; + +srv.uptime) + start_date=`$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Server Started at" | awk -F"|" '{print $2}'` + start_date_timestamp=`date -d "$start_date" +%s` + current_date_timestamp=`date +%s` + uptime_timestamp=$[$current_date_timestamp - $start_date_timestamp] + echo "$uptime_timestamp" +;; +srv.number_of_users) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Users" | awk -F"|" '{print $2}'` +;; + +srv.number_of_ip_address_tables) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of IP Address Tables" | awk -F"|" '{print $2}'` +;; + +srv.number_of_mac_address_tables) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of MAC Address Tables" | awk -F"|" '{print $2}'` +;; + +srv.number_of_sessions) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Sessions" | awk -F"|" '{print $2}'` +;; + +srv.number_of_virtual_hubs) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Virtual Hubs" | awk -F"|" '{print $2}'` +;; + +srv.number_of_active_sockets) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | grep "Number of Active Sockets" | awk -F"|" '{print $2}'` +;; + +srv.l2tp_status) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD IPsecGet | grep "L2TP over IPsec Server Function Enabled" | awk -F"|" '{print $2}'` +;; + +srv.openvpn_status) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD openvpnget | grep "OpenVPN Clone Server Enabled" | awk -F"|" '{print $2}'` +;; + +srv.version) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /CMD ServerStatusGet | awk 'FNR=='"3"` +;; + +hub.if.out.broad) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Outgoing Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +hub.if.in.broad) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Incoming Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +hub.if.in.uni) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Incoming Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +hub.if.out.uni) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Outgoing Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +hub.sessions-bridge) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions (Bridge)" | awk -F"|" '{print $2}'` +;; + +hub.sessions-client) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions (Client)" | awk -F"|" '{print $2}'` +;; + +hub.sessions-all) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Sessions " | awk -F"|" '{print $2}'` +;; + +hub.securenat) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "SecureNAT" | awk -F"|" '{print $2}'` +;; + +hub.type) + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${ITEM} /CMD StatusGet | grep "Type" | awk -F"|" '{print $2}'` +;; + +cas.status) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Session Status" | awk -F"|" '{print $2}'` +;; + +cas.if.out.broad) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; +cas.if.in.broad) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Broadcast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +cas.if.in) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Data Size" | tr -d ',' | grep -o "[0-9]*"` +;; +cas.if.out) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Data Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +cas.if.out.uni) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Outgoing Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; +cas.if.in.uni) + HUB=${ITEM%,*} + CAS=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD CascadeStatusGet "${CAS}" | grep "Incoming Unicast Total Size" | tr -d ',' | grep -o "[0-9]*"` +;; + +br.status) + HUB=${ITEM%,*} + BR=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD bridgelist | tr -d ' ' | awk '-F|' -v VH="${HUB}" -v VB="${BR}" '{if ($2==VH && $3==VB) print $4}'` +;; +usr.if.out.broad) + HUB=${ITEM%,*} + USER=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Broadcast Total Size" | sed -e 's/[^0-9]//g'` +;; +usr.if.in.broad) + HUB=${ITEM%,*} + USER=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Broadcast Total Size" | sed -e 's/[^0-9]//g'` +;; +usr.if.in.uni) + HUB=${ITEM%,*} + USER=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Incoming Unicast Total Size" | sed -e 's/[^0-9]//g'` +;; +usr.if.out.uni) + HUB=${ITEM%,*} + USER=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /PASSWORD:${PWD} /adminhub:${HUB} /CMD UserGet ${USER} | grep "Outgoing Unicast Total Size" | sed -e 's/[^0-9]//g'` +;; + +usr.lastlogin) + HUB=${ITEM%,*} + USER=${ITEM##*,} + echo `$VCMD /SERVER ${URL} /adminhub:"$HUB" /PASSWORD:"${PWD}" /CMD UserGet "${USER}" | grep "Updated on" | awk -F"|" '{print $2}'` +;; + +script.version) + echo ${version} +;; + + +help) +echo "please use these params +{ +discovery +srv.uptime +srv.number_of_users +srv.number_of_ip_address_tables +srv.number_of_mac_address_tables +srv.number_of_sessions +srv.number_of_virtual_hubs +srv.number_of_active_sockets +srv.l2tp_status +srv.openvpn_status +srv.version +hub.if.out.broad +hub.if.in.broad +hub.if.out.uni +hub.if.in.uni +hub.sessions-bridge +hub.sessions-client +hub.sessions-all +hub.securenat +hub.type +cas.status +cas.if.in.broad +cas.if.out.broad +cas.if.out +cas.if.in +cas.if.in.uni +cas.if.out.uni +br.status +usr.lastlogin +usr.if.out.broad +usr.if.in.broad +usr.if.in.uni +usr.if.out.uni +script.version +}" +;; + + +*) + echo "" +;; +esac + diff --git a/sevpn/zbx3_sevpn3_active.xml b/sevpn/zbx3_sevpn3_active.xml new file mode 100644 index 0000000..f89863a --- /dev/null +++ b/sevpn/zbx3_sevpn3_active.xml @@ -0,0 +1,1937 @@ + + + 3.4 + 2020-12-28T04:40:36Z + + + VPN_Template + + + + + + + + {Template SEVPN3 active:sevpn[srv.version].str({$VERSION})}=0 + 0 + + SEVPN needs updates on {HOST.NAME} + 0 + + + 0 + 2 + + 0 + 0 + + + + + {Template SEVPN3 active:sevpn[srv.uptime].change(0)}<0 + 0 + + SEVPN on {HOST.NAME} has just been restarted + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template SEVPN3 active:sevpn[srv.version].diff(0)}>0 + 0 + + SEVPN Version was changed on {HOST.NAME} + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template SEVPN3 active:proc.num[vpnserver].max(#2)}<2 + 0 + + vpn server stopped + 0 + + + 0 + 5 + + 0 + 0 + + + + +