{"id":139,"date":"2026-03-25T23:43:34","date_gmt":"2026-03-25T23:43:34","guid":{"rendered":"https:\/\/gigabrit.com\/?p=139"},"modified":"2026-03-25T23:43:36","modified_gmt":"2026-03-25T23:43:36","slug":"secure-clientless-remote-desktop-with-vdefend-avi-load-balancer-apache-guacamole-and-entra-id","status":"publish","type":"post","link":"https:\/\/gigabrit.com\/?p=139","title":{"rendered":"Secure Clientless Remote Desktop with vDefend, Avi Load Balancer, Apache Guacamole, and Entra ID"},"content":{"rendered":"\n<p>For a long time now, I&#8217;ve been hearing from customers they want a Secure Clientless Remote access solution they can trust. It might shock you just how many times I&#8217;ve run across Enterprise IT orgs still dependent on a now deprecated SSLVPN solution from a Hardware Firewall vendor. The only use case for it , is giving 3rd parties access to maintain systems via RDP. <\/p>\n\n\n\n<p>Here&#8217;s what I&#8217;ve come up with. I&#8217;ve actually built this and will continue testing it. Apache Guacamole is open source and really not that hard to deploy in Docker. I used Claude to generate an Install script, so I spent all of 10 minutes installing it. Given how Guacamole works, it&#8217;s not something you just want to have open access. So it needs to be well protected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Architecture<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>User:<\/strong> Hits the Avi Virtual Service (HTTPS).<\/li>\n\n\n\n<li><strong>Avi (SAML SP):<\/strong> Redirects the user to Entra ID for MFA\/SSO.<\/li>\n\n\n\n<li><strong>Entra ID (IdP):<\/strong> Validates the user and sends a SAML token back to Avi.<\/li>\n\n\n\n<li><strong>Avi:<\/strong> Validates the token and grants access to the Guacamole Web Server (Tomcat).<\/li>\n\n\n\n<li><strong>Guacamole:<\/strong> Uses its internal <code>guacd<\/code> proxy to connect to the backend RDP servers.<\/li>\n\n\n\n<li><strong>vDefend<\/strong>: Ensures lateral security by only allowing the AVI SE&#8217;s to talk to Guac and Guac can only talk to the Internal VMs that vDefend Allows it to.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/GuacDiag-1024x683.png\" alt=\"\" class=\"wp-image-140\" srcset=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/GuacDiag-1024x683.png 1024w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/GuacDiag-300x200.png 300w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/GuacDiag-768x512.png 768w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/GuacDiag.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Aside from the Security that AVI provides with Full SSL Encryption (including LetsEncrypt Certs) and SAML for MFA. AVI also provides you unmatched End to End Analytics so if there was any performance issues, you can quickly find them. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"670\" src=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-5.39.49-PM-1024x670.png\" alt=\"\" class=\"wp-image-141\" srcset=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-5.39.49-PM-1024x670.png 1024w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-5.39.49-PM-300x196.png 300w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-5.39.49-PM-768x503.png 768w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-5.39.49-PM.png 1438w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Lastly, I configure a vDefend Distributed Firewall Policy set to ensure maximum security around the whole setup. <\/p>\n\n\n\n<p>An Allow rule so only the AVI Service Engines can talk to Guac<\/p>\n\n\n\n<p>An Allow rule so Guac is only able to RDP to the hosts it must have access to<\/p>\n\n\n\n<p>Block Anything else and don&#8217;t let Guac RDP to Anything else<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"587\" src=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM-1024x587.png\" alt=\"\" class=\"wp-image-142\" srcset=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM-1024x587.png 1024w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM-300x172.png 300w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM-768x440.png 768w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM-1536x880.png 1536w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.20.28-PM.png 1578w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The end result is Clientless access to Only what I want and where I want to be. I can even have AVI pass off the Authentication Header to Guac, so when the user signs in via SSO, it&#8217;s mapped all the way through, otherwise you get the standard Guac Ui login. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.25.39-PM-1024x627.png\" alt=\"\" class=\"wp-image-143\" srcset=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.25.39-PM-1024x627.png 1024w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.25.39-PM-300x184.png 300w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.25.39-PM-768x471.png 768w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/Screenshot-2026-03-25-at-7.25.39-PM.png 1043w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The testing I&#8217;ve done with this setup so far it works well. I need to do more fine tuning. And if I ever get Openclaw running, maybe I&#8217;ll have it write a better looking front end interface for Guacamole. <\/p>\n\n\n\n<p>-Britton <\/p>\n\n\n\n<p>This was written by Me. Not an LLM. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"514\" src=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/vexpert-badge_Years-10.png\" alt=\"\" class=\"wp-image-144\" srcset=\"https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/vexpert-badge_Years-10.png 1000w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/vexpert-badge_Years-10-300x154.png 300w, https:\/\/gigabrit.com\/wp-content\/uploads\/2026\/03\/vexpert-badge_Years-10-768x395.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>For a long time now, I&#8217;ve been hearing from customers they want a Secure Clientless Remote access solution they can trust. It might shock you just how many times I&#8217;ve run across Enterprise IT orgs still dependent on a now deprecated SSLVPN solution from a Hardware Firewall vendor. The only use case for it , &hellip; <a href=\"https:\/\/gigabrit.com\/?p=139\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Secure Clientless Remote Desktop with vDefend, Avi Load Balancer, Apache Guacamole, and Entra ID<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-139","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/posts\/139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gigabrit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=139"}],"version-history":[{"count":3,"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/posts\/139\/revisions"}],"predecessor-version":[{"id":147,"href":"https:\/\/gigabrit.com\/index.php?rest_route=\/wp\/v2\/posts\/139\/revisions\/147"}],"wp:attachment":[{"href":"https:\/\/gigabrit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gigabrit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gigabrit.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}