Zabbix Agent Verbindung mittels AutoSSH

      Keine Kommentare zu Zabbix Agent Verbindung mittels AutoSSH

Die Situation ist wie folgt: der Zabbix Server in Version 3.0.4 läuft zum monitoren im LAN das per dynamischer IP-Adresse an das WAN angebunden ist.

Ziel soll es sein, einen Server im Internet / WAN, der eine öffentliche IP-Adresse besitzt, als Host zum überwachen aufzunehmen.

Beide Systeme laufen unter Debian Jessie.

Das Problem ist die dynamsiche IP-Adresse des Netzwerkes in dem sich der Zabbix Server befindet. Dadurch kann der Zabbix Agent auf dem Server im Internet den Zabbix Server nicht per Hostnamen auflösen oder per IP-Adresse permanent erreichen und verifizieren. Ein Host XY denied tritt ein. Lösungen sind nun eine VPN-Verbindung oder aber das was ich gleich beschreiben werden, eine permanente SSH-Verbindung mittels autossh.

AutoSSH ist ein Tool das es ermöglicht eine SSH Verbindung permanent und automatisch  (SSH-Tunnel) mit einem Remotehost aufzubauen, bzw. seit Version 1.3 einen Port des Remotehosts lokal anzusprechen. Damit kann das Terminal geschlossen werden, wobei die SSH Sitzung bestehen bleibt. Dies kann man z.B. nutzen um den Zabbix Agent auf einem Host anzusprechen, wo es ansonsten nicht gehen würde. Mehr Infos und das Tool unter: http://www.harding.motd.ca/autossh/

Vorbereitung

Wie bereits erwähnt geht es hier in erster Linie um die Verwendung des Tools AutoSSH und da es nicht zum Umfang der Installation unter Debian gehört, muss es installiert werden. Die Installation erfolgt in diesem Szenario auf dem Zabbix Server.

AutoSSH als Paket installieren

OS Install method
Debian / Ubuntu $ sudo apt-get install autossh
CentOS / Fedora / RHEL $ sudo yum install autossh
ArchLinux $ sudo pacman -S autossh
FreeBSD # pkg install autossh or # cd /usr/ports/security/autossh/ && make install clean
OSX $ brew install autossh

AutoSSH vom Source

# wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
# gunzip -c autossh-1.4e.tgz | tar xvf –
# cd autossh-1.4e
# ./configure
# make
# make install

AutoSSH Parameter

# autossh [-V] [-M monitor_port[:port]] [-f] [-o] [SSH-Options]

  • V = zeigt die Version an z.B. autossh 1.4d
  • M = Monitoring Port der für die Aufrechterhaltung der Verbindung genutzt wird, eigentlihc sind es 2 Ports, der angegebene und der Echo-Port, beide sollten unbenutzt und offen sein, Bsp: -M 2000, an diesem werden Pakete gesendet, auf dem 20001 (port+1) wird auf die Antwort gewartet, es kann auch der Default Port 7 als Echoport für inetd echo service genutzt werden
  • f = stellt sicher das der SSH Tunnel im Hintergrund als Prozess läuft und das Terminal geschlossen werden kann ohne die Verbindung zu verlieren
  • SSH-Options = z.B. Angabe des Remotehost
  • o = ExitOnForwardFailure=yes, ist bei einem Port Forward sinnvoll, damit im Falle einer Verbindungsunterbrechung durch autossh, der selbe Port wieder verwendet wird, da die Unterbrechung ansonsten vom Client als noch bentutzt angesehen wird
  • weitere Infos unter # man autossh

AutoSSH Monitoring Port

Wie bereits beschrieben wird der Monitoring Port von autossh zum aufrechterhalten der Verbindung genutzt, was nicht all zu schwer einzurichten ist. Da ich kein Freund von unnötigt offenen Ports bin und diese hier dazu zählen, greife ich lieber auf die Methode mittels “ServerAliveInterval” und “ServerAliveCountMax” zurück.

  • ServerAliveInterval = Sekunden die der Client wartet bevor er ein Null-Paket zum Server sendet damit die Verbindung aufrecht erhalten bleibt (Default: 30)
  • ServerAliveCountMax = Anzahl der Server Alive Nachrichten die der Client sendet, ohne eine Antwort vom Server zu erhalten, wenn das Limit erreicht wurde, wird ssh die Verbindung trennen und die Sessione beenden (Default: 3)

Damit diese Methode funktioniert muss der Monitoring-Port auf 0 = deaktiviert werden.

AutoSSH Verbindung herstellen

Bevor autossh verwendet wird, sollte sicher gestellt werden, dass die grundsätzliche Verbindung mittels SSH funktioniert. Da ich hier autossh mittels Zertifikat (public/private key) nutzen werde, sollte dieses bereits erstellt und entsprechend mittels SSH funktionieren. Eine Anleitung gibt es hier http://taste-of-it.de/debian-ssh-tunnel-mittels-zertifikat-und-ohne-passwort-authentifizieren/.

Die Verbindung vom Zabbix Server zum Zabbix Agent sieht nun wie folgt aus, wobei ich den Default Port 10050 des Agents auf dem Server mit dem ungenutzten Port 10550 verbinde:

# autossh -fM 0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 10550:localhost:10050 root@zabbix-agent-server-hostname

AutoSSH Verwalten

Da autossh ein Script ist, wir es als Prozess laufen und kann dementsprechend auch behandelt werden.

AutoSSH Verbindung kontrollieren

Auf dem Zabbix Server, also dort wo die AutoSSH Verbindung läuft, ausführen:

# ps aux rep autossh
root     17692  0.0  0.1   4232  1328 ?        Ss   13:52   0:00 /usr/lib/autossh/autossh -M  0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 10550:localhost:10050 root@zabbix-agent-server

AutoSSH Verbindung beenden

Dementsprechend kann der Prozess wie jeder andere auch beendet werden:

# kill -9 17692

AutoSSH mittels config Datei

AutoSSH ist neben dem obigen Befehl auch im Stande über eine Konfigurationsdatei zu arbeiten. Wenn man mehrere dieser SSH-Tunnel aufbaut kann diese Art ganz hilfreich und vor allem übersichtlich sein.

  • # vim ~/.ssh/config
    • mit folgendem Inhalt
      Host ZAName
      HostName zabbix-agent-server
      User root
      Port 22
      IdentityFile ~/.ssh/id_rsa-zabbix@server
      LocalForward 10055 localhost:10050
      ServerAliveInterval 30
      ServerAliveCountMax 3

Der Aufruf erfolgt nun wie folgt:

# autossh -M 0 -f -T -N ZAName

Zabbix Host mit AutoSSH Agent konfigurieren

Hier das, beste, es ist nichts anderes wie mit allen anderen Hosts im LAN siehe hier: http://taste-of-it.de/zabbix-3-neuen-host-hinzufuegen/

Thats it !

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.