Sammelthread: Wie sichere ich meinen Linux Server ab?

ulukay

Banned
Thread Starter
Mitglied seit
19.07.2006
Beiträge
8.158
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:
auj677aypzip04r7m.png

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.
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
 
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
 
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
 
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.
 
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
 
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
 
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:
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:
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?
 
nein - das -p steht für das port auf dem der ssh server läuft :)

btw geupdated ;)
 
Zuletzt bearbeitet:
Die meisten werden doch sicher hinter einem Router sitzen ?

Da reicht es ja schon wenn man einfach nur dort die benötigten Ports forwarded.
 
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ß
 
bei sftp bekommst du defaultmäßig alles, da wird dir / freigegeben
mit den berechtigungen des jeweiligen users mit dem du dich eingeloggt hast
 
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?
 
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:
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:
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:
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.
 
Ich kann das Tool fail2ban empfehlen, es überwacht die auth.log und setzt automatisch dynamische IPTables Regeln, falls mehrere Loginversuche registriert werden.
 
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
 
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?
 
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
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh