<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schose's Blog &#187; Monitoring</title>
	<atom:link href="http://blog.schose.net/index.php/archives/category/monitoring/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.schose.net</link>
	<description>I like default settings!!! ;)</description>
	<lastBuildDate>Tue, 03 Mar 2009 01:01:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Citrix WI/PNAgent Site über Nagios monitoren</title>
		<link>http://blog.schose.net/index.php/archives/221</link>
		<comments>http://blog.schose.net/index.php/archives/221#comments</comments>
		<pubDate>Mon, 19 Jan 2009 22:59:34 +0000</pubDate>
		<dc:creator>andreas</dc:creator>
				<category><![CDATA[Citrix]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Terminal services]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.schose.net/?p=221</guid>
		<description><![CDATA[Das Citrix Webinterface wird von jedem Program Neighborhood Agent angesprochen um die veröffentlichten Anwendungen für den jeweiligen User zu bestimmen. Ist diese Komponente nicht verfügbar, sind von Windowsagents keine Anmeldungen möglich. Aus diesem Grund sollte Anmeldungen überwacht werden. Hier wird eine Möglichkeit zur Überwachung mit Nagios beschrieben. 


Kommunikationswege:
Technisch stellt der Agent an das Citrix Webinterface [...]]]></description>
			<content:encoded><![CDATA[<p>Das Citrix Webinterface wird von jedem Program Neighborhood Agent angesprochen um die veröffentlichten Anwendungen für den jeweiligen User zu bestimmen. Ist diese Komponente nicht verfügbar, sind von Windowsagents keine Anmeldungen möglich. Aus diesem Grund sollte Anmeldungen überwacht werden. Hier wird eine Möglichkeit zur Überwachung mit Nagios beschrieben. </p>
<p><a href="http://blog.schose.net/uploads/2009/01/zeichnung.png"><img src="http://blog.schose.net/uploads/2009/01/zeichnung.png" alt="" title="zeichnung" width="500" height="350" class="aligncenter size-full wp-image-222" /></a></p>
<p><span id="more-221"></span></p>
<p><strong>Kommunikationswege:</strong></p>
<p>Technisch stellt der Agent an das Citrix Webinterface PNAgent Site erst eine GET Anfrage (kann weggelassen werden) und übermittelt danach per POST Username und Passwort. Daraufhin leitet das Webinterface die Usercredentials and den Citrix XML-Service weiter und erhält die Liste der Anwendungen, welche für den User konfiguriert sind als XML. </p>
<p><strong>Simulieren des Logins</strong></p>
<p>Um unsere Anfrage zu simulieren müssen wir den Verkehr mit einem Tool wie Wireshark mitschneiden. Um mitlesen zu können sollten wir gegen ein Webinterface arbeiten, welches per HTTP anzusprechen ist.</p>
<p>Im vorhinein wird ein User benötigt für welchen wenigstens eine veröffentlichte Anwendung definiert ist. </p>
<p>Da mehrere Logins mit dem gleichem Passwort immer das selbe verschlüsselte Passwort ergeben, ist davon auszugehen, dass ein XOR mit einem geheimen Wert gemacht wird. </p>
<p>Die POST Anfrage vom Client zu Server sieht ungefähr folgendermaßen aus:</p>
<p>erst nen bischen allgemeines Zeug:</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span> ?xml <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span> !DOCTYPE NFuseProtocol SYSTEM <span style="color: #ff0000;">&quot;NFuse.dtd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;nfuseprotocol</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;4.6&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;requestappdata<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;scope</span> <span style="color: #000066;">traverse</span>=<span style="color: #ff0000;">&quot;onelevel&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;PNFolder&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/requestappdata<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/nfuseprotocol<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;desireddetails<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>all<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/desireddetails<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;desireddetails<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>icon-info<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/desireddetails<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servertype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>x<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servertype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servertype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>win32<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servertype<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;clienttype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ica30<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clienttype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clienttype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>content<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clienttype<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>nun die Usercredentials:</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;credentials<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;username<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>MYUSERACCOUNTTOCHECK<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/username<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;password</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;ctx1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>THISISMYCRYPTEDPASSWORD<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/password<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;domain</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;NT&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>MYDOMAIN<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/domain<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/credentials<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>ein bischen unnützes Zeug:</p>

<div class="wp_syntax"><div class="code"><pre class="xml xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clientname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>MYCLIENTNAME<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clientname<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clientaddress<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>111.222.333.444<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clientaddress<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><strong>NagiosPlugin</strong></p>
<p>Eins vorweg: ich weiss, dass es &#8220;smartere&#8221; Möglichkeiten gibt, aber es muss platz für Verbesserung geben. Ich denke ich werde das gesammte Plugin demnächst nochmal überarbeiten und schick machen.</p>
<p>Mit dem check_http Plugin &#8211; defaultplugin von Nagios &#8211; kann ein Post Anfrage simuliert und die Rückgabe geparsed werden. Wird dein definiertes Pattern gefunden liefert das Script &#8220;OK&#8221; und eine Antwortzeit. Diese Rückgabe parsen wir mit dem check_wiserver.sh Script. </p>
<p>check_wiserver.sh:</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #007800;">a</span>=<span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nagios<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>check_http <span style="color: #660033;">-I</span> 111.112.113.114 <span style="color: #660033;">-u</span> http:<span style="color: #000000; font-weight: bold;">//</span>mywebinterfaceserver<span style="color: #000000; font-weight: bold;">/</span>citrix<span style="color: #000000; font-weight: bold;">/</span>pnagent<span style="color: #000000; font-weight: bold;">/</span>enum.aspx <span style="color: #660033;">-s</span> MyMonitoringApp <span style="color: #660033;">-P</span> <span style="color: #ff0000;">'&lt; ?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt; !DOCTYPE NFuseProtocol SYSTEM &quot;NFuse.dtd&quot;&gt;&lt;nfuseprotocol version=&quot;4.6&quot;&gt;&lt;requestappdata&gt;&lt;scope traverse=&quot;onelevel&quot; type=&quot;PNFolder&quot;/&gt;&lt;desireddetails&gt;all&lt;/desireddetails&gt;&lt;desireddetails&gt;icon-info&lt;/desireddetails&gt;&lt;servertype&gt;x&lt;/servertype&gt;&lt;servertype&gt;win32&lt;/servertype&gt;&lt;clienttype&gt;ica30&lt;/clienttype&gt;&lt;clienttype&gt;content&lt;/clienttype&gt;&lt;credentials&gt;&lt;username&gt;MYUSERACCOUNTTOCHECK&lt;/username&gt;&lt;password encoding=&quot;ctx1&quot;&gt;THISISMYCRYPTEDPASSWORD&lt;/password&gt;&lt;domain type=&quot;NT&quot;&gt;MYDOMAIN&lt;/domain&gt;&lt;/credentials&gt;&lt;clientname&gt;Nagisserver&lt;/clientname&gt;&lt;clientaddress&gt;115.116.117.118&lt;/clientaddress&gt;&lt;/requestappdata&gt;&lt;/nfuseprotocol&gt;'</span><span style="color: #000000; font-weight: bold;">`</span>
&nbsp;
<span style="color: #007800;">zeic</span>=<span style="color: #000000; font-weight: bold;">`/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$a</span> |/bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">grep</span> OK<span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;$zeic&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
&nbsp;
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$a</span>
  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$a</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> 0</pre></div></div>

<p>In diesem Beispiel wird der Host 111.112.113.114 auf der URL http://mywebinterfaceserver/citrix/pnagent/enum.aspx mit den Usercredentials MYUSERACCOUNTTOCHECK mit dem verschlüsseltem Passwort &#8220;THISISMYCRYPTEDPASSWORD&#8221; abgefragt. In der Rückabe wird nach der veröffentlichten Anwendung &#8220;MyMonitoringApp&#8221; geparsed und &#8220;OK&#8221; zurückgegeben. Daraufhin liefert check_wiserver.sh 2 für Error oder 0 für OK an Nagios zurück.</p>
<p>Dieses Script muss nun lediglich noch als Command im Nagios definiert werden.</p>
<p><strong>Zusammenfassung</strong></p>
<ul>
was wird mit der Probe überwacht?</p>
<li>Authentifizierungbackend (z.B.: Active Directory)</li>
<li>XML Service liefert valide Antworten</li>
<li>Web Interface Agent Site </li>
</ul>
<ul>was wird mit der Probe nicht überwacht?</p>
<li>Citrix Datastore</li>
<li>Citrix Licensing (hierzu kommt demnächst ein Blogpost)</li>
<li>&#8220;richtiges Login&#8221; wie Citrix Active Application Monitoring oder Openview</li>
</ul>
<ul>was muss getan werden:</p>
<li>Monitoringuser anlegen und Anwendung veröffentlichen</li>
<li>Login mit expliziten Credentials tracen um verschlüsseltes Passwort zu erhalten</li>
<li>in check_wiserver.sh hostname, sitename und usercredentials anpassen, ggf. Pfad zu check_http anpassen
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.schose.net/index.php/archives/221/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zimbra Monitoring mit Nagios</title>
		<link>http://blog.schose.net/index.php/archives/135</link>
		<comments>http://blog.schose.net/index.php/archives/135#comments</comments>
		<pubDate>Sun, 13 Jul 2008 17:16:06 +0000</pubDate>
		<dc:creator>andreas</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://blog.schose.net/index.php/archives/135</guid>
		<description><![CDATA[Da ich kein Plugin gefunden habe, welches mir mein Zimbra überwacht habe ich mich entschlossen selber eins zu schreiben. Das Script wertet die Ausgabe von &#8220;zmcontrol status&#8221; aus. Sollte dort nicht hinter jedem Service &#8220;Running&#8221; stehen, so wirft es eine &#8220;critical&#8221; Meldung, welche vom Nagios ausgewertet werden kann.

Das Script akzeptiert die Übergabeparameter -u für den [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich kein Plugin gefunden habe, welches mir mein Zimbra überwacht habe ich mich entschlossen selber eins zu schreiben. Das Script wertet die Ausgabe von &#8220;zmcontrol status&#8221; aus. Sollte dort nicht hinter jedem Service &#8220;Running&#8221; stehen, so wirft es eine &#8220;critical&#8221; Meldung, welche vom Nagios ausgewertet werden kann.</p>
<p><span id="more-135"></span></p>
<p>Das Script akzeptiert die Übergabeparameter -u für den Usernamen der zmcontrol ansprechen darf (default: zimbra) , sowie -b für den Pfad von zmcontrol (default: /opt/zimbra/bin/zmcontrol).</p>
<p>Da zmcontrol lediglich durch den Zimbrauser zu starten ist, müsst ihr eurem Nagiosuser erlauben das Kommando als Zimbrauser zu starten. Dies erledigt man durch das Anpassen der /etc/sudoers und das Anfügen der Zeile</p>
<p><code>%nagios      ALL=(zimbra)       NOPASSWD:/opt/zimbra/bin/zmcontrol</code></p>
<p>Danach bindet man das Script in seine Nagiosinstallation ein. Da ich den nrpe Deamon verwende wird die nrpe.cfg erweitert durch.</p>
<p><code>command[check_zmstatus]=/usr/local/nagios-plugins/libexec/check_zmstatus.pl -b $ARG1$</code></p>
<p><a href="http://andreas.ndfnet.de/showfiles/blog/check_zmstatus.pl"><br />
Hier gibt es das Script zum Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schose.net/index.php/archives/135/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
