Check_MK Raw Server Edition installation

Diese Anleitung beschreibt die Installation von Check_MK Raw Server Version 1.2.8 auf Ubuntu Server 16.04 LTE.

Die Installation von Ubuntu Server 16.04 wird einfach mit Standardvorgaben installiert.

Zusätzlich installieren wird ein extra Tool, welcher alle Abhängigkeiten zu Check_mk installiert.

sudo apt-get install gdebi-core

Auf der Download Seite von Check_mk finden wir die Version 1.2.8 Raw, welche 100% kostenlos ist.

Wir laden die 64bit Version für Ubuntu 16.04 runter.

wget https://mathias-kettner.de/support/1.2.8p18/check-mk-raw-1.2.8p18_0.xenial_amd64.deb

Jetzt können wir Check_mk mit allen Abhängigkeiten installieren.

sudo gdebi check-mk-raw-1.2.8p18_0.xenial_amd64.deb

Check_mk verwendet den Apache mit mod_proxy, welches aktiviert werden sollte.

sudo a2enmod proxy_http

Nach einem Neustart ist die Installation schon fast abgeschlossen.

sudo service apache2 restart

Wir können die installierte Version ausgeben.

omd version

Check_mk bietet die Möglichkeit unterschiedliche Seiten gleichzeitig zu betreiben. Wir erstellen eine Beispielseite „mysite“.

sudo omd create mysite
sudo omd start mysite

Jetzt kann man die Seite im Browser erreichen. http://HOSTNAME/mysite/ Die Zugangsdaten wurden bei der Erstellung angezeigt oder sind fest voreingestellt. Das Login lautet „omdadmin“ und das Password ist „omd“.

Sollte man die Zugangsdaten vergessen haben, kann man das Passwort zu jeder Zeit ändern.

sudo htpasswd /omd/sites/mysite/etc/htpasswd cmkadmin

Ein Update auf eine neue Check_mk Version ist immer möglich. Das Versionsupdate wird in Schritten durchgeführt.

Pfsense 2.3 mit Check_MK Agent

Leider wird das Check_mk Agent Paket für Pfsense nicht weiter entwickelt. Deshalb muss man die Installation vom Check_mk Agent von Hand vornehmen.

Für den Check_mk Agent ist die Installation von Bash notwendig.

pkg install bash

Ausführen über Diagnostics Command Prompt.

Jetzt werden zwei Verzeichnisse erstellt.

mkdir -p /opt/bin
mkdir -p /opt/etc/xinetd.d

Darin wird der Check_mk Agent von Git geladen.

curl --output /opt/bin/check_mk_agent 'https://git.mathias-kettner.de/git/?p=check_mk.git;a=blob_plain;f=agents/check_mk_agent.freebsd;hb=HEAD'

Die Datei wird ausführbar gemacht.

chmod +x /opt/bin/check_mk_agent

Führt man den Check_mk agent aus, sieht man schon das Ergebnis.

/opt/bin/check_mk_agent

Unter Diagnostics Edit File kann man die Konfiguration anpassen.

/opt/etc/xinetd.d/check_mk

# +------------------------------------------------------------------+
# |             ____ _               _        __  __ _  __           |
# |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
# |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
# |           | |___| | | |  __/ (__|   <    | |  | | . \            |
# |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
# |                                                                  |
# | Copyright Mathias Kettner 2014             mk@mathias-kettner.de |
# +------------------------------------------------------------------+
#
# This file is part of Check_MK.
# The official homepage is at http://mathias-kettner.de/check_mk.
#
# check_mk is free software;  you can redistribute it and/or modify it
# under the  terms of the  GNU General Public License  as published by
# the Free Software Foundation in version 2.  check_mk is  distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
# out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
# PARTICULAR PURPOSE. See the  GNU General Public License for more de-
# ails.  You should have  received  a copy of the  GNU  General Public
# License along with GNU Make; see the file  COPYING.  If  not,  write
# to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
# Boston, MA 02110-1301 USA.
 
service check_mk
{
	type           = UNLISTED
	port           = 6556
	socket_type    = stream
	protocol       = tcp
	wait           = no
	user           = root
	server         = /opt/bin/check_mk_agent
 
	# If you use fully redundant monitoring and poll the client
	# from more then one monitoring servers in parallel you might
	# want to use the agent cache wrapper:<br />
 
	#server         = /usr/bin/check_mk_caching_agent
 
	# configure the IP address(es) of your Nagios server here:
	#only_from      = 127.0.0.1 10.0.20.1 10.0.20.2
 
	# Don't be too verbose. Don't log every check. This might be
	# commented out for debugging. If this option is commented out
	# the default options will be used for this service.
	log_on_success =
 
	disable        = no
}

Jetzt müssen wir die Filer-Einstellungen anpassen.

/etc/inc/filter.inc

In der Zeile 2375 muss noch eine Zeit eingefügt werden.

fwrite($xinetd_fd, "includedir /opt/etc/xinetd.d");
 
fclose($xinetd_fd);             // Close file handle

Man kann die Änderung auch von einem Skript „/opt/filter_check_mk_cron“ durchführen lassen.

#!/bin/sh
 
grep includedir /etc/inc/filter.inc
if [ $? -eq 0 ]
then
        exit 0
else
        awk '/fclose\(\$xinetd_fd\)\;/{print "fwrite($xinetd_fd, \"includedir /opt/etc/xinetd.d\");"}1' /etc/inc/filter.inc > /etc/inc/filter.inc.temp
        mv /etc/inc/filter.inc.temp /etc/inc/filter.inc
fi
exit 0

Das Script braucht auch Ausführungsrechte.

chmod +x /opt/filter_check_mk_cron

Nach dem Speichern der Datei /etc/inc/filter.inc müssen die Änderungen geladen werden. Das geschieht unter Status Filter Reload.

Jetzt kann man die Funktion prüfen.

telnet localhost 6556

Diese Anleitung ist eine Zusammenfassung von einem Forum Beitrag. Weiter Information zum Check_mk Agent gibt es in der Dokumentation.

Swap Partition mit Kompression

Wird in Linux nicht ausreichend RAM bereit gestellt, so besteht die Möglichkeit diesen mit eine Swap Partion zu erweitern. Zusärtlich kann man die Daten in dem Swap komprimieren.

Dazu instellieren wir zRAM-config.

sudo apt-get install zram-config

Der Dienst braucht ein Kernelmodul „zram“ und „lz4_compress“

sudo modprobe zram

Jetzt sollte das Modul geladen sein.

lsmod |grep zram

zram                   28672  4
lz4_compress           16384  1 zram

Sollte es nicht geladen werden können, weil das Kernel Modul nicht installiert ist, dann müssen noch die Extras installiert werden.

sudo apt-get install linux-image-extra-`uname -r`

Nach einem Neustart sollte der Dienst ohne Fehler laufen.

sudo service zram-config status

Die Anzeige vom Swap sieht jetzt so aus.

sudo swapon --show

NAME       TYPE      SIZE USED PRIO
/dev/sda5  partition 510M   0B   -1
/dev/zram0 partition 124M 976K    5
/dev/zram1 partition 124M 972K    5
/dev/zram2 partition 124M 968K    5
/dev/zram3 partition 124M 972K    5

Design Patterns

Eine beliebte Frage bei einem Einstellungstest als Softwareentwickler ist nach Design Patterns (Entwurfsmuster). Gut, wenn man dann einige Namen kennt und vielleicht deren Funktionsweise.

Entwurfsmuster

  • Abstract Factory (Abstrakte Fabrik)
  • Builder (Erbauer)
  • Factory Method(Fabrikmethode)
  • Prototype (Prototyp)
  • Singleton (Singleton)

