Aktuelles

Sammelthread: Wie sichere ich meinen Linux Server ab?

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
Wie sichere ich meinen Linux Server ab?

Dinge die man beachten sollte:
So wenig Angriffsfläche wie möglich bieten – sprich so wenig Services von extern erreichbar machen wie nötig. Dinge wie Webmin, PHPmyadmin usw... sind zwar nett aber ein riesiges Sicherheitsrisiko wenn mans vom Internet aus erreichbar hat. Wenn man wirklich Ports offen lassen will damit man Dinge administrieren kann dann kann man diese auf 127.0.0.1 binden und deren Port per SSH auf den Rechner zuhause tunneln. SSH verschlüsselt alles, somit kann man z.b. Webmin nutzen ohne dass dieses vom Internet aus erreichbar ist.

Wenn das Service von extern erreichbar ist ist es angreifbar, egal wie abgesichert es ist. Deswegen sollte man die von außen erreichbaren Services immer aktuell halten. Um von eventuellen Sicherheitslücken schnell zu erfahren sollte man sich in die Security Mailing Liste seiner Distribution und in die Security Mailing Listen aller von extern erreichbaren Services eintragen. Ein RSS Bookmark auf Heise Security ist auch zu empfehlen.

Wie kann ich sehen welche Services offen sind?
Als root folgendes Commando ausführen, dann sieht man welches Programm welches Port belegt und auf welchen IPs:
netstat -anp | grep "LISTEN "
example output:
Code:
tcp        0      0 127.0.0.1:2208          0.0.0.0:*               LISTEN      7412/hpiod
tcp        0      0 0.0.0.0:3493            0.0.0.0:*               LISTEN      8133/upsd
Ersteres hört auf Port 2208 und ist nur auf der IP Adresse 127.0.0.1 erreichbar, sprich nicht vom Internet aus. So sollten alle Services konfiguriert werden die man zwar benötigt, aber nicht vom Internet aus erreichbar sein müssen. (z.b. mysql bei einem Apache/PHP Server der auf mysql Datenbanken zurückgreift)
Zweiteres hört auf Port 3493 und auf ALLEN IP Adressen, so sollten nur Services aussehen die vom Internet aus erreichbar sein müssen (z.b. SSH oder Apache)
Am Ende der Zeile steht jeweils die Process ID und der Name des Prozesses der diesen Port belegt.

Wie kann ich ein Port über SSH tunneln?
Angenommen ein Service rennt nun auf der IP 127.0.0.1 auf dem Linux Server und ich will auf dieses zugreifen (nehmen wir als Beispiel Webmin her, also Port 10000). Wenn man sich von einem Linux Client auf den Server einloggt ist es relativ einfach:
ssh -p 43242 -l Hansi mein.server.de -L 11000:127.0.0.1:10000

-L bedeutet local port forwarding. Sprich mein lokales Port 11000 wird durch SSH forgewardet, und zwar auf die Ziel IP/Port 127.0.0.1:10000
Somit kann man nun auf dem Linux Client einen Browser öffnen und auf 127.0.0.1:11000 verbinden.
-l hier kann man den Usernamen angeben mit dem man sich anmelden will
-p hier gibt man das Port an auf dem der SSH Server am Linux Server läuft

Hier dasselbe mit Putty unter Windows:

1. ins den Menüpunkt Tunnel wechseln.
2. das Lokale Port angeben
3. die IP + Port des Services angeben welches man tunneln will
4. nicht vergessen auf ADD drücken!

Wenn der Linux Server in einem Lan steht kann man z.b. auch auf die PCs im Lan des Linux Servers forwarden.
ssh -p 43242 -l Hansi mein.server.de -L 3389:192.168.1.20:3389

So würde es aussehen wenn ich mich durch einen SSH Tunnel auf einen Windows Server mit RDP anmelden wollte der im Lan des Linux Servers steht. Nützlich wenn man zuhause z.b. einen WRT54GL stehen hat und gerne RDP nutzen möchte, dieses aber nicht dem ganzen Internet zugänglich machen will.

Keine FTP Server nutzen wenn SSH eh schon offen ist.
Wenn SSH schon läuft (und das ist auf 99,9% aller root/vroot Server so) gibt es keinen Grund einen FTP Server zu nutzen. Standardmäßig bietet SSH noch SFTP/SCP an. Man braucht z.b. unter Windows nur einen SFTP/SCP Client (WINSCP) und schon kann man Files up und downloaden. Allerdings verschlüsselt und nicht wie bei FTP unverschlüsselt. Desweiteren bietet man so keine zusätzliche Angriffsfläche, SSH ist sowieso schon offen also kann mans auch in vollem Umfang nutzen anstatt ein zusätzliches Service anzubieten.

Wie sichere ich SSH ab?
Man sollte SSH nicht auf dem Standardport (Port 22 TCP) belassen!
Wenn mans auf Port 22 laufen lässt wird man von vielen Scannern/Scripten durchgescannt. Die scannen einfach riesige IP Bereiche auf ein offenes Port 22, wenns offen ist versuchen sie Standardlogins wie test/test, root/root, root/linux usw... und sie versuchen auch Exploits für Sicherheitslücken.

Die Datei /etc/ssh/sshd_config im Editor öffnen
Dort findet man die Zeile:
Port 22
Diesen Port dann in den gewünschten Port abändern (z.B. Port 50000). Bitte wählt eine Portnummer zwischen 49152 und 65535.
Danach den Editor verlassen, vorher natürlich speichern.
Jetzt noch den SSH Deamon neustarten:
/etc/ini.d/sshd restart

Hier ein Szenario wenn ich die 2 Punkte nicht beachte:
Eine Sicherheitslücke wird gefunden, ich bekomme davon nichts mit. Patch gibt es noch keinen, oder er wird nicht automatisch installiert. Die Scanner/Scripte haben schon einen Exploit dafür, scannen zufällig deinen Server -> BUMM

Wenn ich nur einen der oberen Punkte beachte falle ich aus dem Schema schon raus.

Nur SSH Protocol 2 erlauben.
Protocol 1 braucht niemand und es ist etwas unsicherer.
In der sshd_config wäre das folgende Zeile:
Protocol 2


Keinen root Login erlauben.
Wenn man der alleinige Administrator des Systems ist ist es ganz einfach. Man erstellt sich einen normalen User (Hansi) der in der Linux Gruppe wheel ist. Nun vergibt man dem User Hansi ein kryptisches Passwort (~9 Zeichen mit nem Sonderzeichen) und erlaubt in der sshd_config ausschließlich diesem User einen Login, das geht mit folgender Zeile:
AllowUsers hansi

Dies verschafft uns wiedereinmal eine geringere Angriffsfläche. Der Angreifer müsste jetzt schon den Usernamen kennen bevor er eine Bruteforceattacke versucht. Den User root gibt’s ja auf jedem Linux System und ist deswegen meist der erste mit dem sie es versuchen. (bei *buntu Systemen wurde der root User ja schon etwas entschärft, da ist sowieso kein direkter root Login möglich)
Selbst wenn der Angreifer nun den User Hansi knackt, wäre er nicht root. Da müsste er nun ein zweites Passwort knacken ...

Optional: Die Verbindungsversuche limitieren.
Mit iptables kann man schön festlegen wieviel Verbindungen pro Minute auf ein Port aufgemacht werden dürfen. Das ist aber eher optional und für Services gedacht die auf dem Standardport laufen und die von Scannern/Scripten abgegrast werden.
NetworkerZ empfiehlt: Ich kann das Tool fail2ban empfehlen, es überwacht die auth.log und setzt automatisch dynamische IPTables Regeln, falls mehrere Loginversuche registriert werden.

SFTP für mehrere Nutzer?
Ist relativ einfach möglich. Linux User anlegen und per SSH einloggen erlauben. Aber einfach heißt leider auch unsicher. Die können sich eben nicht nur per SFTP einloggen sondern auch per SSH und bekommen dann eine normale Linux Shell. Dies lässt sich etwas weniger einfach mit RSSH umgehen. Das ist im Prinzip eine Login Shell (wie bash) die für User verwendet werden kann die nur SFTP/SCP Funktionalität benötigen und sich explizit nicht per normalen SSH verbinden sollen.
Um das ganze noch sicherer zu machen sollte man ein chroot verwenden. So werden die SFTP user dann in ein Unterverzeichnis eingesperrt und können nicht auf die Dateien des restlichen Systems zugreifen. Hier gibt’s dazu ein schönes Howto: http://gentoo-wiki.com/HOWTO_SFTP_Server_(chrooted,_without_shell)

