Nagios Notifications per XMPP

Nein nein, ich war alles nur nicht untätig. Hier hat sich soviel getan, mal sehen was ich wann davon hier aufschreibe.

Grad freu ich mich wie nen Spielkind.

Mein Nagios3 kann xmpp Notfifications 🙂

Und es ist total simpel.

in der /etc/nagios3/commands.cfg werden die Notifications definiert


# 'host-notify-by-jabber' command definition
define command{
command_name host-notify-by-jabber
command_line echo "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /scriptbase/jabbersend.rb -t jabber@meinserver.de
}

# 'notify-by-jabber' command definition
define command{
command_name notify-by-jabber
command_line echo "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /scriptbase/jabbersend.rb -t jabber@meinserver.de
}

und in der /etc/nagios3/conf.d/contacts_nagios2.cfg wird der oder werden die Contacts angepasst


define contact{
contact_name root
alias Root
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-by-jabber
host_notification_commands host-notify-by-jabber
}

Warum ich sowas mache? .o0(stellt sich die Frage wirklich..?!?)0o.
Zum Beispiel weil Fallback / Plan B / Diversifikation immer gut ist.
Und xmpp ist 2 Sekunden schneller als Email 😉
__________________________________
gpg –detach-sign -a ischtar

dpkg-reconfigure network

Meine Ansprüche an das interne Netz sind – freundlich ausgedrückt – kapriziös. Ich arbeite grundsätzlich innerhalb des Heimnetzwerkes gekapselt in einem anderen Netzwerk.

Eigentlich hatte ich ursprünglich einen kleinen Banana Pi R1 als Firewall / Router & Fileserver eingerichtet.
Der R1 kommt mit 4 Gigabit Lan, 1 Gigabit Wan, 300 Mbs Wlan, 1GB Ram und nem DualCore mit 1 GH (Cortex A7) daher. Dank seinem SATA kann man zusätzlich zur SD noch ne Platte ran hängen.

Theoretisch ist er ideal für den Job. Wie gesagt theoretisch. Als Switch ist er durchaus geeignet. Allerdings sind seine Netzwerkschnittstellen auch nur Buchsen und der ganze Verkehr läuft über einen Broadcom-Chip. Der übrigens auch den Wlanfoo übernimmt. *sigh*. Hat sich was mit dedizierten Netzen. Ich hab das Routing dann zwar mittels Usb-Wlan-Pimmel gelöst, aber schön ist was anderes.

Problem zwei ist seine Kühlung. Wird es warm und muss er viel Load tragen, bekommt er Schnappatmung und schaltet sich auch schon ganz ab. Ok, zugegeben, ich hab ihn auch etwas gequält (zb mit verschlüsselten Filesystems und so weiter), aber so sind nun mal meine Anforderungen. Ergo war da eine Baustelle, die es dringend zu lösen galt.

Zusätzlich zu dem R1 Fuckup sind die Anforderungen an das Netzwerk zuletzt gewachsen. Als Behelfslösung steht nun zwar seit einiger Zeit nen Core I7 in unserem Serverschrank, was extrem unbefriedigend ist. Der Plan sieht 3 stromsparende, leise Noiseblocklüfter im Schrank vor. Zudem eben nen Rack. Nen 4HE 19 Zoll Rack war auch schnell besorgt. Also hat der Hardwaregeek Nerdwolf die letzten Tage recherchiert, was denn nun in unsere Rack soll. Raus gekommen ist ein nettes Bundle aus Mini-ITX mit Intel Celeron N3150 (4x 1,60 GHz), 16 Gig Ram und einer EXSYS EX-6072 Dual Nic mit 2 RTL Chips. Wobei irgendwo hier auch noch eine rumfahren sollte >_< Egal. Hauptsache genug Schnittstellen zum Routen und vernetzen, nen ruhiges und stromsparendes Board und Spielraum für mich Bitschubserin. Auch hier wieder: soweit zur Theorie. Weil ... der Wolf gestern Abend folgendes fand.

Ein süßes, kleines Mini-ITX mit ner 3er RTL-Gigabit-Nic-Erweiterung. Er linkte es mir grinsenderweise, wohl wissend, was er damit anrichtet und amüsierte sich sichtlich über meine Reaktion.

*seufz* ich brauch Geld. Und nen weiteres Rack.

__________________________________
gpg –detach-sign -a ischtar

Basecheck Spielkindmode

Nachdem ich gestern über meine Systemcheck Cronjobs geschrieben hab, war ich heute doch noch nicht so ganz glücklich mit der Lösung. Da gab’s noch Optimierungsbedarf.

Einerseits wollte ich schon gefühlte Ewigkeiten wieder mit automatisierten Jabbermessages spielen, anderseits fehlte mir lynsis als rkhunter Nachfolger im Setting. Zudem nervt mich die Mailerei von eigentlich sauberen Settings.

Nachdem ich heute noch weiter rumgespielt habe, fand ich ein nettes Rubyscript, welches Shellausgaben in ne Jabbermessage piped. Allerdings nur im lokalen Netz ;). Fallback ist einfach immer gut. Vor allem bei kritischer Infrastruktur.
Beim surfen durch’s Netz fand ich zudem ein anderes Script welches mich inspiriert hat.

Raus gekommen ist folgendes – nicht ganz perfektes – Shellscript. Es gewinnt keinen Preis in Ästhetik, dafür progge ich Shell zu selten, aber es tut exakt das, was es soll.

– es führt Scans durch und lässt sie eine Logdatei schreiben
– es durchläuft die Logdatei und schaut nach, ob Warnings oder Infected Meldungen da sind
– es schreibt die Anzahl der Meldungen in eine Auswertungsdatei
– es schickt mir den Inhalt der Auswertungsdatei per XMPP Message, wenn Meldungen existieren
– die Logdatei wird per Email los geschickt, wenn Meldungen existieren
– es schickt mir ne kurze Email, wenn alles ok ist //das aber nur für ne Übergangszeit.


#!/bin/sh
log="/home/xxxx/chkrootkit.log"
auswertung="/home/xxxx/rkhunter.log"
warning=0;
infected=0;

# scan & log
echo "\n chrootkit \n" > $log
chkrootkit -q >> $log
echo "\n rkrootkit \n" >> $log
rkhunter -c --report-warnings-only >> $log
echo "\n lynis \n" >> $log
lynis --quiet --quick >> $log

# nach Meldungen durchsuchen
infected=`grep "INFECTED" < $log`
warning=`grep "Warning" < $log`

# Auswertungsdatei schreiben
echo "\n\nScan vom `date`" > $auswertung

# Anzahl der Warnungen zählen
cat $log | egrep WARNING | wc -l >> $auswertung
# Warnungen in die Datei schreiben
echo " warnings\n" >> $auswertung

# Anzahl der Infektionen zählen
cat $log | egrep ÌNFECTED | wc -l >> $auswertung
# Infektionen in die Datei schreiben
echo " infected\n" >> $auswertung

# Anzahl der Meldungen prüfen, wenn welche da sind
if [ "$INFECTED" != 0 -o "$WARNING" != 0 ]; then
# Jabbermessage triggern und mail mit Log los schicken
cat $auswertung | /home/xxxx/jabbersend.rb -t konto@internerjabberserver
mail -s "`hostname` Scan Probleme" empfaenger@emailserver.tld < $log
else
# alternativ nur die Auswertung mailen
mail -s "`hostname` Scan alles Super" empfaenger@emailserver.tld < $auswertung
fi

Das Ganze noch als Cronjob ein gehängt und ich bin happy, zumindest erstmal ♥
__________________________________
gpg –detach-sign -a ischtar

Basecheck

Die Zeiten in denen Linuxuser müde lächeln, wenn die Windows Welt wieder in eine „Es gibt einen neuen Wurm“-Panik ausbricht, sind schon lange vorbei. Auch Linuxsysteme sind angreifbar und sollten regelmässig gecheckt werden. Das gilt nicht nur für Serversysteme, sondern auch für Arbeitsrechner.

Da wir hier gerade ne Umstellung hatten, habe ich heute mal wieder ein klein wenig gebastelt. Unser internes Netzwerk hat schliesslich auch einen Server. Ich persönlich bin großer Fan von schlanken und dedizierten Systemen. X oder sonstiges GUI Zeug kommt mir nicht auf Serversysteme. Generell bin ich da (und auch bei meinem Arbytesrechnern) großer Fan von debian. Deshalb ist dies eine debianspezifischer Eintrag, wobei die Unterschiede zu anderen Linuxsystemen nur minimal sind.

