Server Sicherheit

  • Hallo zusammen,

    vor Kurzem habe ich die Gelegenheit genutzt und mir einen VPS gemietet, seitdem ist er größtenteils ausgeschaltet, da ich mich zuerst mit dem Thema Sicherheit befasse. Ich bin auf dem Gebiet der Administration eines Servers nach meiner eigenen Einschätzung eher unerfahren. Jedoch bin ich lernwillig und habe auch schon einiges an Zeit investiert um mich damit zu befassen, bevor ich mich hier melde. Ich habe mal alles soweit eingerichtet, wie ich es für sicher halte und möchte das hier vorstellen und euch um Meinungen und Ergänzungen bitten. Mir ist bewusst, dass dieses Thema immer wieder aufkommt und so wie ich es bisher gelesen habe leider oft von wenig Willen etwas zu "tun" begleitet ist (seitens des Thread Erstellers).


    Wieso schreibe ich es also erneut?

    1. Die bisherigen Themen sind alle recht alt und gerade in der IT altert alles noch schneller. D.h. ich möchte keine Anleitung von 2008 blind befolgen und mich freuen, dass ich "sicher" bin. Wenn ihr zu einem meiner unten stehenden Punkte neuere, etablierte Software kennt -> Link! Ich erwarte keine komplett Anleitung, ich eigne mir die Themen selbst an und melde mich ggf. bei Rückfragen.
    2. Ggf. findet der ein oder andere Neue mein (aktuelleres) Thema und kann etwas damit anfangen.
    3. Wenn sich herausstellt, dass ich mich mit meiner Einschätzung komplett getäuscht habe und ggf. von euch genannte Dinge nicht verstehe oder umsetzen kann, geht lieber morgen die Kündigung raus, als dass ich einen unsicheren Server im Netz habe, den ich nicht "beherrsche".

    Nachfolgend mal eine chronologische Liste von Vorkehrungen, die ich bzgl. Sicherheit getroffen habe. Wo nötig poste ich noch die Konfiguration dazu, damit ihr euch ggf. ein besseres Bild machen könnt.

    1. Debian 9 (minimal, netcup image)
    2. apt-get update && upgrade
    3. Neuer Benutzer (in sudo Gruppe aufgenommen)
    4. SSHd absichern
      1. PermitRootLogin no
      2. PasswordAuthentication no
      3. Protocol 2
      4. Einschränkung per AllowGroups
    5. rkhunter installieren
      1. Datenbanken updaten (--propupd, --update)
      2. MAIL-ON-WARNING konfigurieren, sodass ich es auch mitbekomme, wenn etwas gefunden wurde (zum Mailversand komme ich noch)
      3. Direkt einen Check durchführen
        1. Hierbei ist mir aufgefallen, dass bereits Kernel Dateien als DIFFERENT markiert waren. Hatte diese Auffälligkeit noch wer direkt nach der Installation?
    6. nftables einrichten
      1. Ich habe mich für nftables entschieden, da es auf Dauer die Ablösung für iptables sein wird und es meiner Ansicht nach bereits akzeptiert und etabliert ist.
      2. Meine nftables.conf habe ich weiter unten im Beitrag hinzugefügt, damit diese Liste zumindest annähernd übersichtlich bleibt. Bitte schaut mal drauf, das wäre mir sehr wichtig.
    7. fail2ban einrichten
      1. nftables als action anstatt iptables!
        1. Konfiguration nftables-common.local
          1. ignoreip=127.0.0.1/8; protocoal=tcp;
          2. maxretry=2; findtime=60; bantime=86400;
          3. banaction=nftables-multiport; banaction_allports=nftables-allports;
      2. Eigener table für fail2ban, darin kann es sich austoben. Pakete müssen ja eh alle tables und chains der zugehörigen hook durchlaufen.
        1. Die Konfig dafür wird per include in nftables.conf geladen, das habe ich der Einfachheit halber unten weggelassen
      3. Allerdings hat fail2ban bei mir zur Zeit keine Auswirkung, da der gescheiterte Login-Versuch mit ssh-key nicht ausgewertet wird. Ich werde hier nochmal etwas Zeit investieren.
    8. Mailbenachrichtigungen aktivieren
      1. Ich verwende exim4 (einen Vergleich mit Postfix, was ich schon öfter gelesen habe, mache ich demnächst)
      2. Meiner Konfig poste ich weiter unten, bitte schaut mal drauf. Eine Spamschleuder möchte ich nicht werden! Allerdings sollte auch der notwendige Port dicht sein, sodass man von außen gar nicht erst ran kommt.
    9. ClamAV als Antivir
      1. Update per freshclam
      2. Aktuell prüfe ich nur die Home-Verzeichnisse, da sich aber auf dem Server nahezu nichts befindet, überlege ich noch einfach automatisiert alles (/) scannen zu lassen.
    10. Security Checks mit Lynis
      1. Diverse Vorschläge muss ich noch durch gehen, aber es war bisher nichts kritisches dabei. Bei Wunsch poste ich gerne auch das Ergebnis.
    11. Apticron - Mail-Benachrichtigung bei verfügbaren Updates für Pakete

    Alle Dienste wurden natürlich entweder per systemctl enabled oder werden per cronjob regelmäßig ausgeführt!

    Das wars bisher. Unten befinden sich noch Konfigs. Alle Einstellungen wurden von mir getestet, sowohl simple root Login Versuche als auch diverse Einstellungen von nftables (z.B. limit rate) und fail2ban (hierfür habe ich kurzeitig Login mit Passwort erlaubt). Alles hat funktioniert wie es sollte. Jetzt stellt sich nur die Frage, reicht das? Und gibt es irgendwo Potential etwas besser zu machen oder "neuere" Best Practices anzuwenden.

    Weitere Überlegungen von mir für die Zukunft: Eine Mail bei jedem SSH Login an mich senden. Das würde ich allerdings erst aktivieren, wenn alles soweit eingerichtet ist. SSH-Port von 22 verlegen... Darüber denke ich nach, ich muss aber gestehen, dass ich lieber erst einmal das auth.log im Auge behalten möchte um zu sehen wie schlimm es wird, wenn der Server mal dauerhaft läuft. Diverse Logs automatisiert per Mail an mich senden.


    nftables.conf


    /etc/exim4/update-exim4.conf.conf


    Wenn ich noch etwas nachreichen soll, einfach melden.

    Bevor ich jetzt anfange nginx, etc. zu installieren (und mich um deren Absicherung zu kümmern) wollte ich mir erst einmal generell Meinungen und Anregungen zum aktuellen Stand holen.


    Vielen Dank im Voraus :)


    Edit: Hier noch ein paar credits

    thomas krenn, Netcup Thread 1, Netcup Thread 2, linode, gentoo wiki (nft examples)

  • zu Punkt 4 SSHd absichern sei anzumerken


    mit 'PermitRootLogin no' verweigert man zwar die direkte Authentication von 'root', wichtig ist hier aber auch,

    daß z.B. ein sudo su oder ein sudo service httpd restart nicht ohne der Eingabe des Passwortes von 'root' möglich ist;

    die Angabe hier des Passwortes vom angemeldeten Benutzer oder gar keines verwirft den Sicherheitsgewinn durch 'PermitRootLogin no'


    wenn hier nicht zwingend die Notwendigkeit besteht, daß die ganze Welt sich per SSH anmelden können muss,

    per Firewall den IP-Bereich auf den des eigenen ISPs beschränken;

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • ClamAV als Antivir

    Das kannst du dir schenken, außer du willst Windows Viren finden. Für Linux gibt es faktisch keine, seit den Jahrzehnten wo Linux existiert wurden eine handvoll Viren/Trojaner/... entwickelt, aber all diese sind schon uralt und die Lücken längst gefixt, von daher schadet der Schritt nicht, bringt aber auch nichts (in Bezug auf Sicherheit für deinen Server).

  • Ich betreibe sshd au feinem anderen Port und habe seit dem keinen einzigen fehlgeschlagenen Log-In mehr in auth.log (außer von mir selbst, da ich mich ab und an auch mal vertippe).


    Ich verwende noch Passwörter, aber habe auch root deaktiviert. Sowohl den Benutzernamen zu erraten als auch das Passwort halte ich für ausreichend unwahrscheinlich. Aber wäre meine Seite wohl etwas größer, würde ich evtl. dann auch weg von Passwörtern gehen.

  • [...] nicht ohne der Eingabe des Passwortes von 'root' möglich ist; [...]


    wenn hier nicht zwingend die Notwendigkeit besteht, daß die ganze Welt sich per SSH anmelden können muss,

    per Firewall den IP-Bereich auf den des eigenen ISPs beschränken;

    Alles klar, die Änderung bzgl. dem sudo -> root Passwort habe ich gemacht. Ich verstehe den Sinn dahinter, dass ein Angreifer, der alle Daten meines Users in die Finger bekommt, sich mit dem ssh key anmelden kann und mit dem PW root Rechte bekommen würde. Oder gibt es einen anderen Grund? Denn so oder so, müsste ich erstmal an das PW des Users, was wohl genauso schwierig sein dürfte wie das PW von root zu bekommen, oder?


    Die Einschränkung der Firewall ist eine gute Idee, das werde ich definitiv machen :thumbup:.


    Das kannst du dir schenken, außer du willst Windows Viren finden. [...]

    Tatsächlich könnte das später passieren. Ein Ziel ist es meiner Familie ein Webinterface zum Sichern von Daten anzubieten. Ich habe damit zwar eher Dokumente, Bilder und sowas im Sinn, aber auch die könnten problematisch sein. In der Hoffnung nicht noch einmal mit "Die Festplatte geht nicht mehr, da sind aber viele Fotos von früher drauf, schau mal bitte danach" konfrontiert zu werden :D

    Auch werde ich später meine Gitrepos auf den Server legen, da commite ich teilweise auch Fremdbiliotheken, damit ich sie nicht jedesmal erneut laden muss oder eben offline arbeiten kann.


    Ich kann das InfoSec Handbook empfehlen: https://infosec-handbook.eu/as-wss/

    danke für die Lektüre, ich schau mal rein :thumbup:

  • Rkhunter und apticron sind nice, aber nicht zwingend ein Muss.


    Rkhunter kommt erst zum Einsatz wenn dein Server mal Probleme hatte - wobei sich in den meisten Fällen ne Neuinstallation oder ein Einspielen eines sicheren Backups eignet.


    Apticron spamt dich nur zu, erstellt dir lieber selbst eine Update routine und achte drauf, dass alles up to date ist.

    Meine Produkte: definitiv zu viele, RS, VPS, Domains, Webhosting, ...

  • Wobei man gerade bei Ubuntu dann auch noch darauf achten muss, dass wichtige Pakte auch noch unterstützt werden, sonst wartet man recht lange auf verfügbare Updates und verwendet trotzdem Software mit Sicherheitslücken...

  • Auch, wenn es abenteuerlich klingt: Sicherheitsupdates (und nur die) darf bei mir cron machen. Im Zweifelsfall zerschieß ich mir lieber n System als dass ichs für böse Leute offen halte. Den Output bekomm ich eh per Mail, so merk ich auch zeitnah, wenns nicht passt.

  • Rkhunter kommt erst zum Einsatz wenn dein Server mal Probleme hatte [...]


    Apticron spamt dich nur zu, erstellt dir lieber selbst eine Update routine und achte drauf, dass alles up to date ist.

    Zumindest drüfte es MICH erstmal unterstützen, etwas zu erkennen. Es handelt sich hierbei ja nicht um meinen Beruf, also fehlt auch einfach das Auge dafür, in den Logs direkt Auffälligkeiten zu bemerken.

    Bzgl. Apticron warte ich es einfach mal ab. Solange es aber keinen Grund gibt davon abzuraten, sammle ich einfach vorerst mal Erfahrungen damit. Dennoch danke für den Hinweis. Ggf. werde ich auch eine Kombination aus beidem verwenden, der Meinung von chaosrind stimme ich bei nicht kommerziellem Einsatz bzw. privaten Zwecken voll zu.

    Ich verwende dazu das package unattended-upgrades.

    Das habe ich auch schon gesehen, ich werde es mir mal genauer anschauen und evtl. kann ich es nur für die Sicherheitsupdates einsetzen.


    Danke euch allen für die vielen Vorschläge, es war bereits einiges nützliches dabei, das ich übernehmen konnte :thumbup:.

  • Hi,

    ich halte es i.d.R. noch so, dass auf meinen Servern ein OpenVPN Server läuft, und man auf alles was nicht zwingend öffentlich sein muss, nur Zugriff aus dem VPN Netz hat. ;)


    Beispiele dafür wären SSH, diverse Seiten des Webservers (z.B. Sinusbot Admin-Overlay, Pihole Admin-Overlay, Grafana, phpMyAdmin, ...) usw....


    Das erhöht die Sicherheit an sich ungemein, da man für die Verbindung eine komplexe Schlüsseldatei benötigt und optional noch ein Passwort.

    Zum Einrichten habe ich dieses Script genutzt. Natürlich muss man dann noch die Firewall konfigurieren.

    Das Script bringt außerdem von Haus aus nur vorgefertigte iptables Regeln mit, soweit ich weiß. Aber ich kann dir wenn du magst gerne mal meinen iptables-Regelssatz schicken, und du überträgst/übersetzt den dann in die Konfiguration deiner Firewall.


    Muss man nicht machen, kann man aber. :)



    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Rkhunter kommt erst zum Einsatz wenn dein Server mal Probleme hatte - wobei sich in den meisten Fällen ne Neuinstallation oder ein Einspielen eines sicheren Backups eignet.

    Das dumme ist ja, dass so etwas halt nicht gleich auffällt, daher lasse ich rkhunter auch regelmäßig laufen.

  • ich halte es i.d.R. noch so, dass auf meinen Servern ein OpenVPN Server läuft, und man auf alles was nicht zwingend öffentlich sein muss, nur Zugriff aus dem VPN Netz hat. ;)

    […]

    Muss man nicht machen, kann man aber. :)

    Hey, danke für die Idee, den Link schaue ich mir auch mal an. Da ich bisher mit dem Betreiben eines VPN Servers noch keine Erfahrungen habe, würde ich das für mich vorerst nicht zum "Basic Setup" zählen, vorallem da es sich um von außen erreichbare Software handelt, die ich ebenfalls "beherrschen" muss. Dennoch finde ich die Idee gut und ich werde mich definitiv mal mit OpenVPN befassen. So wie du geschrieben hast sind ja Vorlagen für iptables vorhanden bzw. werden angesprochen, das sollte mir reichen :).

    Bzgl. "muss man nicht, kann man aber", genau wegen des zweiten Teils frage ich :thumbup::)


    Ich habe auf meinem Server noch dieses Blacklist Script laufen: https://github.com/trick77/ipset-blacklist

    Damit scheitern schon einige bekannte IPs an der Firewall.

    Perfekt danke, das Skript ist zwar für iptables, aber mit der Addressliste kann ich mir ein eigenes für nftables schreiben. Ich schau mal noch, ob ich sowas auch für ipv6 finde, wie von mainziman vorgeschlagen :thumbup:.