
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 10 Apr 2026 01:25:36 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Improved support for private applications and reusable access policies with Cloudflare Access]]></title>
            <link>https://blog.cloudflare.com/improved-support-for-private-applications-and-reusable-access-policies-with-cloudflare-access/</link>
            <pubDate>Thu, 20 Mar 2025 05:00:00 GMT</pubDate>
            <description><![CDATA[ We are excited to introduce support for private hostname and IP address-defined applications as well as reusable access policies.
 ]]></description>
            <content:encoded><![CDATA[ 
    <div>
      <h3>Simplifying secure access for every application</h3>
      <a href="#simplifying-secure-access-for-every-application">
        
      </a>
    </div>
    <p>For years, Cloudflare has helped organizations modernize their access to internal resources by delivering identity-aware access controls through our <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>Zero Trust Network Access (ZTNA)</u></a> service, <a href="https://www.cloudflare.com/zero-trust/products/access/"><u>Cloudflare Access</u></a>. Our customers have accelerated their ZTNA implementations for web-based applications in particular, using our intuitive workflows for Access applications tied to public hostnames.</p><p>However, given our architecture design, we have primarily handled private network application access (applications tied to private IP addresses or hostnames) through the network firewall component of our <a href="https://www.cloudflare.com/learning/access-management/what-is-a-secure-web-gateway/"><u>Secure Web Gateway (SWG)</u></a> service, <a href="https://developers.cloudflare.com/cloudflare-one/policies/gateway/"><u>Cloudflare Gateway</u></a>. We provided a small wrapper from Access to connect the two experiences. While this implementation technically got the job done, there were some clear downsides, and our customers have frequently cited the inconsistency.</p><p>Today, we are thrilled to announce that we have redesigned the self-hosted private application administrative experience within Access to match the experience for web-based apps on public hostnames. We are introducing support for private hostname and IP address-defined applications directly within Access, as well as reusable access policies. Together, these updates make ZTNA even easier for our customers to deploy and streamline ongoing policy management.</p><p>In order to better understand how this feature improves the overall functionality of Access, let’s explore what makes up a “private” application, how they are typically accessed, what was possible before this feature, and what the new feature enables. If you are a networking expert or aficionado, you can skip ahead to <a href="#a-look-back-protecting-private-applications-with-cloudflare-zero-trust-before-access-private-ip-address-and-hostname-support"><u>A look back: protecting private applications with Cloudflare Zero Trust before Access Private IP Address and Hostname support</u></a>.</p>
    <div>
      <h3>Private applications</h3>
      <a href="#private-applications">
        
      </a>
    </div>
    <p>A private application in this context, is any application that is only accessible through a private IP address or hostname. </p>
    <div>
      <h4>Private IP addresses</h4>
      <a href="#private-ip-addresses">
        
      </a>
    </div>
    <p>Private IP addresses, often referred to as <a href="https://www.rfc-editor.org/rfc/rfc1918"><u>RFC 1918 IP addresses</u></a>, are scoped to a specific network and can only be reached by users on that network. While public IP addresses must be unique across the entire Internet, private IP addresses can be reused across networks. Any device or virtual machine will have a private IP address. For example, if I run <i>ipconfig</i> on my own Windows machine, I can see an address of 192.168.86.172.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/40guiajv2H8LiUIPj3I80L/392c59c79ae2cd5d1edec8eba485610f/1.png" />
          </figure><p>This is the address that any other machine on my own network can use to reference and communicate with this specific machine. Private IP addresses are useful for applications and ephemeral infrastructure (systems that spin up and down dynamically) because they can be reused and only have to be unique within their specific network. This is much easier to manage than issuing a public IPv4 address to resources – we’ve actually <a href="https://blog.cloudflare.com/cloudflare-research-two-years-in/#case-study-3-ip-address-agility"><u>run out of available public IPv4 address space</u></a>!</p><p>In order to host an application on a machine in my network, I need to make that application available to other machines in the network. Typically, this is done by assigning the application to a specific port. A request to that application might then look something like this: <a href="http://10.128.0.6:443"><u>http://10.128.0.6:443</u></a> which in plain English is saying “Using the hypertext transfer protocol, reach out to the machine at an address of 10.128.0.6 in my network, and connect to port 443.” Connecting to an application can be done in a browser, over <a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH</a>, over <a href="https://www.cloudflare.com/learning/access-management/what-is-the-remote-desktop-protocol/">RDP</a>, through a thick client application, or many other methods of accessing a resource over an IP address.</p><p>In this case, we have an Apache2 example web server, running at that address and port combination.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zmLj88okpYkIdg6FmBYow/5a07a43478ede91223f42960a9539251/2.png" />
          </figure><p>If I attempt to access this IP address outside of the same network as this machine running the web server, then I will either get no result, or a completely different application, if I have something else running on that IP address/port combination in that other network.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/46reRgnUQMGTx7BO4yYgYh/f46096a704b24789e6ceba6c400b72a2/3.png" />
          </figure>
    <div>
      <h4>Private hostnames</h4>
      <a href="#private-hostnames">
        
      </a>
    </div>
    <p>We don’t want to remember 10.128.0.6 every time we want to access this application. Just like the Internet, we can use <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> in our private network. While public DNS serves as the phone book for the entire Internet, private DNS is more like a school directory that is only valid for phone numbers within the campus.</p><p>For a private application, I can configure a DNS record, very similar to how I might expose a public website to the world. But instead, I will map my DNS record to a private IP address that is only accessible within my own network. Additionally, private DNS does not require registering a domain with a <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrar</a> or adhering to defined top level domains. I can host an application on <i>application.mycompany</i>, and it is a valid internal DNS record. </p><p>In this example, I am running my web server on Google Cloud and will call the application <i>kennyapache.local</i>. In my local DNS, <i>kennyapache.local</i> has an A record mapping it to an IPv4 address within my private network on Google Cloud (GCP).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2OhO8VmCvfQ0H0ks1qUIir/74f5f4f764cef89393abf4989f0203e3/4.png" />
          </figure><p>This means that any machine within my network can use <i>https://kennyapache.local</i> instead of having to remember the explicit IP address.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/43nfcR2QZ6DtIhVGcdxlu4/2e72db9cdea772c15abf6a061926f531/5.png" />
          </figure>
    <div>
      <h3>Accessing private applications outside the private network</h3>
      <a href="#accessing-private-applications-outside-the-private-network">
        
      </a>
    </div>
    <p>Private networks require your machine, or virtual machine, to be connected directly to the same network as the target private IP address or hostname. This is a helpful property to keep unauthorized users from accessing applications, but presents a challenge if the application you want to use is outside your local network. </p><p><a href="https://www.cloudflare.com/learning/access-management/what-is-a-vpn/">Virtual Private Networks (VPNs)</a>, forward proxies, and proxy protocols (aka “<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file"><u>PAC files</u></a>”) are all methods to enable a machine outside your private network to reach a private IP address/hostname within the private network. These tools work by adding an additional network interface to the machine and specifying that certain requests need to be routed through a remote private network, not the local network the machine is currently connected to, or out to the public Internet.</p><p>When I connect my machine to a forward proxy, in this case Cloudflare’s device client, <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/"><u>WARP</u></a>, and run <i>ipconfig </i>I can see a new network interface and IP address added to the list:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ETxtHA0R29eZkPMGXQiKA/3a698067576e625491695ea31f9aae77/6.png" />
          </figure><p>This additional network interface will take control of specific network requests and route those to an external private network instead of the default behavior of my machine, which would be to route to that IP address on my own local network.</p>
    <div>
      <h3>A look back: protecting private applications with Cloudflare Zero Trust <i>before</i> Access Private IP Address and Hostname support</h3>
      <a href="#a-look-back-protecting-private-applications-with-cloudflare-zero-trust-before-access-private-ip-address-and-hostname-support">
        
      </a>
    </div>
    <p>We will continue to use our Apache2 server hosted on a GCP private domain as an example private application. We will briefly touch on how Cloudflare Zero Trust was previously used to protect private applications and why this new feature is a huge step forward. Cloudflare Zero Trust has two primary components used to protect application traffic: Cloudflare Access and Gateway.</p>
    <div>
      <h4>Cloudflare Access</h4>
      <a href="#cloudflare-access">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/zero-trust/products/access/"><u>Cloudflare Access</u></a> is designed to protect internal applications and resources without the need for a traditional VPN. Access allows organizations to authenticate and authorize users through identity providers — such as Okta, Azure AD, or Google Workspace — before granting them entry to internal systems or web-based applications. </p><p>Until now, Access required that an application had to be defined using a public DNS record. This means that a user had to expose their application to the Internet in order to leverage Access and use all of its granular security features. This isn’t quite as scary as it sounds, because Access allows you to enforce strong user, device, and network security controls. In fact, <a href="https://www.nist.gov/"><u>NIST</u></a> and many other major security organizations support this model.</p><p>In practice, an administrator would map their internal IP address or hostname to a public URL using our app connector, <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/"><u>Cloudflare Tunnel</u></a>. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2A5ipHt6Fle2B0va6u800e/aec1cc48f17d5599ea24259ea2724854/7.png" />
          </figure><p>Then, the administrator would create an Access application corresponding to that public URL. Cloudflare then sends a user through a single sign-on flow for any request made to that application.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3lJup7iAXJn4spQ9c1FdxA/d66d0e2e0139021c4a28c6498cd6e1b4/image2.png" />
          </figure><p>However, this approach does not work for organizations that have strict requirements to never expose an application over public DNS. Additionally, this does not work for applications outside the browser like SSH, RDP, FTP and other thick client applications, which are all options to connect to private applications.</p><p>If I tried to SSH to my Access-protected public hostname, I would get an error message with no way to authenticate, since there is no easy way to do a single sign-on through the browser in conjunction with SSH.</p>
    <div>
      <h4>Access Private Network applications</h4>
      <a href="#access-private-network-applications">
        
      </a>
    </div>
    <p>Until now, because Access operated using public hostnames, we have handled private network access for our customers using the network firewall piece of Cloudflare Gateway. A few years ago, we <a href="https://blog.cloudflare.com/zero-trust-private-networking-rules/"><u>launched</u></a> Access Private Network applications, which automatically generate the required Gateway block policies. However, this was a limited approach that was ultimately just a wrapper in front of two Gateway policies. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3Cyudmxym7VXQ5wLvslHqV/cc6bde76f33bcdddaea69e7f62e69ab0/9.png" />
          </figure>
    <div>
      <h4>Cloudflare Gateway</h4>
      <a href="#cloudflare-gateway">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/zero-trust/products/gateway/"><u>Cloudflare Gateway</u></a> is a secure web gateway that protects users from threats on the public Internet by filtering and securing DNS and web traffic. Gateway acts as a protective layer between end users and online resources by enforcing security controls, like blocking malicious domains, restricting access to risky categories of sites, and preventing <a href="https://www.cloudflare.com/learning/security/what-is-data-exfiltration/"><u>data exfiltration</u></a>. </p><p>Gateway is also used to route user traffic into private networks and acts as a forward proxy. It allows customers to create policies for private IP addresses and hostnames. This is because Gateway relies on traffic being proxied from the user’s machine to the Gateway service itself. This is most commonly done with the Cloudflare WARP client. WARP enables the configuration of which IP addresses and hostnames to send to Gateway for filtering and routing.</p><p>Once connected to a private network, through Gateway, a user can directly connect to private IP addresses and hostnames that are configured for that network.</p><p>I can then configure specific network firewall policies to allow or block traffic destined to private IP addresses.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4EtfhktReyry4NLabqunR/cb81b20c2e916c39fbd388ec3b8cbc8a/10.png" />
          </figure><p>Great! Looks like we’ve solved protecting private applications using Gateway. Not quite, unfortunately, as there are a few components of Gateway that are not an ideal model for an application-focused security model. While not discussed above, a few of the challenges we encountered when using Gateway for application access control included:</p><ul><li><p>Private applications were mixed in with general Gateway network firewall rules, complicating configuration and maintenance</p></li><li><p>Defining and managing private applications was not possible in Terraform</p></li><li><p>Application access logs were buried in general network firewall logs (these logs can contain all Internet traffic for an organization!)</p></li><li><p>Enforcement within Gateway relied on specific WARP client sessions, which lacked granular identity details</p></li><li><p>Administrators couldn’t use Access Rule Groups or other Access features built specifically for managing application access controls</p></li></ul><p>We knew we could do better.</p>
    <div>
      <h3>A unified approach to application access</h3>
      <a href="#a-unified-approach-to-application-access">
        
      </a>
    </div>
    <p>Knowing these limitations, we set out to extend Access to support any application, regardless of whether it is public or private. This principle guided our efforts to create a unified application definition in Cloudflare Access. Any self-hosted application, regardless of whether it is public or privately routable, should be defined in a single application type. The result is quite straightforward: <b>Access Applications now support </b><a href="https://developers.cloudflare.com/cloudflare-one/applications/non-http/self-hosted-private-app/"><b><u>private IP addresses and hostnames</u></b></a>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6H0E6kyDN9Cm1f5R7OAPBm/c9630a990c52ab553c062deb14c6bd48/11.png" />
          </figure><p>However, the engineering work was not as simple as adding a private IP address and hostname option to Cloudflare Access. Given our platform’s architecture, Access does not have any way to route private requests by itself. We still have to rely on Gateway and the WARP client for that component.</p>
    <div>
      <h4>An application-aware firewall</h4>
      <a href="#an-application-aware-firewall">
        
      </a>
    </div>
    <p>This meant that we needed to add an application-specific phase to Gateway’s <a href="https://www.cloudflare.com/learning/security/what-is-a-firewall/">firewall</a>. The new phase detects whether a user’s traffic matches a defined application, and if so it sends the traffic to Access for authentication and authorization of a user and their session. This required extending Gateway’s network firewall to have knowledge of which private IP addresses and hostnames are defined as applications.</p><p>Thanks to this new firewall phase, now an administrator can configure exactly where they want their private applications to be evaluated in their overall network firewall.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6ruRjFqas4YtimtubJ2JH7/14f3a539536ffda5e7054e7bbff8638c/12.png" />
          </figure>
    <div>
      <h4>Private application sessions</h4>
      <a href="#private-application-sessions">
        
      </a>
    </div>
    <p>The other component we had to solve was per-application session management. In an Access public application, we issue a JSON Web Token (JWT) as a cookie which conveniently has an expiration associated. That acts as a session expiration. For private applications, we do not always have the ability to store a cookie. If the request is not over a browser, there is nowhere to put a <a href="https://www.cloudflare.com/learning/privacy/what-are-cookies/">cookie</a>.</p><p>For browser-based private applications, we follow the exact same pattern as a public application and issue a JWT as a means to track the session. App administrators get the additional benefit of being able to do <a href="https://www.bing.com/ck/a?!&amp;&amp;p=034518a2a9cf39217e3915ed984384030a9abdb4123d9e9e96cf917622fcd122JmltdHM9MTc0MDcwMDgwMA&amp;ptn=3&amp;ver=2&amp;hsh=4&amp;fclid=25d5373c-34a7-676d-2f67-229d35ee66b4&amp;psq=cloudflare+access+jwt+validation&amp;u=a1aHR0cHM6Ly9kZXZlbG9wZXJzLmNsb3VkZmxhcmUuY29tL2Nsb3VkZmxhcmUtb25lL2lkZW50aXR5L2F1dGhvcml6YXRpb24tY29va2llL3ZhbGlkYXRpbmctanNvbi8&amp;ntb=1"><u>JWT validation</u></a> for these apps as well. Non-browser based applications required adding a new per-application session to Gateway’s firewall. These application sessions are bound to a specific device and track the next time a user has to authenticate before accessing the application.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/20A2Xu4A9i66sKBB5JMFcy/c856a90127a540608d92a9d139b67515/13.png" />
          </figure>
    <div>
      <h4>Access private applications</h4>
      <a href="#access-private-applications">
        
      </a>
    </div>
    <p>Once we solved application awareness and session management in Gateway’s firewall, we could extend Access to support private IP address- and hostname-defined applications. Administrators can now directly define Access applications using private IP addresses and hostnames:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1lbk2iY0Nxp83UYPKjqT9r/6a473d16691d49e9fa6c24b7483c9f29/14.png" />
          </figure><p>You can see that private hostname and private IP address are now configuration options when defining an Access application.</p><p>If it is a non-HTTPS application (whether HTTP or non-browser), the user will receive a client pop-up prompting a re-authentication:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5MODs8OeSp1zarNyfSybRs/c0625e682c94be2076769bf45516f443/15.png" />
          </figure><p>HTTPS applications will behave exactly the same as an Access application with a public hostname. The user will be prompted to log in via single sign-on, and then a JWT will be issued to that specific domain.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2JKV68fl0w38N7G3CbIx3S/12c2fb6911938fae28e8dee8cf3518b5/16.png" />
          </figure><p>Then we see a JWT issued to the application itself.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3pjbbZZatyS5vTg9LBxwyA/8ae31cbbff12494508c686fbd2a60f99/17.png" />
          </figure>
    <div>
      <h3>Introducing Reusable Policies</h3>
      <a href="#introducing-reusable-policies">
        
      </a>
    </div>
    <p>As part of this work, we were able to address another long-standing pain point in Access —– managing policies across multiple applications was a time-consuming and error-prone process. Policies were nested objects under individual applications, requiring administrators to either rely heavily on Access Groups or repeat identical configurations for each application. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5VXOFmgC6ckvmnIaGY8kLL/50ce63a57b6f59625f8a0277f59a3153/18.png" />
          </figure><p>With <b>Reusable Policies</b>, administrators can now create standardized policies — such as high, medium, or low risk — and assign them across multiple applications. A single change to a reusable policy will propagate to all associated applications, significantly simplifying management. With this new capability, we anticipate that many of our customers will be able to move from managing hundreds of access policies to a small handful. We’ve also renamed "Access Groups" to "Rule Groups," aligning with their actual function and reducing confusion with identity provider (IdP) groups.</p>
    <div>
      <h3>A redesigned user interface</h3>
      <a href="#a-redesigned-user-interface">
        
      </a>
    </div>
    <p>Alongside these functional updates, we’ve launched a significant UI refresh based on years of user feedback. The new interface offers more information at a glance and provides consistent, intuitive workflows for defining and managing applications. </p>
    <div>
      <h3>Looking ahead</h3>
      <a href="#looking-ahead">
        
      </a>
    </div>
    <p>While today’s release is a major step forward, there’s more to come. Currently, private hostname support is limited to port 443 with TLS inspection enabled. Later in 2025, we plan to extend support to arbitrary private hostnames on any port and protocol, further broadening Access’s capabilities.</p>
    <div>
      <h3>Get started today</h3>
      <a href="#get-started-today">
        
      </a>
    </div>
    <p>These new Access features are live and ready for you to explore. If you haven’t yet started modernizing remote access at your organization, <a href="https://dash.cloudflare.com/sign-up/teams"><u>sign up for a free account</u></a> to test it out. Whether you’re <a href="https://developers.cloudflare.com/cloudflare-one/applications/non-http/self-hosted-private-app/"><u>securing private resources</u></a> or <a href="https://developers.cloudflare.com/cloudflare-one/policies/access/policy-management/"><u>simplifying policy management</u></a>, we’re excited to see how these updates enhance your Zero Trust journey. As always, we’re here to help — reach out to your account team with any questions or feedback.</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div>
  
</div><p></p> ]]></content:encoded>
            <category><![CDATA[Security Week]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <guid isPermaLink="false">53DTUki2fBvLXzudP66p2M</guid>
            <dc:creator>Kenny Johnson</dc:creator>
            <dc:creator>Eduardo Gomes</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing SSH command logging]]></title>
            <link>https://blog.cloudflare.com/ssh-command-logging/</link>
            <pubDate>Fri, 18 Mar 2022 13:00:36 GMT</pubDate>
            <description><![CDATA[ We built SSH command logging into Cloudflare Zero Trust to provide SSH visibility at a network layer instead of relying on software on individual machines ]]></description>
            <content:encoded><![CDATA[ <p></p><p><a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH (Secure Shell Protocol)</a> is an important protocol for managing remote machines. It provides a way for infrastructure teams to remotely and securely manage their fleet of machines. SSH was a step-up in security from other protocols like telnet. It ensures encrypted traffic and enforces per user controls over access to a particular machine. However, it can still introduce a significant security risk. SSH, especially root access, is destructive in the wrong hands (think <code>rm -r *</code>) and can be difficult to track. Logging and securing user actions via SSH typically requires custom development or restrictive software deployments. We’re excited to announce SSH command logging as part of Cloudflare Zero Trust.</p>
    <div>
      <h3>Securing SSH access</h3>
      <a href="#securing-ssh-access">
        
      </a>
    </div>
    <p>Security teams put significant effort into securing SSH across their organization because of the negative impact it can have in the wrong hands. Traditional SSH security consists of strong authentication, like certificate based authentication, and tight controls on who has “root” access. Additionally, VPNs and IP allow lists are used to further protect a machine from being publicly accessible to the Internet. The security challenges that remain are visibility and <a href="https://www.cloudflare.com/learning/security/glossary/what-is-lateral-movement/">potential for lateral movement</a>.</p><p>SSH commands to a remote machine are end-to-end encrypted, which means that it is impossible to see what is being run by a particular user on a specific machine. Typically, logs can only be captured on the machine itself in log files, and a malicious user can delete log files as easily as any other command they’re running to cover their tracks. Solutions exist to send these logs to an external logging service, but this requires installing additional software on every machine that can be accessed using SSH. <a href="https://man.openbsd.org/ssh_config#ProxyJump">ProxyJump</a>, a common way to deploy a JumpHost model, further compounds this problem because a user can easily traverse a local network of machines once they gain access to a machine in the network.</p>
    <div>
      <h3>Introducing SSH command logging</h3>
      <a href="#introducing-ssh-command-logging">
        
      </a>
    </div>
    <p>We built SSH command logging into Cloudflare Zero Trust to provide SSH visibility at a network layer instead of relying on software on individual machines. Our first customer for this capability is the Cloudflare security team. SSH command logging provides a full replay of all commands run during an SSH session, including across multiple jump-hosts or bastions. This allows for a clear picture of what happened in the event of an accident, suspected breach, or attack.</p><p>SSH command logging was built as an extension of Cloudflare’s Secure Web Gateway. The <a href="https://www.cloudflare.com/learning/access-management/what-is-a-secure-web-gateway/">Secure Web Gateway</a> already performs secure TLS inspection of all traffic from a user device. Now, it also supports SSH inspection by bootstrapping a proxy server upon new connections. Administrators are able to configure <i>network policies</i> to allow SSH access and audit the specific commands run.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3hBeFNbgv24vOQOOGmHBoG/8b8547ddb74390c46625a2d7b930c4a6/image1-75.png" />
            
            </figure><p>This then exposes that machine for SSH access and proxies all SSH commands via Cloudflare’s global edge network. All commands are automatically captured without complex logging software installed on the machine and across all hosts. TTY traffic can also be recorded for a later full session replay.</p><p>As an added measure of security, all logs captured by Cloudflare are immediately encrypted via a public key provided by each customer, to ensure that only authorized security users can inspect SSH commands. Furthermore, we are launching this feature with an opt-in FIPS 140-2 mode to support <a href="https://www.cloudflare.com/learning/privacy/what-is-fedramp/">FedRAMP compliant </a>users.</p><p>All user authentication is performed via <a href="https://developers.cloudflare.com/cloudflare-one/identity/users/short-lived-certificates/">Cloudflare Short-Lived Certificates</a>. Once the client certificate is loaded onto a user machine, their SSH setup is complete and secure. This eliminates the need for tedious and tricky SSH key-pair management. This means no more key management on end user devices, all the need is the Cloudflare root CA, and they can access any machine they are entitled to, including using ProxyJump.</p>
    <div>
      <h3>What’s next</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>This is only the beginning for SSH security in Cloudflare Zero Trust. In the future, we will integrate with popular <a href="https://www.cloudflare.com/learning/security/what-is-siem/">SIEM</a> tools and provide alerting for specific commands and risky behavior.</p><p>SSH command logging is in closed beta, and we will be opening this feature up to users in the coming weeks. Stay tuned for more updates when we announce general availability!</p> ]]></content:encoded>
            <category><![CDATA[Security Week]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <guid isPermaLink="false">kYiLR4zOyU5gHh6jMuJOg</guid>
            <dc:creator>Ankur Aggarwal</dc:creator>
            <dc:creator>Eduardo Gomes</dc:creator>
            <dc:creator>Kenny Johnson</dc:creator>
        </item>
    </channel>
</rss>