Das sind mal die ersten und wichtigsten Punkte. Wird erweitert, wenn jemand Beispiele für spezielle Software hat, immer her damit :)
Kritik immer erwünscht, bin alles andere als gut in Themen strukturiert wiedergeben :)
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.

NetworkerZ

Internetsperrer ;-)
Mitglied seit
14.02.2005
Beiträge
3.343
Ort
Stuttgart
Ergänzend:

How-to: SSHD Port ändern

Die Datei /etc/ssh/sshd_config im Editor öffnen

Dort findet man die Zeile:
Port 22

Diesen Port dann in den gewünschten Port abändern (z.B. Port 50000). Bitte wählt eine Portnummer zwischen 49152 und 65535.

Danach den Editor verlassen, vorher natürlich speichern.

Jetzt noch den SSH Deamon neustarten:

/etc/ini.d/sshd restart

Das wars :)

-----------------------

Und zu dem optionalen Teil bez. IPTables:

Ich kann das Tool fail2ban empfehlen, es überwacht die auth.log und setzt automatisch dynamische IPTables Regeln, falls mehrere Loginversuche registriert werden.

greetz

NetworkerZ
 

foxxx

Moderator
Hardwareluxx Team
Mitglied seit
15.02.2006
Beiträge
12.214
Ort
/dev/null
sehr nice, wenn ich meine Game-Server fertig hab, werde ich mich damit auch mal beschäftigen :bigok:

ps: @ LAW-Mastermind: bräuchte mal eben deine Hilfe -> ICQ

mfg
foxxx
 

NetworkerZ

Internetsperrer ;-)
Mitglied seit
14.02.2005
Beiträge
3.343
Ort
Stuttgart
Btw.:

netstat -an

listet die offenen Ports des Server auf. Hier sollten möglichst wenige auf "Listen" stehn. Wer einen Webserver sicher betreiben will, hat 443 für den Webtraffic offen (Ihr braucht dazu ein SSL Zertifikat, dass man aber auch selbst und kostenlos erstellen kann...) und eben ein Port für SSH, fertig.

Zudem schadet es nicht, auf die Aktualität des Systems zu achten ;-)

Greetz

NetworkerZ
 

Slowman

Enthusiast
Mitglied seit
31.05.2005
Beiträge
2.477
Ort
Schöneiche bei Berlin
Mit der Portverlegung von ssh bringt aber nichts weiter, da da nur Anfänger die Lust verlieren werden. Ein Portscan und ich habe den Port ;)
Man kann seinen Firewall auch so konfigurieren, das per SSH nur bestimmte IP`s Zugang haben, der Rest wird abgewiesen.
 

NetworkerZ

Internetsperrer ;-)
Mitglied seit
14.02.2005
Beiträge
3.343
Ort
Stuttgart
Is klar, aber wer scannt im Internet den kompletten Portbereich ab? Wenn du einen Server im Internet hast, der auf Port 22 lauscht, dann schau mal in deine auth.log --> dann merk dir gut, wie's da drin ausschaut, "verlege" den Port und schau ne Woche später nochma rein. Dann wirst du sehn, dass sich das durchaus lohnt ;-)

Und ein 5 Schritte How-To sollte auch ein Einsteiger hinbekommen!

Greetz

NetworkerZ
 

NetworkerZ

Internetsperrer ;-)
Mitglied seit
14.02.2005
Beiträge
3.343
Ort
Stuttgart
Man kann seinen Firewall auch so konfigurieren, das per SSH nur bestimmte IP`s Zugang haben, der Rest wird abgewiesen.
Stimmt schon, nur dass man selten eine fixe IP hat. Leider werden 99% aller Homesurfer eine dynamische IP zugeteilt, im Internet ist so eine Firewallregel also eher nicht zu realisieren.

Eine andere Alternative ist das Arbeiten mit Keys: Der Server hat einen und der Client, der zugreifen darf auch. Beim SSH Login kommt also keine PW Abfrage mehr sondern es erfolgt ein "Keycheck" und man kommt automatisch auf den Server. SOmit gibt es auch keinen Ansatz mehr für Bruteforceattacken.

Ein How-to hierfür wäre HIER zu finden.

Greetz

NetworkerZ
 

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
Stimmt schon, nur dass man selten eine fixe IP hat. Leider werden 99% aller Homesurfer eine dynamische IP zugeteilt, im Internet ist so eine Firewallregel also eher nicht zu realisieren.

