Kategori Computer

Einführung in Docker

Freitag, August 25th, 2017

Hier eine Kurzzusammenfassung wie man mit Docker sein erstes Projekt starten kann und worauf man achten sollte.

Installation:
Die Installation ist mittlerweile trivila einfach:

apt install docker.io

Wenn man docker als System Benutzer ausführen möchte. muss dieser in der Gruppe docker sein.

usermod -aG docker user

Das Dockerfile:
Das Dockerfile beschreibt was gemacht werden soll. Fangen wir langsam an und setzen eine Instanz mit einem Webserver mit PHP Unterstützung auf:

FROM ubuntu:trusty

RUN apt-get update && apt-get install -y mariadb-client apache2 libapache2-mod-php5 php5-mysql && apt-get clean

Im Detail: Die „FROM“ Zeile beschreibt das zugrunde liegende Image. In unserem fall ist das Ubuntu in der Version 14:04. Die liste der Images findet man hier: hub.docker.com

Die Zeile RUN beschreibt was beim Prozesse des bauen eines Docker Container gemacht werden soll. An dieser stelle habe ich alle apt befehle hintereinander geschrieben, da Docker für jedes einen eigenen Layer erzeugt. Dies hat vor und Nachteile.

Dann starten wird das ganze doch mal:

Mit „docker build“ wird das Image gebaut. Mit der Option -t geben wird dem ganzen noch einen beliebigen Namen und der Punkt besagt das das Dockerfile aus dem aktuellen Verzeichnis verwendet werden soll.

docker build -t myubuntu .

Nach dem Bauen können wir den Container Starten. Zunächst habe ich mit der Option „-v“ das Verzeichnis in dem wir uns gerade befinden im den Container an die Stelle /var/www/html gemountet. Mit der Option -i und -t mit dem bekommen wir im zusammen Spiel mit dem abschließenden Aufruf von /bin/bash einen Interaktiven zugriff auf den Container. Die „–rm“ Option löscht nach beenden der Interaktiven Shell auch den gesamten Container. Dies würde Docker sonst nicht machen und es würde sehr viel Datenmüll entstehen. Da wir dem ganzen einen Namen gegeben haben müssen wir nicht umständlich nach nach der beim Bauen des Container erzeugten ID suchen sondern könne einfach loslegen:

docker run -v `pwd`:/var/www/html -i -t --rm myubuntu /bin/bash

In diesem Container ist nun noch nichts gestartet. Nach dem Starten des Webservers mittels /etc/init.d/apache2 start kann mit einem Webbrowser die Seite angezeigt werden. Hierfür sucht man sich die Aktuelle IP herraus: ip a und gibt diese im Webbrowser an.

MySQL Passwort reset

Dienstag, Juli 18th, 2017

immer wieder toll, dass sich im laufe eines Produkt zyklusses das zurücksetzen eines Passwort immer wieder ändere muss. Hier das Beispiel wie es unter Ubuntu 16.04 noch funktioniert:

Zunächst um welche Version handelt es sich:
mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Dann muss die Datenbank angehalten werden:
systemctl stop mysql

Unter Ubuntu existiert der /var/run/mysqld Ordner nicht der für das Starten des mysql Prozesses ohne Berechtigungen nötig ist:
mkdir /var/run/mysqld
chwon mysql: /var/run/mysqld
mysqld_safe --skip-grant-tables --skip-networking &

Dann kann man sich in die DB einloggen und das Passwort zurück setzen:
mysql -u root
use mysql;
UPDATE user SET authentication_string = PASSWORD('neues_passwort') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

Zum Schluss muss der mysql Prozess wieder beendet werden und der ganz normale Dienst kann wieder gestartet werden:
kill `cat /var/run/mysqld/mysqld.pid`
systemctl start mysql

Datei Transfer in citrix mit Zeichenablage…

Donnerstag, Juni 1st, 2017

Man kann ja zum Glück sagen das Citrix auch unter Linux läuft, aber wenn dies die einzige Art ist um mit einem Netzwerk zu kommunizieren. Muss man sich andere Hintertüren bauen um Daten ins/aus einem Netzwerk zu bekommen.

In meinem Fall wollte ich eine 1MB großes RPM kopieren. Auf meinem Linux rechner habe ich zunächst das Programm xclip installiert, welches dafür sorgt das Texte in die Zwischenablage geladen werden können.

apt install xclip

Dann habe ich die Datei komplett, als base64 kodirte Daten, in die Zeichenablage geladen:

cat Downloads/nginx-1.12.0-1.el7.ngx.x86_64.rpm | base64 | xclip -selection clipboard

Zu dem habe ich natürlich die md5 Summe zur Intigritäts- Prüfung erzeugt.
md5sum Downloads/nginx-1.12.0-1.el7.ngx.x86_64.rpm
6ecea65dc0ed707df767e26d0825b00b Downloads/nginx-1.12.0-1.el7.ngx.x86_64.rpm

