RDP via SSH – Alles muss ├╝ber einen Port….

Wir haben eine soooo “tolle” Firewall auf Arbeit und der Cisco VPN Concentrator ist auch nicht gerade das gelbe vom Ei. Also einen Rechner fertig gemacht, der genau einen Port offen hat – den SSHd.

SSH Tunnel

Damit man sich das mal vorstellen kann ( Router, Switche usw fehlen).

Auf unsere paar Windows Server kommen wir via RDP auf. Damit ich nicht immer alles per Hand tippen muss, bzw in der history gucken, wie der Befehl gleich war, hier ein faule-Leute-Script ­čśë

#!/bin/bash
#
#

SSH_OPTIONS="" # additional options for ssh command
RDP_PORT="3389"
RDP_OPTIONS="-z -g 1024x768 -a 16 -k de"
LOCAL_IP="127.0.0.2"

# Usage info
if [ "$1" = "" ] ; then
        echo "Usage: $0 rdp-target ssh-target [ssh-port]"
        exit
fi

if [ "$2" = "" ] ; then
        echo "Usage: $0 rdp-target ssh-target [ssh-port]"
        exit
fi

if [ "$3" != "" ] ; then
        SSH_OPTIONS="$SSH_OPTIONS -p $3"
fi

# Set target host and SSH target
TARGET_HOST="$1"
SSH_TARGET="$2"

#
TMP=`echo $TARGET_HOST | cut -d'.' -f 4`
if [ $TMP -gt 100 ] ; then
    LOCAL_PORT="26$TMP"
else
    LOCAL_PORT="260$TMP"
fi

ssh $SSH_OPTIONS -f -L $LOCAL_IP:$LOCAL_PORT:$TARGET_HOST:$RDP_PORT $SSH_TARGET sleep 10

rdesktop $RDP_OPTIONS $LOCAL_IP:$LOCAL_PORT &

Es baut die SSH Verbindung auf, zusammen mit dem Befehl sleep 10, damit die Verbindung automatisch schlie├čt wenn rdesktop beendet wird. Desweiteren nimmt es von der IP, die letzten 8 Bit und bildet fast dynamisch den lokalen Port. Der Rest sollte selbst erkl├Ąrend sein.

Der Aufruf f├╝r das Netzwerk oben w├Ąre dann: sshrdp 192.168.26.20 root@192.168.26.254 !

Hier das Script zum runterladen: sshrdp

Pound einrichten….

Wollen wir uns nun langsam mal der Pound Konfiguration widmen.

Hier ist ein sehr einfaches Beispiel. Die lokalen Webserver h├Âren auf dem Port 81 und Pound darf auf Port 80 h├Âren, wobei 192.168.1.3 die HA-IP Adresse wieder spiegelt.

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
#RootJail "/chroot/pound"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.3
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.1
      Port  81
    End
    BackEnd
      Address 192.168.1.2
      Port  81
    End
  End
End

Installiert wird Pound einfach via aptitude pound und wieder dran denken das die pound.cfg auf beiden Servern gleich sein muss.

Bei unterschiedlich dimensionierten Servern k├Ânnen wir mir Priority im BackEnd, die Last unterschiedlich auf der Server verteilen.

Weitere gute Beispiel-Konfigurationen findet man in der Manpage von Pound (man pound) !

In der /etc/default/pound m├╝ssen wir noch den Wert f├╝r startup gleich 1 setzen, damit Pound ├╝berhaupt startet.

Hier mal meine Konfiguration

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
RootJail "/var/pound/chroot"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.1
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.2
      Port  81
      Priority 6
    End
    BackEnd
      Address 192.168.1.3
      Port  81
      Priority 3
    End
    BackEnd
      Address 192.168.1.4
      Port  81
      Priority 3
    End
  End

  Service
    URL ".*.(jpg|gif|png)"
    BackEnd
      Address 192.168.1.5
      Port  81
    End
  End
End

Homepage von pound

Die wohl teuersten Stifte der Welt – LinuxTag 2008

Wir m├╝ssen alle bekloppt sein ! Setzen uns in einen kleinen Raum, wo max. 24 Leute rein passen, bezahlen jeder 70 Euro (!) und bekommen einen Bleistift daf├╝r !

