Punkt 4.Cyberciti hat auch einen Guide für allgemeine Absicherung von Linux, geht nicht sehr tief, aber damit sind schon mal die low hanging fruits erschlagen:
https://www.cyberciti.biz/tips/linux-security.html
Punkt 4.Cyberciti hat auch einen Guide für allgemeine Absicherung von Linux, geht nicht sehr tief, aber damit sind schon mal die low hanging fruits erschlagen:
https://www.cyberciti.biz/tips/linux-security.html
Punkt 4.
One Network Service Per System or VM Instance
Ist ja mein reden ;-)
Unprivileged Containers
Unprivileged containers use a new kernel feature called user namespaces. The root UID 0 inside the container is mapped to an unprivileged user outside the container. This means that most security issues (container escape, resource abuse, etc.) in these containers will affect a random unprivileged user, and would be a generic kernel security bug rather than an LXC issue. The LXC team thinks unprivileged containers are safe by design.
This is the default option when creating a new container.
Note If the container uses systemd as an init system, please be aware the systemd version running inside the container should be equal to or greater than 220.
Privileged Containers
Security in containers is achieved by using mandatory access control AppArmor restrictions, seccomp filters and Linux kernel namespaces. The LXC team considers this kind of container as unsafe, and they will not consider new container escape exploits to be security issues worthy of a CVE and quick fix. That’s why privileged containers should only be used in trusted environments.
https://pve.proxmox.com/wiki/Linux_Container#pct_settings
Also ich für mich folge der Regel, alles was von außen erreichbar ist (ohne VPN) kriegt eine eigene VM, alles andere kann auch ein (privilegierter) LXC sein …Naja, da sind wir jetzt beim Thema "Abwägungen", im Zweifelsfall ist eine VM besser isoliert als ein LXC-Container, aber eine VM braucht halt auch mehr Ressourcen. Da finde ich es dann sicherer mehrere Dienste als Docker/podman-Container innerhalb einer VM zu betreiben, wenn man nicht die Kapazitäten für eine VM pro Dienst hat, statt ein LXC pro Dienst. Insbesondere wenn es privileged lxcs sind, die werden nämlich von den lxc-Entwicklern als "unsicher by design" betrachtet:
Das ist keine verkehrte Regel, wobei mir das mit einen priviligierten LXC selbst dann noch zu heikel wäre. Man sollte aber im Hinterkopf behalten, dass klassische Perimeter-Sicherheit in Zeitalter der Cloud und mobiler Endgeräte nicht mehr ganz passt, da habe ich letztes Jahr einen netten Vortrag auf einer Tagung in Darmstadt zu gehört:Also ich für mich folge der Regel, alles was von außen erreichbar ist (ohne VPN) kriegt eine eigene VM, alles andere kann auch ein (privilegierter) LXC sein …
Naja, das kommt natürlich darauf an, wie weit man es treiben möchte. Wenn man z.B. eine Hausautomatisierung oder IoT-Geräte hat, würde es sich ja z.B. anbieten, die in eigene Netze zu packen. Wenn man mit Virtualisierung rumspielt (wie wir hierCooler Talk, im wesentlichen ist es einfach kleinere "Castels" also Funktionsgruppen in eigenen LANs mit den Identies managed outside. Umgelegt auf eine Homeserver installation (so hab ich den Thread zumindest verstanden) wuerde wie aussehen ? Da wuerde ich den Homeserver schon als kleinstes Castle sehen ... oder hab ich da was noch nicht ganz verstanden? (Bei grossen Firmennetzwerken schon klar, aba im Homeserver Bereich?)
Toll, das ist das beste, was ich seit langem dazu gelesen habe, vielen Dank!!Virenscanner haben mehrere Probleme
(Compliance)
(1) AppArmor
So ein Update ohne die unattended-Steuerung kann dann schiefgehen oder anhalten, wenn eine Eingabe erforderlich ist oder eine Abfrage kommt. Da kann man bestimmt Variablen setzen und (weitere) Parameter setzen, es gibt dazu aber auch ein fertiges Debian-Paket (warum auch immer autoupdate kein default ist) und viele Tutorials im Netz, ich mach manchmal sowas wie0 6 * * * (apt-get update && apt-get -y upgrade) > /dev/null
apt-get install -y unattended-upgrades apt-listchanges bsd-mailx apt-config-auto-update
echo 'Unattended-Upgrade::Mail "root";' >> /etc/apt/apt.conf.d/50unattended-upgrades
echo unattended-upgrades unattended-upgrades/enable_auto_updates boolean true | debconf-set-selections
dpkg-reconfigure -f noninteractive unattended-upgrades
Punkt 4.
One Network Service Per System or VM Instance
Ist ja mein reden ;-)
Naja, da sind wir jetzt beim Thema "Abwägungen"
Wenn man die Ressourcen hat, ist es natürlich besser eine VM pro Dienst zu haben, klar.
Genau so sehe ich das auch, die Datenströme idealerweise über eine Firewall (nicht "Paketfilter", sondern "Firewall", so mit HTTPS Proxies und so) leiten und auch gern mal reinschauen, wenn möglich oder gleich blocken (aber dann gibt's auch keine Updates - den Krieg haben wir leider verloren).Naja, das kommt natürlich darauf an, wie weit man es treiben möchte. Wenn man z.B. eine Hausautomatisierung oder IoT-Geräte hat, würde es sich ja z.B. anbieten, die in eigene Netze zu packen. Wenn man mit Virtualisierung rumspielt (wie wir hier) könnte man außerdem die VMs vom eigentlichen Heimnetz zum Surfen trennen.
Das kenn ich, da hängt bestimmt irgendwas an einem seriellen Kabel und übersetzt Daten in IP oder so, da den direkten Zugang verhindern (sprich: Internetzugang blocken, Updates gibts ja eh nicht, nur Nutzdatenport(s) erlauben, "137" darf nicht dabei sein usw; ) und gut ist. Wenn an ein unsicheres Windows keiner rankommt und vor allem keiner ein Outlook dadrauf startet, dann passiert ja da auch nichts.Oder LAN und WLAN und das nochmal in ein Gäste- und Familiennetzwerk Ich mache das zugebenermaßen auch nicht bisher, aber da gibt es schon einige Möglichkeiten. Bietet sich besonders an, wenn man Geräte hat, die keine Securityupdates mehr kriegen, aber "aus Gründen" trotzdem noch betrieben werden (bei mir auf der Arbeit hatten wir noch sehr lange Windows2008 VMs für eine spezielle Anwendung bis wir die endlich losgeworden sind).
Hey, das ist ja schick!Sorry für die lange Pause, aber es hat sich einiges getan.
Ich habe den RAM, das Board und die CPU getauscht.
Neues Setup:
Mainboard: ASUS TUF Gaming B760M Plus
RAM: 2 x 32 GB Kingston Fury Beast
CPU: I5-12400
PCIe: LSI 9300-8i in HBA / IT Mode geflashed
4 x 4 TB SAS HDD (am PCIe Controller)
2x 1 TB M2 SSD -> ZFS Mirror als Datastore für die VM`s
2x 500 GB SATA SSD -> ZFS Mirror als Bootplatte für pve
2x 3 TB SATA HDD -> hängen noch rum und werden wahrscheinlich "LangzeitBackup" oder irgendwann mal in eine extern NAS geschraubt.
Das geht?Nächste Schritte sind:
- HTTPS im lokalen Netz
- Alle root Accounts deaktivieren
IoT finde ich wichtig, für diese Cloud-Only-Krempel nur Internet (am besten nur über Proxy), aber keinen Zugriff aufs LAN, ggf. Portweise HTTPS oder sowas. Ich nehm da gern eine OPNsense VM.Wenn dann immer noch alles funktionieren sollte, Netzwerk umbauen in die Bereiche Internet/DMZ, Heimnetz, IoT, Management, Gäste/DHCP
- System ein wenig härten
Ja, es arbeitet dann mit VLAN tags und braucht (ggf) entsprechend konfigurierten Switch-Port.Aufgrund der Gegebenheiten muss ich die Netztrennung mit VLANs in separaten Netzbereichen machen. Dazu hätte ich aber noch eine Verständnisfrage:
Ich habe nun eine 2,5 Gbit RJ45 Verbindung im proxmox Server. Diese ist ja standardmäßig als vmbr0 eingerichtet. Ich habe das VLAN Tagging aktiviert, nun versteht das Teil ja VLANs oder?
Ja genau. BTW: dann schützt der Switch natürlich die VLANs nicht mehr, denn wenn eine Proxmox-VM da rankommt, kommt ein Angreifer, der die kontrolliert, da auch ran. Aber da Du ja nicht *vor* den Containern schützen willst, sondern vor den IoT Geräten, ist das OK. Ansonsten könnte ein Angreifer, der einen Container übernommen hat, natürlich u.U. Wege finden, aus diesem auszubrechen, das Proxmox übernehmen und hat dann Zugriff auf alle VLANs.Wenn ich jetzt den proxmox Server an einen Switch anschließe (auf dem die VLANs konfiguriert sind) muss ich an dem Switch proxmox Port wahrscheinlich alle VLANs konfigurieren.
Falls man da routet und Proxmox auch jedes VLAN gibt, dann ja, aber das würde man wohl eher nicht wollen, denn dann bräuchte man ja keine VLANs.In proxmox und in den VMs weise ich dann in den Netzwerkeinstellungen einfach die VLAN Tags zu und geben denen entsprechend ihre neuen IP`s und proxmox übernimmt dann das interne Routing oder?
Nein, perfekt "sicher" ist es natürlich nie.Ist das ... sicher?
Bis zu einem gewissen Grad ist das so, aber es kann immer Bugs überall geben, vielleicht ein Kernelbug, der einem Angreifer ermöglicht... was auch immer.Also ist es sicher dass proxmox sicherstellt, dass niemand aus seinem VLAN ausbricht?
VLAN ist vergleichbar mit einem "virtuellen Kabel". Damit kann man ein Netzwerk isolieren. Man könnte machen:Beispiel:
Wenn VM1 VLAN10 auf dem Switch eine Route zu VM2 VLAN20 haben sollte
wenn Du ein vmbr0 mit tag 10 (nennen wir das vmbr0.10) einer VM zuweist, kommt deren Traffic mit VLAN 10 getaggt aus dem vmbr0 Basisinterface und wird von anderen ignoriert. Jetzt kann man das in einen trunk port eines Switches stecken und dem Switch sagen, Port 5-9 sind VLAN 10. Dann kommt der VLAN 10 getaggte Traffic vom trunk port an port 5 bis 9 OHNE Vlan tag an. Traffic von Port 5 bis 9 bekommt vom Switch das VLAN 10 verpasst und wird zum Trunk geleitet, wo es dann zu der VM geht. Wenn an Port 4 oder 10 ein VLAN 20 ist, packt der Switch da ein VLAN20 drauf *und die sehen nichts* und werden nicht gesehen. Port 9 und 10 sind voneinander isoliert, als ob es zwei switches mit zwei Kabeln wären.(zB irgendeine Anwendung, Portfreigabe wie auch immer), dann kommuniziere die VMs nicht einfach untereinander über den Host sondern gehen wirklich den Weg über den Switch?
Das geht?
Warum? Traust Du SSH Keys nicht?
Irgendwie musst Du ja administrieren können.
Ich glaube, das "Perimetersecurity is dead" ist (clickbait oder) eine Übertreibung bzw ein Mißverständnis. Perimetersicherheit war schon in den 90ern zonenbasiert, "DMZ" ist ein sehr alter Begriff, und schon damals hat man auch gern mehrere Zonen gemacht. Das hat sich einfach nur weiterentwickelt. In noch mehr Zonen und dann in maximal-viele-Zonen, bis hin zu 1 Zone pro 1 Dienst, also z.b. 1 Container mit 1-Port-Netzwerk, wo es einfach geht. Oft hab ich aber auch einige Container, die zusammen was darstellen (Webserver, Datenbank, Script), das ist dann auch eine "Zone" mit "Perimetersecurity".
Wichtig ist, dass man gute Backups hat und die selbst nicht ändern kann (dann, und nur dann, kann der Angreifer das auch nicht). Das einigermaßen gut hinzukriegen ist erstaunlich schwierig und unkomfortabel, aber sollte immer höchste Priorität haben, finde ich.
(Das ist, glaube ich, nur sicherer vor Fehlbedienung und dafür gedacht, war mal irgendeine ubuntu Erziehungsmaßnahme, weil angeblich alle Ex-Windows-User als root gearbeitet haben sollen oder so. Das Passwort bei sudo ist ja das vom User.)Naja, man kann natürlich sich auch einen User für den Login einrichten und dem dann erlauben nur mit sudo und Eingabe eines Extrapasswords Adminrechte zu kriegen. Ob das dann wirklich sicherer ist, darüber kann man lange streiten
Außerdem funktionieren SSH-Keys und NFS4-Authentifizierung per Kerberos nicht zusammen: NFS4 braucht einen passwort-login, der bei ssh dann ja wegfallen würde. Zugebenermaßen: Wer heutzutage noch NFS4 für /home-Directories o.ä. nutzt, ist eh selbst schuld.
Bei einem PVE ist doch ein (gutes) Root-Passwort kein Problem, muss auch keine 12 Stellen haben. Das muss man nur bei Windows so stark machen, weil das NTLM ja die Passwörter offline prüfbar (offline brute force) macht, da es abgeleitete Daten rausgibt (damit ist der Angriff so schnell wie ein known-hash-Angriff, offline brute force, Fehlversuche hinterlassen keine Spuren, da ja nicht online).Grundsätzlich finde ich ssh-keys vertrauenswürdig, aber beim Deployment von Handling etwas umständlich, darum will ich schon länger mal versuchen mir was mit ssh-Zertifikaten und smallstep zu bauen, aber der Tag hat halt nur 24 Stunden:
https://smallstep.com/blog/use-ssh-certificates/
https://news.ycombinator.com/item?id=30788544
Für Homelabs (und somit den OP) sollten sie (plus Passwortlogin deaktivieren) aber auf jeden Fall erstmal ausreichen![]()
Diesen "Single Zone"-Ansatz gabs aber (hoffentlich) nur in irgendwelchen Windows-Netzen (Microsoft hatte ja in den 90er erklärt, dass alles so einfach ist, dass eine Sekretärin Drucker und Netzwerk einrichten kann, und dann haben die Firmen Leute zu Sekretärinnengehältern eingestellt und entsprechende Netzwerke bekommen :/), oder? Oder wenn der 16-jährige Sohn vom Chef das Netz eingerichtet hat, alles schon gesehen...Genau das war der Punkt des Referenten: Der klassische Ansatz "Internes Netzwerk(Firma) gut, Außenwelt böse" und dazwischen die Firewall zu packen, klappt halt nicht mehr im Zeitalter von nach hause telefonierenden Endgeräten und Nutzung von Cloud-Infrastrukturen.
Ja genau, wichtig ist halt nur, dass der root dann kein auth gegen das Active Directory macht, was der Hacker gerade gebrochen hatAls root auf den Server, wo der Dienst läuft, kann man das natürlich trotzdem, andererseits hat man dann ja eh verloren und sollte für den Fall eh noch ein Backup woanders (z.B. auf externen Laufwerken oder anderen Server/Cloudspeicher) haben.
(Das ist, glaube ich, nur sicherer vor Fehlbedienung und dafür gedacht, war mal irgendeine ubuntu Erziehungsmaßnahme, weil angeblich alle Ex-Windows-User als root gearbeitet haben sollen oder so. Das Passwort bei sudo ist ja das vom User.)
Ja, NFS home auf normalen Workstations geht leider gar nicht mehr, weil die Pötterings dieser Welt da ein ~/.tmp und .cache und weiß ich was reintun, und nicht mehr nur der Browser (seit ich glaube Netscape Navigator 4) nicht mehr mit alten Profilen startet (man also überall die gleiche Version haben soll). Ich trauer dem Stand davor ja nach. Einfach irgendwo anmelden und losarbeiten. Neuer Server da, bash drauf, alles geht. Jetzt muss ich meine dotfiles erstmal aus einem Git auschecken.
(In einigen nicht-graphischen Umgebungen habe ich noch NFS, aber local firewalled und per IP access rules, also Linux kann das alles noch, nur der ganze "Desktop"-Kram zickt)
Bei einem PVE ist doch ein (gutes) Root-Passwort kein Problem, muss auch keine 12 Stellen haben. Das muss man nur bei Windows so stark machen, weil das NTLM ja die Passwörter offline prüfbar (offline brute force) macht, da es abgeleitete Daten rausgibt (damit ist der Angriff so schnell wie ein known-hash-Angriff, offline brute force, Fehlversuche hinterlassen keine Spuren, da ja nicht online).
Ein Linuxserver sollte aber den Passworthash von root nicht (und auch nicht irgendwas entsprechendes) rausgeben. Damit kann man nur online brute force machen, schafft nur ganz wenige Versuche pro Sekunde und kann auch 8 Stellen kaum erraten und man siehts im Log (falls man guckt).
Mit deployment meinst Du das Updaten von SSH pub keys in den Servern?
Ich hab da so ein ansible playbook und ich ändere meine SSH keys immer schön alle 10 Jahre. Nee nur Spaß, so lange lebt ja kein algo.
Diesen "Single Zone"-Ansatz gabs aber (hoffentlich) nur in irgendwelchen Windows-Netzen (Microsoft hatte ja in den 90er erklärt, dass alles so einfach ist, dass eine Sekretärin Drucker und Netzwerk einrichten kann, und dann haben die Firmen Leute zu Sekretärinnengehältern eingestellt und entsprechende Netzwerke bekommen :/), oder? Oder wenn der 16-jährige Sohn vom Chef das Netz eingerichtet hat, alles schon gesehen...
Ich hab immer die Windowse weggesperrt, gefühlt kamen immer 9 von 10 Angriffen über Windows.
Aber das ist für zu Hause alles ein bisschen fett, da reicht vielleicht ein mv pub/incoming/* readonly/ cron oder sowas auf dem nas.
...und dann die Daumen drücken, dass man nichts vergessen hat...
Aber dafür sind sie ja auch daJo, ist wie gesagt "Geschmackssache", was man envtl. noch als Vorteil sehen kann, dass man (wenn man das System passend konfiguriert) über die Logs nachvollziehen kann, wenn ein Admin Mist gebaut hat. Kann mir gut vorstellen, dass die Ubuntu-Einstellung aus der Notwendigkeit entstanden ist Leute vor sich selbst zu schützenUnd dabei nehme ich mich nicht aus, mir haben Backups schon oft genug den Tag gerettet.
Früher (TM) gabs so "dotfiles" aka "rc files" (steht für "runtime config", da sieht man, wie alt das istHm, das Problem verstehe ich nicht. Auch vor der Standardisierung zu ~/.tmp, ~/.cache etc haben Anwendungen schon Caches oder andere temporäre Daten im Homeverzeichnis abgelegt, (Firefox halt unter .mozilla statt .cache/mozilla), da sehe ich nicht warum das NFS kaputt machen sollte?
NFS ist systemweit gedacht, nicht benutzerweit, ist also nicht das "ein Mensch sitzt an einem Gerät" Konzept (wie bei Windows PCs), sondern "Es g ibt n Benutzer mit m unterschiedlichen Eigenschaften an j Geräten" (klassisches Unix). Daher macht sowas wie "nehme ein Benutzerkennwort für irgendwas am (File-)System" auch so keinen Sinn (und ist eh doof, wie man bei Windows NTLM sieht, was die erst JETZT langsam rauswerfen). Die Kommunikation zur lokalen SSD verschlüsselt man (meistens) ja auch nicht.Das Grundproblem ist doch nicht, dass man keinen Netzwerkstorage mehr nehmen kann (kann man ja immer noch), sondern dass die üblichen Verdächtigen wie NFS nur mit Verrenkungen Authentifizierung und Verschlüsselung unterstützen.
Ja, davon rate ich ab. Das Keymanagement ist IMHO ein größerer Angriffsvektor als ein (jährlich) fester SSH Key. Ich habe wesentlich öfter Störungen durch falsche Systemuhren als Angriffsversuche. Bei X.509 Zertifikaten zb. ist ein DoS Angriff falsche Urzeit und das geht leider öfter, als man möchte. Ich kenne viele, die daher vorschreiben, dass man bei falscher Uhrzeit mit SSH key raufkommen können muss (weil 2FA TOTP ja nicht geht, wenn die Uhr falsch ist, und Zertifikate auch nicht).Exakt, sobald man mehr als eine Hand voll Admins hat und mehrere 100 VMs darüber administrieren muss, skaliert das Deployment der Keys nicht mehr sehr gut. Mit ansible, puppet o.ä. lassen sich die Schmerzen zwar mildern, aber die Grundidee, dass man über ein ablaufenden Zertifikat die Lebenszeit von Anfang an begrenzt, finde ich noch mal deutlich besser. Bringt (wie alles) halt dafür seine eigenen Probleme mit sich, weshalb ich das bisher auch auf "wenn mal Zeit ist" verschoben habe.
Das Windows-Konzept ist schon richtig doof, finde ich. Eine Datenbank für alles (Defective Actory), das gleiche Token für alles (also brauchen Benutzer mehrere Accounts, toll), dann Keys aus Passwörtern abzuleiten ist extrem dämlich, denn so kann jeder im Netzwerk Passwörter "offline" raten und man braucht extrem starke Passwörter, dann werden credentials "gecacht" und zwar wiederverwendbar (siehe mimikatz). Der Tokenansatz geht für fast alles und hat ganz tolle Probleme (siehe Goldticket). Die haben CHAP "verbessern" wollen, MS-CHAP gemacht und es vollkommen zerstört. Dann haben sie MS-CHAPv2 gemacht *und es wieder komplett zerstört*. Das ist schon echt unglaublich. Das ACL basierte Rechte Management ist so kompliziert, dass in großen Firmen es keiner mehr beherrscht (viele Admins wissen nicht einmal, das ACLs beim Kopieren nicht kopiert werden, beim Verschieben aber schon und es gibt 1000 weitere Ausnahmen). Mit einem Druckeraccesstoken kann man Dateien auf allen Servern schreiben und und undDas das der Hauptangriffsvektor ist, ist eh klar, aber das liegt, meiner Meinung nicht daran, dass Linuxer per se sicherere Systeme haben oder diese besser abschotten, sondern weil es für Ransomware-Gangs schlicht mehr Profit mit weniger Aufwand gibt ihre Exploits auf Windows zu konzentrieren.
Trotz der stärkeren Verbreitung von Linux im (Web)serverbereich.
richtig, und vermutlich kommt der Active Directory Hacker schon deshalb nicht ans Linux, weil da es ein lokales Konto gibt und kein winbind aktiv ist, das hilft meiner Meinung nach schon sehr sehr viel (die ransoms, die ich kenne, gingen alle über AD).Klar, wir haben uns in unserer Debatte schon ein bissel weit vom Ausgangsszenario entferntFür den OP reicht es imho den Kram irgendwo hin zu kopieren, wo es nicht einfach verändert werden kann (also externe, normalerweise abgestecke Festplatte + irgendein write-only Cloudspeicher, PBS lässt sich ja auch so konfigurieren).
Aber dafür sind sie ja auch da
Fehler passieren immer mal. Mist gebaut hätte man IMHO (nur), wenn man kein Backup hat.
Früher (TM) gabs so "dotfiles" aka "rc files" (steht für "runtime config", da sieht man, wie alt das ist)), wie .vimrc oder .muttrc.
NFS ist systemweit gedacht, nicht benutzerweit, ist also nicht das "ein Mensch sitzt an einem Gerät" Konzept (wie bei Windows PCs), sondern "Es g ibt n Benutzer mit m unterschiedlichen Eigenschaften an j Geräten" (klassisches Unix). Daher macht sowas wie "nehme ein Benutzerkennwort für irgendwas am (File-)System" auch so keinen Sinn (und ist eh doof, wie man bei Windows NTLM sieht, was die erst JETZT langsam rauswerfen). Die Kommunikation zur lokalen SSD verschlüsselt man (meistens) ja auch nicht.
In diesem Konzept hat ein Benutzer gar keine Rechte, um Dateisysteme im System zu ändern, denn das könnte ja andere Benutzer stören, und die sind zu isolieren (dafür sind Nutzeraccounts ja da), und zwar auch auf ein- und demselben System und gleichzeitig. Da kann ein Benutzer kein WLAN oder DNS einrichten können oder ein NFS mounten, das muss der Admin tun. Auch das Netzwerk gehört dem System und keinem Benutzer.
Daher macht man z.B. IPSec zum NFS Server, systemweit.
We use essential cookies to make this site work, and optional cookies to enhance your experience.