# SSH Sicherheit

## degronas

Hallo,

ich habe mal eine Frage bezüglich SSH!

Ich habe mir Gentoo auf meinen Rechner installiert. Der Rechner befindet sich hinter einem NAT - Router.

Auf dem Router habe ich Port Forwarding für 22 aktiviert.

Ich kann von außerhalb auch über SSH auf den Rechner zugreifen.

Mich interessiert lediglich ob diese Methode sicher ist oder nicht?

Weil, jeder der die IP kennt oder den dyndns Eintrag kann sich ja schonmal per SSH verbinden und bekommt den Login Screen angezeigt!

Wenn es sicher ist, ist es ok und wenn nicht wäre es gut, wenn mir jemand eine bessere Möglichkeit beschreiben könnte!

Gruß

degronas

----------

## hurra

Du könntest nicht den Standardport von SSH verwenden. Sonst fällt mir noch Portknocking ein, müsstest des halt am Router aktivieren können (unwahrscheinlich), oder die betreffenden Ports zum Rechner weiterleiten.

----------

## oscarwild

Hallo degronas,

willkommen im Gentoo-Forum!

Wenn Du aus dem Internet per SSH auf den Rechner zugreifen möchtest, bleibt leider nichts anderes übrig, als dafür auch einen Port aufzumachen. Deine Bedenken sind aber berechtigt, daher folgende Gegenmaßnahmen:

- sshd nicht auf Port 22 laufen lassen

- nicht auf Passwortauthentifizierung bauen, sondern nur über keys.

- (umstritten) Portknocking einsetzen, z.B. das Paket knock

HTH

OscarWild

<Edit>hurra war schneller  :Smile: </Edit>

----------

## STiGMaTa_ch

 *oscarwild wrote:*   

> <Edit>hurra war schneller </Edit>

 

Stimmt doch gar nicht, du warst nicht schneller   :Twisted Evil: 

----------

## schmutzfinger

Einen Dienst anbieten ist generell unsicher. Wenn der Server irgendwelche Fehler hat dann könnten Angreifer darüber Zugang auf deinen Rechner bekommen. Wenn du den Dienst trotzdem anbieten willst musst du einfach darauf vertrauen das er sicher ist. Und du solltest regelmässig Sicherheitsupdates auf dem Rechner durchführen.

Ich halte nichts davon einen Dienst auf einem anderen Port laufen zu lassen. Wenn jemand deinen Rechner angreifen will und die offenen Ports kennt, dann wird er früher oder später auch rausfinden welcher Dienst da angeboten wird. Das schränkt dich am Ende nur ein weil du dem Client jedes Mal sagen mußt das du nen anderen Port nehmen willst. Bei ssh ist es auf jeden Fall eine gute Idee root logins zu verbieten (sshd.conf). Wenn du aus der ferne root werden willst dann gibt es immernoch su und sudo. Das mit den Schlüsseln ist auch eine gute Idee, allerdings musst du dann deinen key auch immer dabeihaben und auf den Clientrechner kopieren können. Das Wichtigste ist das deine Passwörter nicht trivial sind und regelmäßig geändert werden. ssh wird gerne mit bruteforce angegriffen, da kann es helfen den Port zu ändern aber das reduziert nur die Angriffsversuche und kann diese Art Angriff nicht vermeiden. Man kann bruteforce Angriffe erschweren indem man die angegriffenen logins für eine gewisse Zeit sperrt, wenn sie sich x mal mit falschen Passwort gemeldet haben. Oder indem man Client IP's sperrt wenn sie x Verbindungen in y Minuten aufbauen wollen. Das Problem ist das man damit neue Angriffe ermöglicht. Wenn der Angreifer dein login oder deine IP kennt kann er dich aussperren.

----------

## b3cks

 *schmutzfinger wrote:*   

> Ich halte nichts davon einen Dienst auf einem anderen Port laufen zu lassen. Wenn jemand deinen Rechner angreifen will und die offenen Ports kennt, dann wird er früher oder später auch rausfinden welcher Dienst da angeboten wird. Das schränkt dich am Ende nur ein weil du dem Client jedes Mal sagen mußt das du nen anderen Port nehmen willst.

 

Das sehe ich nicht so. Die ganzen Script-Kiddies, Botnetzbetreiber und Spamer, die aus Spaß für sich, ihre/eine Warez-Group oder Malware-Parasiten die Netze und Server nach Schwachstellen scannen, suchen bewusst nach (u.a.) angreifbaren Standardports. Jeder, der solch einen Port (hier jetzt mal speziell SSH) nach außen hin geöffnet und seine Logs durchgeguckt hat, kann ein Lied davon singen. Verwendet man hingegen einen nicht Standardport, so laufen die meisten Anfragen schon mal ins leere und für einen Großteil dieser Gauner wird man uninteressant. Klar, wer umbedingt in einen Server reinkommen möchte, der macht sich weitere Mühe, z.B. einen Portscan und wird schnell herausfinden, dass SSH auf einem anderen Port läuft. Beachtet man aber noch ein paar weitere - und hier mittlerweile genannte Sicherheitstipps - kann sich schon sicher fühlen, denke ich.

----------

## gabelhonz

Hi,

also ich hab jetzt nich alle comments gelesen aber ich verbiete generell den root Login

und arbeite mit sudo. Zudem verwende ich das denyhosts script was sehr gut ist !

gruß

----------

## amne

Ohne Anspruch auf Vollständigkeit und teilweise schon oben erwähnt:

Ssh-Zugang auf jene Nutzer/Gruppe(n) beschränken, die man wirklich reinlassen will, das hilft gegen vergessene Testaccounts, siehe AllowUsers in sshd_config. Root nicht reinlassen, stattdessen su(do) verwenden.

Login nur mehr via key-based authentification erlauben (ja, man muss den Key mitnehmen wenn man sich einloggen will, aber es geht hier um sichere und nicht komfortable Konfiguration).

Sofern man sich sowieso immer nur ausschliesslich aus der Arbeit/von der Freundin/... einloggen will kann man auch entweder mittels Iptables und/oder /etc/hosts.allow andere IP(-Bereiche) sperren.

Für die Paranoiden: Nur von Rechnern aus einloggen denen man vertraut.

----------

## psyqil

Und dem Key natürlich eine zünftige Passphrase verpassen, für ein kleines bißchen Komfort darf's vielleicht net-misc/keychain sein?

----------

## amne

 *psyqil wrote:*   

> Und dem Key natürlich eine zünftige Passphrase verpassen, für ein kleines bißchen Komfort darf's vielleicht net-misc/keychain sein?

 

Richtig.  :Very Happy: 

----------

## b3cks

Zusätzlich kann man es bestimmt bewerkstelligt bekommen die IPs (zeitweise) zu sperren von denen zu oft falsche Anfragen/Loginversuche kamen, um weitere Attacken von dieser IP zu vermeiden.

----------

## sirro

 *amne wrote:*   

> kann man auch entweder mittels Iptables und/oder /etc/hosts.allow andere IP(-Bereiche) sperren.

 

Oder in sogar im sshd selber:

```
AllowUsers sirro@10.10.* kollege@*.example.com sirro@localhost
```

Damit kann man auch bestimmte Usern nur von bestimmten Hosts erlauben, dafuer muss der sshd die Verbindung natuerlich annehmen (Risko falls eine Luecke in der Anmeldung ist)

----------

## schmutzfinger

Es gab vor Kurzem eine Umfrage bei der sich rausgestellt hat das viele Leute aus diesem Forum Studenten sind. Studenten haben üblicherweise ssh Zugriff auf Loginserver der Hochschule/Uni. Diese Rechner haben feste IP's (Änderung eher unwahrscheinlich), es gibt oft mehrere und die Ausfallsicherheit ist auch relativ hoch. Wenn man Zugriff zu solchen Rechnern hat dann kann man immer den Umweg über diese nehmen und im Router zuhause nur das Subnetz der Uni bzw die IP's der Rechner  freischalten.

----------

## DarkSpir

Was ich zuhause gemacht habe:

1) Root-login verboten. Es gibt einen extra SSH-User, der allein sich anmelden kann (und nur er). Andere Userrechte hole ich mir dann per su.

2) Swatch installieren und konfigurieren (http://gentoo-wiki.com/HOWTO_Protect_SSHD_with_Swatch). Damals war das Howto in der wiki noch nicht so ausführlich, war da ein größeres Gefummel. Wie's jetzt ist, kann ich dir nicht sagen, aber da steht mehr Text als vorher.  :Wink:  Swatch ist so konfiguriert, dass es die IP-Adressen der Gegenstelle gleich beim ersten fehlgeschlagenen Login-Versuch mittels iptables in einer benutzerdefinierten chain sperrt. Diese chain wird per cronjob alle 30 Minuten geleert. Klar, wenn du dein Passwort falsch eingibst oder dich versehendlich versuchst als root anzumelden, hast du dich effektiv für eine halbe Stunde ausgesperrt, dafür sind aber die Logfiles durch scriptkiddie-Angriffe wesentlich kleiner.

Ich habe darauf verzichtet, den Port zu wechseln. Swatch reduziert Bruteforce-Attacken auf zwei Versuche pro Stunde, das in Kombination mit einem unbekannten Usernamen (da root nicht funktioniert) ist eigentlich Schutz genug, eine andere Portnummer macht im Daily-Use viel zuviel zusätzliche Arbeit. Wichtig ist, dass der sshd aktuell gehalten wird, damit keiner durch irgendwelche Bugs im Programm ins System einfällt... allerdings hier haben Gentoo-User ja generell einen Vorteil anderen Distributionen gegenüber.  :Wink: 

Weitere Ports müssen theoretisch nicht geöffnet werden, hier kann man ja schön mit ssh tunneln (wer das Port-Forwarding im SSH erfunden hat, dem gehört Freibier auf Lebenszeit spendiert!).

----------

## musv

Mal jetzt 'ne dumme Frage:

Hier kam jetzt öfters mal der Tip:

"Nur bestimmte Logins erlauben..".

RootLogin ist sowieso bei mir immer auf "no" geschaltet. Aber außer meinem eigenen Login, wer kann sich denn noch per SSH auf meinem Rechner theoretisch einloggen? Also mein User ist der einzige, der von mir angelegt wurde.

FTP, Apache, Proftpd usw. sollten sich doch per default nicht einloggen können, oder seh ich das falsch?

----------

## degronas

Schon mal vielen Dank für die vielen Antworten.

root login verbieten war die erste Einstellung die ich gemacht. Das habe ich schon von anderen Seiten lernen können!

Ich wollte das eigentlich mit den Keys machen und die per USB Stick mitnehmen.

Das Problem dabei ist nur, dass ich im Internet nichts gefunden, so dass ich das auch verstehe  :Wink: 

Ich will ja über einen Windows PC per PuTTy auf mein Gentoo zugreifen können.

Das mit den IP's zulassen kommt für mich nur schwer in Frage, da ich häufig bei Freunden bin und die ja nur DSL haben und die Telekom nach 24 Stunden ja die Verbindung trennt und neu aufbaut. So verändert sich ja leider ständig die IP-Adresse.

Die Idee mit den maximalen Versuchen ist schonmal sehr gut, die werde ich mal versuchen einzurichten.

Wäre aber nett, wenn mir jemand den Weg mit den Keys erklären könnte oder einen Link posten könnte wo das beschrieben ist!

Gruß

degronas

----------

## amne

 *musv wrote:*   

> RootLogin ist sowieso bei mir immer auf "no" geschaltet. Aber außer meinem eigenen Login, wer kann sich denn noch per SSH auf meinem Rechner theoretisch einloggen? Also mein User ist der einzige, der von mir angelegt wurde.

 

Weil schon etliche Leute irgendwann einmal schnell einen Account mit User = Password = test angelegt haben, dann darauf vergessen und schon hatten sie Besuch - siehe i got hacked. what were they up to?

----------

## firefly

 *degronas wrote:*   

> Schon mal vielen Dank für die vielen Antworten.
> 
> root login verbieten war die erste Einstellung die ich gemacht. Das habe ich schon von anderen Seiten lernen können!
> 
> Ich wollte das eigentlich mit den Keys machen und die per USB Stick mitnehmen.
> ...

 

wenn du von linux und windows systemen auf deinen rechner per ssh mit key-auth zugreifen möchtest, erstellst du einfach unter linux mit openssh ein private-public key-paar. Da das schlüsselformat mit putty nicht direkt funktioniert, muss du dann deinen private-key in PuTTYgen laden, und dann als putty private key (*.ppk) speichern.

----------

## xraver

 *degronas wrote:*   

> ...da ich häufig bei Freunden bin und die ja nur DSL haben und die Telekom nach 24 Stunden ja die Verbindung trennt und neu aufbaut. So verändert sich ja leider ständig die IP-Adresse.
> 
> ...

 

dyndns.org wär für dich brauchbar.

----------

## b3cks

 *degronas wrote:*   

> Das Problem dabei ist nur, dass ich im Internet nichts gefunden, so dass ich das auch verstehe 
> 
> Ich will ja über einen Windows PC per PuTTy auf mein Gentoo zugreifen können.

 

Dazu findest du sowohl bei Google, als auch hier im Forum mMn genügend Infos und HowTos, z.B. hier.

Bei PuTTY brauchst du dann afaik nur unter Category: Connection -> SSH -> Auth den Key angeben.

----------

## b3cks

 *amne wrote:*   

>  *musv wrote:*   RootLogin ist sowieso bei mir immer auf "no" geschaltet. Aber außer meinem eigenen Login, wer kann sich denn noch per SSH auf meinem Rechner theoretisch einloggen? Also mein User ist der einzige, der von mir angelegt wurde. 
> 
> Weil schon etliche Leute irgendwann einmal schnell einen Account mit User = Password = test angelegt haben, dann darauf vergessen und schon hatten sie Besuch - siehe i got hacked. what were they up to?

 

Deshalb am besten einfach AllowUsers MeinSSHLoginUser in die sshd_config.

----------

## slick

verschoben Deutsches Forum (German) --> Diskussionsforum

----------

## TheSmallOne

 *degronas wrote:*   

> Das mit den IP's zulassen kommt für mich nur schwer in Frage, da ich häufig bei Freunden bin und die ja nur DSL haben und die Telekom nach 24 Stunden ja die Verbindung trennt und neu aufbaut. So verändert sich ja leider ständig die IP-Adresse.

 

Das lässt sich umgehen, indem man feste IP-Adressen verwendet. Z.B. IPv6-Adressen (da scheint es auch noch keine Brute-Force Scriptkiddy-Attacken zu geben).

Z.B.:   :Arrow:  http://www.titan-dsl.de/index.php?link=produkte&sub=titandsl&cnt=titandsl7

----------

## furanku

Bei den Hinweisen zu sicheren Konfiguration fehlt noch: Die veraltete, nicht vernüftig normierte und unsichere Version 1 des ssh Protokolls ausschalten mittles

```
Protocol 2
```

in der /etc/ssh/sshd_config.

----------

## amne

Wenn ich mich nicht täusch ist proto 2 sowieso schon default inzwischen.

----------

## furanku

Das letzte mal als ich mir die installierte default sshd_config angeguckt habe war das immer noch Default: Version 2 mit Fallback auf Version 1 wenn es der Client will, also

```
Protocol 2 1
```

----------

## amne

Stimmt, schaut sehr danach aus.

----------

## mastacloak

In der aktuellen Version von openssh (4.4_p1-r6) ist per default nicht mal mehr der Fallback auf ssh-Protokoll v1 vorgesehen, wie das ebuild schon erahnen lässt:

```
dosed "/^#Protocol /s:.*:Protocol 2:" /etc/ssh/sshd_config
```

Die betreffende Zeile in einer frischen sshd_config sieht so aus

```
#Protocol 2,1
```

und nach dem Anwenden von sed so:

```
Protocol 2
```

----------