Strukturmuster

  • Adapter (Adapter)
  • Bridge (Brücke)
  • Composite (Komposition)
  • Decorator (Dekorierer)
  • Facade (Fassade)
  • Flyweight (Fliegengewicht)
  • Proxy (Proxy)

Verhaltensmuster

  • Chain of Responsibility (Zuständigkeitskette)
  • Command (Befehl)
  • Interpreter (Interpreter)
  • Iterator (Iterator)
  • Mediator (Vermittler)
  • Memento (Memento)
  • Observer (Beobachter)
  • State (Zustand)
  • Strategy (Strategie)
  • Template Method (Schablonenmethode)
  • Visitor (Besucher)

Entfernen aller Pakete, die von dpkg mit rc markiert sind

Es gibt einen signifikanten Unterschied zwischen Apt remove oder purge. Apt (dpkg) remove entfernt nur die Paket-Binärdateien. Die Konfigurationsdateien des Pakets werden nicht gelöscht. Solche Pakete haben normalerweise den Zustand rc.

Mit dpkg können Sie den Status aller Pakete anzeigen.

dpkg --list |grep "^rc"

Was bedeutet „rc“? Dieser Zustand bedeutet, dass die Konfigurationsdateien noch nicht entfernt wurden, sondern nur die Binärdateien.

Rc entspricht…

R: Die Binärdateien wurde zur Entfernung markiert.
C: Die Konfigurationsdateien sind weiterhin vorhanden.

Lassen Sie uns die Pakete extrahieren, welche mit „rc“ markiert sind.

dpkg --list |grep "^rc" | cut -d " " -f 3

Nun entfernen wir alle Pakete, die als rc markiert sind.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge

VMware ESXi Verwaltung ohne Client

VMware ESXi ermöglicht die Verwaltung von Einstellungen ohne den Windows Client.

Viele Einstellung kann man direkt an der ESXi Konsole ändern, jedoch auch Remote mit SSH. Dazu muss man den SSH Dienst auf dem VMware Host starten. Das aktiviert den Zugang, um sich per SSH Remote zu verbinden.

ssh -v root@hostname

Das Direct Console User Interface (DCUI) ist die Anwendung, welche man an der Konsole vom VMware Hostsystem auf dem Monitor sieht.

dcui

Auch die virtuellen Maschinen kann man Remote steuern. Zuerst müssen wir die Nummer [vmid] der Viruellen Maschine (VM) ermitteln.

vim-cmd vmsvc/getallvms

Jetzt kann man die VM runter fahren.

vim-cmd vmsvc/power.shutdown [vmid]

Den Status der VM kann man erfragen mit…

vim-cmd vmsvc/power.getstate [vmid]

Jetzt kann man im Verzeichnis der VM die Einstellungen ändern.

vi /vmfs/volumes/datastore/vmfolder/name.vmx

Den RAM Speicher wird gesetzt mit der Einstellung memsize = „5120“.

Mit einem Reload wird die Einstellung geladen.

vim-cmd vmsvc/releoad [vmid]

Jetzt kann man die VM wieder einschalten.

vim-cmd vmsvc/power.on [vmid]

Apache Load Balancing

Ziel ist die Installation einer redundanten Lastverteilung auf zwei Servern. Hierzu verwenden wir Apache Server und Keepalived.

Installation Apache

sudo apt-get install apache2

Apache Module aktivieren

Für die Verwendung von Apache Server als Load Balancer sind folgende Module notwendig.

Rewrite => Url Rewrite
Deflate => HTTP Kompression
Headers => Managing HTTP headers
Status => Status Informationen
Proxy => Proxy Module
Proxy_http => Proxy Module für HTTP and HTTPS Protokoll
Proxy_balancer => Clustering und load-balancing

sudo a2enmod rewrite deflate headers status
sudo a2enmod proxy proxy_http proxy_balancer
sudo service apache2 restart

sudo vim /etc/apache2/sites-available/proxy_balancer.conf

