Kategorie: Linux

Check_MK Plugins erstellen mit Datenbank als Quelle

In diesem Beitrag will ich ein Check_MK Agent Plugin erstellen, welches Daten aus einer Datenbank aus liest und in Check_MK als Service mit Statistik integriert.

1. Installation

1.1. Java installieren

sudo apt-get install openjdk-8-jre

1.2. SQL-Workbench installieren

SQL-Workbench von der Seite laden.

wget http://www.sql-workbench.net/Workbench-Build119.zip

Die ZIP-Datei entpacken.

unzip Workbench-Build119.zip

2. Einrichtung

2.1. SQL-Workbench Profile

Starten Sie SQL-Workbench im Grafikmodus und legen ein Connection Profile an, mit dem Sie eine Verbindung zur Datenbank auf bauen können.

./Workbench-Build119/sqlworkbench.sh

2.2. Verzeichnisse anlegen

mkdir -p ./check-db-plugin/{lib,logs,result}/

Die Bibliothek in das Projektverzeichnis kopieren.

cp ./Workbench-Build119/sqlworkbench.jar ./check-db-plugin/lib/

2.3. Script erstellen

Dieses Script starte SQL-Workbench im Command-Modus und transformiert die Datenbankabfrage in eine OUT-Datei. Als „ProfileName“ verwenden Sie den Namen, welche Sie unter Punk 2.1. erstellt haben.

vim ./check-db-plugin/start.sh
chmod +x vim ./check-db-plugin/start.sh

#!/bin/sh
DIR=/home/user/check-db-plugin/
JAVA_HOME=/usr/lib/jvm/default-java/
JAR=lib/sqlworkbench.jar
CONFIG=/home/user/.sqlworkbench
SCRIPT=count.sql
LOG=logs/check.log

cd $DIR

$JAVA_HOME/bin/java \
  -jar $JAR \
  -profile='ProfileName' \
  -command='WBInclude count.sql;' \
  -configDir=$CONFIG \
  -logfile=$LOG \
  -readOnly \
  -displayResult=false; \
#  -script=$SCRIPT

In der Datei „count.sql“ erstellen Sie die Abfrage für die Datenbank und die anschließende XSLT Transformation.

vim ./check-db-plugin/count.sql

WbConnect ProfileName;

WbExport -type=xml -file='result/table.xml' -stylesheet='count.xslt' -xsltOutput='result/table.out';
SELECT count(*) as SUM, 50 as WARNING, 100 as CRITICAL FROM table WHERE status = 'closed';

Die XSLT Transformation wandelt das Ergebnis der Datenbank in eine einfache Textausgabe um.

vim ./check-db-plugin/count.xslt








	


        
        
                
                        
                        
                        
                
                
        



3. Check_MK Agent

3.1. Verzeichnis erstellen

Der Check soll nur alle 120 Sekunden asynchron ausgeführt werden, deshalb wird ein Verzeichnis 120 angelegt.

sudo mkdir -p /usr/lib/check_mk_agent/local/120/

3.2. Check erstellen