Als Teil der Basisabsicherungsüberprüfung (ja, es war eine zu kurze Nacht) sind bei mir unter anderem rkhunter und chkrootkit im Einsatz. Beide checken das System nach Veränderungen und Auffälligkeiten. Dabei ergänzen sie sich toll. rkhunter checkt beispielsweise die MD5-Fingerprints von eventuell kompromittierten Dateien. Es sucht Backdoors, Rootkits und Exploits. Durchleuchtet den Kernel nach suspekten Zeichenketten, prüft die Rechte von Ordnern und Dateien und protokolliert munter alles, was er auf seinem cronjobbasierten Gang durch’s System entdeckt. Dabei lässt es sich ziemlich gut konfigurieren und über seinen zeitweiligen Übereifer (Stichwort false positives), kann ich hinweg sehen. Lieber einmal zuviel gemeldet, als zu spät. Es bietet sich an, da nach und nach tiefer einzusteigen.

Eigentlich wollte ich nicht wirklich nen Tutorial schreiben, bin aber gerade schön im Schreibfluss. Vielleicht inspiriere ich ja jemanden, eine ähnliche Konfiguration zu fahren. Die Basisinstallation auf debian Systemen sollte kurz nach der Installation des OS via aptitude / apt-get install rkhunter erfolgen. Der Hintergrund ist, dass ein System möglichst jungfräulich geprüft werden sollte. Wenn ein System schon einige Stunden/Tage/… online ist, kann es bereits kompromittiert sein. Das geht manchmal schneller als Admin denkt. Die Alternative zum jungfräulichen System ist nen LiveCD-Scan.

Nach der Installation bietet sich ein rkhunter –update an. rkhunter -c prüft dann erstmal das System durch. Zwischendurch muss immer wieder mit Enter ein Block als gelesen bestätigt werden. Das lässt sich mit –skip-keypress unterbinden, was sich bei nem Erstscan aber nicht empfielt. Nach dem Scan kann ein Cronjob eingerichtet werden, damit die Überprüfungen regelmässig ablaufen.

Zuerst muss die Datei /etc/default/rkhunter angepasst werden. Wichtig ist die Anpassung für den Cronjob. Es gibt verschiedene Wege dies zu tun. Meiner ist ein simples Triggern via Cronjob. Keep it simple.

Hierzu ist ein Beispieleintrag in der /etc/crontab

0 * * * * root /usr/bin/rkhunter -c --cronjob

für nen stündlichen Job. Die Protokolldatei liegt standartmässig in /var/log/rkhunter.log.

Das reicht mir aber nicht. Ich will ne Email auf mein Smartphone und zwar stündlich. Aus dem Heimnetzwerk raus.

Um mir das ganze Konfigurieren von Exim und Postfix und Dovecot zu schenken, greife ich auf ne externe Emailadresse zurück. Reicht für den Zweck völlig 🙂

Dazu ist das Paket Ssmtp perfekt.
Hierzu muss man nur in der Datei /etc/ssmtp/ssmtp.conf die Zugangsdaten für den externen Mailserver eintragen

root=deine@externeemail.tld
hostname=deinhostname.tld
FromLineOverride=YES
AuthUser=deine@externeemail.tld
AuthPass=deinpasswort

#wenn der Mailserver kein TLS hat, sprecht bitte dringend euren Admin drauf an, ansonsten

UseTLS=YES
UseSTARTTLS=YES
mailhub=externermailserver.tld:587

#ohne TLS einfach

UseTLS=NO
UseSTARTTLS=NO
mailhub=emailmailserver.tld

Vor dem Mailen muss aber noch die /etc/ssmtp/revaliases angepasst werden, sonst gibt es nen fuckup beim Mailserver, weil der Hostname nicht dem entspricht, was er vorgibt.

In der etc/ssmtp/revaliases reicht ein einfaches:

root:deine@externeemail.tld #entsprechend der ssmtp.conf

