SSH Port Forwarding

Jeder kennt das, wenn Firewalls / Router so konfiguriert sind, dass kein Zugriff von Außerhalb möglich ist.

Nach langem überlegen und recherchieren, bin ich dann auf eine sehr gute und wohl die einzigste Lösung gestoßen und diese heißt Port Forwarding.

Was es damit auf sich hat ?
Ganz einfach. Es wird ein Tunnel durch die Firewall / Router gebaut.

Vorraussetzungen:

1. Zwei SSH – Server
2. der Client SSH-Server muss vom Web aus Zugriff gewehren
z.B. ein Web-Server mit SSH Zugriff (bei Fragen bezüglich eines eigenem Web-Server: Mail2ME)

Vorgehensweiße:

Step 1: SSH vom Server zum Client

Der Zielrechner wir nennen ihn Server, baut eine Verbindung zum SSH-Server im Web auf, diesen nennen wir Client.

$ ssh -l <Benutzername_des_Client> <IP_oder_Name_des_Client> -R 5000:localhost:22

Nun läuft, nach Eingabe des Passwortes, eine Verbindung vom Server zum Client.
Step 2: SSH vom Client zum Server

Und nun bauen wir eine Verbindung vom Client zum Server auf.

Zuvor muss man sich am Client anmelden, dies kann direkt geschehen oder über einen anderen PC per Putty, falls der Client ein gemieteter Web-Server / Manage-Server ist. Nach der Anmeldung auf dem Client, kann man eine Verbindung zum Server aufbauen.

$ ssh -l <Benutzer_Name_Server> -p 5000 localhost

Nach Eingabe des Passwortes, des Servers, steht die Verbindung und man kann wie gewohnt arbeiten.
SSH Port Forwarding als “Cron”

Um diese Verbindung dauerhaft zu betreiben, lesen Sie den Beitrag: SSH Login per Key

Und erstellen Sie auf dem Server eine *.sh Datei z.B. ssh-tunnel.sh.

In diese Datei kopieren Sie diesen Inhalt und passen ihn Ihren Bedürfnissen an.

#!/bin/sh

while true; do
screen ssh -l <Benutzername_des_Client> <IP_oder_Name_des_Client>
-R 5000:localhost:22 -i <Pfad_zum_Key-File> ping google.de -c 250
sleep 1

done

Diese Datei muss unter /etc/rc.local hinzugefügt werden Syntax: sh /home/<user>/ssh-tunnel.sh

Nun rc.local neu laden oder PC neustarten. Verbindung zum Client sollte nun 24 Stunden am Tag verfügbar sein, falls eine dauerhafte Internet-Verbindung vorhanden ist.

SSH Login per Key

Jeder Putty User kennt das, dass ewige Eingeben von Passwörtern.

Um diesem Leiden endlich ein Ende zu setzten, wird ein Key (Schlüssel) erzeugt.
Der einfachste Weg wäre über PuttyGen.exe.

Hierzu wird das Programm gestartet und ausgewählt werden sollte

1. Type of Key to generate: SSH-2-RSA
2. Number of Bytes in a generated key: 2048

danach klicke auf Generate und fahre mit der Maus über das freie Feld um den Schlüssel zu erzeugen.

Nun ist der öffentliche und private Schlüssel erzeugt.

Der öffentliche Schlüssel im oberen Feld, muss nun auf den SSH-Server übertragen werden, auf dem der Login erfolgen soll. Dazu einmal einloggen wie herkömmlich per Passwort. Im User Verzeichnis ist der Ordner /.ssh zu finden. In diesem wird nun die Datei authorized_keys per touch erzeugt. Sollte die Datei bereits vorhanden sein, kann man diesen Schritt übergehen.

In die authorized_keys, wird nun der private Schlüssel von PuttyGen kopiert und die Datei wird gespeichert. Achtung: alles muss auf einer Zeile stehen !

Nun der letzte Schritt vor dem Login ohne Passwort.

Der private Schlüssel, muss nun lokal auf der Festplatte oder auf anderen Speichermedien gesichert werden. Hierzu auf Save private key klicken.

Jetzt loggen wir uns ohne Passwort auf unserem SSH – Server ein.

Dazu Putty öffnen und eine eventuell gesicherte Session öffnen und diese editieren.

Auf SSH in der linken Spalte gehen und im Untermenü Auth kann man den Speicherort des privaten Schlüssel angeben. Nun diese Session speichern und einloggen. Wenn nichts schief gegangen ist, dann sollte auf der Konsole zu sehen sein Authenticating with public key “<Name_des_Schlüssels>”.

Achtung: Den privaten Schlüssel niemals weitergeben bzw. öffentlich zugänglich machen ! Falls der Schlüssel einmal verloren gehen sollte, dann die authorized_keys leeren und neue Schlüsselpaare anfertigen.

Cronjob einrichten

