Terug naar de Webship blog

Webship techniek

Beveiligd AI-agents verbinden met de Webship’s MCP-server

Stel het geïsoleerde MCP-beheerplatform van Webship in met TLS 1.3, een sterk bearer-token, loopback-binding, een SSH-tunnel, configuratievalidatie en een praktische checklist voor incidentenrespons.

# Verbind AI-agents veilig metWebship’sMCP Server

Een MCP verbinding met een webserver is geen chatwidget. Het is een bedieningsinterface die de productiestatus kan inspecteren, routering- en beveiligingsbeleid kan wijzigen, certificaten kan herladen, statische releases kan activeren, fleet-wijzigingen kan coördineren en een ondertekende kan installerenWebship update.

Behandel het dienovereenkomstig: als een bevoorrechte administratieve API. Het veiligstWebship installatie blijft deMCP luisteraar van het openbare gegevensvlak, koppelt het aan loopback, beschermt het met TLS 1.3 en een sterk bearer-token, en bereikt het via een geauthenticeerde SSH-tunnel.

Deze gids bouwt die opstelling op, legt uit waarom elke grens bestaat, en geeft je een checklist om deze te bedienen zonder dat gemak verandert in blootstelling.

Begin met de vertrouwensgrens

Webshiphet openbaar vervoer enMCP verkeer gebruik aparte luisteraars. De MCP het controlevlak is standaard uitgeschakeld en deelt nooit de normale HTTP, HTTP/2, HTTP/3, of WebTransport luisteraar. Wanneer ingeschakeld, dient hetMCP over een specialeTLS 1.3 HTTP/1.1 eindpunt.

Een veilige implementatie heeft vier onafhankelijke controles:

  1. Netwerkbereikbaarheid: de MCP luisteraar bindt aan127.0.0.1, geen openbaar of privé-LAN-adres.
  2. Transportidentiteit: de cliënt verifieert een certificaat dat is uitgegeven door een CA die hij vertrouwt.
  3. Applicatie-authenticatie: elk verzoek draagt een sterke bearer-token.
  4. Administratieve toegang: operators krijgen toegang tot de loopback-luisteraar via een geverifieerd SSH-account en tunnel.

Geen van deze controles vervangt een andere. TLS zonder een privé-netwerkpad brengt nog steeds een authenticatievlak aan het licht. Een tunnel zonder certificaatverificatie maakt de identiteit van het eindpunt onduidelijk. Een bearer token in een wereld-leesbaar bestand is geen geheim.

Bereid het certificaat en de token voor

Een speciale uitgevenMCP certificaat van uw interne CA. Voor de hieronder getoonde tunnel, voeg toelocalhost en 127.0.0.1 in de subject-alternatieve namen van het certificaat, installeer dan de uitgevende CA in de MCP vertrouwensstore van de clientmachine. Los een vertrouwensfout niet op met een onveilige TLS-optie.

Maak een uniek token met minstens 32 printbare ASCII-bytes en geen spaties. Een 32-byte willekeurige waarde die als hexadecimaal is gecodeerd, geeft je 64 veilige tekens:

umask 077
openssl rand -hex 32

Webship leest momenteel deMCP token rechtstreeks van de beschermdeTOML configuratie; token_file wordt niet ondersteund. Sla het resultaat op in een configuratiebestand dat alleen leesbaar is door de Webship serviceaccount en de bijbehorende administratieve groep. Plaats het token niet in een systemd-unit, shellgeschiedenis, ticket, chatbericht of prompt die naar een AI-model wordt gestuurd.

Op een typische Debian-host:

sudo chown root:webship /etc/webship/production.toml
sudo chmod 0640 /etc/webship/production.toml
sudo chown root:webship /etc/webship/mcp-cert.pem /etc/webship/mcp-key.pem
sudo chmod 0644 /etc/webship/mcp-cert.pem
sudo chmod 0640 /etc/webship/mcp-key.pem

Pas de servicegebruiker en groep aan op uw installatie. De privésleutel en configuratie moeten leesbaar zijn voor Webship, maar niet door niet-verwante accounts.

Schakel de geïsoleerde luisteraar in

Voeg deze sectie toe aan de actieveWebship configuratie:

