Strato-V-Server mit Opensuse 12.3 – III – Stop SSH Root Login

Im letzten Beitrag zur Konfiguration unseres Strato-Servers
Strato-V-Server mit Opensuse 12.3 – II
hatten wir uns ein wenig mit dem SSH-Zugang befasst und als erste Maßnahme den SSH-Port verschoben. Wir hatten gleichzeitig aber festgestellt, dass das keine ausreichend sichere Lösung ist. Einer der Gründe war u.a. der, dass “root” immer noch Zugang zu dem Server hat. Dies ist ein Sicherheitsrisiko, das wir im nächsten Schritt ausschalten wollen. Es ist ja auch gar nicht erforderlich, sich direkt als root auf dem Server einzuloggen. Vielmehr sollte der Zugang über einen unprivilogierten User vorgenommen werden. Von dessen Account wechselt man dann auf der Shell zum Root-Account.

Anlegen eines normalen, unpriviligierten Users

Bevor wir den direkten root-Zugang beenden können, müssen wir erst einen normalen User anlegen. Den User nenne ich nachfolgend der Einfachheit halber “xtarjax”. Generell gilt auch hier, dass man einen Namen wählen sollte der nicht leicht zu erraten ist.

Die Erzeugung des user-Accounts nehmen wir z.B. mittels “yast >> Sicherheit und Benutzer >> User- und Gruppenverwaltung” vor. Oder wir checken auf der Shell per “useradd -D” kurz die Standardeinstellungen für die Useranlage und benutzen dann das Shell-Kommando

hxxxxxxx:~# useradd -m xtarjax

Das Passwort für den User setzen wir mit

hxxxxxxx:~# passwd xtarjax

“passwd” checkt das zu verwendende Passwort nach vorgegebenen Kriterien. Mit einem weiteren “passwd -S xtarjax” fragen wir dann den Zustand des angelegten Users ab. Ich gehe auf Details der Useranlage nicht weiter ein. Wir prüfen noch, dass unter “/home” das Homeverzeichnis “/home/xtarjax” angelegt wurde.

Nun weiß ich, dass einige Leute gerne mit der grafischen Version “yast2” von YaST arbeiten. Ich rate bei der Arbeit auf einem Remoteserver aus drei Gründen davon ab:

  • Es birgt Sicherheitsrisiken (auch wenn man das X-Protokoll unter ssh tunnelt).
  • Es erhöht den Datentransfer zwischen Server und Client doch beträchtlich und die Antwortzeiten sind nicht berauschend.
  • Es ist überflüssig, weil das ASCII yast für die Shell praktisch alle erforderlichen Möglichkeiten bietet.

Wenn man temporär doch mit grafischer Unterstützung arbeiten will, gilt:
Man muss SSH so konfigurieren, dass X-Forwarding erlaubt wird. Standardmäßig ist das abgeschaltet. Man muss dazu in der Datei “/etc/ssh/sshd-config” folgenden Eintrag von “no” auf “yes” ändern.

X11Forwarding yes

Dies macht man am besten mit “vi” oder “emacs”. Danach

hxxxxxxx:~# rcsshd restart

oder

hxxxxxxx:~# systemctl restart sshd.service

ausführen und testen, dass ein Einloggen vom eigenen Client-System aus mittels

mylinux:~ # ssh -X root@xxxxxxx.stratoserver.net -p nnnnn

unter dem im letzten Beitrag definierten Port funktioniert. Danach kann man

hxxxxxxx:~# yast2 &

ausprobieren und die Antwortzeiten für seine Internetverbindung bzw. die 100MBit Anbindung des Stratoservers testen. Berauschend ist das nicht – aber es funktioniert zur Not. Wie gesagt: Ich rate vom Einsatz grafischer Tools ab. Will oder muss man zwischenzeitlich mit X11-Forwarding arbeiten, sollte man es danach durch Setzen von “X11Forwarding no” in der “sshd_config” wieder rückgängig machen.

Abschalten des ssh-Zugangs für root

Wir schalten nun den SSH-Zugang für den priviligierten User “root” in 2 Schritten ab. Zunächst editieren wir die Datei “/etc/ssh/sshd_config” und fügen folgende Zeile ein – z.B. nach dem Statement “Port 6XXXXX”:

Port 6XXXX
AllowUsers xtarjax root

Dann starten wir den ssh-Service neu mittels

hxxxxxxx:~# rcsshd restart

Wir loggen uns aus dem Strato-server aus und versuchen einen Login per

mylinux:~ # ssh xtarjax@xxxxxxx.stratoserver.net -p nnnnn

Dies sollte anstandslos gelingen. Ist das sichergestellt wechseln wir zum root-Account mittels

mylinux:~ #su –

und editieren als root dann erneut “/etc/ssh/sshd_config”. Dort entfernen wir root aus der Liste der AllowedUsers und fügen ein Zusatzstatement ein – bzw. editieren die im File ggf. auskommentierte Zeile in folgender Form

Port 6xxxx
AllowUsers xtarjax


PermitRootLogin no

Danach starten wir den ssh Service erneut und beten, dass wir über den normalen User reinkommen. Dann machen wir den Gegencheck und versuchen

mylinux:~ # ssh root@xxxxxxx.stratoserver.net -p nnnnn

Das sollte zum Scheitern verurteilt sein. Interessanterweise wird das Passwort mit zwischenzeitlicher Zeitverzögerung 3 mal abgefragt – – auch bei Eingabe des korrekten Passwords. Danach erfolgt ein zwischenzeitlicher Abbruch des Zugangsversuchs.

Mit diesem Schritt haben wir unsere Grundsicherheit wieder etwas erhöht. Root hat keinen direkten Serverzugang per SSH mehr. Im nächsten Beitrag stellen wir den SSH-Zugang zusätzlich auf ein schlüssel- bzw. zertifikats-basiertes Zugangsverfahren um:
Strato-V-Server mit Opensuse 12.3 – IV – SSH Key Authentication

 

Strato-V-Server mit Opensuse 12.3 – II – Installation / SSH-Port ändern

Im vorhergehenden Teil dieser kleinen Reihe zum Aufsetzen eines LAMP-Systems auf einem Strato-V-Server
https://linux-blog.anracom.com/2013/10/03/virtueller-strato-v-server-mit-opensuse-12-3-i/
hatten wir einen kurzen Blick auf die durchaus begrenzte Verwaltungsoberfläche für das Serverpaket geworfen, die Strato anbietet. In diesem Beitrag installieren wir auf dem bereitsgestellten V-Server zunächst Opensuse 12.3. Danach treffen wir erste Maßnahmen, um die Sicherheit des Systems etwas zu verbessern. Dies betrifft das Hochfahren einer einfachen Firewall, aber auch einige Maßnahmen in puncto SSH-Zugang. Die Nummern unserer “Schritte” zur Installation zählen wir einfach weiter hoch.

Schritt 2: Installation eines “Opensuse 12.3”-Minimalsystems

Die Linux V-Server von Strato sind nach ihrer Bereitstellung mit Ubuntu ausgestattet. Wir möchten jedoch gerne Opensuse 12.3 nutzen. (Liegt in diesem Fall nicht nur an mir, sondern auch am Kunden). Der Menüpunkt “Neuinstallation” des Strato-Verwaltungsmenüs hilft uns hier weiter. Dort können wir das zu installierende Betriebssystem auswählen.

strato_server_7_600

Der Neuinstallationsprozess dauerte bei uns ca. 45 Minuten. Danach war das Strato-System wieder zugänglich. Wer erwartet, nun eine umfangreiche Installation mit Serverdiensten vorzufinden, irrt. Es wird lediglich ein (32Bit-) Minimalsystem mit SSH-Zugang installiert. Die weitere Bestückung mit Serverdiensten obliegt dem Kunden selbst. Hierzu muss er entweder die Web-Administrationsoberfläche “Plesk” verwenden, oder er legt – wie wir – selbst Hand an. [ Ich werde hier nicht in eine unergiebige Diskussion einsteigen, warum ich aufgrund früherer Erfahrungen für die Einrichtung des Servers nicht Plesk verwende].

Um auf dem Server arbeiten zu können, benötigen wir einen Shell-Zugang über SSH.

Schritt 3: Erster SSH-Zugang

Nach der Suse-Installation kann der Standard “ssh-Port 22” für den Shell-Zugang genutzt werden. Die erforderlichen Informationen zum Root-Zugang erhält man unter dem Strato-Verwaltungs-Menüpunkt “Serverkonfiguration >> Serverdaten”. Also auf dem eigenen System (hier mit “mylinux” bezeichnet)

mylinux:~ # ssh root@hxxxxxx.stratoserver.net

mit seiner Serverkennung hxxxxxx eingeben und die Frage nach dem Passwort beantworten. Man landet dann auf einem normalen (roten) SuSE-Shell-Prompt

hxxxxxxx:~#

Die Opensuse Paketverwaltung für die ASCII-Terminaloberfläche ist über das Kommando “yast” selbstverständlich zugänglich. Mit dem SW-RPM-Management (yast-Punkt: “SW installieren oder löschen”) kann man sich dann mal ansehen, was alles installiert ist. Das ist nicht viel. Die vorhandenen Installationsquellen beschränken sich auf die elementaren Repositories und die installierten SuSE-Paketgruppen bzw. Patterns im wesentlichen auf das Basissystem.

strato_server_8_600

Um das System zu beschäftigen, während wir uns gleich weiteren administrativen Aufgaben zuwenden, installieren wir im Hintergrund mittels “yast” die RPMs des Patterns “WEB- und LAMP-Server”. Ferner installieren wir das RPM-Paket “rkhunter”.

strato_server_10_600
strato_server_14_600

Letzteres Paket liefert ein Programm, das den Host nach Rootkits durchforstet. Wenn man die anlaufende Installation parallel verfolgen will, z.B. um ein Gefühl für die die Netzperformance zu bekommen, öffne man einfach eine zweite Shell auf dem Server.

Schritt 4: Firewall aktivieren

Ein Absetzen des Befehls

hxxxxxxx:~# iptables -L

und ein Blick mit “yast >> Sicherheit und Benutzer >> Firewall” belehren einen darüber, dass auf dem Minimalserver keine Firewall läuft. Andererseits zeigt ein

hxxxxxxx:~# lsof -i

doch einige offene Ports an (sunrpc, ipp,..). Das gefällt uns erstmal nicht. Um die Ports nicht gleich schließen zu müssen, aber doch den Schutz etwas zu verbessern, fahren wir deshalb eine minimale Firewall in Form der Suse-Firewall2 (“yast >> Sicherheit und Benutzer >> Firewall”) hoch.

Achtung- im Umgang mit einer Firewall auf einem Remote-System gibt es ein paar wichtige “Trivialitäten” zu beachten :

  • Beim Einrichten einer Firewall auf einem Remote-Server ist eine regelmäßige Grundübung die, darüber nachzudenken, dass man sich nicht selbst aussperrt. Dies impliziert die Freigabe bestimmter Dienste (für bestimmte eigene IP-Adressen) und ggf. auch ein Nicht-Hochfahren der Firewall bei einem Reboot als letztem Rettungsanker.
  • Wir müssen bei der Konfiguration der SuseFirewall und vor deren Start erst einmal den Standard “SSH-Port/SSH-Dienst” freigeben. Das ist essentiell, sonst sperren wir uns mit dem Start der Firewall unmittelbar selbst aus.
  • Den automatischen Start der Firewall haken wir auf der entsprechenden YaST-Konfigurationsseite (zunächst) nicht an. Dies gibt uns die Chance, bei Fehlern mit der Firewall zumindest über einen Reboot wieder Zugang zum Serversystem zu erlangen.