<VirtualHost *:80>
 ProxyRequests Off
 ProxyPreserveHost On
 ServerName localhost
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
 
 <Proxy balancer://cluster>
  # Define back-end servers:
  BalancerMember http://10.20.20.11:8001/ route=node1 retry=5 timeout=10
  BalancerMember http://10.20.20.12:8001/ route=node2 retry=5 timeout=10
  ProxySet stickysession=ROUTEID
  ProxySet lbmethod=byrequests
 </Proxy>
 
 <Location /balancer-manager>
  SetHandler balancer-manager
  Order deny,allow
  Deny from all
  Allow from 10.20.20.0/24
 </Location>
 
 ProxyPass /balancer-manager !
 ProxyPass / balancer://cluster
 ProxyPassReverse / balancer://cluster
 
</VirtualHost>

sudo a2ensite proxy_balancer
sudo service apache2 restart

Keepalived

Mit Hilfe von Keepalived wird ein Virtueller Linux Server erstellt, der aus einem Master- und Backup- Server besteht. Hierfür wird eine Virtuelle IP Adresse erstellt, die zwischen beiden Systemen hin und her wechseln kann. Primär liegt die Virtuelle IP Adresse auf dem Master-Server. Ist der Master nicht verfügbar, so wechselt die IP zum Backup. Ein Heartbeat geprüft die Verfügbarkeit der Server und führt bei einem Ausfall den Wechsel der IP zwischen den Servern durch.

Installation Keepalived

sudo apt-get install keepalived

sudo vim /etc/keepalived/keepalived.conf

vrrp_script chk_apache {
    script "/usr/bin/killall -0 httpd" # check the apache2 process
    interval 3 # every 3 seconds
}
 
vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80" # connects and exits
        interval 5 # every 5 seconds
}
 
vrrp_instance VI_1 {
    state MASTER    interface eth0
    virtual_router_id 51
    priority 150    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pw123!  # place secure password here
    }
    virtual_ipaddress {
        10.20.20.25
    }
    track_script {
        chk_apache
        chk_http_port
    }
}

sudo service keepalived restart

Keepalived Backup (Server #2)

Die Einstellungen auf dem Backup-Server sind analog zum Master-Server vor zu nehmen. Abweichungen in der Konfiguration sind „state BACKUP“ und „priority 100“.

sudo vim /etc/keepalived/keepalived.conf

vrrp_script chk_apache {
    script "killall -0 httpd" # check the apache2 process
    interval 3 # every 3 seconds
}
 
vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80" # connects and exits
        interval 5 # every 5 seconds
}
 
vrrp_instance VI_1 {
    state BACKUP    interface eth0
    virtual_router_id 51
    priority 100    advert_int 1
    authentication {
        auth_type PASS
        auth_pass pw123!  # place secure password here
    }
    virtual_ipaddress {
        10.20.20.25
    }
    track_script {
        chk_apache
        chk_http_port
    }
}

Kernel Einstellungen (Sysctl)

Damit die Virtuelle IP im Server verwendet werden kann, muß eine Einstellung für den Kernel geändert werden

sudo vim /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

Nach dem Speichern muß ein Neustart von dem Server durchgeführt werden.

Ob die Einstellung richtig vorgenommen wurde kann man prüfen mit.

sudo sysctl net.ipv4.ip_nonlocal_bind

Funktionstest

Durch An- und Ab-schalten von Keepalived und/oder Apache auf Master und Backup kann man nun die Funktion testen.

sudo service apache stop
sudo service keepalived stop

Die Virtuelle IP kann man sich anzeigen mit dem Kommando ip.

sudo ip addr

Links:
Apache Server Status
Apache Load Balancer Manager

Dateiübertragung zum WebDav mit Client Zertifikat und Authentifizierung

Um eine Datei auf einen WebDav zu übertragen kann man das Toole „curl“ verwenden.

Zuerst wird „curl“ auf Ubuntu installiert.

sudo apt install curl

Jetzt kann man dem Upload auf WebDav durchführen.

