Kategori public

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.

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[...]

Kernel Bug in CentOS 7

Sonntag, Februar 12th, 2017

Nach dem neu starten unserer VServer Plattform mit dem Kernel 3.10.0-514, traten nach sofort nach dem Booten folgende schwerwiegenden Fehler im Log auf:

kernel: Buffer I/O error on dev dm-15, logical block 8892681, lost async page write
kernel: sd 4:0:0:0: [sdc] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
kernel: sd 4:0:0:0: [sdc] Sense Key : Not Ready [current]
kernel: sd 4:0:0:0: [sdc] Add. Sense: Logical unit communication failure
kernel: sd 4:0:0:0: [sdc] CDB: Write(16) 8a 00 00 00 00 00 37 7d 48 00 00 00 40 00 00 00
kernel: blk_update_request: I/O error, dev sdc, sector 930957312
kernel: sd 4:0:0:0: [sdc] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

Aber auch folgende syslog events traten auf, nachdem mittels:

lvmcreate -L 10G -n lv_snapshot -S vg/lv

ein snapshot erzeugt wurde.

kernel: EXT4-fs (dm-28): INFO: recovery required on readonly filesystem
kernel: EXT4-fs (dm-28): write access will be enabled during recovery
kernel: EXT4-fs warning (device dm-28): ext4_clear_journal_err:4718: Filesystem error recorded from previous mount: IO fail
ure
kernel: EXT4-fs warning (device dm-28): ext4_clear_journal_err:4719: Marking fs in need of filesystem check.
kernel: EXT4-fs (dm-28): recovery complete
kernel: EXT4-fs (dm-28): mounted filesystem with ordered data mode. Opts: (null)
kernel: EXT4-fs (dm-28): INFO: recovery required on readonly filesystem
kernel: EXT4-fs (dm-28): write access will be enabled during recovery
kernel: EXT4-fs (dm-28): orphan cleanup on readonly fs
kernel: EXT4-fs (dm-28): 6 orphan inodes deleted
kernel: EXT4-fs (dm-28): recovery complete

Schlimmer noch, die VMs wechselten nach kurzer Zeit in den read only Modus. Und konnten ohne erweitertes Filesystem Check nicht wieder gestart werden.

Zugglück sind wir schnell auf den Kernel Parameter gekommen, der das Problem verursacht hat.

cat /sys/block/sda/queue/max_sectors_kb
32767

Dieser Wert war bei älteren Servern noch auf 512 eingestellt. Bei den von dem Bug betroffenen Server durfte er nicht über 4096 eingestellt sein, stand aber immer wieder auf 8192.

Der CentOS Bug Report 12725, in dem das selbe verhalten mittels:

parted -s /dev/sda unit s print

beschrieben wurdet, half uns den Fehler weiter auf den Kernel einzuschränken. Immer wenn eine Partitionsabfrage, oder eine Änderung am LVM Stattgefunden hat, änderte sich der Wert plötzlich wieder auf 8192.

Folgende udev Regel, die wir unter /etc/udev/rules.d/99-san.rules eingefügt haben, verhinderte das umstellen des wertes:

ACTION=="add|change", ENV{ID_FS_USAGE}!="filesystem", ENV{ID_PATH}=="*-iscsi-*", RUN+="/bin/sh -c 'echo 4096 > /sys$DEVPATH/queue/max_sectors_kb'"

Fazit:
Ein so schwerwiegenden Kernel Bug ist mit schon lange nicht mehr untergekommen. Er hatte für uns zufolge das wir bei einzelnen VMs nur noch teile retten konnten und komplett aus dem Backup wiederhergestellt werden mussten. Auch das Rechercheiren des Bugs ist bei CentOS kaum möglich. Da es zu RedHat binär kompatibel kann man nicht einfach durch ein git repository zu scrolen und sich die Änderungen und Kommentare anschauen. Wo bei mir die Überlegung offen ist, zukünftig auf einen Vanilla-Kernel zu wechseln und/oder CentOS zu vermeiden.

Unser Kernel: 3.10.0-514.6.1.el7.x86_64
Quelle Burgreport: https://bugs.centos.org/view.php?id=12725

2847 Tage Uptime

Mittwoch, Februar 8th, 2017

Nach dem der Cisco Switch beim Letzten Stromausfall nicht überlebt hat. Ist jetzt auch einer meiner ältesten Server nicht mehr da.
Bei einer Uptime von 2847 Tagen habe ich das Letzte Screenshot gemacht:

Neben der Uptime habe ich auch mittels dumpe2fs /dev/sda1 den Zeitpunkt anzeigen lassen wann das Filesystem das letzte mal ein gehangen wurde. Das war am 08.02.2009.

Da heutzutage Server Quasi täglich mit Sicherheitsupdates versorgt werden müssen und es mittlerweile stabile Livemigration von VMs gibt. Wird es bei mir nicht mehr vorkommen, dass ein Server eine derart hohe Uptime erreichen wird.

cisco: kex: algorithm: diffie-hellman-group1-sha1

Donnerstag, Dezember 1st, 2016

Auf unsere CISCO 4500 haben wir ein ios mit SSH. Leider ist das aber eine SSH die schon etwas in die Jahre gekommen ist. Somit meckert meine SSH unter Ubuntu 16.04 das die Ciphers (Verschlüsselungsverfahren) nicht erlaubt sind.

ssh admin@switch
Unable to negotiate with switch port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

Dies kann man zum Glück noch explizit aktivieren:
ssh admin@switch -oKexAlgorithms=+diffie-hellman-group1-sha1
Password:
Switch>

Damit ich zukünftig dies nicht immer wieder hier nachlesen muss. Habe ich dies in meine .ssh/config dauerhaft verdrahtet.

Host switch
KexAlgorithms=+diffie-hellman-group1-sha1


Die beiden Cisco 4500 kurz nach dem Einbau.