Beiträge von pucxom

    Ich kann dir gerne auch mal noch meine Vorschläge überlassen, ich versuche möglichst Dinge wegzulassen, die du bereits selbst beschrieben hast.

    • Firewall auf die absolut notwendigen ports und ICMP types beschränken
      • ipv4 UND ipv6 (wenn genutzt)! 6 wird gerne mal vergessen. Mein Tipp: NFTables, damit kannst du direkt Regeln für 4&6 kombiniert anlegen. Wobei es mit ufw auch für Iptables recht einfach sein sollte.
    • Per lynis mal checken, welche Vorschläge du noch einfach umsetzen könntest
    • Ich lasse nächtlich Rkhunter laufen und mich im ernstfall benachrichtigen
    • SSH-Port ändern & Login nur per SSH-Key
    • Automatisch Pakete upgraden or über Updates benachrichtigen lassen (hier hat jeder seine eigene Vorliebe). Z.B. apticron wäre hier ein Schlagwort.

    So, jetzt noch einen Vorschlag den ich so auch anwende, aber nicht für Jeden praktikabel ist. Die meisten Alle meine Services sind für meine Familie & mich und müssen deshalb nicht für jeden zugänglich sein. Auch wenn vieles per Docker recht einfach zu updaten ist, hat man dennoch eine Software am Netz hängen, die nur <10 Leute benötigen.

    Meine Lösung hierfür war ein VPN auf dem Server zu installieren und alle Dienste nur über das lokale VPN Subnetz verfügbar zu machen. Aktuell ist auf meinem Server nur ein port in der Firewall offen um mich mit dem VPN zu verbinden, alles andere ist von außen blockiert. Per VPN habe ich dann zugriff auf alle Dienste. Dadurch kann ich mir mit dem Update von Software wie z.B. MySql, Redis, Nginx, etc "Zeit lassen" und muss mich primär um ein aktulles OS, Nftables & VPN-Software kümmern.

    Vllt. kannst du damit ja was anfangen und ggf. deine Gameserver nur einem gewissen Personenkreis verfügbar machen, etc. Wie gesagt, nicht für jeden praktikabel.


    Viele Grüße

    Das ganze hier dreht sich gefühlt nur im Kreis, auch wenn ich es bisher nur grob durchgelesen habe...
    "ich will xy" - "achtung gefahr, mach lieber yz" - "nein, ich will xy, alternativen?" - "alternative, alternative, alternative" - "nein, ich muss xy" - "nein, alternative" - "gibts alternativen?" - "ja....". Es tut mir leid aber das ließt sich wie der Dialog zwischen mir meiner Nichte (6)...

    Aru, ich möchte dir hier nicht zu nahe treten, aber wenn du im E-commerce (E, Betonung auf E) Bereich zuständig bist, dann gibt es in eurer Firma sicherlich auch Leute die sich mit dem Betrieb eines Servers auskennen (andernfalls ist es vllt nur Commerce). Lass die das machen, hier wurden so viele gute Ideen genannt, die für Fachkundige 1. easy umsetzbar sind und 2. funktionieren werden.

    Mal abgesehen davon, wieso stellst du nicht einfach einen Windows Rechner in dein Büro in DE, machst den Port auf und lässt den dauerhaft rennen, dann kann sich da jeder drauf Verbinden... Und wir haben die Spamschleuder nicht im Netcup Netz.

    Das ist keine Troll-Antwort, sondern ich meine es ernst, nehm es einfach als weitere Alternative.

    Zu der Frage "welche Probleme denn?": Was glaubst du wohl, über welche Maschinen Kriminelle so ihre Daten verbreiten? Wohl kaum über solche, deren statische IP mit ihrem Namen bei einem Anbieter verknüpft ist. Und mit Daten meine ich hier von "aua kostet viel" bis "ab in Knast und nimmer raus".

    Versuchs mal mit

    Python
    #!/usr/bin/python
    
    # -*- coding: UTF-8 -*-
    
    print "Content-Type: text/plain;charset=utf-8"
    print
    print "Hello World!"

    Siehe Python(2) docs bzgl. Trennung von Header und body: https://docs.python.org/2/library/cgi.html

    "The output of a CGI script should consist of two sections, separated by a blank line. The first section contains a number of headers, telling the client what kind of data is following. Python code to generate a minimal header section looks like this:"

    Code
    print "Content-Type: text/html"     # HTML is following
    print                               # blank line, end of headers


    Edit:

    Ich habe etwas spät gelesen, dass du sagtest das Script wird nicht gefunden. Da mir die fehlende blank line aufgefallen ist, hab ich wohl den Text nur noch überflogen.

    Sollte das File wirklich nicht gefunden werden und es nicht an dem Script liegen, kann ich leider gerade nicht helfen. Sorry :/

    Das Problem ist das mod_python kein Flask kann. Hab die Bestätigung jetzt auch vom Netcup Support. Super schade.

    Naja, Flask "können" klingt hier etwas missverständlich. Es sind grundlegend unterschiedliche Technologien. Cgi und wsgi Applikationen werden ja komplett unterschiedlich angesprochen.

    Ein cgi-Skript startet der http-server selbst (vereinfacht gesagt) (fastCGI lassen wir mal außenvor, aber es funktioniert prinzipiell ähnlich, nur dass der Interpreter permanent läuft).

    Eine WSGI Applikation, wie eine Flask App, benötigt ja einen eigenen wsgi-Server, wie z.B. gunicorn, der die Kommunikation übernimmt und selbst wiederum per http angesprochen wird und eben nicht per Aufruf durch den python Interpreter.

    Flask Apps starten unter der Haube einen eigenen wsgi-Server, der aber nur für Tests eingesetzt werden sollte. Viele verwechseln das leicht, und denken "ich führe ja nur eine .py aus". Aber nehmen wir mal uwsgi oder gunicorn für Produktion hinzu sind wir aus der python-Umgebung raus und führen ganz andere executables aus.

    (Auch mir war das damals nur bedingt bekannt).


    Wer das weiß, wird sich schon denken können, dass ein Webhosting maximal cgi unterstützt und kein wsgi-Hosting ist. Unwissende fallen darauf natürlich herein, denn.. python wird ja beworben :D Ich denke hier könnte Netcup in der Funktionalitätenliste klarer definieren, worum es sich handelt aber andererseits kann man auch nicht immer alles ins kleinste Detail aufzählen und auch dann würde es nicht jeder verstehen. Dank der Zufriedenheitsgarantie, kann man ja aber solche "Missverständnisse" einfach rückgängig machen :).

    Ich kann zur neueren EiWoMiSau nichts sagen, aber ich hatte bis vor kurzem einen alten WebhostingTarif.

    Dabei war es (mir, auf dem alten Webhosting) nicht möglich python Apps als Service zu betreiben und eine proxy-Weiterleitung zu konfigurieren sondern nur als cgi Applikationen.

    D.h. ich konnte von außen meinedomain.de/mein_python.py aufrufen und mir dann von dem Skript eben eine dynamische Antwort generieren & liefern lassen. Ich konnte aber keine .py App (z.B. Flask) starten und irgendwo eine Konfiguration vornehmen, sodass der Netcup http-Server an meine App (Flask auf localhost:port) weiterleitet. Wie gesagt, ich spreche von einem alten Tarif und ich habe auch nicht sonderlich viel Zeit investiert um evtl. doch eine Konfigurationsmaske zu finden und z.B. einen Flask Service ans laufen zu bringen da ich nach python --version sowieso keine Lust mehr hatte.

    Ich schrieb den Guide in der Nacht (war über 36 Stunden da wach) über Stunden angepasst um, für noch mehr vom Anfängerstatus ausgehend.

    Hey, ich bin davon ausgegangen, dass es sich hierbei nicht um eine Anleiteung handelt, die du extra für das Forum geschrieben hast. Ich möchte mich da auch ganz offen bei dir entschuldigen, dass meine letzte Nachricht so offensiv klang! Ich muss ehrlich sagen, ich wollte einige deiner Vorschläge (Kernel hardening) Abends noch mit meinen Einstellungen vergleichen und dann waren die posts gelöscht. Auch wenn ich jetzt einen weiteren Begriff zur Selbstrecheche hatte hat es mich dennoch ziemlich geärgert, dass die Posts weg waren. Du meintest ja aber auch, dass du eine "neue" Version posten möchtest und dann kam leider der letzte Post, mit dem ich (ich persönlich) nichts anfangen konnte.

    Wie gesagt, bitte entschuldige, ich hätte es anders schreiben können! Im Internet muss man nicht nur der tollste sein, sondern auch mal Fehler eingestehen ;)

    Gerade mit der neuen Erkentniss, dass du die Anleitung extra hierfür geschrieben hast kann ich nur meine letzte Aussage wiederholen. Ich finde es klasse, wenn du deine Kentnisse teilst, das passiert viel zu selten, vorallem wenn sie vorher noch nicht persistiert waren. Und ich hoffe wirklich, dass sich noch eine Lösung findet solche Themen niederzuschreiben (Github Wikis, Netcup wiki Kundenbereich, Thread mit dauer-edit Möglichkeit, wie auch immer).

    Du hattest eine zwei-Post lange Anleitung geschrieben, die du löschen gelassen hast, weil du sie nicht schön fandest bzw. etwas ändern wolltest. Okay, aber jetzt ist sie weg und niemand kann mehr etwas damit anfangen, egal ob schön oder unschön. Ich habe doch lieber eine einfach Text-Anleitung als gar nichts... Schade!

    Wenn du sie löschen lassen hast, weil du dich selbst nicht als Experte bezeichnen möchtest und eine gemeinsame Arbeit vorantreiben möchtest... okay... aber laut deiner eigenen (mitlerweile gelöschen) Aussage betreibst du über 70 Server und hast in unzähligen Neu-Installationen die Anleitung >perfektioniert<, wieso dann löschen?

    Ich begrüße es sehr, dass du dein Wissen teilst, das machen heutzutage nicht mehr viele Menschen, deshalb wollte ich zuerst danken, aber leider sind hier von dir nur noch lange Lobpreisungen über Netcup zu finden. Das ist ja alles gut und schön, ich bin auch sehr zufrieden mit NC, aber das geht am Kern des Threads (und an den noch offenen Fragen) vorbei.

    /Edit: oder auch nicht nur Lobpreisungen? Ich muss gestehen ich habe teilweise Sätze überflogen, die random new-lines verwirren mich.

    fail2ban ziehe ich direkt von GitHub. Das Debian Paket von vor 2 Monaten war noch zu alt und unterstützte keinen dual stack.

    In meinen letzten Posts auf Seite 2 habe ich noch 2 Fragen gestellt, und mit über 70 betriebenen Servern ist das doch für dich sicherlich ein Klacks, ich würde mich freuen wenn du Mal drüber schaust und deine Meinung postest ;)

    Erstmal Danke für eure Antworten ;).

    Was Du nicht möchtest, ist, dass Dein Host als Router fungiert. NDP Types 133,134,137 werden Dich daher besonders interessieren.

    Neben diesen kann akzeptiert auch der Linux-Kernel via /proc/sys/net/ipv6/conf/[interfacename] gewisse Einstellungen, sodass es nicht nötig sein wird, das über die Firewall zu lösen - außer für etwaige weitere Hosts.

    Ich möchte die Konfiguration(en) so wenig wie möglich verteilen, sollte also nichts gegen nftables-Regeln sprechen bevorzuge ich das aktuell :). Aber zurück zum Thema:

    Ich habe mir mal eine Konfiguration erstellt von der ich denke, dass es so passen sollte, es wäre super, wenn du mal drüber schaust. Mein Verständnis schreibe ich darunter, das darf natürlich gerne korrigiert werden :).

    Im Input erlaube ich die icmpv6 "Problem"-Pakete und stark limitiert ping/echo. Und ich erlaube neighbor- advert & -solicit, sowieso redirects und router adverts, solange das hoplimit noch 255 ist (soweit ich das verstehe bedeutet es, dass diese Pakete noch keinen Router passiert haben, und somit von meinem ersten Anlaufpunkt (Netcup Gateway?!) kommen und vertrauenswürdig sind). Alles andere wird gedropt.

    Im Output erlaube ich alles außer: router-advert und redirect wird immer gedroppt, da ich sonst als router agieren würde. neighbor-solicit & -advert und router-solicit droppe ich, wenn das hoplimit ungleich 255 ist, da sonst die Pakete bereits einen Router passiert hatten (und nicht ... auf meinem Mist gewachsen sind?!). Wenn das hoplimit 255 ist, ist es eine valide Anfrage/Antwort, die mein Server macht.


    Ist das so in Ordnung und kann ich das so bedenkenlos lassen?


    [...] Bei einem Drop sollte hier nichts auftauchen. [...] tcpdump zeigt dir hier genauere Einblicke tcpdump -nni ens3 icmp


    Die Programme bekommen davon nichts mit, [...]. Wenn du allerdings beim Kernel schnorcheln willst, schickt er dir die Duplikate der Pakete bevor sie die Kernelfirewall erreichen.

    Ich habe drop als default policy. Allerdings verstehe ich das mit der Kopie und ich vermute jetzt einfach mal solche Sniffer (wie z.B. nethogs) holen einfach alle Pakete beim Kernel ab; anders kann ich es mir zumindest aktuell nicht erklären.

    Mit tcpdump sieht es (für mich) soweit okay aus. Ich bekomme hauptsächlich neighor-solicitations mit und diese kommen auch immer von einer fe80 Adresse und gehen zu ff02... Sieht für mich als Laien erstmal nicht verdächtig aus. Das habe ich allerdings erst überprüft nachdem ich oben genannte Änderungen vorgenommen habe.

    Es bestätigt auch meine Vermutung, dass die Anzeige in nethogs (Verbindungen gehen von mir aus) einfach nicht stimmt, mit tcpdump sehe ich gut, dass zwar Pakete ankommen aber auf den geblockten Ports nichts raus geht.


    So richtig erklären kann ich mir aber den hohen eingehenden Traffic auch mit Hilfe von tcpdump nocht nicht. (Natürlich habe ich den Filter angepasst :).)

    Ich möchte euch gerne noch einmal um Hilfe zu zwei Themen bitten.

    Meine erste Frage gehört evtl. nicht unbedingt in diesen Thread aber dennoch: Ich prüfe immer mal wieder meinen Traffic in /proc/net/dev und die Menge an eingehenden Daten kommt mir sehr komisch vor. Teilweise nach 1 Tag Uptime habe ich 300Mb, obwohl der Server selbst eigentlich nichts tun sollte. Der ausgehende Traffic sieht normal aus (wie von mir erwartet, äußerst gering).

    Wenn ich mit nethogs auf eth0 schaue kommt immer mal wieder ein Zugriff aber hierbei handelt es sich lediglich um 10-12 Byte. Mir ist zwar klar, dass das Aktualisierungsinverval alles etwas schwammig macht aber trotzdem finde ich es seltsam. Das kann doch nicht normal sein, oder?

    Auch unverständlich ist für mich zur Zeit wieso hier Verbindungen mit mir als Quelle zu fremden IPs aufgelistet werden, wenn diese auf offene Ports prüfen. Durch einen Selbsttest habe ich bestätigen können, dass der Port zwar dicht ist, aber nethog es einfach "so" darstellt, als ob es von mir kommt. Auch dachte ich, dass nftables das filtern sollte, bevor überhaupt irgendein anderes Programm etwas davon mitbekommt, aber nun gut, da fehlt mir wohl einfach noch das Verständnis im Detail.


    Zu meiner zweiten Frage:

    Ich schränke aktuell in der Firewall keine ICMP Pakete ein. Ich bin jetzt über die Info gestolpert, dass das gar nicht mal so gut ist, da man bei icmpv6 scheinbar einem Server einfach mitteilen kann, dass man selbst der kürzeste Weg zu einem anderen Knoten ist?! (Habe ich das echt richtig verstanden? Das wäre ja easy mitm by design?!). Meine Idee, erstmal nur die für Probleme relevanten (destination-unreachable, time-exceeded, parameter-problem und packet-too-big) zu erlauben, klappt für ipv6 leider nicht so gut, anschließend funktioniert ssh nicht mehr. Müssen hier bestimmte weitere Types erlaubt werden?. Dazu findet man auch Vorschläge in RFCs bzgl. der (notwendigen?) Neighbor discovery aber um ehrlich zu sein, klingt die Beschreibung dieser Types danach als ob der oben von mir genannte Fall eintreten kann. Würdet ihr mir dabei helfen und vllt. kurz erläutern, wie ihr icmpv6 absichert? Ich muss gestehen damit tue ich mir gerade schwer.

    Zitat

    --> was kann man denn jetzt gegen die ddosangriffe unternehmen?

    Das ist eine Frage, die Ihnen ihr Administrator kompetent beantworten kann. Wir hingegen können dies nicht, da wir nicht wissen wie Sie ihr Server konfiguriert und eingerichtet haben. Wir haben auf Ihren Server keinen Zugriff.

    Also diese Antwort versteh ich auch nicht. Natürlich kann ich meine Firewall einrichten, aber das ändert ja nichts daran, dass ich mit Paketen bombadiert werde und zwangsläufig irgendeine Seite nachgibt (vermutlich erstmal der eigene Server...).

    Auch ich besitze VPS und sowohl bei der Bestellung, als auch jetzt noch befindet sich auf der "Shop-Seite" https://www.netcup.de/vserver/vps.php ganz oben ein Schriftzug "DDoS-Schutz inklusive". Auch ich verlasse mich zur Zeit darauf, dass dieser aktiv ist und wie unter https://www.netcup.de/ueber-netcup/ddos-schutz-filter.php beschrieben funktioniert.

    Darüber hinaus würde mich aber auch mal interessieren, was denn ein kompetenter Administrator auf diese Frage antwortet.

    Sollte es in diesem Thread um Angriffe oberhalb von 5GBits/s gehen wurde mir das beim Lesen nicht klar und ich nehme meine Aussage natürlich zurück.

    Ist bestimmt eth gemeint oder?

    Ziemlich sicher, ja. Zumindest bei meiner kürzlich vorgenommenen Neuinstallation war es eth. Wenn ich das noch richtig in Erinnerung habe war die Konfiguration auch nicht mehr in der interfaces Datei sondern in einer eigenen config unter interfaces.d/. Außerdem waren sowohl ipv4 als auch v6 bereits vorkonfiguriert, ich glaube vorher war es nur v4.

    Hatte mich auch anfangs etwas verwirrt :)

    Falls du eine findest, wäre es nett wenn du sie hier teilen würdest. Danke! :)

    Natürlich. Auf Anhieb habe ich leider nur die drop liste von spamhaus.org gefunden. Man muss bei IPv6 halt möglichst immer ganze Adressräume sperren. Wenn ich über mehr stolpere teile ich es :thumbup:.

    Um mal ehrlich zu sein habe ich 0. Sicherheitsvorkehrungen getroffen, ich habe dasselbe passwort für root und hauptnutzer und sudo geht ohne passwort, mir ist trotzdem nie was passiert

    Bei meinem Raspberry zu Hause, den man nicht von extern erreichen kann, ja. Aber ein Server im Netz... das ist mir zu heikel und mir geht es dabei nicht um den Verlust von Daten sondern eher darum, für welche illegalen Zwecke man den Server nutzen könnte, der auf >meinen< Namen registriert ist.


    Wie 03simon10 schon geschrieben hat, es ist keine Arbeit alles einzurichten. Ich würde allerdings hinzufügen "wenn man erst einmal verstanden hat, welche Schritte was bewirken und wieso nötig sind".

    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:.

    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:.

    [...] 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:

    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)