curl -T <filename> -u <username>:<password> <url>

Braucht man für die Verbindung zu dem WebDav Server ein Client Zertifikat, dann muss man Curl das Zertifikat mitteilen.

Liegt das Zertifikat im PKCS12 Format (Dateiendung .p12 oder .pfx) vor, muss es zuerst mit OpenSSL umgewandelt werden.

openssl pkcs12 -in cert.p12 -out cert.pem -clcerts  
Enter Import Password: ********
## enter the password used to protect the private key)  
MAC verified OK  
Enter PEM pass phrase: **********
## enter your pass phrase to protect the private key in the new cert.pem file
Verifying - Enter PEM pass phrase: **********

Das PEM Passwort für das Zertifikat sollte mindestens 6 Zeichen lang sein.

Die Prüfung der Zertifikatskette kann man mit dem –insecure Parameter abschalten.

/usr/bin/curl \
 --insecure --cert <certificate>:<password> \
 -u <username>:<password> \
 -T <filename> <url>

Beispiel:

/usr/bin/curl \
 --insecure --cert 'cert.pem:zpw123' \
 -u user:password \
 -T filename.txt http://server/

In dem Beispiel verwenden wird als Zertifikat Passwort zpw123. Nicht zu verwechseln mit dem Passwort für den WebDav Server.

Ubuntu IPv6 abschalten (Temporär)

Will man in Ubuntu das Protokoll IPv6 nur für eine kurze Zeit aus schalten, so ist das zur Laufzeit möglich.

Zeigt den aktuellen Status den Wert „0“ so ist IPv6 an.

cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6

Zum Abschalten kann man den Wert auf „1“ ändern.

sudo sh -c 'echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6'

PHP7 Erweiterung und Treiber für MongoDB installieren

Für den Zugriff von PHP7 auf eine MongoDB 3.2.10 Datenbank braucht man einen Client Treiber. Die Installation unter Ubuntu Server 16.04 LTE möchte ich hier beschreiben.

1. Pakete installieren

sudo apt install php-pear php7.0-dev

2. Treiber MongoDB installieren

sudo pecl install mongodb

Quelle:Github

Handbuch

3. Konfigurationsdatei erstellen

sudo sh -c 'echo "extension=mongodb.so" > /etc/php/7.0/mods-available/mongodb.ini'

4. Konfiguration aktivieren

sudo phpenmod mongodb

5. Funktion prüfen

php -i |grep mongodb

Jetzt sollte der MongoDB Treiber in PHP geladen werden.

Hier ein PHP Beispiel für den Verbindungsaufbau.

<?php
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
 
$keyword = "dvd";
$filter = ['$text' => ['$search' => $keyword]];
$options = ['limit' => 3];
 
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('mydb.search', $query);
$result = $cursor->toArray();
 
var_dump($manager);
print_r($result);
?>

Jetzt hat man den Treiber für PHP installiert. Für die Entwicklung ist der Treiber sehr Grundlegend. Mit einer Erweiterung ist die Entwicklung sehr viel einfacher.

6. Composer Installieren

Auf der Seite von Composer gibt es ein kurze Anleitung wie man den Downloader „composer-setup.php“ verwendet und installiert.

// Download installer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
// Check HASH value from download
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 
// Composer installation and download
php composer-setup.php --install-dir=/path/
 
// Delete setup files
php -r "unlink('composer-setup.php');"

Download

7. Composer Erweiterung installieren

Jetzt kann man mit dem Composer die MongoDB Erweiterung installieren.

php composer.phar require "mongodb/mongodb=^1.1.0"

Quelle, Releases

8. Composer Erweiterung verwenden

<?php
// This path should point to Composer's autoloader
require 'vendor/autoload.php';
 
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->db->collection;
 
$result = $collection->find(['name' => 'DVD']);
 
foreach ($result as $entry) {
    echo $entry['_id'], ': ', $entry['name'], "\n";
}
 
?>

Dokumentation