"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

sshd und andere Ports absichern

bsox 10.02.2015 - 10:28 2055 11
Posts

bsox

Schwarze Socke
Avatar
Registered: Jun 2009
Location: Dschibuti
Posts: 1045
fail2ban habe ich schon seit Jahren laufen und ebenso ein Script, dass ganze IP Netze per iptables aussperrt. Letztens habe ich aber eine, meiner Meinung nach elegantere Methode entdeckt, um nicht zig Firewall Statements laden zu müssen. Im OSI stack ziehen die Firewall Regeln zwar früher, aber für den Heimgebrauch sollte hosts.deny|hosts.allow ausreichen.

geolockip und hosts.deny, beziehungsweise hosts.allow
Ich brauch ja wirklich nicht ssh Zugriff aus der ganzen Welt, sondern im allgemeinen nur
aus Österreich. Daher kann ich im Regelfall ruhig alle anderen Länder aussperren:

hosts.deny
Code:
sshd: ALL
hosts.allow
Code:
sshd: 192.168.xx.0/255.255.255.0, 10.0.xx.0/255.255.255.0 # LAN zu Hause und VPN range
sshd: ALL: aclexec /tools/sshfilter.sh %a # geolockip helper file
In der Theorie könnte ich auch nur das Netz von der Firma, meinen Handyprovider und vielleicht UPC, Kabsi zulassen. Aber das wäre vielleicht zu viel des Guten und schränkt mich genau dann ein wenn ich rasch und unkompliziert einen ssh Zugang brauche.

sshfilter.sh
Code:
#!/bin/bash

# UPPERCASE space-separated country codes to ACCEPT
[b]ALLOW_COUNTRIES="AT" #nur Österreich darf ssh spielen[/b]

if [ $# -ne 1 ]; then
  echo "Usage:  `basename $0` <ip>" 1>&2
  exit 0 # return true in case of config issue
fi

COUNTRY=`/usr/bin/geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`

[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"

if [ $RESPONSE = "ALLOW" ]
then
  exit 0
else
  logger "$RESPONSE sshd connection from $1 ($COUNTRY)"
  exit 1
fi
Und dann natürlich noch die geo-ip Datenbank regelmäßig per cron aktualisieren. Alles beschrieben unter: http://www.axllent.org/docs/view/ss.../#lock-down-ssh

Wie sichert ihr eure im Internet exponierten (ssh) daemons ab? Oder stören euch die allgegenwärtigen Portscans und Loginversuche nicht? Ist die oben beschriebene Methode doch nicht zielführend und sollte ich bei den Firewall Regeln bleiben? So könnte ich halt einfach zusätzliche Ports mit Hilfe der hosts.* Configs "aus der Schusslinie nehmen".

AdRy

Auferstanden
Avatar
Registered: Oct 2002
Location: Wien
Posts: 5239
ssh login per passwort deaktivieren und (nur) per private key-file einloggen. Das file muss man eben backupen sonst kommst nie wieder rein falls du es verlierst. Ist imho eine standardmethode.

-=Willi=-

The Emperor protects
Avatar
Registered: Aug 2003
Location: ~
Posts: 1624
Mach ich auch so. Bei irgendwelche unwichtigen VMs kann man sich als root aber nur mit einem Key einloggen. Bei den "wichtigeren" VMs kann man sich nur als user+key einloggen und muss dann `sudo` benutzen (sudo-File is dann auch angepasst welche Befehle ausgeführt werden dürfen) oder was auch immer. Das sind aber alles private VMs.

Mit IP-Sperren ersparst du fail2ban aber auf jeden Fall schon mal Arbeit schätz ich. Für mich ist allerdings Key-Only-Auth ausreichend. Manchmal ändere ich noch den Standardport von 22 auf irgendwas > 16.000 damit ich nicht direkt im Schussfeld von Bots stehe.

othan

Layer 8 Problem
Avatar
Registered: Nov 2001
Location: Switzerland
Posts: 4210
Port geändert und Login nur noch für 2 User erlaubt.

Damit konnte ich das Thema von ein paar hundert erfolglosen Login Versuchen am Tag auf eine Handvoll Versuche pro Woche entschärfen.

Für die Private-Key Geschichte bin ich zu "faul" :/

Luka

Administrator
...
Avatar
Registered: Nov 2006
Location: Mödling
Posts: 206
Das Script /tools/sshfilter.sh läuft als root. Ich kann mir nicht vorstellen, dass das deinen Server sicherer macht.

Btw: OpenSSH 6.7 hat die Unterstützung für tcpwrappers/libwrap (hosts.deny, hosts.allow) entfernt.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 11957
Zitat von othan
Für die Private-Key Geschichte bin ich zu "faul" :/

Wtf? Dank libpam-ssh und agent-forwarding DAS Komfort-Feature ueberhaupt von SSH.

othan

Layer 8 Problem
Avatar
Registered: Nov 2001
Location: Switzerland
Posts: 4210
Da ich mich häufiger von unterschiedlichen Rechnern aus einlogge, muss ich dazu jedes mal schauen, dass ich das Keyfile zur Hand habe.
Dazu kommt, dass ich dauernd USB Sticks verliere.

Username und Kennwort habe ich dagegen immer dabei.

Deswegen "faul" ;)

wergor

connoisseur de mimi
Avatar
Registered: Jul 2005
Location: graz
Posts: 4040
bin ich ausserhalb meines lan muss ich erst eine vpn verbindung aufbauen, port 22 lässt mein router nicht durch.

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3682
Den Key auf einem USB Stick? Da graut mir, liegen überall in der Gegend deine Keys rum und kannst erst wieder dauernd neue Keypairs erzeugen?

Also ich hab keine Keys auf mobilen Geräten, das ist mir zu haarig, nur auf stationären Maschinen nutze ich das. Unterwegs Passwort.

Port umstellen um dem ärgsten Gehämmer auszuweichen und halt die fail2ban Tarpit in meinem Fall.

othan

Layer 8 Problem
Avatar
Registered: Nov 2001
Location: Switzerland
Posts: 4210
Zitat von GrandAdmiralThrawn
Den Key auf einem USB Stick? Da graut mir, liegen überall in der Gegend deine Keys rum und kannst erst wieder dauernd neue Keypairs erzeugen?

Solangs den Truecrypt Container nicht aufbringen, sollten die Daten sicher sein.

GrandAdmiralThrawn

XP Nazi
Avatar
Registered: Aug 2000
Location: BRUCK!
Posts: 3682
Ah ok, verstehe.

So machts natürlich Sinn.

Valera

Here to stay
Registered: Dec 2005
Location: Mint
Posts: 683
außerhalb des eigenen lans nur per vpn bzw port geändert (ersteres ist mir aber lieber)
root login verboten
login nur für 2 user erlaubt
login nur per private-key-file
private-key-file nur auf verschlüsselten systemen gespeichert
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz