09 September 2013

Erreichbarkeit von OpenVPN-Servern mit Nagios/Icinga-Plugin überwachen

Das Monitoren von OpenVPN-Servern wird häufig auf Seite der OpenVPN-Server selbst durch das Prüfen der Prozesse durchgeführt. Besser ist es aber, von außen den entsprechenden UDP- oder TCP-Port abzufragen.

Viele unserer Kunden setzen OpenVPN-Server ein, und wollen einen so wichtigen Dienst selbstverständlich auch in das Monitoring einbinden. Die Schwierigkeit liegt darin, dass OpenVPN meist unter einem UDP-Port angeboten wird, dieser sich aber nicht so einfach überwachen lässt. Als Ausweichmöglichkeit prüfen daher viele Administratoren auf den OpenVPN-Servern z.B. mit Hilfe von NRPE, ob die notwendigen Prozesse da sind.

Diese Art der Überwachung ist aber nur unzureichend, da die Erreichbarkeit des OpenVPN-Servers üblicherweise aufgrund von fehlerhaften Firewall-Beschränkungen oder Netzwerkproblemen gestört ist, und nicht aufgrund von Ausfällen des Prozesses. Außerdem lassen sich so keine Appliances oder andere Maschinen überwachen, auf denen z.B. NRPE nicht installiert werden kann oder darf. Auch ist es so nicht möglich, OpenVPN-Server von anderen Dienstleistern zu prüfen, die für die eigene Infrastruktur wichtig sind.

Aus diesem Grund haben wir ein Script (verfügbar auch auf monitoringexchange) erstellt, das als Check in Icinga/Nagios eingebettet werden kann und den UDP-Port eines OpenVPN-Server prüft. Antwortet der UDP-Port, gibt das Script „OK“ als Status sowie die Rückgabe des Servers mit zurück. Alternativ kann das Script mit einer Kommandozeilenoption auch einen TCP-Port ansprechen, in dem Fall wird aber nur der Status, und kein Rückgabewert an den Monitoring-Server übergeben. Lässt sich ein Server zu viel Zeit mit der Antwort (mehr als 5 Sekunden), bricht das Skript ab und gibt einen „CRITICAL“ Statuswert.

Das Skript lässt sich auch auf der Kommandozeile testen:

# Default run
$ python check_openvpn openvpn.example.com
OK: OpenVPN server response (hex): 409105241dd453c40a0000000000
 
# Checking custom tcp port
$ python check_openvpn -t -p 443 tcp-openvpn.example.com
OK: OpenVPN tcp port reachable.
 
# Checking a slow server
$ python check_openvpn too-slow.example.com
CRIT: Request timed out

Das Script steht unter der MIT-Lizenz und wurde unter Debian und Ubuntu unter Python 2.7 getestet.

Ein anderer Weg, OpenVPN zu überwachen ist es, den Management-Port abzufragen: dieser erfordert aber, dass OpenVPN überhaupt mit Management-Port gestartet werden kann, und dass der Port auch vom Monitoring-Server erreichbar ist, was beides nicht immer gegeben ist. Daher wählen wir in diesem Beispiel als generischen Ansatz zuerst die Überwachung der Ports an sich.

 

Dieser Artikel wurde ursprünglich geschrieben von Roland Wolters.

Kategorien: HowTos
Tags: Icinga Monitoring Nagios OpenVPN

SH

über den Autor

Sascha Heuer


Beitrag teilen: