Hoe je directe toegang tot productie afschermt zonder gek te worden
Het distribueren van SSH-sleutels naar engineers verandert vaak in chaos. Iemand vertrekt, maar hun publieke sleutel blijft op tientallen productieservers. Iemand voert per ongeluk een gevaarlijk commando uit in de verkeerde terminal, en dan breng je een halve dag door in systeemlogboeken om erachter te komen van wie de sessie was.
Naarmate het aantal servers groeit en het team uitbreidt, worden directe machineverbindingen een hoofdpijn. Meestal kijken bedrijven op dit punt naar het 4A-concept: authenticatie, autorisatie, accounting en auditing. Het implementeren van zware oplossingen zoals Teleport of CyberArk kost echter veel tijd en middelen.
Ik ben onlangs een project tegengekomen genaamd OneTerm op GitHub. Het is een lichtgewicht open-source toegangspoort geschreven in Go en Vue.js. Het lost het probleem van gecentraliseerde servertoegang op zonder complexe configuratie.
Wat zit erin OneTerm
Het principe is eenvoudig: OneTerm wordt een laag tussen medewerkers en de productie-infrastructuur. Ontwikkelaars maken geen directe verbinding met hosts via SSH of RDP. Ze loggen in op OneTerm's webdashboard en starten vanaf daar de benodigde sessie.
Het project dekt basisbeveiligingsbehoeften:
- Enkelvoudig toegangspunt met ondersteuning voor tweefactorauthenticatie.
- Machtigingen verlenen voor specifieke servers en gebruikersgroepen.
- Video- en tekstlogboekregistratie voor elke sessie. Als er iets misgaat op een server, kan de bewerking worden teruggestuurd in de ingebouwde speler om de details te bekijken.
- Sessie-isolatie om te voorkomen dat gebruikers elkaar beïnvloeden en om bevoegdheid-escalatie binnen de gateway te voorkomen.
- Interne hosts beschermen tegen directe toegang vanaf het externe internet.
Naast standaard SSH ondersteunt OneTerm ook RDP- en VNC-protocollen. Dit is handig voor wie Windows-servers of virtuele machines met grafische interfaces draait in hun infrastructuur.
Technische stack en integraties
De technische stack van het project is vrij vertrouwd. De backend is geschreven in Go, en de gebruikersinterface is gebouwd met Vue.js met behulp van de Ant Design Vue-bibliotheek. De Go-build biedt laag geheugengebruik en snelle webterminalprestaties.
Ontwikkelaars hebben native integratie toegevoegd met Veops CMDB. Dit is een ander open-source project van hen. Als apparatuuradministratie wordt bijgehouden in hun CMDB, worden servers met één klik geïmporteerd naar de bastion. Geen noodzaak om handmatig IP-adressen, poorten en inloggegevens in te voeren.
Laten we naar de systeeminterface kijken.
De terminal werkt direct in het browservenster. Engineers hoeven geen lokale clients te configureren, tunnels op te zetten of sleutels op hun laptops op te slaan.
Toegangsrechten worden gesegmenteerd op basis van tijd en rollen. Je kunt toegang tot een server alleen verlenen voor de bereikbaarheidsperiode of tijdens technisch werk.
Hoe te deployen en testen
Voor een lokale introductie hebben de auteurs een Docker Compose-configuratie voorbereid. Opstarten duurt een paar minuten:
git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
docker compose up -d
Nadat de containers zijn gestart, opent de webinterface op http://127.0.0.1:8666. De standaard login is admin en het wachtwoord is 123456.
Voor een productieomgeving werkt deze optie niet. Voor dit geval schreven de ontwikkelaars een interactief installatiescript ./setup.sh. Het genereert willekeurige wachtwoorden voor de database en interne services, werkt de configuraties zelf bij en slaat een back-up op.
git clone https://github.com/veops/oneterm.git
cd oneterm/deploy
./setup.sh
docker compose up -d
Als je je eigen functionaliteit wilt toevoegen, heeft het project kant-en-klare hot-reload scripts voor de frontend en backend: ./dev-start.sh frontend en ./dev-start.sh backend. Node.js versie 14.17.6+ en Go versie 1.21.3+ zijn vereist voor het bouwen.
Nuances en beperkingen
Voordat je het gereedschap in een productieomgeving brengt, moet je met een paar specifieke zaken rekening houden:
- De code wordt gedistribueerd onder de AGPL-3.0-licentie. Als je besluit er een gesloten commerciële SaaS-oplossing van te maken, moet je je wijzigingen openbaar maken.
- De
mainbranch in de repository wordt voortdurend bijgewerkt en kan onstabiel werken. Gebruik voor servers alleen gebouwde releases van de Releases-pagina. - De documentatie is nog vrij beknopt. Ontwikkelaars reageren in GitHub Issues, maar sommige details moeten rechtstreeks uit de broncode worden gehaald.
Samenvatting
OneTerm is geschikt voor kleine operations-teams en systeembeheerders die snel toegangsbeheer willen organiseren. Als je een eenvoudige bastion-host nodig hebt met sessieopname, toegangssegmentatie en SSH- en RDP-ondersteuning, dekt het project basisbehoeften zonder onnodige complexiteit.
Je kunt de interface uitproberen zonder installatie op de officiële demo oneterm.v1ops.com met login demo en wachtwoord 123456.
Gerelateerde projecten