Eine andere Alternative ist das Arbeiten mit Keys: Der Server hat einen und der Client, der zugreifen darf auch. Beim SSH Login kommt also keine PW Abfrage mehr sondern es erfolgt ein "Keycheck" und man kommt automatisch auf den Server. SOmit gibt es auch keinen Ansatz mehr für Bruteforceattacken.

Ein How-to hierfür wäre HIER zu finden.

Greetz

NetworkerZ
ja nur ist der client pc mal kompromittiert kannst den server auch gleich mit abhaken
Hinzugefügter Post:
Mit der Portverlegung von ssh bringt aber nichts weiter, da da nur Anfänger die Lust verlieren werden. Ein Portscan und ich habe den Port ;)
Man kann seinen Firewall auch so konfigurieren, das per SSH nur bestimmte IP`s Zugang haben, der Rest wird abgewiesen.
darum gehts ja auch nicht, sondern um die automatisierten scanner. die scannen immer nur nach port 22. (eben bei exploits wichtig - stichwort WURM. der sasser war nur so erfolgreich weil er einfach riesige ip ranges nach offenen 445er ports durchsuchen musste und auch viel fand. sollte es mal einen wurm für anfällige ssh versionen geben wirst ihn so nicht bekommen)
 
Zuletzt bearbeitet:

NetworkerZ

Internetsperrer ;-)
Mitglied seit
14.02.2005
Beiträge
3.343
Ort
Stuttgart
Ich habe nicht gesagt, dass es die bessere Variante sei, nur, dass diese Methode GARANTIERT vor Bruteforceattacken schützt ;) Wer also genervt wird, sollte sich das mal anschauen. Die File kann auch auf einem USB Stick liegen, der nur dann eingesteckt wird, wenn man ihn braucht. Oder eine kleine, verschlüsselte Partition? Oder oder oder ...

Man kann natürlich auch einfach ein 20 stelliges, sicheres PW wählen ;) Die Loginversuche und damit die wachsende auth.log (die kann sehr groß werden ...) und ebenso der Traffic (!!!) bleiben aber trotzdem erhalten ...

Greetz

NetworkerZ
 
Zuletzt bearbeitet:

Rockhound

Enthusiast
Mitglied seit
23.08.2005
Beiträge
1.097
Hallo zusammen,

guter Thread, habe auch einen Xubuntu Server seit langem laufen und genau sowas gesucht.

Jetzt habe ich mal eine Frage: Das Forwarding müsste doch auch unter Windows z.B. mit putty gehen oder? FAlls ja, kannst du da auch erklären wie es geht?

ssh -p 43242 -l Hansi
-p steht das für das Passwort und -l für den Benutzernamen oder?
 

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
nein - das -p steht für das port auf dem der ssh server läuft :)

btw geupdated ;)
 
Zuletzt bearbeitet:

pixelfreak

Semiprofi
Mitglied seit
08.04.2007
Beiträge
1.192
Die meisten werden doch sicher hinter einem Router sitzen ?

Da reicht es ja schon wenn man einfach nur dort die benötigten Ports forwarded.
 

Rockhound

Enthusiast
Mitglied seit
23.08.2005
Beiträge
1.097
Hi,

hab nochmal eine Frage:

Wie gebe ich Verzeichnisse auf meinem Server frei sodass ich über SFTP darauf zugreifen kann? Ich habe bei mir bis jetzt nur die Samba-Freigaben für das Windows Netzwerk...

Danke und Gruß
 

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
bei sftp bekommst du defaultmäßig alles, da wird dir / freigegeben
mit den berechtigungen des jeweiligen users mit dem du dich eingeloggt hast
 

Rockhound

Enthusiast
Mitglied seit
23.08.2005
Beiträge
1.097
bei sftp bekommst du defaultmäßig alles, da wird dir / freigegeben
mit den berechtigungen des jeweiligen users mit dem du dich eingeloggt hast
Achso, wusste ich nicht! Muss ich das dann irgendwo am Server noch extra freigeben das ich mit SFTP darauf zugreifen kann?
 

Rockhound

Enthusiast
Mitglied seit
23.08.2005
Beiträge
1.097
super es geht jetzt!

Jetzt noch eine letzte Frage, wenn ich auf dem Server bin werden umlaute nicht dargestellt! bei Putty konnte ich einstellen das er UTF-8 nimmt und dann hat er alles richtig angezeigt, jedoch finde ich bei WinSCP eine solche funktion nicht? Oder bin ich einfach nur blind?

Verschlüsselt ist er ja jetzt von alleine oder muss da extra noch was eingestellt werden, weil man da noch was mit Tunneln einstellen kann?

Auf jedenfall schon einmal ein Dankeschön für die Geduld!
 
Zuletzt bearbeitet:

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
er verschlüsselt alles automatisch

umlaute zeigt er bei mir mit den default settings schon richtig an, wobei ich das jetzt erst schnell testen musste da ich nie umlaute verwende :)

in winscp gibts noch ne option die heißt "Server does not use UTF8"
vielleicht die mal auf OFF setzn?

http://www.sftpdrive.com/
das wär jetzt auch mal nen versuch wert
 
Zuletzt bearbeitet:

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.426
https://help.ubuntu.com/community/SinglePacketAuthorization

wow jetzt wirds mal extrem geil :)

quintessenz?
nach außen hin is kein einziges port offen - garnix
da hört ein daemon auf einem udp port (sendet aber NIE ein paket zurück -> ergo unerkennbar) und wenn ein paket kommt welches richtig aufgebaut ist wird für den client ein port geöffnet
- sowas wie portknocking nur 1000000x besser :)
 
Zuletzt bearbeitet:

gimliy

Neuling
Mitglied seit
07.12.2006
Beiträge
103
klitzekleiner hinweis an den netstat-teil (Wie kann ich sehen welche Services offen sind?):

das grep kann man sich sparen, wenn man -l (listen) als option übergibt. (nur) dann sollte man das -a weglassen und gegen -ut (udp, tcp) tauschen. sodass im endeffekt "netstat -tulpn" eleganter und genauso vollständig sein müsste.
 

likhary

Neuling
Mitglied seit
22.12.2008
Beiträge
1
Ich kann das Tool fail2ban empfehlen, es überwacht die auth.log und setzt automatisch dynamische IPTables Regeln, falls mehrere Loginversuche registriert werden.
 

aproject

Neuling
Mitglied seit
26.05.2008
Beiträge
242
klitzekleiner hinweis an den netstat-teil (Wie kann ich sehen welche Services offen sind?):

das grep kann man sich sparen, wenn man -l (listen) als option übergibt. (nur) dann sollte man das -a weglassen und gegen -ut (udp, tcp) tauschen. sodass im endeffekt "netstat -tulpn" eleganter und genauso vollständig sein müsste.
mal "netstat -tulpen" probiert. Das ist wie ich finde am übersichtlichsten
 

kaBOOOM

Neuling
Mitglied seit
26.04.2005
Beiträge
923
Ort
SinCity
Hallo hab mal ne Frage,

Hab bei mir einen Server mit Ubuntu-Server aufgebaut. Dieser dient vorwiegend als File-Server. Als Dienste laufen immoment SMB und OpenSSH. Bis vor kurzem konnte ich problemlos per "ssh user@server" von meinem linux-Laptop oder mit putty von Windows auf den Server zugreifen. Doch neuerdings reagiert der Server nicht mehr richtig.
Wenn ich mich per username und falschem Passwort einloggen will, kommt logischerweise "Access denied". Wenn ich mich jetzt aber mit den richtigen Namen und Passwort einlogge, passiert einfach nix mehr. Nur die prompt blinkt. Sonst kommt immer ne Textseite die den Status des Servers anzeigt. Geb ich jetzt, währned die prompt blinkt, irgendwelche Zahlen oder Buchstaben ein und bestätige mit enter geht die prompt nur ne zeile weiter nach unten und es passiert nix. Geb ich aber jetzt anschließend irgendeinen richtigen Befehl ein (z.b. ls -l) dann kommt nur "Connection to xxx.xxx.xxx.xxx closed".
Das komische ist aber, dass mein gechrooteter SFTP-Server normal funktioniert, deswegen kanns doch eigentlich nicht an Openssh liegen, oder?
 

NiclasM

Semiprofi
Mitglied seit
06.02.2007
Beiträge
4.340
Ort
Dortmund
Hey

reicht das HowTo auf Seite 1 um einen Server relativ gut abzusicheren ?

Aufgabe :
Web Interface per Https
&
SSH zugriff
+
Samba Zugriff im Localen LAN
+
VPN
 
Oben Unten