Wer nun dabei war, oder davon schonmal geh├Ârt hat, der wei├č worum es geht: LPI Zertifizierung !

Ja sicher, wenn man es geschafft, dann hat man wahlweise LPIC1, LPIC2 oder so gar LPIC3 in der Tasche oder einen Teil davon. Aber f├╝r die ersten 4-5 Wochen hat man nur einen 70 Euro teuren Bleistift ­čÖé

Als ich nachfragt wie lange es den jetzt dauert, meinte man zu mir 4-6 Wochen ! “Daf├╝r haben Sie ja auch nur die h├Ąlfte bezahlt !” – ├ähm, ja ? Ich hab die H├Ąlfte bezahlt damit ich 4-6 Wochen auf mein Ergebnis warten muss, weil es in einem Paket nach Kanada zur Auswertung geht und dann wieder zur├╝ck (Hatte ich gesagt das es schriftlich war ?)

Warum ich nun 70 Euro “nur” bezahle ist mir also nicht ganz klar – Wir brauchen min. ein Bleistift, 2x A4 Bl├Ątter (1x L├Âsungsbogen + 1x gelbes Papier), die A4 Briefumschl├Ąge und dann noch 2 Monsterpackete f├╝r die Pr├╝fungen inkl. Postgeb├╝hren.

Was schont also den Baum bestand mehr ? Pr├╝fung am PC oder alles in schriftlicher Form ? Mir egal und ich hoffe einfach das ich meine 101+102 geschafft habe.

Aber nun mal zum LinuxTag 2008…. Continue reading Die wohl teuersten Stifte der Welt – LinuxTag 2008

Nagios3 @ Debian Etch

