Door Anoniem: Een aantal dingen waar ik aan denk:
- Ik weet dat je public key authentication moet gebruiken en password login uit moet zetten voor SSH.
- Maar is dat voldoende? is Fail2Ban goed genoeg, of toch maar dat port knocking inzetten?
Waarom moet je zonodig vanaf het hele internet managen, als je een "supermaximaal veilige server" wilt ?
Zet een packetfilter op een heel klein aantal trusted IPs (typisch je thuis IP).
Of desnoods een kleine range (heel KPN mobiel is een heel klein brokje van "het Internet" .).
- En je standaard TLS configuratie gebruikt zwakke ciphers, maar wat is nog meer standaard zwak?
Dat is voor je server helemaal geen risico, alleen nogal theoretisch voor data die je verstuurt.
Het hele feit dat je TLS praat is al een risico .
Je gooit het (ik heb dat eerder gezegd) allemaal op dezelfde 'security' hoop.
- ICMP ja/nee? Het zou kritiek zijn voor IPv6. Is het echt zo gevaarlijk, gezien het vaak gewoon aan staat?
Natuurlijk niet. En je kunt een hoop functionaliteit kapot maken als je het volledig uitzet.
Zorg dat je snapt hoe icmp werkt. Zorg uberhaupt dat je heel grondig snapt hoe dingen werken.
En ja - icmpv6 volledig blokkeren zorgt voor een onbereikbare server.
Blindings scrippies met 'tuning' of 'hardening' overtypen is voor prutsers.
Weet wat je doet , als je dan de hobby of ambitie hebt om met dit soort dingen te werken.
- Er is HTTP op poort 80 voor HTTPS redirect of voor certificate challenges. Beter wel dan niet, toch?
Wat wil je, of wat wil je niet ?
Er zijn meer challenge opties dan http . DNS kan ook.
Een simpele webserver met plain HTTP is - voor je server - veiliger dan een https webserver.
Een muur van directe antwoorden:
Je moet het splitsen in twee onderdelen: de host (OS / webserver / etc) en de website(s).
De host kan je inderdaad zeer goed beveiligen, beperk management tot 2 of 3 IP's en gebruik inderdaad minimaal pubkey authenticatie. Mocht je het beter willen, gebruik MFA (bv TOTP of beter, Yubikeys / FIDO2) bij het inloggen. Zorg voor een regelmatig update regime of nog beter auto-update voor alles behalve major versions (monitor dit ook). Draai webserver software geïsoleerd zoals in een jail of containers (handig voor updates). Op die manier is fail2ban of portknoking in principe niet nodig (enkel een paar ip's toegestaan om verbinding te maken). Je kan ook nog notificaties op inlogpogingen zetten om misconfiguraties snel te herkennen. Mijn notificaties (K8s) gaan naar een Mattermost (slack) channel waar alle alermering en update notificaties samen komen.
yup.
Wanneer je management moet doen vanaf een willekeurige locatie, maak dan een VPN verbinding met de management locatie (zoals werk). Zwakke ciphers blokkeren is meestal een kleine moeite en maakt MiTM attacks moeilijker. Doe dit wel op alle diensten (vergeet SSH niet).
MITM heeft vooral met authenticatie te maken, minder met het werkelijke cipher.
Om de een of andere reden vinden mensen een 'exposed VPN protocol' minder een risico dan een 'exposed SSH port' .
Ik snap dat niet zo goed.
Denk ook bij de VPN server aan alle noodzakelijke hardening. Het is ook gewoon een OS met een nogal complex stuk software dat "VPN" doet .
VPN is fijn als je een end-to-end IP connectiviteit naar (diverse) hosts wilt/moet hebben. Doe je 'gewoon' cli management of wat gescripte zaken kan dat ook over SSH.
ICMP moet inderdaad aan staan voor IPv6. Gezien het een apart protocol is, kan je dit ook apart toestaan mocht je ICMP IPv4 willen blokkeren. Als je het tot echo beperkt, maakt het niet veel verschil. Maar minder poorten open is altijd beter. Poort 80 hoeft naar mijn mening niet meer open te staan, je kan gewoon DNS challanges gebruiken en dat is veiliger. Gebruik snapshots van de host machine voor snelle restore functionaliteit.
yup. Hoewel plain http echt geen groter risico hoeft te zijn dan "dns" - en de manieren waarop je data in die dns server wilt stoppen.
Soms is DNS 'somebody elses problem' - dat kan een voordeel zijn. Maar fundamenteel is het yet another informatie bron met een erg publieke query API , software van verschillende kwaliteit en diverse mogelijke APIs om informatie erin te wijzigen.
De APIs om informatie erin te stoppen moet je ook hard over nadenken, hoe je zorgt dat dat alleen kan door de authorized bronnen.
Of het nu een webpanel met authenticatie is, hidden master, scripted login en config edit, een of andere database sync naar de onderliggende database , whatever.
De keuze van DNS server software maak je (eventueel) ook zelf, net als de keuze van de webserver software.
Wat betreft de websites die je host, het veiligste is om statische sites te draaien (dus simpelweg html). Er zijn daarvoor diverse frameworks en dat geeft geen aanvalsvector (geen management). De meest gehackte sites draaien wordpress en worden meestal gehacked door plugins en gebrek aan updates. Zorg dus ook dat dat geautomatiseerd is.
Ik gebruik verder Crowdsec op de ingress firewall, die banned direct de meest ranzige ip's. Dat geeft al een goede eerste bescherming van de gehoste sites maar het is verstandig deze continue te scannen. Mocht je ranzige wordpress sites moeten draaien, zorg dan weer dat updates goed gemanaged worden (diverse plugins en software voor).
yup.
...