Wobei, testet erst einmal den externen Mailserver so ohne die Änderungen in der revaliases und wenn es KEINE Fehler ala „Sender address rejected: not owned by user“ gibt, schimpft mit eurem Mailserveradmin und erinnert ihn dran, dass er dringend nen Blick auf seine config wirft!

Back2Topic. Eine Mail schickt ihr einfach per Console:

mail -vs "This is not a Test" empfaenger@dasolleshin.tld

Testmode
.
Cc:

Soweit so gut. Nun soll noch rkhunter schön seine Mails reporten. Hier ist ein Blick in die /etc/rkhunter.conf nötig.

Ja, hier lässt sich viel anpassen und darüber lassen sich Romane schreiben. Hier können explizit Whitelisten gepflegt werden und ne Menge kann kaputt gehen. Es empfiehlt sich jedoch, nach und nach tiefer in die Materie einzusteigen und mit rkhunter von seinem System zu lernen. Zunächst wollen wir aber nur Mails bekommen. Hierzu gibt es auch diverse Wege. Ein

MAIL-ON-WARNING=empfaenger@dasolleshin.tld

reicht erstmal völlig!

Dann müssen wir nochmal den Cronjob anpassen und unseren alten Eintrag anpassen.

0 * * * * root /usr/bin/rkhunter -c --cronjob --report-warnings-only | mail -s "rkhunter pruefung" empfaenger@dasolleshin.tld

Während wir warten, ob uns eine Email zur nächsten vollen Stunde zugeschickt wird, können wir chrootkit installieren. Doppelt hält in dem Fall echt besser!

Das Gute am chrootkit ist: wir sind in 5 Minuten fertig!

In der /etc/chkrootkit.conf muss mindestens

RUN_DAILY="true"

gesetzt werden.

Die Crontab noch um ein

30 * * * * root /usr/sbin/chkrootkit | mail -s "chkrootkit pruefung" empfaenger@dasolleshin.tld

ergänzen und abwarten.

Sollte alles richtig laufen, und sollten die iptables eures Heimnetzwerkes auch Pakete an und von Port 587 zulassen, werden zwei Emails ausgeliefert. Chkrootkit schickt nen volles Protokoll.

Die Mail des rkhunters sollte im Idealfall aber leer sein. Der Hintergrund ist einfach: nur Fehler/Warnings werden gemailt. Damit kann man nun verschieden umgehen. Eine Möglichkeit ist es, den Cronjobaufruf in ein Shellscriptaufruf umzuleiten, der eine Prüfung via rkhunter macht und die dann, bei einem leeren Ergebnis, eine Meldung ala „alles ok hier“ erzeugt, welche statt dessen gemailt wird. Eine andere Möglichkeit ist es, nur dann eine Email zu versenden, wenn wirklich was gefunden wurde. Oder man pint die Protokolldatei als Attachment an. Selbiges geht übrigens auch beim chkrootkit. Und ein rkhunter –update kann man übrigens auch super per Cronjob ausführen :). Und – und – und. Es gibt n Möglichkeiten.

Aber da ich ja ursprünglich eh kein Tutorial schreiben wollte, sondern eigentlich nur meine kleine Heimnetzwerkadmin-Mail-Konfig posten wollte, ist es eh schon mehr als genug geschrieben. Es soll und kann nur einen kleinen Einblick geben. Vielleicht inspiriert es den einen oder anderen und vielleicht hat auch jemand Anmerkungen, von denen ich lernen kann.

Haltet eure Systeme sauber 😉

__________________________________
gpg –detach-sign -a ischtar

Tales from the Conversation-Base

Bei uns sieht der Nerdalltag meistens so aus: man surft, recherchiert, verläuft sich im Internet und will das Gesehene mit dem Mitnerd teilen. Idealerweise verschlüsselt und auf eigener Infrastruktur. Als Dienste nutzen wir schon einige Jahrzehnte IRC und XMPP.

Einen eigenen XMPP Server habe ich schon eine Weile. Nicht zuletzt seitdem der CCC immer wieder darauf hingewiesen hat, dezentrale eigene Server zu nutzen. Es ist ja auch sinnvoll eigene Infrastruktur zu haben und ein XMPP Server ist kein Hexenwerk. Außerdem bietet sich das Bundestrollministerium.de als XMPP Adresse an. 😉