Der Check liest im Verzeichnis die Dateien mit der Endung /home/user/check-db-plugin/result/*.out aus und stellt das Ergebnis im Check_MK agent bereit.

sudo vim /usr/lib/check_mk_agent/local/120/check-db-plugin.sh
sudo chmod +x /usr/lib/check_mk_agent/local/120/check-db-plugin.sh

#!/bin/sh
# Plugin Return Codes
# = 0   OK
# = 1   Warning
# = 2   Critical
# = 3   Unknown
#
DIR=/home/user/check-db-plugin/
FILTER=result/*.out
NAME="SQL-counter"

# Start SQL-Workbench into batch mode
$DIR/start.sh > /dev/null


for file in $DIR/$FILTER; do

  filename=$(basename "$file")
  date=$(date -r "$file" +"%Y-%m-%d %H:%M:%S")

  count=$(cut -f1 ${file})
  limit_warning=$(cut -f2 ${file})
  limit_critical=$(cut -f3 ${file})

  if [ -z $count ] ; then
    status=3
    statustext="UNKNOWN"
  elif [ $count -gt $limit_critical ] ; then
    status=2
    statustext="CRITICAL"
  elif [ $count -gt $limit_warning ] ; then
    status=1
    statustext="WARNING"
  else
    status=0
    statustext="OK"
  fi

  if [ $count -eq $limit_warning ] && [ $count -eq $limit_critical ] ; then
    unset limit_warning
    unset limit_critical
  fi

  echo "${status:-1} ${NAME}_${filename} count=${count};$limit_warning;$limit_critical; Check(${statustext}): ${count} - ${date}"

done

exit $status

Quelle: Check_MK
Download: SQL-Workbench Handbuch: Install, Scripting, Export

Systemd – Journal beschränken

Das Journal wurde mit Systemd neu eingeführt und soll die Log-Dateien /var/log/syslog ersetzen. Die Daten werden in Form von Binärdaten gespeichert und nicht in ASCII Format.

Um den Speicherplatz zu prüfen kann man das Journal Control journalctl verwenden.

journalctl --disk-usage

Will man den Speicherplatz reduzieren, kann man den Speicherplatz angeben oder die Zeit. Alte Einträge werden dann bereinigt.

journalctl --vacuum-size=128M
journalctl --vacuum-time=4weeks

Will man den Speicherplatz dauerhaft begrenzen, so kann einen Eintrag in der Kondiguration hinzu gefügen.

sudo vim /etc/systemd/journald.conf

Storage=auto
SystemMaxUse=128M

sudo systemctl restart systemd-journald

Der Speicherort von Journal liegt im Verzeichnis /run/log/journal/[UUID]/. Die Dateien werden im Binärformat gespeichert und können nicht mit einem Editor geöffnet werden. Mit dem Befehl „strings“ ist es möglich die Daten zu lesen.

sudo apt-get install binutils
strings /run/log/journal/[UUID]/system.journal

Nach jedem Neustart wird Journal gelöscht. Will man das Journal behalten, erstellt man eine Verzeichnis.

sudo mkdir -p /var/log/journal/

Nach einem Neustart wird das Journal im Verzeichnis /var/log/journal/ gespeichert. Wenn das Verzeichnis gelöscht wird, dann wird es wieder nach jedem Neustart gelöscht.

sudo rm -r /var/log/journal/

Die Anzahl der Neustart kann man sich anzeigen lassen.

journalctl --list-boots

Schutz vor Brute-Force Angriffen

Mit dem Tool „fail2ban“ kann man Brute-Force Angriffe abwähren. Dabei wird die IP Adresse der Angreifer aus den Log-Dateien ermittelt und in der Firewall (iptable) gesperrt.

Die Installation aus dem Ubuntu Repositories erfolgt mit.

sudo apt-get install fail2ban

Nach der Installation ist der Schutz von SSH automatisch aktiviert.

sudo vim /etc/fail2ban/jail.conf

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.178.0/24 office.example.de
bantime  = 1800
maxretry = 3

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6

Nach Änderungen muß der Dienst neu gestartet werden.

sudo service fail2ban restart

Eine Kontrolle der Firewall (iptables) erfolgt mit diesem Kommando. Einträge werden in dem Chain „fail2ban“ hinterlegt.

sudo iptables -L

Das Tool fail2ban-client zeigt die Jails an.

sudo fail2ban-client status
sudo fail2ban-client status apache

Sperre für eine IP Adresse wieder aufheben.

sudo fail2ban-client set apache unbanip 123.123.123.123

Netzwerkübersicht von offenen Ports

Wer wissen will, welche Netzwerkanfragen auf dem System lauschen, kann den Befehl lsof verwenden.

Das Kommando kann aus dem Ubuntu Repository installiert werden.

sudo apt-get install lsof

Mit dem Parameter -i kann man sich einen Port anzeigen lassen.

sudo lsof -i [udp|tcp]:[port]
sudo lsof -i tcp:80

Der Parameter +d liste die offenen Files aus dem Verzeichnis.

sudo lsof +d /var/log/

Der Parameter -c / -p liste die offenen Files von einem Prozess.

sudo lsof -c apache2
sudo lsof -p 1234

Der Parameter -u liste die offenen Files von einem Benutzer.

sudo lsof -u otto

Eine andere Alternative ist das Tool netstat. Der Parameter „-l“ zeigt die offenen Ports an und Parameter „-a“ alle Verbindungen.

netstat -nlp

SSH Guard schütz vor Brute-Force Angriffen

Der SSH-Guard hilft Ihnen beim Schutz vor Brute-Force Angriffen auf den SSH Port. Dabei wird die Log-Datei „/var/log/auth.log“ überwacht und bei falschen Anmeldeversuchen wird die Remote IP-Adresse mit der Firewall (iptables) gesperrt.

Installation aus dem Ubuntu Repo.

sudo apt-get install sshguard

Nach der Installation werden folgende Einstellung in der Firewall iptables vorgenommen.

Erzeugen eines neuen Chain für SSH-Guard.

sudo iptables -N sshguard
sudo ip6tables -N sshguard

Jeder Netzwerkverkehr wird über diesen Chain geführt.

sudo iptables -A INPUT -j sshguard
sudo ip6tables -A INPUT -j sshguard

Der SSH-Guard wird als Dienst gestartet.

sudo service sshguard start

Ein Test mit falschen SSH Login solltem in der Firewall iptables einen neue Eintrag mit „DROP“ enthalten.

sudo iptables -L -v

Eine Whitelist wurde nach der Installation auch erstellt.

sudo vim /etc/sshguard/whitelist

10.0.0.0/8
192.168.178.0/24
office.example.de

Docker update Guacamole image

1. Update Guacamole images

sudo docker pull glyptodon/guacd:latest
sudo docker pull glyptodon/guacamole:latest

2. Remove old container

sudo docker rm some-guacd
sudo docker rm some-guacamole

3. Recreate new Guacamole container

sudo docker run --name some-guacd -d -p 4822:4822 glyptodon/guacd

sudo docker run --name some-guacamole --link some-guacd:guacd \
--link some-mysql:mysql \
-e MYSQL_DATABASE=guacamole_db \
-e MYSQL_USER=guacamole_user \
-e MYSQL_PASSWORD=some_password \
-d -p 8080:8080 glyptodon/guacamole

4. Copy the SQL update script from Guacamole container to host

docker cp some-guacamole:/opt/guacamole/mysql/schema/upgrade/upgrade-pre-0.9.8.sql .

5. Copy it into Docker MySQL container directory /tmp/

docker cp upgrade-pre-0.9.8.sql some-mysql:/tmp

6. Go into Docker MySQL container and import it into database

sudo docker exec -it some-mysql bash
mysql -u root -p guacamole_db < /tmp/upgrade-pre-0.9.8.sql

Weitere Informationen für die Installation: guac-dev.org/doc/

NTP Konfigurieren

Das Network Time Protocol (NTP) erlaubt es, das Datum und die Uhrzeit von dem System mit dem Internet zu synchronisieren. Für die Kommunikation wird UDP auf Port 123 verwendet. Der permanente Abgleich von Datum und Uhrzeit erfolgt mit einem NTP Dienst.

Die Installation erfolgt mit dem Befehl.

sudo apt-get install ntp

Der erste Abgleich kann mit dem Befehl ntpdate erfolgen. Eine Liste von NTP Servern findet man auf der Seite von www.pool.ntp.org.

ntpdate de.pool.ntp.org

Die Einstellungen für den NTP Dienst kann man so ändern.

sudo vim /etc/ntp.conf

server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
server 3.de.pool.ntp.org

Der NTP Dienst wird gestartet mit dem Befehl.

sudo service ntp start
sudo service ntp status

Die Serverliste kann man ausgeben mit dem Befehl.

ntpq -p

Systemd verwendet einen eigenen NTP Dienst.

timedatectl status

Sollte NTP nicht aktiviert sein, so kann man die Einstellung ändern.

sudo vim /etc/systemd/timesyncd.conf

[Time]
Servers=0.de.pool.ntp.org 1.de.pool.ntp.org 

Nach der Aktivierung sollte NTP aktiv und synchronisiert sein.

sudo timedatectl set-ntp true
sudo timedatectl status

Mail von Kommandozeile versenden

Wie kann ich eine E-Mail von der Kommandozeile versenden?

Zu erst installieren wir die Mail-Util’s.

sudo apt-get install mailutils

Und jetzt kann man schon eine E-Mail versenden.

mail -s "Betreff" recipient@domain.de < nachricht.txt

echo "Nachricht" | mail -a "From: you@example.com" -s "Betreff" recipient@domain.de

Oder mit Sendmail.

sendmail recipient@domain.de
From: you@example.com
Subject: Betreff
Nachricht
.

Sollte die Email beim Empfänger nicht an kommen, muss man die Einstellung von Postfix oder Exim noch einmal prüfen.

sudo dpkg-reconfigure postfix

sudo dpkg-reconfigure exim4-config

Will man die Kommunikation von SMTP selbst mal probieren, so kann man per Telnet auch eine E-Mail senden.

telnet mail.domain.de 25

HELO 
EHLO 
MAIL FROM:
RCPT TO:
DATA
Subject: Test email

Body of the email
.
QUIT

Heute sollte die Kommunikation zum SMTP Server nicht mehr unverschlüsselt statt finden. Für die Verschlüsslung werden SSL Zertifikat verwendet.

Mit OpenSSL kann man das Zertifikat von dem SMTP Server überprüfen.

openssl s_client -connect <host>:<port> -servername <host> [-starttls <protocol>]

Die Umschaltung auf verschlüsselt Übertragung erfolgt per STARTTLS. Mögliche Werte sind (smtp, pop3, imap).

Hier ein Beispiel für SMTP.

openssl s_client -connect example.com:25 -servername example.com -starttls smtp

Wenn man nur das Zertifikat überprüfen will, geht es auch so.

openssl s_client -connect example.com:25 -starttls smtp -showcerts | openssl x509 -text

Hier eine Liste der Ports für E-Mail Kommunikation.

  • 25 SMTP Empfangen von E-Mails von anderen Mailservern
  • 465 SMTP SSL Client E-Mail Übertragung
  • 587 SMTP TLS Client E-Mail Übertragung
  • 143 IMAP StartTLS Client
  • 993 IMAP TLS/SSL Client
  • 110 POP3 Client
  • 995 POP3 TLS/SSL Client

Ubuntu Dienst Systemd

Ubuntu hat einen Wechseln von Upstart zu SystemD durchgeführt. Für Systemd gibt es einige neue Tools für die Verwaltung der Dienste.

Um eine Übersicht über alle Dienste zu erhalten können Sie diese Option verwenden.

sudo systemctl -all

Um einen Dienst zu start oder stoppen können Sie diese Befehle verwenden.

sudo systemctl start [name.service]
sudo systemctl stop [name.service]
sudo systemctl restart [name.service]
sudo systemctl reload [name.service]
sudo systemctl status [name.service]

Eine neue Funktion von Systemd ist der Timer, mit deren Hilfe kann man Aufgaben automatisieren.

sudo vim /etc/systemd/system/backup.service

[Unit]
Description=Backup
[Service]
ExecStart=/home/user/backup.sh

Der Timer startet den Dienst immer jeden Tag um 2:15 Uhr.

sudo vim /etc/systemd/system/backup.timer

[Unit]
Description=beispiel timer
[Timer]
OnCalendar=02:15
OnUnitInactiveSec=1d

Hiermit starten Sie den Timer.

sudo service systemctl start backup.timer
sudo systemctl list-timers --all
sudo systemctl enable backup.timer
sudo systemctl disable backup.timer
sudo systemctl --failed

Alle Informationen zu Diensten erhalten Sie im Journal.

journalctl --reverse
journalctl --follow
journalctl --unit backup.timer

Mit den Analyze-Tool kann man sich den Startvorgang in einer SVG-Grafikdatei ausgeben lassen.

systemd-analyze plot > /tmp/plot.svg

Linux Firewall (iptables) automatisch laden und speichern

Wer Linux mit der Firewall iptable verwendet, möchte die Regeln bei Systemstart automatisch geladen haben.

1. Firewall Regeln automatisch laden

sudo vim /etc/network/if-pre-up.d/iptablesload

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

sudo chmod +x /etc/network/if-pre-up.d/iptablesload

2. Firewall Regeln automatisch speichern

sudo vim /etc/network/if-post-down.d/iptablessave

#!/bin/sh
iptables-save > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
   iptables-restore < /etc/iptables.downrules
fi
exit 0

sudo chmod +x /etc/network/if-post-down.d/iptablessave

Jetzt werden alle Einstellungen vor dem Herrunterfahren gespeichert und nach einem Start automatisch geladen.

Die aktuellen Firewall Regeln kann man sich hiermit ansehen.

iptables -L -n -v

Copyright © 2025 Weiter.info

Theme von Anders Norén↑ ↑