Nagios 3 (inkl. pnp) ist unter Debian Etch mit Hilfe der Pakete von svelt (http://people.teamix.net/~svelt/debian/etch/) sehr einfach geworden.

Nur wenn man versucht den Link “Disable notifications for this service” f├╝r einen Service zu aktivieren, bekommt man eine Fehlermeldung ala :

Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!

L├Âsung:

/etc/init.d/nagios3 stop
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
/etc/init.d/nagios3 start

Jetzt sollte es gehen.

Debian Lenny und SixXS – IPv6 Tunnel

Hier eine kleine Hilfe, f├╝r alle die Versuchen unter Debian einen IPv6 Tunnel zum laufen zubekommen.

Vorraussetzung ist, dass der Tunnel-Typ 6in4-static ist (Hier ist eure statische IP die Authentifizierung gegen├╝ber SixXS). Sollte er Tunnel-Typ AYIYA sein, m├╝sst ihr das Tool von SixXS benutzen, da ihr euch hier mit Username und Passwort authentifizieren m├╝sst.

Auszug aus der /etc/network/interface:

auto sixxs
iface sixxs inet6 v4tunnel
  address Local-IPv6-IP
  netmask Prefix (zB 64)
  endpoint POP-IPv4-IP
  local Local-IPv4-IP
  ttl 64
  up ip link set mtu 1280 dev sixxs
  up ip route add default via POP-IPv6-IP dev sixxs
  up ip -6 route flush dev eth0
  down ip -6 route flush dev sixxs

Der Befehl up ip -6 route flush dev eth0 hei├čt, dass f├╝r die Netzwerkschnittstelle eth0 die IPv6-Routen gel├Âscht werden.

Ich hatte das Problem, dass kein IPv6 Paket sein Ziel erreichte. Erst nachdem ich mir die Ausgabe von ip -6 route show anschaute, wurde klar warum. Die Defaultroute f├╝r IPv6 war ├╝ber eth0. Also fix gel├Âscht und siehe da, alle Pakete erreichen nun auch ihr Ziel.

– IPv6 Ready –

Verschl├╝sselte Partition mit Debian und luks

Eine verschl├╝sselte Partition einrichten

Vorraussetzung: Eine leere Partition

Die leere Partition formatieren wird als erstes.

cryptsetup luksFormat ÔÇôy /dev/hde1

Der Befehl fordert uns auf eine Passphrase einzugeben. Am besten verwenden wir hier nun Zahlen, Sonderzeichen, Klein- und Gro├čbuchstaben und was wir noch so auf der Tastatur finden.

Damit wir nun auch ein Dateisystem erzeugen k├Ânnen, m├╝ssen wir das verschl├╝sselte Device ├Âffnen. Hier wird auch gleich die neue Passphrase verlangt.

cryptsetup luksOpen /dev/hde1 hde1_crypt

Ich habe es mit ext3 formatiert.

mkfs.ext3 /dev/mapper/hde1_crypt

Die verschl├╝sselte Partition soll beim Starten gemountet werden. Wir m├╝ssen bedenken, dass die Passphrase beim Starten verlangt wird.

echo "hde1_crypt /dev/hde1 none luks" > /etc/crypttab

Erst jetzt kommen wir an unsere Daten, und k├Ânnen die Partion mounten.

echo "/dev/mapper/hde1_crypt /ein/datei/pfad rw 0 0" >> /etc/fstab

Wenn alles klappt, dann sollte beim n├Ąchsten Start nach einer Passphrase gefragt werden.

Continue reading Verschl├╝sselte Partition mit Debian und luks

HA mit Debian Lenny & drbd8, ocfs2, heartbeat, pound (http) und mysql

Vorrausetzung

  • 2 Server mit einer Lenny Grundinstallation ( Hier als Servernamen cnode1 und cnode2 )
  • Optional: 2 Netzwerkkarten je Server (f├╝r drbd)
  • eine leere Partion je Server
  • Vorausgesetzt es ist nicht anderst angegeben, alles auf beiden Nodes ausf├╝hren !

Konfiguration von drbd

Auf beiden Servern als root anmelden

aptitude install drbd8-utils drbd8-modules-2.6.24-1-686
echo "drbd" >> /etc/modules

Nun sichern wir die alte drbd-Konfigurationsdatei

mv /etc/drbd.conf /etc/drbd.conf.old

Jetzt erstellen wir eine neue Datei mit vim /etc/drbd.conf

global { usage-count yes; }
common { syncer { rate 10M; } }
resource ha {
protocol C;
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
net {
cram-hmac-alg sha1;
allow-two-primaries; # Wichtig f├╝r Primary/Primary Setup
}
on cnode1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.1:7788;
meta-disk internal;
}
on cnode2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.2:7788;
meta-disk internal;
}
}

Speichern mit :wq

Wenn 2 Netzwerkkarten vorhanden sind, drbd lieber auf eine eigene Karte konfigurieren. Damit drbd mit der Partion etwas anfangen kann, m├╝ssen wir diese initialisieren.

drbdadm create-md ha

Nun k├Ânnen wir die beiden Partionen synchronisieren. (Den folgenden Befehl nur auf einer Node starten !)

drbdsetup /edv/drbd0 primary --overwrite-data-of-peer

Je nach dem wie gro├č die Partionen sind kann es nun etwas Zeit vergehen. Der Fortschritt kann ├╝berpr├╝ft werden mit

/etc/init.d/drbd status

In der Ausgabe sollte sich die unten stehende Zeile finden lassen, wenn beide drbd-Devices synchron sind.

0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---

Nun k├Ânnen wir die zweite Node auch zum ”Primary” machen

drbdsetup primary r0

Update (Danke keks)

Da es sehr st├Ârend ist, wenn wir die Server neustarten, immer per Hand die 2 Nodes als Primary zu definieren, f├╝gen wir noch zus├Ątzlich in den startup-Block

become-primary-on both;

ein. Die Zeile sollte dann wie folgt aussehen:

startup { wfc-timeout 0; degr-wfc-timeout: 120; become-primary-on both; }

Das bewirkt, dass beide w├Ąhrend des Bootvorgangs als Master definiert werden. Nun die Konfiguration auf beiden Nodes aktualisieren, dann

drbdadm adjust ha

und

drbdadm primary ha

(Befehle auf beiden Nodes ausf├╝hren!)

Wichtig: Um diese Funktion zunutzen, m├╝sst ihr DRBD aus den Quellen bauen, da die Funktion (laut drbd-Homepage) erst ab 8.2.0 implementiert ist.