Was ist ein Cronjob ???
Ein Cronjob ist ein geplanter Auftrag z.B. eine Webseite alle 10 Minuten Herunterladen, damit
diese immer aktuell im Intranet zur Verfügung steht.

Aktuelle Cronjobs kann man per
crontab –l
einsehen.

Um nun Eintrag zu editieren oder hinzuzufügen, öffnet man mit
crontab –e
den internen Editor von Cron.

Nun kann man Einträge editieren oder hinzufügen z.B.
*/10 * * * * wget <eine_bestimmte_Webseite> >> /home/ftp/
Dadurch wird eine bestimmte Webseite alle 10 Minuten Heruntergeladen.

m h dom mon dow command
* * * * * Befehl der Ausgeführt werden soll
| | | | |—- Wochentag ( 0 – 7 ) ( 0 und 7 ist Sonntag )
| | | | —— Monat ( 1 – 12 )
| | | ——— Tag ( 1-31 )
| | ———– Stunde ( 0-23 )
| ————- Minute ( 0 – 59 )

Nun Editor mit Strg + x schließen und Änderungen speichern.

Darauf Cron neu starten sudo /etc/init.d/cron restart

Änderungen sind nun aktiv, insofern die Schreibweise des Cron korrekt ist.

SSH Profile

Das ewige Eingetippe von SSH Verbindungen, hat nun eine Ende.

Um sich das Eingetippe von: ssh -l <Benutzername> <Host> etc.
zu sparen, legt man unter ./.ssh eine config Datei an.
/home/<Benutzername>/.ssh/config

In dieser Konfiguration fügt man folgendes ein:

Host=<gewünschter Name der Verbindung>
Hostname=<IP oder Hostname des SSH-Server>
User=<Benutzername auf dem Server>
IdentityFile=<Pfad zu einem privaten Schlüssel falls vorhanden>

Weitere Server mit dieser Schreibweise einfach hinzufügen.

Aufrufen in der Konsole:

ssh <Profil Name>

Hinweis: Diese Config hat eine höhere Priorität als ein Hostname.

Die Domainnamen werden nicht aufgelöst ?

Was machen, wenn http://www.Martin-Einert.de trotz korrekter Netzwerkkonfiguration nicht aufrufbar ist ? Es wird wohl an der resolv.conf liegen.

Hierzu editieren wird diese Datei und fügen einen Nameserver hinzu.

sudo nano /etc/resolv.conf

In diese tragen Sie folgendes ein.

nameserver 85.214.73.63

Dieser Server ist frei von geblockten Inhalt und gehört dem FoeBuD e.V.

Nun können Sie wieder wie gewohnt auf allen Seiten surfen.

Falls es dennoch Probleme gibt, ist eventuell ein Neustart erforderlich.

Netzwerk konfigurieren nur wie ?

Ein Step by Step Howto,
welches durch die Netzwerkkarten Konfiguration führt.

Step 1:

Wir schauen, ob alle eingebauten Netzwerkkarten erkannt sind und im System verfügbar.

lspci

Listet alle eingebauten Karten auf. Nun sieht man ob alle Karten vorhanden sind.
Falls dies nicht der Fall ist, dann ist der Treiber fehlerhaft oder die Karte/Karten sind defekt.

Step 2:

Falls alle Karten vorhanden, öffnen wir die Konfigurationsdatei.

sudo nano /etc/network/interfaces

In diese Konfiguration fügen wir jetzt die Netzwerkkarten ein, die wir benötigen.

Step 3:

Einer Netzwerkkarte, die durch einen DHCP ihre Konfiguration erhält.

auto eth0
iface eth0 inet dhcp

eth0 ist ersetzbar durch die jeweilige Netzwerkkarte. Die Netzwerkkarten, werden durch die Reihenfolge des Einbaues bestimmt. eth0 wird oft als externe Karte verwendet (zum Internet)

Step 4:

Einer Netzwerkkarte eine statische Netzadresse zuweisen.

auto eth1
iface eth1 inet static
address
netmask
gateway

address —-> IP der Karte zu anderen
netmask —-> Netzmaske zum IP-Bereich
gateway —-> IP eines Anderen PC oder Router welche als Gateway fungieren

Step 5:

Zwei oder mehr Netzwerkkarten als Brücke fungieren lassen.

Wichtig vor der Konfiguration, dass Paket

bridge-utils

installieren.

auto br0
iface br0 inet static
address
netmask
bridge_ports eth1 eth2
bridge_fd 5
bridge_stp yes

address —-> IP der Brücke zu ändern
netmask —-> Netzmaske zum IP-Bereich
bridge_ports eth1 eth2 —-> Welche Netzwerkkarten die Brücke bilden
bridge_fd 5 —-> Eine Time-Out Zeit für die Brückenerstellung
bridge_stp yes —-> Ein Protokoll um das LAN zu optimieren

Step 6:

