Langsames SSH Login

Seit kurzer Zeit dauert das Login per SSH auf einen Server länger als normal. Nachdem ich den Benutzernamen eingegeben habe, dauert es ca. 10s, bis ich das Passwort eingeben kann. Das liegt daran, weil der SSH Server einen Reverse Lookup auf die IP probiert. Da dieser Reverse Lookup für meine dynamische IP nicht funktioniert, muss ich beim Einloggen immer auf das Timout warten. Dies kann man sehr einfach deaktivieren in der Datei /etc/ssh/sshd_config mit dem Parameter:

UseDNS no

Danach macht der SSH Server den Reverse Lookup nicht mehr und das Einloggen geht schneller.
Update: Ich habe festgestellt dass DNS mit Iptables nicht erlaubt war, darum war das Login langsamer. Also besser nochmals die Konfiguration prüfen bevor man etwas an der Konfiguration ändert ;-).

SSH mit fail2ban absichern

In diesem Tutorial schreibe ich darüber wie eine IP nach einer bestimmten Anzahl fehlerhaften Logins über SSH für eine bestimmte Zeit gebannt werden kann. Das Ganze ist sehr einfach.

fail2ban installieren


aptitude install fail2ban

Unter anderem sollte es in der Datei /etc/fail2ban/jail.conf folgendes geben

[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

Diese Werte müssen nur noch angepasst werden

[ssh]

enabled = true
port    = 2000
filter  = sshd
# Log aus welchem fail2ban die Loginversuche erkennen soll
logpath  = /var/log/auth.log
# Gesperrt nach x Loginversuchen
maxretry = 3
# Gesperrt für x Sekunden
bantime = 3600

Jezt sollte das Ganze schon funktionieren. Noch ein paar Kommandos zum Thema

fail2ban steuern

/etc/init.d/fail2ban {start|force-start|stop|restart|force-reload|status}

Aktueller Status von fail2ban


fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:        /var/log/auth.log
|  |- Currently failed: 1
|  `- Total failed:     1
`- action
   |- Currently banned: 1
   |  `- IP list:       192.168.20.2
   `- Total banned:     1

Aktuelle Iptable anzeigen

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-ssh  tcp  --  anywhere             anywhere            multiport dports 22           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
DROP       all  --  192.168.20.2  anywhere
RETURN     all  --  anywhere             anywher

IP wieder zulassen (unban)

iptables -D fail2ban-ssh -s 192.168.20.2 -j DROP

Vorsicht! fail2ban ist es egal, dass ich diese IP vorher aus der Iptable gelöscht habe. Nach einem Neustart von fail2ban fügt fail2ban für die IP wieder eine Blockregel in die Iptable ein. Für dieses Problem habe ich noch keine Lösung gefunden. Wenn die IP zwingend nicht geblockt werden soll, kann sie in die Ignoreliste in /etc/fail2ban/jail.conf aufgenommen werden.

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.20.2
bantime  = 600
maxretry = 3

Schlussbemerkung

Auch fail2ban wird nicht zu 100% fehlerfrei sein. Nicht selten passiert es, dass eine Firewall, welche eigentlich etwas schützen sollte zum Angriff missbraucht werden kann, wenn sie schlecht konfiguriert ist.

Hier bin ich noch auf eine interessante Methode gestossen, wie man sich von einer unsicheren Umgebung auf den Server mittels OTP (one time password) per SSH einloggen kann: http://www.heise.de/security/artikel/Einmalpasswoerter-fuer-den-Heimgebrauch-270884.html

SSH Keyfiles einrichten

Im Moment übe ich mich im härten vonSSH. Alle Tipps und Tricks wird man wohl kaum von heute auf morgen lernen. Ein System zu härten und sicher zu machen ist ein langwieriger Prozess. Man wird immer wieder Neues entdecken und umsetzen. Dies ist ein Minihowto wie man SSH mit Keyfiles einrichten kann.

Schlüssel erzeugen

puttygen.exe von http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html herunterladen.

Ist das Programm gestartet klickt man auf „Generate“ und bewegt ordentlich den Mauszeiger im grauen Feld.

Danach gibt man  bei „Key passphrase“ und „Confirm passphrase“ ein langes Kennwort ein. Wird kein Passwort eingegeben kann sich jeder mit dem Privatekey ohne irgend ein Passwort mit dem Server verbinden.

Dann klickt man auf „Save private key“ und speichert den PrivateKey. Dieses File muss gut vor unbefugten Leuten geschützt werden, besonders wenn kein Kennwort verwendet wird!

Schlüssel platzieren

Auf dem Server gibt man folgende Befehle ein:

mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod -R 700 ~/.ssh

Nun fügt man den Public Key in die Datei ~/.ssh/authorized_keys ein.

Nun sieht die Datei etwa so aus:

Silvan@sshserver:~$ cat .ssh/authorized_keys
ssh-rsa eRIN9F41TEvd [...] 5e9ydiPlpCjiK7y3==

Das ssh-rsa ist wichtig, weil der Server sonst bei einem Anmeldeversuch

Server refused our key

zurückgibt.

Authentifizierung konfigurieren

Damit die Authentifizierung mit Keyilfes funktioniert und mit Passwort nicht mehr funktioniert muss die Datei /etc/ssh/sshd_config angepasst werden

PubkeyAuthentication yes
PasswordAuthentication no

Jetzt funktioniert das Anmelden am Server mit dem Privatekey.

Weitere HowTos

Das Ganze unter Linux: http://wiki.ubuntuusers.de/SSH#Authentifizierung-ueber-Public-Keys

Das HowTo mit Bilder zu puttygen.exe und putty.exe: http://blog.murawski.ch/2010/04/ssh-authentifizierung-mit-privatekey/

Erste Schritte mit einem Debianserver

Heute habe ich einen Server mit einem Debian aufgesetzt. Installiert ist nur das Grundsystem und sonst nichts. Da der Server nur ca. 20 GB Festplattenspeicher hat habe ich noch eine 640 GB Festplatte mit ext3 formatiert, auf welcher ich dann meine Daten speichere.

Als erstes möchte ich dem Server eine statische Ipadresse geben, damit ich später auf den Server zugreiffen kann. Weiterlesen