Nachdem man mal eine laufende und getestete FW-Konfiguration erstellt hat, wird man einen entsprechenden Service zum Anlegen der iptables-Regeln natürlich mit dem Start des Systems automatisch hochfahren lassen. Bei dieser Gelegenheit ist die Anmerkung angebracht, dass Strato technisch begründete Restarts der V-Server oder deren Hosts normalerweise vorab mit E-Mails ankündigt. Man kann sich dann im Bedarfs- oder Zweifelsfall zur Not auch auf ein manuelles Hochfahren seiner Firewall einstellen.

Also:

strato_server_11_600

strato_server_12_600

Erst jetzt starten wir die Firewall [FW] mit Hilfe der entsprechenden Optionen unter der YaST-Oberfläche für die SuseFirewall. Nach deren Start sollte man direkt in der geöffneten Shell weiterarbeiten können. Ein erneutes “iptables -L” zeigt uns nun allerdings eine Reihe aktiver Regeln an. Eine Abbildung der wichtigsten Regeln der SuSE-Firewall liefere ich weiter unten nach einer weiteren Einstellung nach.

Hinweis: Diese Firewall-Regeln werden uns später nicht mehr genügen. Im Bereich eingehender Verbindungen ist nun nur noch der SSH-Zugang erlaubt. Die FW läßt im Moment aber noch jede Art von ausgehender Verbindung zu. Das macht es später deutlich schwerer, illegale Aktivitäten
des Servers zu entdecken. Am Ende dieser Artikel-Reihe werden wir deshalb auch ausgehende Verbindungen drastisch beschränken.

Schritt 6: Root Kit-Scan

Bevor wir uns intensiver mit SSH befassen, ist es durchaus sinnvoll, zunächst einen Scan auf bekannte Linux-Root Kits durchzuführen. Als Grund führe ich die Welle an SSH-RootKits an, die Ende Februar dieses Jahres viele gehostete Server betroffen haben. Siehe hierzu die Links am Ende des Beitrags. Wir sollten uns vor weiteren sicherheitsrelevanten Maßnahmen sicher sein, dass wir uns über die Installation und den eigenen SSH-Zugang nicht bereits etwas auf dem System eingefangen haben.

Also :

hxxxxxxx:~# rkhunter -c

Es werden verschiedene Checks durchlaufen – u.a. eben auch auf RootKit-Merkmale. Auf dem Stratoserver mit Opensuse 12.3 kommt es dabei auch zu einigen interessanten Warnungen.

strato_server_15_600

Im Bereich der RootKit-spezifischen Suchen sollte – oder besser muss – aber alles OK sein.

strato_server_18_600

Danach tauchen weitere Warnungen auf:

strato_server_16_600

strato_server_17_600

Die Warnungen sollte man übrigens durchaus ernst nehmen und ihnen durch Studium des Logfiles

/var/log/rkhunter.log

einzeln nachgehen. Ich habe das gemacht und in allen Fällen sehr plausible Gründe dafür gefunden, warum die bemängelten Dinge auf dem frisch installierten System dennoch in Ordnung waren. Die Warnungen zu den Kernel-Modules rührt u.a. daher, dass auf dem mit Parallells virtualiserten Systemen keine Kernelmanipulationen der Hosts erlaubt sind und “lsmod” und “modprobe” wegen des fehlenden Hostzugriffs nicht funktionieren. [Das ist anders als z.B. bei KVM.]

Schritt 6: SSH-Port verlagern

Es ist keine gute Idee, den SSH-Port auf der Standardeinstellung 22 zu belassen. Das hilft nur den Script-Kiddies. Ich wähle deshalb für die SSH-Kommunikation immer einen Port weit jenseits normaler hoher Ports. Diese werden nach meinen Erfahrungen nicht so häufig von scripts durchsucht. [Natürlich nutzt eine Port-Verlagerung nichts gegenüber professionellen Angreifern – aber getreu der Weisheit, mehrere Hürden zu staffeln, ist das ein erster ablenkender Schritt.]

Zur Umlenkung des SSH-Ports gilt es, als root einen entsprechenden Port-Eintrag am Anfang der Datei “/etc/ssh/sshd_config” vorzunehmen:

Port XXXXX

Natürlich mit einer vernünftigen großen Zahl für den Port – ggf. oberhalb 60000. Wir speichern die Zeile in der sshd-config ab; wir starten den SSH-Service aber natürlich noch nicht neu. Achtung – vor dem Restart des SSH-Services ist zweierlei zu beachten :

  • Den neuen Port muss man sich unbedingt merken ! Sonst kann man sich von seinem lokalen System aus später nicht mehr einloggen.
  • Die laufende Firewall muss zuerst für den neuen Port geöffnet werden.

Letzteres erledigen wir wieder mit yast: Auf der Seite “Erlaubte Dienste” nutzen wir den Punkt
“Erweitert” und fügen folgende eigene Regel hinzu:

strato_server_13_600

Achtung auch hier: die “6xxxx” sind natürlich nicht wörtlich zu nehmen; hier ist insgesamt exakt die oben in der sshd-Konfigurationdatei angegebene neue Nummer des SSH-Ports zu wählen. Mit F10 speichern wir die neue Firewall- Einstellung ab; den Standard-SSH-Port lassen wir auch noch erstmal offen.

Mit “iptables -L” überzeugen wir uns, dass nun extra Regeln gesetzt wurden, in denen der von uns gewählte Port auftaucht.

strato_server_19_600

Erst jetzt – also nach dem Speichern und Starten der Firewall mit der neuen Zusatzeinstellung – starten wir den SSH-Service neu. Danach können wir auf der geöffneten Shell nicht nicht mehr weiterarbeiten, den der sshd-Dämon arbeitet nicht mehr auf dem von uns geöffneten Kommunikationsport. Also beenden wir auf dem lokalen System die Shell mit CTRL-C. Wir müssen uns neu mittels SSH anmelden – nun aber unter Angabe des zu verwendenden Ports:

mylinux:~ # ssh root@hxxxxxx.stratoserver.net -p 6xxxx

Und schon sind wir wieder drin.

Schritt 6: Standard SSH-Port in der SuSE-Firewall schließen

Hat unser Zugang über den neuen Port funktioniert, kann man nun den Standard SSH-Port aus der SuSE-Firewall ausschließen. Hierzu entfernt man in den zugehörigen YaST-Firewall-Einstellungen (s. oben) einfach wieder den anfänglich erlaubten SSH-Serverdienst – natürlich aber ohne aber unsere Zusatzeinstellung unter “Erweitert” für den anderen Port zu ändern.

Nächste SSH-Themen

Aber auch das ist bei etwas Nachdenken natürlich nicht eine hinreichend sichere Lösung. Denn:

  • Der SSH-Port wurde zwar verschoben – aber er ist immer noch von überall her erreichbar.
  • Die Möglichkeit eines Brute Force Angriffes bleibt durch den Passwort-bezogenen Authentifizierungsmechanismus bestehen.
  • Root hat SSH-Zugang

Gerade der letzte Punkt ist ein latentes Sicherheitsproblem:

In den vergangenen Jahren gab es mehrere Beispiele dafür, wie Systeme durch Brute-Force-Angriffe auf ssh-Verbindungen auf einfache Weise kompromittiert werden konnten. Der root-User ist ja der am einfachsten zu erratende User-Account und der Brute-Force-Angriff kann sich auf das Knacken des Passwortes beschränken.

Es ist deshalb eine gute Idee, gar keinen SSH-Zugang für den User root, sondern nur für einen unpriviligierten User auf einem geänderten Port zuzulassen. Dadurch muss der Angreifer den Port ermitteln, den User-Namen und ein Passwort erraten. Und wenn ihm dann der Zugang geglückt sein sollte, hat er immer noch keine Root-Rechte, sondern muss nun zusätzlich auch das root-Passwort erraten. Das Sperren des SSH-Zugangs für root erhöht also den Aufwand für Angreifer.

Wie wir root vom SSH-Zugang zu unserem Stratoserver ausschließen, werde ich im nächsten Beitrag
Strato-V-Server mit Opensuse 12.3 – III – Stop SSH Root Login
beschreiben. Danach gehe ich dann auch auf einen zertifikatsbasierten SSH-Zugang ein.

Links

Rootkit Checks
http://xmodulo.com/ 2013/05/ how-to-scan-linux-for-rootkits.html

http://www.rackspace.com/ knowledge_center/ article/ scanning-for-rootkits-with-chkrootkit

Denjenigen, die am Sinn der hier besprochenen und noch kommenden SSH-Maßnahmen zweifeln, empfehle ich, sich in zwei ruhigen Stunden mal folgende Threads im Internet zu SSH-Rootkits, die im Frühjahr dieses Jahres gehostete virtuelle Server befallen haben, durchzulesen und einige der immer wieder auftauchenden Ratschläge bzgl. der Absicherung von SSH zu Herzen zu nehmen:

http://www.webhostingtalk.com/ showthread.php?s=714ab2598f1b14729348957 db7196325&t=1235797

http://forums.cpanel.net /f185/ sshd-rootkit-323962-p5.html

Sonstiges zur SSH-Absicherung
http://www.ibm.com/ developerworks/ aix/ library/ au-sshlocks/
http://www.rackaid.com/ resources/ how-to-harden-or-secure-ssh-for-improved-security/
http://stackful-dev.com/ linux-101-hardening-ssh.html
http://www.lowendguide.com/ 3/security/ how-to-harden-and-secure-ssh-for-improved-security/
http://linuxmoz.com/ how-to-secure-ssh-servers/

 

opensuse 12.3, LDAP, sssd – III

In den vorigen Beiträgen

opensuse 12.3, LDAP, sssd – I
opensuse 12.3, LDAP, sssd – II

zu meiner kleinen LDAP-Reihe für OS 12.3 bin ich darauf eingegangen, dass der OpenLDAP-Server seit OS 12.2 wegen sssd TLS/SSL-fähig ausgelegt werden muss. In diesem Beitrag treffe ich mittels YaST2 die Vorbereitungen, um die TLS-Fähigkeit zu erreichen und lege dafür Zertifikate an.

Im weiteren Verlauf des Textes bezeichne ich als “LDAP-Server” dasjenige Server-System unter Opensuse 12.3, das eine OpenLDAP-Implementierung beinhaltet. Im LDAP-Baum werden später gemäß suse-spezifischer Regeln Standardobjekte für die Beherbergung von User- und Gruppen-Informationen angelegt. Der LDAP-Baum beinhaltet dann auch die Credentials für eine User-Authentifizierung.

Ein anderer Opensuse 12.3-basierter PC oder Server, auf dem ein User, dessen Daten im LDAP hinterlegt sind, sich einloggen will, bezeichnen wir nachfolgend dagegen als Linux- “Host” unseres Netzwerkes. Ziel ist es, den User mit Hilfe des LDAP_Servers zu authentifizieren und ihm bzw. anderen Programmen auf dem Host das Arbeiten mit dem LDAP-Server zu ermöglichen.

CA und Common Server Certificate für einen LDAP-Server