Netzwerkkonfiguration neu einlesen.

sudo /etc/init.d/networking restart

Startet die Netzwerkkarten neu und liest die aktuelle Konfiguration ein.

Step 7:

Falls keine Fehler beim Neustart der Karten aufgetreten ist, dann überprüfen wir die Konfiguration.

ifconfig listet alle Karten auf
ifconfig /eth0 listet nur eth0 auf

eth0 ist durch die jeweilige Karte ersetzbar.

Step 8:

Wenn die Konfiguration korrekt ist, dann können sie die Verbindung gegebenenfalls mit ping testen.

ping <Web-Seite oder IP>

Stellt eine kleine Anfrage, ob der gewünschte Host erreichbar ist.

Hinweis: Ping Könnte durch eine Firewall des Zielhosts blockiert sein.

Um die Hostname Auflösung zu gewährleisten lesen Sie folgenden Artikel: Die Domainnamen werden nicht aufgelöst ?

Bild per Konsole konvertieren

Wie konvertiere ich auf die schnelle ein Bild ?

Step 1:

sudo apt-get install convert

Installiert das Paket convert, welches benötigt wird.

Step 2:

convert <Pfad_zum_Bild> -resize <HöheXBreite> <Speicherpfad>

Bsp.: convert /home/<USER>/Bilder/1.jpg -resize 500X500 /home/<USER>/Bilder/2.jpg

Konvertiert das Bild auf die gewünschte Größe und hält das Verhältnis bei. Das original Bild bleibt unverändert.

Ubuntu 10.04 Fenster Buttons nach rechts ?

Der Eine oder Andere kennt die “neue” “tolle” Veränderung.
Gemeint sind die minimieren maximieren und schließen Buttons links oben in den Fenstern.

Um diese Änderung seit 10.04 wieder auf die gewohnte weißt nach rechts zu platzieren, einfach den unten stehenden Inhalt, in die Konsole kopieren.

gconftool --type=string --set /apps/metacity/general/button_layout
"menu:minimize,maximize,close"

Hinweis: alles auf eine Zeile

Daten Synchronisieren?

Der Einer oder Andere, schleppt sicherlich einen USB-Stick mit sich herum.
Als ich daran dachte, wenn es einmal zu einem Ausfall dieses kommt, was dann?

Um dieser Gefahr gleich aus dem Weg zu gehen, kann man mit rsync die Daten einer Quelle dabei ist egal ob es sich um einen Flashspeicher oder eine Festplatte handelt, mit einem Ziel abgleichen.

Step 1:

sudo apt-get install rsync

Installiert rsync, falls es noch nicht lokal zur Verfügung steht.

Step 2:

rsync -a /<Quelle>/ /<Ziel>/

Quelle kopiert die Daten zum Ziel. Beim darauf folgenden Durchgang, wird geschaut was sich geändert hat z.B. ein Neuer Ordner angelegt oder ein Dokument verändert.

Step 3:

Dies nun als Cronjob per

crontab -e

Step 4:

Folgenden Syntax eintragen

* */4 * * * rsync -a /<Quelle>/ /<Ziel>/

Die 4 gibt den Intervall in Stunden an. Kann z.B. gegen 2 ersetzt werden. Dadurch wird alle 2 Stunden Synchronisiert.

Nun mit Strg + x Crontab schließen und mit

sudo /etc/init.d/cron restart

Cron neustarten.

Falls es zu keinem Tippfehler gekommen ist, dann sollte rsync alle x Stunden Quelle und Ziel synchronisieren.

eth0 soll eth0 sein und nicht eth1

Das leidliche Problem, Derer die etwas Wert auf Ordnung legen.

Bei zwei Netzwerkkarten, sollte es noch keine Probleme der Übersichtlichkeit geben.
Aber ab 4 wird es doch schon etwas schwerer und ab 6 nur noch unübersichtlich besonders, wenn einige Karten zu einer Brücke zusammengefasst wurden.

Früher wurde das Problem über die Datei /etc/iftab gelöst. Diese existiert aber nicht mehr und wurde ausgelagert.

Step 1:

Um die Reihenfolge der Netzwerkkarten anhand ihrer Bezeichnung ( eth0, eth1, ethn ) zu ändern, einfach

sudo nano /etc/udev/rules.d/70-persistent-net.rules

in die Konsole kopieren und diese Datei anpassen.

Step 2:

Um die Reihenfolge anzupassen, einfach den Namen am Ende der Zeile der Netzwerkkarte ändern.

z.B. NAME="eth1" in NAME="eth0"

Erkennen lassen sich die Karten anhand ihrer Mac-Adresse.

Achtung: Unbedingt darauf achten, dass die Bezeichnungen nicht doppelt vergeben werden.

Step 3:

Nun das gesamte System neu starten.

sudo shutdown -r now

Nach dem Neustart, sollte die gewünschte Ordnung vorhanden sein.