Absichern eines OpenBSD Web- & SSHServers

CommanderZed

OpenBSD User
Teammitglied
Guten Morgen,

ich habe enen VServer im Internet, bei dem ich das Betriebsystem auf OpenBSD wechseln möchte. Ausserdem hab ich einen lokalen kleinen Heimserver, den ich demnächst von extern per SSH erreichbar machen möchte, er läuft auch schon ewig mit OpenBSD.

Auf dem vServer (KVM) soll der SSH zugang möglich sein, und ausserdem soll eine kleine statische Webseite gehostet werden, dies wollte ich mit dem eingebauten httpd lösen - mit der Konfiguration e.t.c. komme ich auch problemlos bislang zurecht. Alles nur im privaten Rahmen, den SSH Zugang nutze nur ich. Evt. werde ich in einem weiteren step da noch let's encrypt für den Webserver verwenden.

Meine Frage ist: Übersehe ich hier irgendwelche wichtigen Dinge die man SIcherheitstechnisch noch optimieren könnte?

Ich habe bereits den SSH-Zugang entsprechend so konfiguriert das root sich garnicht mehr anmelden kann und das ansonsten keine Anmeldung per passwort, sondern nur per public key möglich ist.
 
Das sollte völlig ausreichend sein. Bei mir habe ich zusätzlich noch den SSH-Port geändert, um die Login-Versuche zu minimieren. Eine wirklichen Sicherheitsgewinn bringt das allerdings nicht. Ich nutze normalerweise -current auf meinem privaten Server, um immer die neuesten updates zu haben. Release bzw. stable sollten aber auch völiig ausreichend sein, wenn uptime usw. wichtig für dich ist.
 
Ich hab noch Sachen wie GeoIP[1] und rate-limits für Verbindungen auf 22/tcp, aber das ist mehr für Komfort, damit das Log nicht so abartig aussieht. :)

[1] Irgendwo gibt's Datenbanken zum Runterladen, die ich in PF-Tabellen konvertiert habe. Damit geht dann sowas wie pass in from <GeoIP_DE> to ... Man sollte natürlich prüfen, dass man sich damit nicht selbst aussperrt.
 
Rate limits sind sinnvoll, wenn man keine statischen IPs nutzt, sonst ist eine Beschränkung auf eine Adressentabelle besser. geoip kann man machen, wenn man nie im Ausland ist.
 
,rgendwo gibt's Datenbanken zum Runterladen, die ich in PF-Tabellen konvertiert habe. Damit geht dann sowas wie pass in from <GeoIP_DE> to ... Man sollte natürlich prüfen, dass man sich damit nicht selbst aussperrt.
Nur als Tipp: Das Updaten davon einfach nicht automatisch machen. Du kannst zwar ein Skript machen, aber einfach immer mal wieder manuell ausführen.

Einen ähnlichen Effekt erreichst du im Übrigen auch mit einem OS-Filter. Und Ausland ist meist auch okay, wenn du darauf achtest das ebenfalls zu inkludieren. Im Notfall kann man mit SSH übrigens relativ leicht über irgendeine Art von Proxy gehen. Also entweder du hoppst mit SSH auf ein System das die Limitierung vielleicht nicht hast (braucht nur ein Shell-User-Account sein zum Beispiel - vielleicht sogar mit statischer IP), du nutzt einen normalen Proxy (SSH ist sicher, also musst du da keine großen Bedenken haben, wenn der Fingerprint kontrolliert wird und du die Software aktuell hältst), oder du nimmst die Extremmethode und nimmst Tor und sagst du willst einen Exit aus Land XY. Letzteres verwendet übrigens auch eine GeoIP-Datenbank. Wenn du also die Selbe verwendest, dann wirst du immer durch kommen. Das kann nützlich sein, wenn du ausgesperrt sind, weil dein IP-Bereich relativ neu ist, was vor allem bei Mobilfunk ab und an der Fall ist.

Generell kannst du natürlich auch einen Jump-Host bauen, dass du nur mit einem bestimmten System mit statischer IP, auf dem nichts außer ein gut abgesichertes SSH läuft nutzt und nur von dort erlaubst. Je nach Paranoia kannst du auch hier zusätzlich den OS-Fingerprint checken, was sogar den Fall abdeckt, dass eine IP gestohlen wird.
 
Ich wollte es nicht elendig lange ausführen, aber all das ist mir natürlich bewusst. Es läuft bei mir auch nicht automatisch.
 
als kleinen sicherheitszusatz kann ich noch AIDE empfehlen. das hat mir schon einmal den hintern (server) gerettet ;)
 
Meine Frage ist: Übersehe ich hier irgendwelche wichtigen Dinge die man SIcherheitstechnisch noch optimieren könnte?
Kommt drauf an was auf dem Webserver läuft, falls die gesamte Webseite nur read-only Content hat, würde ich nichts zusätzlich absichern, vorallem nicht mit Software die man zusätzlich installiert. Wenn du deinem ssh nicht traust, dann lass dir logins via Mail zukommen, direkt sobald ein login stattfindet.
Bin im Falle von OpenBSD der Meinung, solange man nichts installiert, was bekannterweise sehr Buganfällig ist, tut man sich mit weiteren Programmen keinen wirklichen Gefallen.

EDIT:
Finde folgende Zeilen sehr Hilfreich um die Logdateien etwas zu schmälern:


/etc/pf.conf
Code:
table <bruteforce> persist

block in quick from <bruteforce>

pass in on egress inet proto tcp from any to port 22 flags S/SA keep state \
(max-src-conn 10, max-src-conn-rate 10/30, overload <bruteforce> flush)

root crontab:
Code:
* * * * * /sbin/pfctl -t bruteforce -T expire 600 > /dev/null 2>&1
Der crontab + Eintrag in pf.conf bewirkt, dass maximal 10 Verbindungen auf Port 22 stattfinden können und maximal 10 Verbindungen in 30 Sekunden. Jegliche IP darüber wird in die Bruteforce Tabelle abgelegt und nach ca. 600 Sekunden wieder entfernt.


SSH-Port umsetzen verschönert die Geschichte zusätzlich, falls es keine Umstände macht, natürlich auf einen nicht standartisierten Port < 1000, der keine einfache Erweiterung zu 22 darstellt (220, 122 sind zB keine gute Wahl).
 
Zuletzt bearbeitet:
Zurück
Oben