Einzig die Frage nach dem Clienten – vor allem für Android – war immer schwierig. Wir haben ne Menge unbefriedigenden Kram durch. Doch vor etwas über einem Jahr fand Nerdwolf Conversations.

Conversations wird bei GitHub verwaltet und steht unter GPL. Die Übertragung von Texten und Bildern klappt super, man kann sogar direkt aus dem Messagewindow heraus die Kamera aufrufen. Wenn mehrere Clienten mit einem Konto online sind, muss man sogar wählen, an welchen Clienten, das zu sendende Bild gehen soll. Dazu kommen Gruppenchats und mehrere Benutzerkonten auf verschiedenen Servern. Conversations unterstützt TLS und es gibt diverse Plugins für Voice, Standort (mitunter echt hilfreich) usw.

Ursprünglich war die E2E-Verschlüsslung noch etwas umständlich, aber Conversations wird stetig weiter entwickelt und kommt heute sogar mit OMEMO und PGP Verschlüsslungsunterstützung daher.

Endlich keine Abhängigkeit vom FUCKING OTR mehr.

Ja OTR ist nett und plausible deniability und bla. Aber es ist unpraktikabel. Der Gegenpart ist manchmal offline, zb weil er mit der deutschen Bahn reist ….

OMEMO ist die Erlösung! Zumindest auf Androidbasis. Mit Pidgin und Axolotl ist es ein – immer noch ungelöstes – Thema für sich und unter Windows, laut Nerdwolf, auch. Aber eine Baustelle nach der anderen.

Nachdem wir einige Monate intensiv mit Conversations Texte, Bilder, Links ausgetauscht haben, wollten wir mehr. Conversations selbst ist spitze, aber die interne Infrastruktur reichte uns nicht.

miau

Wir sind ein ziemlich technoider Haushalt. Hier hat sogar unser Fernseher nen Androidstick, dazu kommen noch Tablets, Smartphones, eeepcs ❤ und die Arbeitsgeräte. Es sind immer wieder Nachrichten nicht auf dem Gerät gelandet, wo sie hin sollten, weil zb die Bahn mal wieder durch Funklöcher reiste, oder der Strom alle war oder oder oder. Mehrere Geräte und eine einzige Jabberadresse sind … Chaos.

Außerdem will man manchmal nen YouTubeVideo an den Fernseher schicken. Lange Rede kurzer Sinn, es war schnell klar:

Was liegt näher als die Geräte mit nem eigenen XMPP-Konto zu versorgen und direkt ansprechbar zu machen? Gedacht, gesagt, getan.

Frei nach dem Motto: wir sind Nerds, das ist unsere Base, wurden Nerdbase.one bzw. Nerdbase.link als XMPP Adress-Domains gesichert und alle Geräte per XMPP angebunden.

Jetzt kann man ganz easy diverse Lüftungsgitter suchen, an den Fernseher schicken und nach dem Abendessen gemeinsam sinnieren, welches in den Serverschrank soll.

__________________________________
gpg –detach-sign -a ischtar

Test – 1 – 3 – 3 – 7 – Test

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.16 (GNU/Linux)
hQEMA1PUVhZb8UnsAQf
-----END PGP MESSAGE-----

Oh. Die Verschlüsslung ist noch aktiv

gpg –decrypt Test – 1 – 3 – 3 – 7 – Test

gewesen.

Hallo!

Wir sind Nerdwolf & ischtar, kurz: Nerdbase.

Diverse Geräte und Netzwerke nicht mitgerechnet, leben wir hier mit 2 Katzen und einem Hund. Da das Netz voller (un)sinniger Blogs und Inhalte ist (oh .. wait!), erweitern wir das Spektrum ein wenig mit unserem Sichtwinkel.

Immerhin scheint ja endlich auch die Bundesregierung im 21ten Jahrhundert angekommen zu sein. Also auch Nerdbase.

Dies ist ein offizieller erster Eintrag. Mögen noch viele weitere folgen!
Aybabtu

__________________________________
gpg –detach-sign -a ischtar

all (y)our base are belong to us