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?
- 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.
- Ggf. findet der ein oder andere Neue mein (aktuelleres) Thema und kann etwas damit anfangen.
- 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.
- Debian 9 (minimal, netcup image)
- apt-get update && upgrade
- Neuer Benutzer (in sudo Gruppe aufgenommen)
- SSHd absichern
- PermitRootLogin no
- PasswordAuthentication no
- Protocol 2
- Einschränkung per AllowGroups
- rkhunter installieren
- Datenbanken updaten (--propupd, --update)
- MAIL-ON-WARNING konfigurieren, sodass ich es auch mitbekomme, wenn etwas gefunden wurde (zum Mailversand komme ich noch)
- Direkt einen Check durchführen
- Hierbei ist mir aufgefallen, dass bereits Kernel Dateien als DIFFERENT markiert waren. Hatte diese Auffälligkeit noch wer direkt nach der Installation?
-
nftables einrichten
- 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.
- 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.
-
fail2ban einrichten
-
nftables als action anstatt iptables!
-
Konfiguration nftables-common.local
- ignoreip=127.0.0.1/8; protocoal=tcp;
- maxretry=2; findtime=60; bantime=86400;
- banaction=nftables-multiport; banaction_allports=nftables-allports;
-
Konfiguration nftables-common.local
-
Eigener table für fail2ban, darin kann es sich austoben. Pakete müssen ja eh alle tables und chains der zugehörigen hook durchlaufen.
- Die Konfig dafür wird per include in nftables.conf geladen, das habe ich der Einfachheit halber unten weggelassen
- 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.
-
nftables als action anstatt iptables!
-
Mailbenachrichtigungen aktivieren
- Ich verwende exim4 (einen Vergleich mit Postfix, was ich schon öfter gelesen habe, mache ich demnächst)
- 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.
-
ClamAV als Antivir
- Update per freshclam
- 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.
-
Security Checks mit Lynis
- Diverse Vorschläge muss ich noch durch gehen, aber es war bisher nichts kritisches dabei. Bei Wunsch poste ich gerne auch das Ergebnis.
- 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
table inet filter {
chain output {
type filter hook output priority 0; policy accept;
}
chain forward {
type filter hook forward priority 0; policy drop;
counter
}
chain input {
type filter hook input priority 0; policy drop;
ct state invalid counter drop
ct state {established, related} accept
iifname lo accept
# iifname != lo ipv4 daddr 127.0.0.1/8 counter drop
# iifname != lo ip6 daddr ::1/128 counter drop
ip protocol icmp limit rate 7/second counter accept
ip6 nexthdr icmpv6 limit rate 7/second counter accept
tcp dport ssh limit rate 3/minute accept
counter comment "count dropped packets"
}
}
Display More
/etc/exim4/update-exim4.conf.conf
dc_eximconfig_configtype='internet'
dc_other_hostnames='die mir zugewiesene (sub)domain'
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
Display More
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)