Verschlüsselte Verbindungen wie TLS/SSL basieren u.a. auf Zertifikaten. Ein asymmetrisches Sicherheitsverfahren leitet die Client/Server-Kommunikation ein. Dabei werden der private wie der öffentliche Schlüssel eines Servers eingesetzt: Der Erhalt des Server-Zertifikats dient dem Client zur Prüfung der Identität des Servers. Nach erfolgreicher Authentizitätsprüfung sendet der Client dem Server eine Zufallssequenz (pre-master-secret). Dieser Austausch erfolgt verschlüsselt unter Zuhilfenahme des öffentlichen Server-Keys (aus dem Zertifikat). Server und Client berechnen dann auf Basis definierter Verfahren einen gemeinsamen Schlüssel für das anschließend eingesetzte symmetrische (und deshalb schnelle) Verschlüsselungsverfahren für den eigentlichen Datenaustausch. Weitere detailliertere Infos erhält man hier :

http://de.wikipedia.org/wiki/Transport_Layer_Security

Zertikate – im besonderen Server-Zertifikate – werden über eine übergeordnete Instanz ausgestellt. Diese Instanz ist ein sog. “Certificate Authority”, kurz CA. Bei der Kommunikation von Clients mit Servern, die sich über Zertifikate ausweisen, muss das Serverzertifikat und damit die Identität des Servers mittels Informationen der CA als unabhängiger dritter Instanz verifiziert werden.

Hatte man für sein eigenes Netzwerk bislang keine CA generiert, so wird dies nun zwingend erforderlich, wenn Netzwerk-Hosts mit ihrem SSSD den zentralen LDAP-Server zur User-Authentifizierung nutzen sollen.

Es ist wahrscheinlich, dass auf dem zentralen LDAP-Server weitere Server-Dienste laufen werden. Daher kann es sinnvoll sein, auf diesem Server ein von SuSE so genanntes “Common Server Certificate” [CSC] zu implementieren. Ich zeige kurz für zwei Fälle, wie das geht.

Neu im Vergleich zu meinem früheren Artikel Opensuse 12.1 – LDAP -II ist hier lediglich der Einsatz des CSC.

Fall 1: LDAP-Server und CA-Server sind identisch

In unserem Fall setze ich aus Testzwecken neben einer vorhandenen Root-CA eine weitere namens “anraconb” für meine Tests auf. Dies geschieht mittels des YaST2-Moduls >> “CA-Management”. Im sich öffnenden Fenster drücken wir den Button “Create CA” und
füllen im nächsten Dialogfenster die erforderlichen Informationen aus:

LDAP_OS123_2

Die CA soll logisch später für eine virtuelle Spieldomaine namens “anraconb.de” zuständig sein und Zertifikate für Server und ggf. auch Clients in dieser Domaine ausstellen. Nachdem die CA erzeugt ist, können wir diese über den entsprechenden Button in der Grundmaske des YaST2-CA-Managements “betreten”:

LDAP_OS123_3

LDAP_OS123_4

Um ein kopierbares Zertifikatsfile der CA verfügbar zu haben, exportieren wir unser Zertifikat in eine PEM-Datei. Ich lege diese in einem Verzeichnis “/etc/certs” unter dem Namen “anraconb_CA.pem” ab.

Nun legen wir dann für unseren LDAP-Server ein “Server-Zertifikat” an. Nachdem dieses später auf dem gleichen System wie die CA zum Einsatz kommen wird, handelt es sich aus Sicht der späteren Client-Hosts um ein “Self Signed Cerificate”. Aber das kümmert uns im Moment noch nicht.

LDAP_OS123_5

Bei der Bezeichnung “common name” sollte der FQDN des Servers eingetragen werden. Dies ist wichtig ! Wir werden an verschiedenen Stellen eine exakte Übereinstimmung des Zertifikatsnamens mit dem FQDN des Servers benötigen.

LDAP_OS123_6

Nachdem das Zertifikat angelegt ist, exportieren wir dieses und den zugehörigen Key in unverschlüsselter Form erneut als Dateien:

LDAP_OS123_7

Etwas scrollen hätte übrigens zeigt, dass YaST hier RSA-basierte Zertifikate und Schlüssel erzeugt:

LDAP_OS123_18

Nun zum Export als File:

LDAP_OS123_8

LDAP_OS123_9

Das Key-File enthält den “Private Key” für künftige Verschlüsselungen! Key-Files, die aus dem Certificate Management exportiert wurden, müssen daher in besonderer Weise geschützt werden und sollten zunächst nur root zum Lesen zur Verfügung stehen.

Abschließend wählen wir als weitere Exportfunktion den “Export als Common Server Certificate”.

LDAP_OS123_10

Opensuse legt dann die Dateien erneut an – allerdings an definierter Stelle, die dann später von allen möglichen YaST2-Modulen genutzt wird. Man findet die erforderlichen Zertifikats- und Key-Dateien unter

  • /etc/ssl/servercerts/servercert.pem
  • /etc/
    ssl/servercerts/serverkey.pem

Die Zertifikatsdatei der CA wird unter

  • /etc/ssl/certs/YaST-CA.pem

angelegt

Fall 2: LDAP-Server und CA-Server sind nicht identisch

Natürlich müssen wir auf dem CA-Server ein Zertifikat für den LDAP-Server ausstellen. Dieser wird dann natürlich einen anderen Namen haben – z.B. “xlamp.anraconb.de”.

Alles läuft auf dem CA-Server praktisch identisch zum oben beschriebenen Vorgehen ab, bis wir das erstellte Server-Zertifikat exportieren. Wir müssen hier einen zusätzlichen Export als “p12”-Datei vornehmen.

LDAP_OS123_17

Man beachte, dass man hier neben dem Zertifikatsnamen ein weiteres Passwort angeben muss.

Dieses File kopieren wir dann per scp auf den Zielserver – also den LDAP-Server. Am besten in das gleiche Verzeichnis “/etc/certs”. Dort schützen wir es, indem wir Lese- und Schreibrechte nur an root vergeben ! Diesen Schritt bitte nicht vergessen !

Auf dem LDAP-Server importieren wir dann das p12-File über “Yast2 >> Common Server Certificate” über die Taste “Import/Replace”. Als Ergebnis werden auf dem LDAP-Server dann in den gleichen Verzeichnissen wie oben beschrieben die notwendigen Files angelegt – u.a. auch das der CA.

Fazit

Eine CA für das eigene Netzwerk ist schnell angelegt. Für seine Server – hier den LDAP-Server – erzeugt man ebenso schnell ein RSA-basiertes Zertifikat und importiert dieses dann auf dem Zielserver mittels YaST als “Common Server Zertifikat”. Das so erhaltene Zertifikat und der private Schlüssel des Servers können dann bei der TLS-Absicherung des LDAP-Servers eingesetzt werden.

Natürlich können aber auch andere Serverdienste die Zertifikatsfiles und die generierten Schlüssel für eine SSL/TLS-Absicherung verwenden – z.B. vsftp, Apache, Cyrus IMAP.

Im nächsten Beitrag dieser Serie legen wir einen LDAP-Server unter Opensuse 12.3 an. Damit wir im Gegensatz zu früheren Artikeln bzgl. LDAP unter Opensuse 12.1 auch was neues lernen, werde ich dabei auch kurz zeigen, was man tun muss, um den LDAP-Server monitoring- und munin-fähig aufzusetzen.

Mails im Ausland über deutsche SMTP-Server

Immer wieder begegnet man dem Problem, dass man bei Auslandsaufenthalten genötigt wird, für den Mailversand den SMTP-Server desjenigen Providers zu verwenden, an dessen Netzwerk man gerade angebunden ist. Ich stosse auf dieses Problem u.a. immer wieder in Norwegen (Telenor, Tele2) und Frankreich (Orange, France Telekom, Bouygues, Free(box)).

Die Provider filtern Zieladressen für eine SMTP-Kommunikation (Port 25), die sich nicht auf den Provider-eigenen SMTP-Server beziehen. Angeblich, weil man auf diesem Wege Spam-Probleme besser in den Griff bekommen will. Na ja, wer’s glauben mag ….

Das Problem ist der dadurch für den Anwender generierte Aufwand. In der Regel hat man den Mail-Client (MUA, bei mir Kmail) auf seinem Notebook/Laptop ja so vorkonfiguriert, dass als SMTP-Server in der Regel ein Server des hauseigenen deutschen Providers eingestellt ist.

[Es kann aber auch auf Laptops noch komplizierter sein – nämlich dann, wenn ein eigener SMTP-Server, evtl. sogar ein lokaler SMTP-Server auf dem Laptop mit einer Relay-Server-Anbindung die SMTP-Kommunikation handhabt (z.B. in Form eines lokalen Postfix MTA mit einem IMAP MDA wie Cyrus) ].

In jedem Fall aber ärgert man sich bei Auslandsreisen jedesmal über die Notwendigkeit einer Re- oder Zusatzkonfiguration des Mail-Clients oder aber anderer Mailkomponenten (wie Postfix).

Am Schluss schleppt man eine Liste ausländischer SMTP-Server in seinen Mail-Programmen herum, aus der man je nach Standort einen bestimmten Server als den aktuellen Standard definieren muss. Schon bei manchen MUAs ist das ein Thema, denn der Mailclient sollte dann so intelligent ist, mehrere account-übergreifende SMTP-Server verwalten zu können ….

Bei einigen der ausländischen Netze habe ich deshalb mal mit einigen Linux-Tools überprüft, ob tatsächlich nur der Port 25 gefiltert wird. Dies war der Fall. Da kommt man dann auf den Gedanken, ob nicht ein anderer Port den Zugang zum SMTP-Server eines meiner deutschen Provider ermöglichen würde.

Man denkt dabei an eine TLS/SSL-Anbindung – in Frage kommen die Ports 465 und 587.

Und ja, tatsächlich ist bei zweien meiner deutschen Provider entweder der Port 465 (SMTP via SSL) oder der Port 587 zugänglich. Einer der Provider verwendet 465 in Kombination mit SMTP-AUTH, beim Port 587 ist eine Authentifizierung sowieso zwingend vorgeschrieben. Auf dem Mail-Client müssen dann natürlich die notwendigen Einstellungen für eine SMTP-Authentifizierung vorgenommen werden – was bei Kmail kein Problem darstellt.

Eine Anbindung über einen der beiden Ports 465 oder 587 kann man natürlich auch aus dem Inland vornehmen. Damit ist dann die Chance gegeben, im Inland wie auch in vielen ausländischen Netzwerken seinen Mailversand über den gewohnten SMTP-Server seines Vertrauens abzuwickeln. Standortspezifische Einstellungen entfallen dann. (Nebenbei finde ich, dass nicht jeden Provider mein Mail-Gebaren etwas angeht).

Nach meinen Erfahrungen klappt das Verwenden der Alternativports mindestens mal in Norwegen und Frankreich bestens – gefiltert wird dort nur der Port 25. Natürlich muss aber auch der eigene deutsche Provider mitspielen und die genannten Ports anbieten …..

Es lohnt sich bei häufigen Auslandsaufenthalten aber wirklich, das abzufragen und seine Mailprogramme (einmalig) auf einen der Ports 465 opder 587 umzustellen. Viel Spaß nun beim Mailen im Ausland !

Links:

http://de.wikipedia.org/wiki/E-Mail-Programm
http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
http://de.wikipedia.org/wiki/SMTPS
http://de.wikipedia.org/wiki/SMTP-Auth
http://forum.df.
eu/forum/showthread.php?t=49183

Remote Administration – VNC oder ssh -X ?

Es gibt eine Reihe von Situation bei der Remote-Wartung eines Rechners, in denen es nicht damit getan ist, nur auf eine Shell zuzugreifen. Manchmal benötigt man den graphischen Zugriff – zumindest auf einzelne Applikationen. Dies gilt vor allem dann, wenn der User des Remote-Rechners Fehler im graphischen Bereich meldet. Genau so einen Fall hatten wir gestern, als wir auf einen Linux-PC (SUSE 10.2) in Frankreich zugreifen mussten, um das ordnungsgemäße Wirken von Firefox zu überprüfen.

Als rettender Engel steht man nun vor der Frage, wie man den Zugriff am besten erledigt. Mit einer verschlüsselten Verbindung natürlich. Klar. Aber ist im Einzelfall eine SSH-verschlüsselte X-Sitzung sinnvoller als eine VNC-Sitzung? Ich meine, dass man das nicht pauschal sagen kann. In unserem Fall erwies sich einen verschlüsselte VNC-Sitzung als die bessere und schnellere Lösung. Wir diskutieren nachfolgend kurz beide Möglichkeiten, da wir schon mehrfach gefragt wurden, wie man für Remote-Sitzungen vorgeht.

Möglichkeit 1: SSH -X

Eine einfache Möglichkeit ist zunächst einmal die, den Output der kritischen Applikation auf den eigenen lokalen X-Server umzulenken. Dies erreicht man bequem dadurch, dass man sich auf dem Remote-Rechner mit

ssh -X remote-rechner

oder

ssh -X user@remote-rechner

anmeldet. Die auf jeden Fall erforderliche SSH-Verschlüsselung für die Verbindung erhält man dann inklusive. In vielen Fällen genügt dies, um ein Problem zu lösen. Man startet einfach in der geöffneten Shell die zu untersuchenden Applikationen, die ihren graphischen Output dann (i.d.R.) auch brav auf dem lokal laufenden X-Server des Administrator-PCs darstellen. Zur Klarstellung: Der X-Server läuft hier auf dem eigenen lokalen System des Admins und nicht auf dem zu untersuchenden Remote-System! Der Remote-Rechner sendet den graphischen Output der Applikation über das Netz zum X-Server des lokalen Rechners, von dem aus der Administrator auf das Remote-System zugreift. (Beim nachfolgend diskutierten VNC-Verfahren ist dies anders!).

Nun gibt es u.U. leider Bedingungen, unter denen das Vorgehen über “ssh -X” nicht funktioniert oder der Datentransfer einfach zu unbequem wird.

Hindernis 1 – Performance: Bei einer X-Session werden (applikationsabhängig) relativ viele Daten übertragen. Das kann u.U. zu einem erheblichen Geduldspiel werden. Tödlich sind meiner Erfahrung nach bei rel. langsamen Remote-Rechnern und begrenzter Verbindungsbandbreite solche Applikationen wie Yast (z.B zur Paketverwaltung). Auch Anwendungen, deren Inhalt selbst komplex ist (Browser mit Flash) führen ggf. zu Zuständen wie in der Warteschlange bei großen Telekommunikationsanbietern.

Hindernis 2 – Sicherheitseinstellungen: Die Applikation lässt ggf. oder unter bestimmten Umständen keinen Output auf dem Remote-Xserver zu.

Hindernis 3 – fehlerhafte Anwendungen: Die Anwendung weist Fehler auf oder ist mit dem Remote X-Server nicht kompatibel.

In unserem Fall war es wie gesagt so, dass wir das Verhalten von Firefox auf dem Remote-Rechner testen mussten. Leider ließ sich der von uns remote gestartete Firefox-Prozess unter keinen Umständen dazu bewegen, sich auf unserem lokalen X-Server zu präsentieren. (Nach Aussagen des Remote-Anwenders ging Firefox auf dem Remote KDE-Desktop aber sehr wohl auf! Siehe zum seltsamen Verhalten von Firefox weiter unten!). Zudem wurde das Update von Software über Yast2 zu einer erheblichen Geduldsprobe.

In solchen Fällen liegt es nahe, zumindest testhalber eine VNC-Verbindung über KDEs “krdc” aufzubauen und diese VNC-Verbindung ggf. für langsame Leitungen zu konfigurieren.

Möglichkeit 2: VNC
Auf dem Remote-System muss ein VNC-Server laufen. Die meisten Distributionen haben ein entsprechendes Paket, das man mit dem Paketmanager seiner Wahl installiert. Dann richtet man den VNC-Server und IPtables (oder die aktive Firewall) auf dem Remote-Rechner so ein, dass die Kommunikation überhaupt möglich wird. Typischerweise verwendet der VNC-Server auf dem Remote-Rechner als Default-Port den Port 5901.

Dieser Port muss für eingehende Verbindungen vom System des Administrators aus freigeschaltet werden – am besten nur für Verbindungen von diesem System aus! (Eine Diskussion der zugehörigen IPtables-Konfiguration führt an dieser Stelle zu weit – ich empfehle hierfür das sehr schöne Programm FWbuilder!). Unter Opensuse hilft einem Yast (s. den Punkt Netzwerkdienste). Nachteilig empfinde ich dabei allerdings die pauschale Freigabe des Ports auf allen Interfaces und für alle potentiellen IP-Adressen.

Nach dem Einrichten des VNC-Servers auf dem Remote-System ist ggf. ein Neustart von xdm, kdm oder gdm für den Anmeldebildschirm erforderlich (für SUSE und KDE hilft z.B.: “rckdm restart”). Das Einrichten des VNC-Servers macht man am besten über eine Standard SSH-Sitzung, wenn der Remote-Anwender sich mit der Konfiguration nicht auskennt.

Die Verbindung zwischen Administrator-System und dem Remote-Rechner (Port 5901) muss vor Beginn der VNC-Sitzung natürlich verschlüsselt werden. Hierzu baut man einen SSH-Tunnel vom eigenen Rechner zum Zielsystem auf. Wir setzen voraus, dass SSH auf beiden Systemen eingerichtet ist und dass der ssh-agent für eine automatische Passwortübergabe vorbereitet wurde. Der Tunnel wird dann vom PC des Administrators aus durch nachfolgenden Befehl aufgebaut:

z.B.: ssh -f -N -L8787:remote-rechner:5901 user@remote-rechner

Hierbei gilt Folgendes: “user” ist der Username unter dem die ssh-Sitzung auf dem Remote-Rechner aufgebaut wird. “remote-Rechner” ist durch den Namen oder die IP-Adresse des Remote-Systems zu ersetzen. Die Option “-f” bedingt die Option “-N”. “-f” sorgt für einen Fork-Prozess von ssh in den Hintergrund, “-N” sorgt dafür, dass kein Shell-Fenster geöffnet wird. Der ssh-agent muss hierbei – wie gesagt – in der Lage sein, Passwörter automatisch im Hintergrund auszutauschen. Als Zielport ist hier der Defaultport 5901 gewählt worden. Ob dieser gültig ist, muss man natürlich vorher wissen (Einrichtung des VNC-Servers). “8787” ist im Beispiel der Dummy-Port auf dem lokalen System, über den der lokale VNC-Client dann den Remote-Rechner auf Port 5901 – und damit den VNC-Server – anspricht.

Der SSH-Tunnel hat in diesem Beispiel also als Anfangspunkt den Port 8787 auf dem lokalen System des Administrators und als Endpunkt den Port 5901 auf dem Remote-System “remote-rechner”. Dort loggt sich der User ja gerade für die SSH-Sitzung ein. (Sonderfälle wie den Umweg über einen SSH-Relay-Rechner lassen wir hier mal der Einfachheit halber weg. )

Wichtiger Hinweis: Zu beachten ist, dass man nach getaner Arbeit nicht vergisst, den SSH-Tunnel (der ja im Hintergund läuft) wieder abzubauen und auch den Port 5901 wieder zu schließen !!!

Weitere Hinweise zum Tunneln: Schlägt der Fork-Prozess in den Hintergrund fehl, oder will man die Passwort-Verankerung in den Systemen nicht dem ssh-agent überlassen, so hilft

z.B.: ssh -L8787:remote-rechner:5901 user@remote-rechner

Allerdings öffnet man damit eine bleibende Remote-Shell im Vordergrund des lokalen eigenen Systems. Verwendet man

ssh -X -L8787:remote-rechner:5901 user@remote-rechner

so hat das den Vorteil, dass man bei Bedarf schnell noch eine Remote-Applikation für den eigen X-Server öffnen kann – zusätzlich zu den Vorgängen, die im VNC-Client dargestellt werden (also Vorgänge, die in einer X-Session auf dem Remote-System laufen).

Konfiguration des lokalen VNC-Clients: Im VNC-Client (z.B.
“krdc”) muss man im gegebenen Beispiel als Zielrechner natürlich “localhost:8787” eingeben, um die VNC-Sitzung über den Tunnel aufzubauen. Der Client spricht über den lokalen Port 8787 den Remote-Rechner an und erhält vom dortigen VNC-Server die Bilddaten der dortigen X-Sitzung zugeschickt. (Die X-Sitzung läuft auf dem Remote-Rechner ab! Der lokale VNC-Client erhält hiervon nur die Bilddaten, die er auf dem Schirm des Admin-PCs als spezielle lokale X-Applikation darstellt.).

Hat man bisher alles richtig gemacht, so öffnet sich im lokalen VNC-Client der graphische Anmeldeschirm des Remote-Systems und man gelangt nach dem Login in eine graphische X-Sitzung des Remote-Systems unter dem dortigen Window-Manager (z.B. KDE).

In unserem Fall stellten wir tatsächlich fest, dass das Arbeiten über VNC relativ zügig vonstatten ging und zwar schneller als mit einer “ssh -X” – Sitzung. Ob das allgemeingültig ist, trauen wir uns aber keinesfalls zu sagen.

Hinweis zu Remote-Tests von Firefox:
Firefox für Linux stellt fest, auf welchem X-Server und Screen ein bestimmter User eine erste Instanz des Firefox-Programms geöffnet hat und lässt die Öffnung weiterer Instanzen für andere X-Server nicht zu (vermutlich aus Sicherheitsgründen). Das führt für Remote-Zugriffe aber zu folgender unguter Situation:

Hat der Remote-User (nennen wir ihn “James”) noch irgendein Firefox-Fenster offen, so lässt sich auf dem lokalen X-Server des Administrators keine weitere Firefox-Instanz öffnen, wenn der Administrator als “James” auf dem Remote-System eingeloggt ist. Umgekehrt gilt das Gleiche: Hat der Administrator als User “James” auf dem Remote-System eine Firefox-Instanz für den lokalen X-Server geöffnet, so kann der User James auf dem Remote-System und in seiner eigenen X-Sitzung keine neue Firefox-Instanz öffnen, sondern erhält eine Warnung !
Man lernt nie aus!
Merke: Will man Firefox als Remote Administrator auf seinem eigenen lokalen X-Server testen, so muss der User auf dem entfernten Remote-Rechner alle Firefox-Fenster (Firefox-Programme) vollständig geschlossen haben – oder der Administrator muss unter einer anderen User ID eingeloggt sein.