Dann habe ich die Base64 Codirte Daten in einem Citrix Terminal gepostet:

cat | base64 -d > nginx-1.12.0-1.el7.ngx.x86_64.rpm
....

Mit STRG + d kann man das schreiben in die Datei beenden. Anschließend noch einmal mit md5sum den gegen Test mach und schon ist die Datei auf der anderen Seite.

Kernel Loggin via UDP

Montag, Mai 8th, 2017

Wir haben das Problem, dass wir Server haben die einfach Abstürzen ohne einem Meldung im /var/log/kernel.log zu hinterlassen. Wir haben nun das Kernel Loggin Modul „netconsole“ verwendet, um die Logzeilen direkt vom Kernel via UDP verschicken zu können.

Dafür würde auf Empfänger und Sender Seite folgendes eingerichtet.

Empfänger:
Möchte man das ganze nicht Reboot fest machen und für mehrere Ports/Server einrichten kann man auch einfach den socat Befehl von Hand ausführen. Hier wird nun beschreiben wie wir einen dynamischer Systemd Service verwenden.

/etc/systemd/system/netconsole@.service

[Unit]
Description=netconsole
After=network.target remote-fs.target nss-lookup.target
PartOf=netconsole.service

[Service]
Type=simple
Environment="LANG=C"
ExecStart=/usr/bin/socat OPEN:/var/log/netconsole-%i,append udp4-listen:%i,reuseaddr,fork

Restart=always

[Install]
WantedBy=multi-user.target

/etc/systemd/system/netconsole.service

[Unit]
Description=netconsole
Wants=netconsole@10001.service netconsole@10002.service

[Service]
RemainAfterExit=yes
ExecStart=/bin/true

[Install]
WantedBy=multi-user.target

An dieser Stelle kann das der Punkt „Wants“ beliebig anpassen werden. Der Zahlen wert hinter dem @xxxx ist der übergebene Port.

Abschließend müssen das systemd noch aktiviert werden:

systemctl enable netconsole.service
systemctl start netconsole.service
systemctl status netconsole.service
● netconsole.service - netconsole
   Loaded: loaded (/etc/systemd/system/netconsole.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mo 2017-05-08 10:54:23 CEST; 4s ago
  Process: 11124 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 11124 (code=exited, status=0/SUCCESS)

Mai 08 10:54:23 server systemd[1]: Started netconsole.

Sender:
/etc/modprobe.d/netconsole.conf

options netconsole netconsole=10000@192.168.0.1/br0,10001@192.168.0.9/00:00:00:00:00

Dann kann das Kernel Modul geladen werden:

modprobe netconsole

Möchte man das ganze reboot fest machen, muss das Modul in /etc/modules eingetragen werden:

echo "netconsole" >> /etc/modules

Zum Testen erzeugt folgender Befehl einen Eintrag im Kernel log, als auch auf dem Empfänger Server:

echo h > /proc/sysrq-trigger

Update 17.05.2017: für die Verwendung von CentOS7 wurde das Script von nc auf socat umgebaut.

spam aus Panama

Samstag, April 1st, 2017

Einige zeit lang hat es mich genervt das es Spam Server gibt, die von Domains verschicken die ausschließlich in Panama Register sind. Die sind mittlerweile so dreist das sie Spam score werte erreichen, die weit negativ sind, da bei ihnen alles stimmt. Aber eine Gemeinsamkeit haben Sie, neben dem whois Eintag das Sie aus Panama stammen, auch noch. Sie haben alle FreeDNS Einträge von Namecheap Inc. Ops die kann man getrost droppen:

In der /etc/postfix/main.cf habe ich den smtpd_recipient_restrictions folgende Eintrag angefügt:

smtpd_recipient_restrictions =
check_sender_ns_access hash:/etc/postfix/blacklist_ns.cf 

Dann habe ich die Datei /etc/postfix/blacklist_ns.cf angelegt:

dns1.registrar-servers.com REJECT Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc
dns2.registrar-servers.com REJECT Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc
dns3.registrar-servers.com REJECT Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc
dns4.registrar-servers.com REJECT Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc
dns5.registrar-servers.com REJECT Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc

Anschließend habe ich die hash table erstellt:

postmap /etc/postfix/blacklist_ns.cf

Nach dem neu laden des Postfixes fand ich wenige Sekunden später folgendes im log:
postfix/smtpd[..]: connect from mx4.siegertarifpkv.com[...]
postfix/smtpd[..]: Anonymous TLS connection established from mx4.siegertarifpkv.com[...]: TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)
postfix/smtpd[..]: NOQUEUE: reject: RCPT from mx4.siegertarifpkv.com[...]: 554 5.7.1 : Sender address rejected: Sender-Domain is registered at WhoisGuard Panama / Namecheap Inc; from= to= proto=ESMTP helo=
postfix/smtpd[..]: disconnect from mx4.siegertarifpkv.com[...]