Konfiguration von ocfs2

Jetzt installieren das ocfs2 Filesystem

aptitude install ocfs2-tools ocfs2console

Noch die Konfigurationsdatei erstellen

#/etc/ocfs2/cluster.conf

node:
ip_port = 7777
ip_address = 192.168.1.1
number = 0
name = cnode1
cluster = ocfs2

node:
ip_port = 7777
ip_address = 192.168.1.2
number = 1
name = cnode2
cluster = ocfs2

cluster:
node_count = 2
name = ocfs2

Nun sind wir fast fertig. Jetzt einmal

/etc/init.d/ocfs2 restart

und dann k├Ânnen wir das Filesystem erstellen mit

mkfs.ocfs2 /dev/drbd0

Damit wir mit dem Filesystem arbeiten k├Ânnen, m├╝ssen wir es initialisieren.

/etc/init.d/o2cb online ocfs2

bewirkt das der Cluster mit dem Namen ocfs2 geladen wird.

/etc/init.d/o2cd load
/etc/init.d/o2cd online ocfs2

Jetzt k├Ânnen wir es mit

mount /dev/drbd0 /srv

nutzen

Konfiguration vom HTTP Loadbalancer – pound

Hier ­čÖé

Konfiguration von heartbeat

Folgt !

Serielle Konsole f├╝r Server (Grub)

Einf├╝hrung

Wenn wir zwei Server irgendwo (z.B. Rechenzentrum) stehen haben und es die M├Âglichkeit besteht, dass man beide via Nullmodem-Kabel verbinden, kann man sie auch ohne SSH-Zugang warten (z.B. nach einem fehlgeschlagenen Kernelupdate). Leider nur immer in eine Richtung. F├╝r beide Richtungen br├Ąuchte man 2 Nullmodem-Kabel.

Konfiguration

Damit wir die M├Âglichkeit haben den Kernel auszuw├Ąhlen, sollten wir Grub sagen, dass es seine Ausgabe an den seriellen Port weiterleitet.

Dazu f├╝gen wir folgende Zeien in die /boot/grub/menu.lst hinzu.

serial --unit=0 --speed=57600
terminal --timeout=2 serial console

Erkl├Ąrung:

--unit=0

hei├čt einfach das der Com1 bzw. ttyS0 genutzt wird. Der Parameter

--speed=57600

steht f├╝r die ├ťbertragungsgeschwindingkeit. Standard ist 9600.

--timeout=2 serial console

bedeutet das man 2 Sekunden Zeit hat und das die prim├Ąre Ausgabe auf dem seriellen Port und die sekund├Ąre auf der Console ist.

Jetzt wird die Ausgabe vom Grub an den seriellen Port umgeleitet. Damit wir aber auch einen Login an der seriellen Konsole bekommen, m├╝ssen wir die /etc/inittab noch bearbeiten.

Wir suchen diesen Teil

# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

und entfernen das # vor der Zeile mit T0 und ├Ąndern die Zahl 9600 wieder auf 57600.

Die Zeile

T0:23:respawn:/sbin/getty -L ttyS0 57600 vt100

hei├čt dann nichts anderes als das nach dem Starten ein Login auf ttyS0 in/mit der Geschwindigkeit von 57600 Kbit/s auf uns wartet.

Damit der Kernel seine Meldungen auf der seriellen Konsole aus gibt, geben wir dem Kernel noch zwei Parameter mit:

console=tty0 console=ttyS0,57600n8

Das sollte dann so in etwa aussehen:

title           Debian GNU/Linux, kernel 2.6.18-6-686 (single-user mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18-6-686 root=/dev/hda1 ro vga=791 console=tty0 console=ttyS0,57600n8
initrd          /boot/initrd.img-2.6.18-6-686
savedefault

Das hei├čt, dass die Kernelmeldung auf der console und der seriellen Konsole ausgegeben werden. Wenn alles fertig ist, neustarten. Mann kann jetzt zB via minicom auf dem anderen Server die Ausgabe von dem gerade eingerichteten Server sehen.