[security.mcp]
enabled = true
listen = "127.0.0.1:9443"
token = "replace-with-your-generated-64-character-token"
allowed_ips = []
expose_remote = false

[security.mcp.tls]
cert = "/etc/webship/mcp-cert.pem"
key = "/etc/webship/mcp-key.pem"

Een lege allowed_ips lijst opent het eindpunt niet. Loopback-clients blijven standaard toegestaan.expose_remote = false maakt de beoogde grens expliciet: als iemand later verandertlisten naar een niet-loopbackadres, Webship wijst de configuratie af in plaats van de control plane stilletjes te publiceren.

Webship wijst ook een ingeschakelde afMCP luisteraar zonder TLS, zonder een token, met een kort of spatie-bevattend token, of met lege certificaatpaden. Openbare tijdelijke tokens worden geweigerd voordat ze op afstand worden blootgesteld.

Valideer voordat u opnieuw opstart

MCP listener, TLS-identiteit en tokenwijzigingen bouwen het control plane opnieuw op, dus ze vereisen een herstart van het proces. Valideer eerst de volledige configuratie:

/usr/local/bin/webship --check-config --config /etc/webship/production.toml
sudo systemctl restart webship
sudo systemctl status webship --no-pager

Bevestig dat de luisteraar alleen op loopback bestaat:

ss -ltn | grep '127.0.0.1:9443'

Voeg poort 9443 niet toe aan de openbare firewallregels van de host. De volgende stap bereikt het via SSH.

Maak de privé-tunnel

Vanaf het werkstation van de beheerder, maak een lokale poort door naarWebship’s loopback-luisteraar:

ssh -N \
  -L 127.0.0.1:19443:127.0.0.1:9443 \
  webship-admin@edge.example.com

De MCP client maakt nu verbinding methttps://localhost:19443/mcp. TCP bereikt de SSH-server, SSH draagt de verbinding over naar de host, en de host opent de uiteindelijke verbinding naar Webship op loopback. Het sluiten van de SSH-sessie verwijdert dat pad onmiddellijk.

Gebruik sleutelgebaseerde SSH-authenticatie, beperk welke beheerders de tunnel kunnen openen, en pas uw normale host-toegangscontroles toe. Als een jump host nodig is, houd de MCP luisteraar op de Webship de loopback-interface van de host en verleng het SSH-pad in plaats van de luisteraar te verbreden.

Configureer de MCP klant

Clientconfiguratie-indelingen verschillen, maar een typische HTTPMCP invoer ziet er zo uit:

{
  "mcpServers": {
    "webship-production": {
      "url": "https://localhost:19443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>"
      }
    }
  }
}

Gebruik het beschermde geheime mechanisme van de client wanneer dit aanwezig is. Beperk anders de clientconfiguratie tot het huidige besturingssysteemaccount. De HTTP-client — niet het model — moet de autorisatiekop toevoegen. Plak nooit het live-token in een gesprek.

Houd de certificaatverificatie ingeschakeld. Als de client het certificaat weigert, repareer dan de alternatieve namen van het certificaat of installeer de juiste interne CA. Voeg geen permanente bypass toe.

Maak de eerste sessie alleen-lezen

Nadat de tunnel en de cliënt verbonden zijn, begin met ontdekkings- en inspectiewerk:

  1. Vraag omtools/list; het is antwoord is het gezaghebbende argumentatieschema voor de lopende release.
  2. Bellenwebship.get_config en registreer de huidige configuratieversie.
  3. Inspecterenwebship.reverse_proxy.get_status, webship.security.get_status, webship.ddos.get_status, en webship.tls.get_status indien van toepassing.
  4. Gebruik webship.policy.explain of webship.security.simulate voordat u een beleid wijzigt.
  5. Bevestig dat de geretourneerde configuratie bearer-tokens verwijdert.

Test een mutatie alleen dan in een niet-productieomgeving.Webship’s configuratiemutaties vereisen de huidige versie-ID. Een verouderde schrijfactie wordt geweigerd in plaats van een nieuwere wijziging te overschrijven. De kandidaatbeleidsregel kan worden gecontroleerd met schaduwwerking en traffic-lab scenario's voordat deze wordt geactiveerd.

Webship weigert ook geselecteerde live-beveiligingsverlagingen. EenMCP verzoek kan geen actieve WAF, DDoS-laag, API Shield, bot-uitdaging, edge-auth-beleid of responsheader-laag uitschakelen. Procesgebonden luisteraar, protocol, werknemer, runtime, en MCP-authenticatiewijzigingen vereisen een bewuste herstart.

Die bewakers verminderen fouten; ze maken niet elke geautoriseerde handeling onschadelijk. De token biedt een krachtig bedieningsoppervlak, inclusief update- en releasebewerkingen. Beoordeel voorgestelde tool-aanroepen precies zoals je een shell-opdracht van een beheerder zou beoordelen.

Als afstandsbinding onvermijdelijk is

Loopback plus SSH is het aanbevolen ontwerp. Als uw omgeving een listener op een privénetwerk vereist, maak de uitzondering expliciet:

[security.mcp]
enabled = true
listen = "10.20.0.15:9443"
expose_remote = true
allowed_ips = ["10.20.10.0/24"]
token = "replace-with-your-generated-64-character-token"

Houd het TLS-blok van het eerdere voorbeeld, gebruik een certificaat dat overeenkomt met de private DNS-naam en handhaaf hetzelfde source-bereik bij de host- en netwerk-firewalls. Gebruik nooit 0.0.0.0/0 of ::/0 als een gemak-toelatingslijst. Onthoud dat een applicatie-toelatingslijst het bronadres ziet dat daadwerkelijk bereiktWebship; verifieer het gedrag wanneer er een load balancer, NAT-gateway of servicemesh ervoor staat.

Externe blootstelling verhoogt de waarde van gecentraliseerde toegangslogboeken, korte operationele vensters en snelle rotatie. Het is niet vereist alleen omdat deMCP De client draait op een andere machine; dat is precies wat de SSH-tunnel oplost.

Bedien de besturingslaag opzettelijk

Gebruik deze checklist voor productie:

  • HoudenMCP uitgeschakeld waar geen agent of operator het nodig heeft.
  • Koppel aan loopback en gebruik standaard een SSH-tunnel.
  • Gebruik een toegewijde TLS-identiteit en houd certificaatverificatie ingeschakeld.
  • Genereer een uniek bearer-token voor elkWebship omgeving.
  • Bescherm de TOML, clientconfiguratie, TLS-sleutel en SSH-sleutels met bestandssysteemmachtigingen.
  • Scheid ontwikkelings-, test- en productiegegevens.
  • Start sessies met status- en beleids-simulatiehulpmiddelen voordat mutaties plaatsvinden.
  • Behouden en herzienWebshipbeveiligingsauditgebeurtenissen.
  • Draai de token en start opnieuwWebship na vermoedelijke blootstelling.
  • Sluit tunnels wanneer de administratieve sessie eindigt.

Voor incidentrespons, sluit actieve tunnels, beperk het SSH-account, vervang de MCP token in de beschermdeTOML, opnieuw starten Webship, en controleer de recente beveiligingsaudit en configuratie-versieverslagen. Als de TLS-private sleutel mogelijk is blootgesteld, geef dan een nieuw certificaat en sleutel uit als onderdeel van dezelfde herstart. Test daarna de oude token en bevestig dat deze wordt afgewezen.

Een control plane moet een control plane blijven

MCP is handig omdat een agent de werkelijke staat kan inspecteren en gevalideerde wijzigingen kan toepassen zonder die bewerkingen via het openbare verzoekpad te sturen. Dat voordeel verdwijnt als de controleluisteraar een ander internetendpoint wordt.

Houd de grens eenvoudig: een aparte luisteraar, loopback-bereikbaarheid, geverifieerde TLS, één beschermd dragerreferentie, een geauthenticeerde tunnel, versie-gecontroleerde wijzigingen en een menselijke beoordelingsprocedure voor krachtige operaties.Webship biedt het protocol en de veiligheidsvoorzieningen; de operator beslist wie er toegang toe kan krijgen.

Deze gids is gebaseerd op de Webship 1.3.1 operatordocumentatie, meegeleverde configuratievoorbeelden,MCP validatie- en transportcode, runtime-configuratiebeveiligingen en gereedschapscatalogus. Bekijk de huidige Webship documentatie en de draaiende server’s tools/list antwoord voordat het op een andere release wordt toegepast.