SSH Absicherung in 20 Minuten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklÀren Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SSH Absicherung in 20 Minuten so gehts
    allo miteinander,

    heute möchte ich mich etwas nĂ€her mit dem Thema SSH und dessen Absicherung beschĂ€ftigen. Viele Leute nehmen das Ganze leider viel zu wenig ernst, was dazu fĂŒhren kann, dass Server geknackt und zweckentfremdet werden können. Dabei ist es so einfach, den Server richtig abzusichern und dafĂŒr Sorge zu tragen, dass das knacken des Server nicht mehr – bzw. nur noch extrem schwer – möglich ist.

    Was benötigen wir?

    1. Einen auf Linux basierten Server
    2. Ein bisschen FeingefĂŒhl im Umgang mit der Shell
    3. IPTables
    4. Open-SSH Server
    5. Einen dynamischen DNS Hostnamen (DynDNS Services gibt es ja hier und da – keine Werbung)
    6. 20 Minuten Zeit

    Vorwort:

    20 Minuten brauchen wir nur einmal initial zum Aufsetzen des Ganzen Konstrukts. Sofern ihr 2 oder mehr Server hab, geht das Ganze “ratz fatz”. Wenn Ihr noch im AnfĂ€ngerstadium im Umgang mit einem Linux Server seid, dann nehmt euch die Zeit und lest alles durch. Ich gebe an der ein oder anderen Stelle wirklich ein paar Wertvolle Tipps, die ihr im Alltag im Umgang mit einem Linux-Server benötigt!

    Los geht’s!

    ZunĂ€chst loggen wir uns auf dem Linux Server ein, auf dem wir den SSH Service absichern wollen. Bitte werdet zum “root”:


    sudo su –
    oder
    su

    sofern ihr das gemacht habt, legen wir nun eine Ordnerstruktur an, damit wir das Ganze nachher ĂŒber die “Crontab” des Roots aufrufen können. Die Crontab eines nutzers ist ein Modul des Cron. Crons oder Cronjobs sind “Aufgaben” die zu einer bestimmten Zeit beliebig ausgefĂŒhrt werden. Auf englisch nennt man dies einen Task Sheduler (Windows bietet auch einen solchen Task Sheduler an – nur als Info)

    Ordnerstruktur:



    mkdir -p /home/security/iptables.d



    Der Parameter “-p” legt ALLE Verzeichnisse an, die es bis dahin noch nicht gibt (Rekursion). In eurem Fall wird dies vermutlich der Ordner “security” im “/home” Verzeichnis sein, sowie der Ordner “iptables” im “/home/security” Ordner.
    Im nĂ€chsten Schritt legen wir 2 Dateien an, die wir spĂ€ter mit Inhalt fĂŒllen.



    touch /home/security/iptables
    touch /home/security/iptables.d/ssh.secure



    Diese beiden Dateien benötigen wir im weiteren Verlauf, um den SSh Port abzusichern. Doch zunĂ€chst prĂŒfen wir, welchen Port wir derzeit als SSH-Port benutzen. Das finden wir ganz schnell raus indem wir uns diesen aus der aktuellen Konfiguration “greppen”:



    grep ‘Port ‘ /etc/ssh/sshd_config



    Die Ausgabe könnte dann so aussehen:



    Port 22



    Nun wissen wir, dass wir den Port “22” benutzen. Nun können wir unsere beiden Dateien, die wir zuvor angelegt haben, mit Inhalt fĂŒllen. Dies tuen wir wie folgt:



    vi /home/security/iptables



    In diese Datei fĂŒgren wir folgenden Inhalt ein:

    #!/bin/bash

    ### First of all flush iptables
    /sbin/iptables –flush

    ## include security files
    source




    Kurze ErlÀuterung:
    “#!/bin/bash” – Gibt den Interpreter des Skripts an – in diesem Fall ist dies die BASH
    “/sbin/iptables –flush” – leert die IPTables. WĂŒrden wir das nicht tun, entstehen Fehler, die dazu fĂŒhren, dass wir eventuell keinen Zugriff mehr auf den Server haben”source /home/security/iptables.d/ssh.secure” – bindet die Datei an, die hinter “source” steht

    Jetzt speichern wir die Datei ab und geben dieser noch die benötigten Rechte. Dies tut man mittels des Kommandos:


    chmod 755 /home/security/iptables

    – 755 bedeutet, dass der Benutzer, dem die Datei gehört, diese Lesen, Schreiben und ausfĂŒhren darf. Die Gruppe, die der Datei angehört und alle anderen Benutzer auf dem System, dĂŒrfen die Datei lesen und ausfĂŒhren. Wenden wir uns nun unserer zweiten Datei zu:


    vi /home/security/iptables.d/ssh.secure

    Dort fĂŒgren wir folgenden Inhalt ein:



    Jetzt legen wir noch einen kleinen Crontab Eintrag an. Dieser sieht wie folgt aus:

    ## allow ssh from
    # zuhause
    /sbin/iptables -A INPUT -p tcp -m tcp -s meinname.dynamischerdns.tld –dport 22 -j ACCEPT

    ## deny all other
    /sbin/iptables -A INPUT -p tcp -m tcp -s 0.0.0.0/0 –dport 22 -j DROP

    WICHTIG: Bitte kommentiert immer eure Eintragungen wie z. B. “# zuhause”, damit ihr spĂ€ter wisst, wieso dieser Eintrag vorhanden ist!
    ErlÀuterung:
    “/sbin/iptables -A INPUT -p tcp -m tcp -s meinname.dynamischerdns.tld –dport 22 -j ACCEPT” – Akzeptiert jeglichen reinkommenden Traffic auf Port 22 von der IP/ dem Host meinname.dynamischerdns.tld
    ”iptables -A INPUT -p tcp -m tcp -s 0.0.0.0/0 –dport 22 -j DROP” – LĂ€sst alles andere von jeder IP aus dem Internet “fallen”, der nicht mit "Accept" zugelassen wurde.





    */2 * * * * /sbin/iptables --flush

    Das stellt sicher, dass sollten wir einen Fehler eingebaut haben, die IPTables wieder gelöscht werden, damit wir nach 2 Minuten wieder Zugriff auf den Server erhalten!

    Zum Schluss rufen wir das Skript einmal manuell aus:



    /home/security/iptables



    Wenn nun keine Fehler entstanden sind - und ihr nicht ausgesperrt wurdet, könnt ihr mit dem nĂ€chsten Schritt beginnen. Sollten Fehler auftauchen, dann meldet euch bitte bei mir, oder lest euch NOCHEINMAL AUFMERKSAM das Tutorial durch. FĂŒr alle die, bei denen es geklappt hat, prĂŒfen wir nun mit dem folgenden Kommando unsere iptables:



    /sbin/iptables -L





    Nun solltet ihr eine Ausgabe bekommen, die in etwa so aussehen sollte:

    Zitat:

    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT tcp — meinname.dynamischerdns.tld anywhere tcp dpt:22
    DROP tcp — anywhere anywhere tcp dpt:22



    Sollte eure Ausgabe so aussehen, dann habt ihr alles soweit richtig gemacht. Nun können wir noch unseren Cronjob installieren und initialisieren:

    crontab -e

    Und dort definieren wir, dass das Ganze alle 5 Mnuten ausgefĂŒhrt werden soll

    Zitat:

    */5 * * * * /home/security/iptables



    Die Zeile

    Zitat:

    */2 * * * * /sbin/iptables --flush




    löschen wir nun wieder!

    abspeichern – fertig!
    Nun könnt ihr euren dynmischen DNS beliebig mit eurer dynamischen IP zuhause updaten und auf den Server zugreifen. NatĂŒrlich könnt ihr noch weitere IPs und Hostnamen freigeben. Dies definiert ihr einfach unter den Bereich “# zuhause” mit einer weiteren iptables Zeile.

    506 mal gelesen