
<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>Sat, 04 Apr 2026 12:05:17 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Open-sourcing OpenPubkey SSH (OPKSSH): integrating single sign-on with SSH]]></title>
            <link>https://blog.cloudflare.com/open-sourcing-openpubkey-ssh-opkssh-integrating-single-sign-on-with-ssh/</link>
            <pubDate>Tue, 25 Mar 2025 13:00:00 GMT</pubDate>
            <description><![CDATA[ OPKSSH (OpenPubkey SSH) is now open-sourced as part of the OpenPubkey project. ]]></description>
            <content:encoded><![CDATA[ <p>OPKSSH makes it easy to <a href="https://en.wikipedia.org/wiki/Secure_Shell"><u>SSH</u></a> with single sign-on technologies like OpenID Connect, thereby removing the need to manually manage and configure SSH keys. It does this without adding a trusted party other than your identity provider (IdP).</p><p>We are excited to announce <a href="https://github.com/openpubkey/opkssh/"><u>OPKSSH (OpenPubkey SSH)</u></a> has been open-sourced under the umbrella of the OpenPubkey project. While the underlying protocol <a href="https://github.com/openpubkey/openpubkey/"><u>OpenPubkey</u></a> became <a href="https://www.linuxfoundation.org/press/announcing-openpubkey-project"><u>an open source Linux foundation project in 2023</u></a>, OPKSSH was closed source and owned by <a href="https://www.cloudflare.com/press-releases/2024/cloudflare-acquires-bastionzero-to-add-zero-trust-infrastructure-access/"><u>BastionZero (now Cloudflare)</u></a>. Cloudflare has gifted this code to the OpenPubkey project, making it open source.</p><p>In this post, we describe what OPKSSH is, how it simplifies SSH management, and what OPKSSH being open source means for you.</p>
    <div>
      <h2>Background</h2>
      <a href="#background">
        
      </a>
    </div>
    <p>A cornerstone of modern access control is single sign-on <a href="https://www.cloudflare.com/learning/access-management/what-is-sso/"><u>(SSO)</u></a>, where a user authenticates to an <a href="https://www.cloudflare.com/learning/access-management/what-is-an-identity-provider/"><u>identity provider (IdP)</u></a>, and in response the IdP issues the user a <i>token</i>. The user can present this token to prove their identity, such as “Google says I am Alice”. SSO is the rare security technology that both increases convenience — users only need to sign in once to get access to many different systems — and increases security.</p>
    <div>
      <h3>OpenID Connect</h3>
      <a href="#openid-connect">
        
      </a>
    </div>
    <p><a href="https://openid.net/developers/how-connect-works/"><u>OpenID Connect (OIDC)</u></a> is the main protocol used for SSO. As shown below, in OIDC the IdP, called an OpenID Provider (OP), issues the user an ID Token which contains identity claims about the user, such as “email is alice@example.com”. These claims are digitally signed by the OP, so anyone who receives the ID Token can check that it really was issued by the OP.</p><p>Unfortunately, while ID Tokens <i>do </i>include identity claims like name, organization, and email address, they <i>do not</i> include the user’s public key. This prevents them from being used to directly secure protocols like SSH or <a href="https://www.cloudflare.com/learning/privacy/what-is-end-to-end-encryption/"><u>End-to-End Encrypted messaging</u></a>.</p><p>Note that throughout this post we use the term OpenID Provider (OP) rather than IdP, as OP specifies the exact type of IdP we are using, i.e., an OpenID IdP. We use Google as an example OP, but OpenID Connect works with Google, Azure, Okta, etc.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2zfixdknoL3a9HqBzcsmAY/605f469bdd25b4b8cfaf29dac3561c4f/image1.png" />
          </figure><p><sup><i>Shows a user Alice signing in to Google using OpenID Connect and receiving an ID Token</i></sup></p>
    <div>
      <h3>OpenPubkey</h3>
      <a href="#openpubkey">
        
      </a>
    </div>
    <p>OpenPubkey, shown below, adds public keys to ID Tokens. This enables ID Tokens to be used like certificates, e.g. “Google says <code>alice@example.com</code> is using public key 0x123.” We call an ID token that contains a public key a <i>PK Token</i>. The beauty of OpenPubkey is that, unlike other approaches, OpenPubkey does not require any changes to existing SSO protocols and supports any OpenID Connect compliant OP.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2HNkaW8vPE26KQrNwNOzNo/ef00f91dc983f3f2ac3c3a00b223b3e5/image3.png" />
          </figure><p><sup><i>Shows a user Alice signing in to Google using OpenID Connect/OpenPubkey and then producing a PK Token</i></sup>
While OpenPubkey enables ID Tokens to be used as certificates, OPKSSH extends this functionality so that these ID Tokens can be used as SSH keys in the SSH protocol. This adds SSO authentication to SSH without requiring changes to the SSH protocol.</p>
    <div>
      <h2>Why this matters</h2>
      <a href="#why-this-matters">
        
      </a>
    </div>
    <p>OPKSSH frees users and administrators from the need to manage long-lived SSH keys, making SSH more secure and more convenient.</p><blockquote><p><i>“In many organizations – even very security-conscious organizations – there are many times more obsolete authorized keys than they have employees. Worse, authorized keys generally grant command-line shell access, which in itself is often considered privileged. We have found that in many organizations about 10% of the authorized keys grant root or administrator access. SSH keys never expire.”</i>  
- <a href="https://ylonen.org/papers/ssh-key-challenges.pdf">Challenges in Managing SSH Keys – and a Call for Solutions</a> by Tatu Ylonen (Inventor of SSH)</p></blockquote><p>In SSH, users generate a long-lived SSH public key and SSH private key. To enable a user to access a server, the user or the administrator of that server configures that server to trust that user’s public key. Users must protect the file containing their SSH private key. If the user loses this file, they are locked out. If they copy their SSH private key to multiple computers or back up the key, they increase the risk that the key will be compromised. When a private key is compromised or a user no longer needs access, the user or administrator must remove that public key from any servers it currently trusts. All of these problems create headaches for users and administrators.</p><p>OPKSSH overcomes these issues:</p><p><b>Improved security:</b> OPKSSH replaces long-lived SSH keys with ephemeral SSH keys that are created on-demand by OPKSSH and expire when they are no longer needed. This reduces the risk a private key is compromised, and limits the time period where an attacker can use a compromised private key. By default, these OPKSSH public keys expire every 24 hours, but the expiration policy can be set in a configuration file.</p><p><b>Improved usability:</b> Creating an SSH key is as easy as signing in to an OP. This means that a user can SSH from any computer with opkssh installed, even if they haven’t copied their SSH private key to that computer.</p><p>To generate their SSH key, the user simply runs opkssh login, and they can use ssh as they typically do.</p><p><b>Improved visibility:</b> OPKSSH moves SSH from authorization by public key to authorization by identity. If Alice wants to give Bob access to a server, she doesn’t need to ask for his public key, she can just add Bob’s email address bob@example.com to the OPKSSH authorized users file, and he can sign in. This makes tracking who has access much easier, since administrators can see the email addresses of the authorized users.</p><p>OPKSSH does not require any code changes to the SSH server or client. The only change needed to SSH on the SSH server is to add two lines to the SSH config file. For convenience, we provide an installation script that does this automatically, as seen in the video below.</p><div>
  
</div>
<p></p>
    <div>
      <h2>How it works</h2>
      <a href="#how-it-works">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5rVAtbu3vv9wU84ke8IZIb/a5e564c2ae3834391bd7f04c843508b7/image4.png" />
          </figure><p><sup><i>Shows a user Alice SSHing into a server with her PK Token inside her SSH public key. The server then verifies her SSH public key using the OpenPubkey verifier.</i></sup></p><p>Let’s look at an example of Alice (<code>alice@example.com</code>) using OPKSSH to SSH into a server:</p><ul><li><p>Alice runs <code>opkssh login</code>. This command automatically generates an ephemeral public key and private key for Alice. Then it runs the OpenPubkey protocol by opening a browser window and having Alice log in through their SSO provider, e.g., Google. </p></li><li><p>If Alice SSOs successfully, OPKSSH will now have a PK Token that commits to Alice’s ephemeral public key and Alice’s identity. Essentially, this PK Token says “<code>alice@example.com</code> authenticated her identity and her public key is 0x123…”.</p></li><li><p>OPKSSH then saves to Alice’s <code>.ssh </code>directory:</p><ul><li><p>an SSH public key file that contains Alice’s PK Token </p></li><li><p>and an SSH private key set to Alice’s ephemeral private key.</p></li></ul></li><li><p>When Alice attempts to SSH into a server, the SSH client will find the SSH public key file containing the PK Token in Alice’s <code>.ssh</code> directory, and it will send it to the SSH server to authenticate.</p></li><li><p>The SSH server forwards the received SSH public key to the OpenPubkey verifier installed on the SSH server. This is because the SSH server has been configured to use the OpenPubkey verifier via the AuthorizedKeysCommand.</p></li><li><p>The OpenPubkey verifier receives the SSH public key file and extracts the PK Token from it. It then verifies that the PK Token is unexpired, valid, signed by the OP and that the public key in the PK Token matches the public key field in the SSH public key file. Finally, it extracts the email address from the PK Token and checks if <code>alice@example.com</code> is allowed to SSH into this server.</p></li></ul><p>Consider the problems we face in getting OpenPubkey to work with SSH without requiring any changes to the SSH protocol or software:</p><p><b>How do we get the PK Token from the user’s machine to the SSH server inside the SSH protocol?</b>
We use the fact that SSH public keys can be SSH certificates, and that SSH certificates have <a href="https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=1.4&amp;content-type=text/x-cvsweb-markup"><u>an extension field</u></a> that allows arbitrary data to be included in the certificate. Thus, we package the PK Token into an SSH certificate extension so that the PK Token will be transmitted inside the SSH public key as a normal part of the SSH protocol. This enables us to send the PK Token to the SSH server as additional data in the SSH certificate, and allows OPKSSH to work without any changes to the SSH client.</p><p><b>How do we check that the PK Token is valid once it arrives at the SSH server?
</b>SSH servers support a configuration parameter called the <a href="https://man.openbsd.org/sshd_config#AuthorizedKeysCommand"><i><u>AuthorizedKeysCommand</u></i></a><i> </i>that allows us to use a custom program to determine if an SSH public key is authorized or not. Thus, we change the SSH server’s config file to use the OpenPubkey verifier instead of the SSH verifier by making the following two line change to <code>sshd_config</code>:</p>
            <pre><code>AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t
AuthorizedKeysCommandUser root</code></pre>
            <p>The OpenPubkey verifier will check that the PK Token is unexpired, valid and signed by the OP. It checks the user’s email address in the PK Token to determine if the user is authorized to access the server.</p><p><b>How do we ensure that the public key in the PK Token is actually the public key that secures the SSH session?</b>
The OpenPubkey verifier also checks that the public key in the public key field in the SSH public key matches the user’s public key inside the PK Token. This works because the public key field in the SSH public key is the actual public key that secures the SSH session.</p>
    <div>
      <h2>What is happening</h2>
      <a href="#what-is-happening">
        
      </a>
    </div>
    <p>We have <a href="https://github.com/openpubkey/openpubkey/pull/234"><u>open sourced OPKSSH</u></a> under the <a href="https://www.apache.org/licenses/LICENSE-2.0"><u>Apache 2.0 license</u></a>, and released it as <a href="https://github.com/openpubkey/opkssh/"><u>openpubkey/opkssh on GitHub</u></a>. While the OpenPubkey project has had code for using SSH with OpenPubkey since the early days of the project, this code was intended as a prototype and was missing many important features. With OPKSSH, SSH support in OpenPubkey is no longer a prototype and is now a complete feature. Cloudflare is not endorsing OPKSSH, but simply donating code to OPKSSH.</p><p><b>OPKSSH provides the following improvements to OpenPubkey:</b></p><ul><li><p>Production ready SSH in OpenPubkey</p></li><li><p>Automated installation</p></li><li><p>Better configuration tools</p></li></ul>
    <div>
      <h2>To learn more</h2>
      <a href="#to-learn-more">
        
      </a>
    </div>
    <p>See the <a href="https://github.com/openpubkey/opkssh/blob/main/README.md"><u>OPKSSH readme</u></a> for documentation on how to install and connect using OPKSSH.</p>
    <div>
      <h2>How to get involved</h2>
      <a href="#how-to-get-involved">
        
      </a>
    </div>
    <p>There are a number of ways to get involved in OpenPubkey or OPKSSH. The project is organized through the <a href="https://github.com/openpubkey/opkssh"><u>OPKSSH GitHub</u></a>. We are building an open and friendly community and welcome pull requests from anyone. If you are interested in contributing, see <a href="https://github.com/openpubkey/openpubkey/blob/main/CONTRIBUTING.md"><u>our contribution guide</u></a>.</p><p>We run a <a href="https://github.com/openpubkey/community"><u>community</u></a> meeting every month which is open to everyone, and you can also find us over on the <a href="https://openssf.org/getinvolved/"><u>OpenSSF Slack</u></a> in the #openpubkey channel.</p> ]]></content:encoded>
            <category><![CDATA[Open Source]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Single Sign On (SSO)]]></category>
            <category><![CDATA[Cryptography]]></category>
            <category><![CDATA[Authentication]]></category>
            <category><![CDATA[Research]]></category>
            <guid isPermaLink="false">01zA7RtUKkhrUeINJ9AIS3</guid>
            <dc:creator>Ethan Heilman</dc:creator>
        </item>
        <item>
            <title><![CDATA[Fearless SSH: short-lived certificates bring Zero Trust to infrastructure]]></title>
            <link>https://blog.cloudflare.com/intro-access-for-infrastructure-ssh/</link>
            <pubDate>Wed, 23 Oct 2024 13:00:00 GMT</pubDate>
            <description><![CDATA[ Access for Infrastructure, BastionZero’s integration into Cloudflare One, will enable organizations to apply Zero Trust controls to their servers, databases, Kubernetes clusters, and more. Today we’re announcing short-lived SSH access as the first available feature of this integration.
 ]]></description>
            <content:encoded><![CDATA[ <p><a href="https://blog.cloudflare.com/cloudflare-acquires-bastionzero"><u>BastionZero joined Cloudflare</u></a> in May 2024. We are thrilled to announce Access for Infrastructure as BastionZero’s native integration into our <a href="https://www.cloudflare.com/learning/access-management/what-is-sase/"><u>SASE</u></a> platform, Cloudflare One. Access for Infrastructure will enable organizations to apply Zero Trust controls in front of their servers, databases, network devices, Kubernetes clusters, and more. Today, we’re announcing <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>short-lived SSH access</u></a> as the first available feature. Over the coming months we will announce support for other popular infrastructure access target types like <a href="https://www.cloudflare.com/learning/access-management/what-is-the-remote-desktop-protocol/"><u>Remote Desktop Protocol (RDP)</u></a>, Kubernetes, and databases.</p>
    <div>
      <h2>Applying Zero Trust principles to infrastructure</h2>
      <a href="#applying-zero-trust-principles-to-infrastructure">
        
      </a>
    </div>
    <p>Organizations have embraced <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/"><u>Zero Trust</u></a> initiatives that modernize secure access to web applications and networks, but often the strategies they use to manage privileged access to their infrastructure can be siloed, overcomplicated, or ineffective. When we speak to customers about their infrastructure access solution, we see common themes and pain points:</p><ul><li><p><b>Too risky:</b> Long-lived credentials and shared keys get passed around and inflate the risk of compromise, excessive permissions, and lateral movement</p></li><li><p><b>Too clunky</b>: Manual credential rotations and poor visibility into infrastructure access slow down incident response and compliance efforts</p></li></ul><p>Some organizations have dealt with the problem of privileged access to their infrastructure by purchasing a <a href="https://en.wikipedia.org/wiki/Privileged_access_management"><u>Privileged Access Management (PAM)</u></a> solution or by building a homegrown key management tool. Traditional PAM solutions introduce audit logging and session recording features that capture user interactions with their servers and other infrastructure and/or centralized vaults that rotate keys and passwords for infrastructure every time a key is used. But this centralization can introduce performance bottlenecks, harm usability, and come with a significant price tag. Meanwhile, homegrown solutions are built from primitives provided by cloud providers or custom infrastructure-as-code solutions, and can be costly and tiresome to build out and maintain. </p><p>We believe that organizations should apply Zero Trust principles to their most sensitive corporate resources, which naturally includes their infrastructure. That’s why we’re augmenting Cloudflare’s <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>Zero Trust Network Access (ZTNA)</u></a> service with <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>Access to Infrastructure</u></a> to support privileged access to sensitive infrastructure, and offering features that will look somewhat similar to those found in a PAM solution:</p><ul><li><p><b>Access</b>: Connect remote users to infrastructure targets via Cloudflare’s global network.</p></li><li><p><b>Authentication</b>: Eliminate the management of credentials for servers, containers, clusters, and databases and replace them with <a href="https://www.cloudflare.com/learning/access-management/what-is-sso/"><u>SSO</u></a>, <a href="https://www.cloudflare.com/learning/access-management/what-is-multi-factor-authentication/"><u>MFA</u></a>, and <a href="https://blog.cloudflare.com/6-new-ways-to-validate-device-posture/"><u>device posture</u></a>. </p></li><li><p><b>Authorization</b>: Use policy-based access control to determine who can access what target, when, and under what role. </p></li><li><p><b>Auditing</b>: Provide command logs and session recordings to allow administrators to audit and replay their developers’ interactions with the organization’s infrastructure.</p></li></ul><p>At Cloudflare, we are big believers that unified experiences produce the best security outcomes, and because of that, we are natively rebuilding each BastionZero feature into Cloudflare’s ZTNA service. Today, we will cover the recently-released feature for short-lived SSH access.</p>
    <div>
      <h2>Secure Shell (SSH) and its security risks</h2>
      <a href="#secure-shell-ssh-and-its-security-risks">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/"><u>SSH</u></a> (Secure Shell) is a protocol that is commonly used by developers or system administrators to secure the connections used to remotely administer and manage (usually Linux/Unix) servers. SSH access to a server often comes with elevated privileges, including the ability to delete or <a href="https://www.cloudflare.com/learning/security/what-is-data-exfiltration/">exfiltrate</a> data or to install or remove applications on the server. </p><p>Modern enterprises can have tens, hundreds, or even thousands of SSH targets. Servers accessible via SSH can be targeted in <a href="https://thehackernews.com/2023/12/warning-poorly-secured-linux-ssh.html"><u>cryptojacking</u></a> or <a href="https://thehackernews.com/2023/06/cybercriminals-hijacking-vulnerable-ssh.html"><u>proxyjacking</u></a> attacks. Manually tracking, rotating, and validating SSH credentials that grant access is a chore that is often left undone, which creates risks that these long-lived credentials could be compromised. There’s nothing stopping users from copying SSH credentials and sharing them with other users or transferring them to unauthorized devices.</p><p>Although many organizations will gate access to their servers to users that are inside their corporate network, this is no longer enough to protect against modern attackers. Today, the principles of Zero Trust demand that an organization also tracks who exactly is accessing their servers with SSH, and what commands they are running on those servers once they have access. In fact, the elevated privileges that come along with SSH access mean that compliance frameworks like <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/soc-2/"><u>SOC2</u></a>, <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/iso-certifications/"><u>ISO27001</u></a>, <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/fedramp/"><u>FedRAMP</u></a> and others have criteria that require monitoring who has access with SSH and what exactly they are doing with that access. </p>
    <div>
      <h2>Introducing SSH with Access for Infrastructure</h2>
      <a href="#introducing-ssh-with-access-for-infrastructure">
        
      </a>
    </div>
    <p>We’ve introduced<a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u> SSH with Access for Infrastructure</u></a> to provide customers with granular control over privileged access to servers via SSH. The feature provides improved visibility into who accessed what service and what they did during their SSH session, while also eliminating the risk and overhead associated with managing SSH credentials. Specifically, this feature enables organizations to:</p><ul><li><p>Eliminate security risk and overhead of managing SSH keys and instead use short-lived SSH certificates issued by a Cloudflare-managed certificate authority (CA).</p></li><li><p>Author fine-grained policy to govern who can SSH to your servers and through which SSH user(s) they can log in as.</p></li><li><p>Monitor infrastructure access with Access and SSH command logs, supporting regulatory compliance and providing visibility in case of security breach.</p></li><li><p>Avoid changing end-user workflows. SSH with Access for Infrastructure supports whatever native SSH clients end users happen to be using. </p></li></ul><p>SSH with Access for Infrastructure is supported through one of the most common deployment models of Cloudflare One customers. Users can connect using our device client (WARP), and targets are made accessible using Cloudflare Tunnel (cloudflared or the WARP connector). This architecture allows customers with existing Cloudflare One deployments to enable this feature with little to no effort. The only additional setup will be configuring your target server to accept a Cloudflare SSH certificate.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4msjrxXyhuuh7rUmB0zn8c/3e24a431820aee57651bad1d57e57ec5/BLOG-2604_2.png" />
          </figure><p>Cloudflare One already offers multiple ways to secure organizations' SSH traffic through network controls. This new SSH with Access for Infrastructure aims to incorporate the strengths of those existing solutions together with additional controls to authorize ports, protocols, and specific users as well as a much improved deployment workflow and audit logging capabilities.</p>
    <div>
      <h2>Eliminating SSH credentials using an SSH CA</h2>
      <a href="#eliminating-ssh-credentials-using-an-ssh-ca">
        
      </a>
    </div>
    <p>How does Access for Infrastructure eliminate your SSH credentials? This is done by replacing SSH password and SSH keys with an SSH Certificate Authority (CA) that is managed by Cloudflare. Generally speaking, a CA’s job is to issue certificates that bind an entity to an entity’s public key. Cloudflare’s SSH CA has a secret key that is used to sign certificates that authorize access to a target (server) via SSH, and a public key that is used by the target (server) to cryptographically validate these certificates. The public key for the SSH CA can be obtained by <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>querying the Cloudflare API</u></a>. And the secret key for the SSH CA is kept secure by Cloudflare and never exposed to anyone. </p><p>To use SSH with Access for Infrastructure to grant access via SSH to a set of targets (i.e. servers), you need to <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#modify-your-sshd-config"><u>instruct those servers to trust the Cloudflare SSH CA</u></a>. Those servers will then grant access via SSH whenever they are presented with an SSH certificate that is validly signed by the Cloudflare SSH CA.</p><p>The same Cloudflare SSH CA is used to support SSH access for all of your developers and engineers to all your target servers. This greatly simplifies key management. You no longer need to manage long-lived SSH keys and passwords for individual end users, because access to targets with SSH is granted via certificates that are dynamically issued by the Cloudflare SSH CA. And, because the Cloudflare SSH CA issued short-lived SSH certificates that expire after 3 minutes, you also don’t have to worry about creating or managing long-lived SSH credentials that could be stolen by attackers. </p><p>The 3-minute time window on the SSH certificate only applies to the time window during which the user has to authenticate to the target server; it does not apply to the length of the SSH session, which can be arbitrarily longer than 3 minutes. This 3-minute window was chosen because it was short enough to reduce the risk of security compromise and long enough to ensure that we don’t miss the time window of the user’s authentication to the server, especially if the user is on a slow connection.</p>
    <div>
      <h2>Centrally managing policies down to the specific Linux user</h2>
      <a href="#centrally-managing-policies-down-to-the-specific-linux-user">
        
      </a>
    </div>
    <p>One of the problems with traditional SSH is that once a user has an SSH key or password installed on a server, they will have access to that server forever — unless an administrator somehow remembers to remove their SSH key or password from the server in question. This leads to <i>privilege creep,</i> where too many people have standing access to too many servers, creating a security risk if an SSH key or password is ever stolen or leaked.</p><p>Instead, SSH with Access for Infrastructure allows you to centrally write policies in the Cloudflare dashboard specifying exactly what (set of) users has access to what (set of) servers. Users may be authenticated by SSO, MFA, device posture, location, and more, which provides better security than just authenticating them via long-lived SSH keys or passwords that could be stolen by attackers.</p><p>Moreover, the SSH certificates issued by the Cloudflare CA include a field called <i>valid_principals</i> which indicates the specific Linux user (e.g. <i>root</i>, <i>read-only</i>, <i>ubuntu</i>, <i>ec2-user</i>) that can be assumed by the SSH connection. As such, you can write policies that specify the (set of) Linux users that a given (set of) end users may access on a given (set of) servers, as shown in the figure below. This allows you to centrally control the privileges that a given end user has when accessing a given target server. (The one caveat here is that the server must also be pre-configured to already know about the specific Linux user (e.g. <i>root) </i>that is specified in the policies and presented in the SSH certificate. Cloudflare is NOT managing the Linux users on your Linux servers.)</p><p>As shown below, you could write a policy that says users in Canada, the UK, and Australia that are authenticated with MFA and face recognition can access the <i>root </i>and <i>ec2-user </i>Linux users on a given set of servers in AWS.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4D580wfY5DxQ9iSNhflztJ/a97eea9e68b0a44ea2b9c544d1cf3bda/BLOG-2604_3.png" />
          </figure>
    <div>
      <h2>How does Cloudflare capture SSH command logs?</h2>
      <a href="#how-does-cloudflare-capture-ssh-command-logs">
        
      </a>
    </div>
    <p>Cloudflare captures SSH command logs because we built an SSH proxy that intercepts the SSH connections. The SSH proxy establishes one SSH connection between itself and the end user’s SSH client, and another SSH connection between itself and the target (server). The SSH proxy can therefore inspect the SSH commands and log them. </p><p>SSH commands are encrypted at rest using a public key that the customer uploads via the Cloudflare API. Cloudflare cannot read SSH command logs at rest, but they can be extracted (in encrypted form) from the Cloudflare API and decrypted by the customer (who holds the corresponding private key). Instructions for uploading the <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#enable-ssh-command-logging"><u>encryption public key are available in our developer documentation</u></a>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1KvuPqP9XfUn5M6sE5Qvw4/c8eb24587b4301d4ca9bfad0b2037ee1/Log_for_digital-ocean.png" />
          </figure>
    <div>
      <h2>How the SSH interception works under the hood</h2>
      <a href="#how-the-ssh-interception-works-under-the-hood">
        
      </a>
    </div>
    
    <div>
      <h3>How does generic SSH work?</h3>
      <a href="#how-does-generic-ssh-work">
        
      </a>
    </div>
    <p>To understand how Cloudflare’s SSH proxy works, we first must review how a generic SSH connection is established.</p><p>First off, SSH runs over TCP, so to establish an SSH connection, we first need to complete a TCP handshake. Then, once the TCP handshake is complete, an SSH key exchange is needed to establish an ephemeral symmetric key between the client and the server that will be used to encrypt and authenticate their SSH traffic. The SSH key exchange is based on the server public key, also known as the <i>hostkey. </i>If you’ve ever used SSH, you’ve probably seen this message — that is the SSH server telling your SSH client to trust this hostkey for all future SSH interactions. (This is also known as TOFU or Trust On First Use.)</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3rjmLTfw8CauXPT0kumYyw/7cbfe372a00f7c7b1f6957743113b20a/BLOG-2604_5.png" />
          </figure><p>Finally, the client needs to authenticate itself to the server. This can be done using SSH passwords, SSH keys, or SSH certificates (as described above). SSH also has a mode called <i>none</i>, which means that the client does NOT need to authenticate itself to the server at all.</p>
    <div>
      <h3>So how does Cloudflare’s SSH proxy work? </h3>
      <a href="#so-how-does-cloudflares-ssh-proxy-work">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6znMxrzjyakDF3KBqEWUHX/c12a50ef7ef6c77d4bbacaac3ee8ec60/BLOG-2604_6.png" />
          </figure><p>To understand this, we note that whenever you set up SSH with Access for Infrastructure in the Cloudflare dashboard, you first need to create the set of targets (i.e. servers) that you want to make accessible via SSH. Targets can be defined by IP address or hostname. You then create an Access for Infrastructure application that captures the TCP ports (e.g. port 22) that SSH runs over for those targets, and write policies for those SSH connections, as we already described above and <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#5-add-an-infrastructure-application"><u>in our developer documentation</u></a>.</p><p>This setup allows Cloudflare to know the set of IP addresses and ports for which it must intercept SSH traffic. Thus, whenever Cloudflare sees a TCP handshake with an IP address and port that must be intercepted, it sends traffic for that TCP connection to the SSH proxy. </p><p>The SSH proxy leverages the client’s already authenticated identity from the WARP client, and enforces the configured Access for Infrastructure policies against it. If the policies do not allow the identity to connect to the target under the requested Linux user (e.g. <i>root)</i>, the SSH proxy will reject the connection and log an <b><i>Access denied</i></b><b> </b>event to the Access logs. Otherwise, if policies do allow the identity to connect, the the SSH proxy will establish the following two SSH connections: </p><ol><li><p>SSH connection from SSH proxy to target</p></li><li><p>SSH connection from end user’s SSH client (via Cloudflare’s WARP client) to SSH proxy</p></li></ol><p>Let’s take a look at each of these SSH connections, and the cryptographic material used to set them up. </p><p><b>To establish the SSH connection from SSH proxy to the target</b>, the SSH proxy acts as a client in the SSH key exchange between itself and the target server. The handshake uses the target server’s <i>hostkey</i> to establish an ephemeral symmetric key between the client and the server that will encrypt and authenticate their SSH traffic. Next, the SSH proxy must authenticate itself to the target server. This is done by presenting the server with a short-lived SSH certificate, issued by the Cloudflare SSH CA, for the specified Linux user that is requested for this connection as we already described above. Because the target server has been configured to trust the Cloudflare SSH CA, the target server will be able to successfully validate the certificate and the SSH connection will be established.</p><p><b>To establish the SSH connection from the end-user's SSH client to SSH proxy</b>, the SSH proxy acts as a server in the SSH key exchange between itself and the end-user’s SSH client. </p><p>To do this, the SSH proxy needs to inform the end user’s SSH client about the <i>hostkey</i> that will be used to establish this connection. But what <i>hostkey</i> should be used? We cannot use the same <i>hostkey </i>used by the target server, because that <i>hostkey </i>is the public key that corresponds to a private key that is known only to the target server, and not known to the SSH proxy. So, Cloudflare’s SSH proxy needs to generate its own <i>hostkey</i>. We don’t want the end user to randomly see warnings like the one shown below, so the SSH proxy should provide the same <i>hostkey </i>each time the user wants to access a given target server. But, if something does change with the <i>hostkey </i>of the target server, we do want the warning below to be shown. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3VBYjkE9DOpN7A5IjLSN0H/bfbc9e3a65cb81abc6fe4eb5c5780b39/BLOG-2604_7.png" />
          </figure><p>To achieve the desired behavior, the SSH proxy generates a <i>hostkey </i>and its corresponding private key by hashing together (a) a fixed secret value valid that associated with the customer account, along with (b) the <i>hostkey</i> that was provided by this target server (in the connection from SSH proxy to target server). This part of the design ensures that the end user only needs to see the TOFU notification the very first time it connects to the target server via WARP, because the same <i>hostkey</i> is used for all future connections to that target. And, if the <i>hostkey</i> of the target server does change as a result of a Monster-In-The-Middle attack, the warning above will be shown to the user.</p><p>Finally, during the SSH key exchange handshake from WARP client to SSH proxy, the SSH proxy informs that end user’s native SSH client that it is using <i>none</i> for client authentication. This means that the SSH client does NOT need to authenticate itself to the server at all. This part of the design ensures that the user need not enter any SSH passwords or store any SSH keys in its SSH configuration in order to connect to the target server via WARP. Also, this does not compromise security, because the SSH proxy has already authenticated the end user via Cloudflare’s WARP client and thus does not need to use the native SSH client authentication in the native SSH client.</p><p>Put this all together, and we have accomplished our goal of having end users authenticate to target servers without any SSH keys or passwords, using Cloudflare’s SSH CA instead. Moreover, we also preserve the desired behaviors of the TOFU notifications and warnings built into native SSH clients!</p>
    <div>
      <h2>All the keys</h2>
      <a href="#all-the-keys">
        
      </a>
    </div>
    <p>Before we wrap up, let’s review the cryptographic keys you need in order to deploy SSH with Access for Infrastructure. There are two keys:</p><ol><li><p><b>Public key of the SSH CA. </b>The private key of the SSH CA is only known to Cloudflare and not shared with anyone. The public key of the <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>SSH CA is obtained from the Cloudflare API</u></a> and must be <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>installed</u></a> on all your target servers. The same public key is used for all of your targets. This public key does not need to be kept secret.</p></li><li><p><b>Private key for SSH command log encryption. </b>To obtain logs of SSH commands, you need to generate a <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>public-private key pair, and upload the public key to Cloudflare</u></a>. The public key will be used to encrypt your SSH commands logs at REST. You need to keep the private key secret, and you can use it to <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#view-ssh-logs"><u>decrypt</u></a> your SSH command logs. </p></li></ol><p>That’s it! No other keys, passwords, or credentials to manage!</p>
    <div>
      <h2>Try it out today</h2>
      <a href="#try-it-out-today">
        
      </a>
    </div>
    <p>At Cloudflare, we are committed to providing the most comprehensive solution for ZTNA, which now also includes privileged access to sensitive infrastructure like servers accessed over SSH.</p><p>Organizations can now treat SSH like any other Access application and enforce strong MFA, device context, and policy-based access prior to granting user access. This allows organizations to consolidate their infrastructure access policies into their broader <a href="https://www.cloudflare.com/learning/access-management/security-service-edge-sse/">SSE</a> or SASE architecture.</p><p>You can try out Access for Infrastructure today by following <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>these instructions in our developer documentation</u></a>. Access for Infrastructure is currently available free to teams of under 50 users, and at no extra cost to existing pay-as-you-go and Contract plan customers through an Access or Zero Trust subscription. Expect to hear about a lot more features from us as we continue to natively rebuild <a href="https://blog.cloudflare.com/cloudflare-acquires-bastionzero/"><u>BastionZero</u></a>’s technology into Cloudflare’s Access for Infrastructure service!</p> ]]></content:encoded>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Compliance]]></category>
            <guid isPermaLink="false">KUIHP5Rgyl2H3pGVE6m99</guid>
            <dc:creator>Sharon Goldberg</dc:creator>
            <dc:creator>Ann Ming Samborski</dc:creator>
            <dc:creator>Sebby Lipman</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>
        <item>
            <title><![CDATA[SSHing to my Raspberry Pi 400 from a browser, with Cloudflare Tunnel and Auditable Terminal]]></title>
            <link>https://blog.cloudflare.com/ssh-raspberry-pi-400-cloudflare-tunnel-auditable-terminal/</link>
            <pubDate>Tue, 27 Apr 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ This is how I set up a Pi 400 on my home network, used Cloudflare Tunnel to connect it to the Cloudflare network, used Auditable Terminal to connect to the Pi 400 via Cloudflare and the tunnel using nothing more than a browser. ]]></description>
            <content:encoded><![CDATA[ <p>A few weeks ago I received a <a href="https://www.raspberrypi.org/products/raspberry-pi-400/">Raspberry Pi 400</a> as a gift. I didn’t have time to do anything beyond plug it in and verify that it works. It’s great that the Pi 400 comes with everything you need except for a screen: there’s the computer itself, mouse, HDMI cable and power adapter.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1iLQzp8ygoJwH3SyrGKZMA/d525dfc39f36bd14d3c4de6345831ec6/image19-3.png" />
            
            </figure><p>The Pi 400 has been sitting gathering dust when Cloudflare launched <a href="/browser-ssh-terminal-with-auditing/">Auditable Terminal</a> giving me the perfect excuse to get out the Pi 400 and hook it up.</p><p>Auditable Terminal gives you a fully featured <a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH client</a> in your browser. You authenticate using Cloudflare Access and can log into a computer from anywhere just using the browser and get a terminal. And using Cloudflare Tunnel you can securely connect a computer to Cloudflare without punching holes in a firewall. And you end up with a consistent terminal experience across devices: 256 colours, Unicode support and the same fonts everywhere.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/o8TpljnuZvMufrwXbp0kF/58964a8db07ef957f6491be0f2ff8744/SSHing-to-Raspberry-Pi-400-from-a-browser-2.png" />
            
            </figure><p>This is ideal for my use case: set up the Pi 400 on my home network, use Cloudflare Tunnel to connect it to the Cloudflare network, use Auditable Terminal to connect to the Pi 400 via Cloudflare and the tunnel using nothing more than a browser.</p><p>Here’s what it looks like:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/cGwSFbLHpHDT4NHO2S38C/d065d37de2c52482be8ffb7f12b1afe2/image9-3.png" />
            
            </figure><p>Before getting into the details of how I set that up, it’s worth stopping and appreciating how cool this is. I am logging into the Pi 400 via SSH but inside the browser window just by visiting a URL in a browser and authenticating using Cloudflare for Teams. And since it’s a URL that SSH session can just be a browser bookmark!</p><p>There’s another reason I wanted to do this: I like to use Cloudflare’s own products. I have a number of Cloudflare accounts that I pay for so that I see the true customer experience. I see the emails we send out and what it’s like to navigate our UI for real use. The Pi 400 gave me a chance to experience with Cloudflare Tunnel and Auditable Terminal.</p><p>Also this is really cool.</p><p>So… if you want to do this yourself, follow along as I take you through the steps I went through to hook a brand new Pi 400 up to Cloudflare and access it from anywhere.</p>
    <div>
      <h3>Stage 1: Prepare the Pi</h3>
      <a href="#stage-1-prepare-the-pi">
        
      </a>
    </div>
    <p>I plugged the Pi 400 into my TV via HDMI, to the Internet via Ethernet and booted it. It comes with the OS pre-installed on an SD card so it only took seconds to be at a welcome screen:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3F0OtoSGT7wmqWjrKWRcb/54ddcfadccb377f5e5ccdcd906033e9f/image2-33.png" />
            
            </figure><p>Inevitably with a brand new machine there were a lot of updates to install so I let the machine run through that before logging in for the first time.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/wCAY7rtjgslHDRLgxZq17/b48a45901b92555dc9d3508c89f15f92/image23-1.png" />
            
            </figure><p>The Pi 400 doesn’t come with the SSH server enabled, so it’s necessary to run the raspi-config program from the command line (<code>sudo raspi-config</code>). The SSH server is under option “3 Interface Options”:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3jpPxK6ybyxw9hXyZE3oPy/ae354610118482f8172b055b0af9ec1e/image1-36.png" />
            
            </figure><p>It’s option “P2 SSH” and when turned on will allow SSH access to the machine. By default this will be using SSH with password authentication and so it’s pretty important to change the <a href="https://www.raspberrypi.org/documentation/linux/usage/users.md">default pi/raspberry combination</a> (and to go much further and switch to <a href="https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md">using certificates</a>).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1wNoZtu3lkpdMhsOZjbGSf/149991d77bf2dd57794157128e275f81/image22.png" />
            
            </figure><p>But for the rest of this run through I am going to stick with password authentication in SSH. We’ll see later that Cloudflare has a clever solution to setting up SSH security with certificates.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4hv2ryUuLjXw8PVTiyq4nP/e60164de18c746644dc817b2d663ed70/image4-17.png" />
            
            </figure><p>With SSH access setup and the Pi 400 fully updated, the second step is to set up Cloudflare Tunnel.</p>
    <div>
      <h3>Stage 2: Cloudflare Tunnel</h3>
      <a href="#stage-2-cloudflare-tunnel">
        
      </a>
    </div>
    <p>Even with SSH setup on the Pi 400 it’s only accessible from inside my home network and I want to get access to it from anywhere. I could open a port in my home firewall, but I hate that idea.</p><p>The answer is <a href="/tunnel-for-everyone/">Cloudflare Tunnel</a>. It’s a (free!) small daemon (called <code>cloudflared</code>) that will connect from the Pi 400 to multiple Cloudflare data centers and maintain connections to them. It’ll be authenticated to my Cloudflare account and once setup I’ll be able to use Cloudflare for Teams to connect to it via the web.</p><p>Setting it up is a doddle. I already had a domain name setup on Cloudflare, if I hadn’t I could have set one up quickly. The Cloudflare Tunnel documentation takes you through <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation">installing it</a>.</p><p>The only thing I didn’t know was the architecture of the Pi 400 (32 bit? 64 bit?); so I ran <code>lscpu</code> which tells me that it’s <code>armv7l</code> (which is 32-bit). How did I know that armv7l was 32-bit? I didn’t. I googled it.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2QbeIrW7t5D9NbeFYfrCGN/23e9595bb3477718f432345bcd4e8af8/image10-3.png" />
            
            </figure><p>You can build <code>cloudflared</code> from source if you wish as it’s <a href="https://github.com/cloudflare/cloudflared">an open source project</a>. But I chose to go the speedy route and <code>wget</code> it.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1du0naQQVnv9RfhOUgkoRv/56c4aabd09e3f9a462617414d787ab1a/image25.png" />
            
            </figure><p>With <code>cloudflared</code> installed on the Pi 400 it was time to authenticate it to my account. Authentication is <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/setup">clearly documented</a> and I started by typing <code>cloudflared tunnel login</code>. On a machine with a UI and browser this would have opened the browser ready for me to log into my Cloudflare account and set up <code>cloudflared</code>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3q4FBWTZAnCzzw4IR3cGl/e5db874101a2bb327525c9f320950eca/image30.png" />
            
            </figure><p>Since I was doing all this while SSH’d into the Pi I had to copy and paste the URL to my browser and then choose which of my domains I would use. (I did this before we changed the name from Argo Tunnel to Cloudflare Tunnel… it’s the same thing).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/74FA914g5Q1OFnYkbmRCuu/e57bfb97579b61f670b6e82ecca32c75/image18-1.png" />
            
            </figure><p>Once authorized, the <code>cloudflared</code> command running on the Pi 400 automatically sets up the tunnel. In the dashboard I received confirmation of this:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6bgfyl88l05KhttMDo8lFu/a4950872e4c88bca4be74dfc8b58113d/image12-2.png" />
            
            </figure><p>And back on the Pi 400 there was confirmation that <code>cloudflared</code> had been authorized and that a <code>cert.pem</code> file was created.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4A3ptpx0jh88mbLBthatDs/41242e9290cd09e47f5c4566456191b1/image6-9.png" />
            
            </figure><p>Now that <code>cloudflared</code> was authorized it was time to go ahead and set up an actual tunnel that can be used for the Auditable Terminal. I chose the incredibly original name ‘terminal’ for this.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5gvRCPHw35bac1PsnbNDND/37e02200ac1e56032158a19263646d61/image5-15.png" />
            
            </figure><p>At this point the tunnel is set up but not running yet. So the Pi 400 is not yet connected to Cloudflare. I’ll come back to that. But the next step is setting up Cloudflare for Teams so that users can authenticate to the other end of the tunnel and get access.</p>
    <div>
      <h3>Stage 3: Cloudflare for Teams</h3>
      <a href="#stage-3-cloudflare-for-teams">
        
      </a>
    </div>
    <p>I didn’t have Cloudflare for Teams setup so the first step was to visit <a href="https://dash.teams.cloudflare.com/">https://dash.teams.cloudflare.com/</a> and following the <a href="https://developers.cloudflare.com/cloudflare-one/setup">setup guide</a>. I chose the unoriginal team name <code>jgctesting</code> and entered it:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6JLz1E3haHrn0M0mcCwezJ/009f82025e1e78394f0c42ef352386c1/image14-2.png" />
            
            </figure><p>And it’s here that things got complicated. I ended up writing this blog post to give anyone a step-by-step guide to getting Auditable Terminal working, but also so that we can learn from my confusion. (The team has put up a <a href="https://developers.cloudflare.com/cloudflare-one/tutorials/ssh">complete tutorial on this here</a>.)</p><p>If you follow the Cloudflare for Teams documentation <a href="https://developers.cloudflare.com/cloudflare-one/setup">you have three choices</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6jB3b2e8pWeieoufwhrXJx/b9b3f1a9dc9db49b20dc44a92fc110f5/image17-1.png" />
            
            </figure><p>It wasn’t 100% obvious to me that what I needed to do was add an application (as opposed to a location). The answer is… add an application. The process for doing so is documented <a href="https://developers.cloudflare.com/cloudflare-one/applications/configure-apps">here</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4kuug4Qk5YIOXjkQz3hxVy/7e98b45bf17e58925e76caa9bdde230c/image8-5.png" />
            
            </figure><p>In particular, I’m going to add a Self-Hosted Application (rather than SaaS) since I’m self-hosting it; it’s an SSH server on a Raspberry Pi 400 hidden behind the sofa after all.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ji7oP6TOKlYIt1oebB2db/86fb21476259bbf4a66bc8b7539cf27a/image29.png" />
            
            </figure><p>The next step is to give the application a name and specify the URL it will be accessible via. For me that’s “Raspberry Pi 400” (yeah, I’m great with original names) and I’m making it available via pi400.jgc.org.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/TYQZcmonBnnO1lvtEAyjg/aa8285bb8e73762791b60602d95f1d4a/image24-1.png" />
            
            </figure><p>Cloudflare for Teams provides <a href="https://developers.cloudflare.com/cloudflare-one/identity">a lot of different authentication and identity options</a>, but for this demo I am going to use the simplest. When I want to connect to this application (which will be Auditable Terminal ultimately) I’m going to have Cloudflare email me a one-time PIN.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7wzhc881BCW2t4PY4gbzpL/e5eb98aca36e77e4c01c0b4406f97343/image27.png" />
            
            </figure><p>Next up is adding a rule which will let Cloudflare for Teams know who should be allowed access to this application. I am allowing anyone with an @jgc.org email address to get a one-time PIN. Rules can be <a href="https://developers.cloudflare.com/cloudflare-one/policies/zero-trust">much more complex than that</a>!</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5FpsRASsImb0v2FuZdqbqj/ae229638cd7cf121f2dc71a5eb82c2d9/image13-2.png" />
            
            </figure><p>And finally I need to enable browser rendering (which will enable the SSH access and Auditable Terminal).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ItWrD98OwYbP2vaY3TLPT/c8dd2b27c44396443a88f873b568eb30/image21-1.png" />
            
            </figure>
    <div>
      <h3>Stage 4: Connecting it all together</h3>
      <a href="#stage-4-connecting-it-all-together">
        
      </a>
    </div>
    <p>At this stage I had <code>cloudflared</code> setup and authorized on the Pi 400, Cloudflare for Teams setup so that anyone with an @jgc.org email could get a PIN to access Auditable Terminal on pi400.jgc.org (I’ve since reconfigured everything so going to that URL doesn’t do anything today).</p><p>But all these things need connecting together. That means: editing a config file on the Pi 400 and telling Cloudflare to route to the tunnel for pi400.jgc.org.</p><p>I started with the config file which was <code>/home/pi/.cloudflared/config.yml</code>. The first step was to get the tunnel ID.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2f4hfhcaynwnzqjYqMTrPD/64acb352fd2e9c667f29482011cb80e6/image26.png" />
            
            </figure><p>And then edit the config file. Three things needed changing from the defaults: the tunnel (which is just the ID from <code>cloudflared tunnel list</code>), the credentials-file (which is a JSON file in the same location as the config file and with the same name as the tunnel ID) and the hostname (in my case pi400.jgc.org)</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6jONY9bTzvUtqtKNhetxNp/f487684906ba3d897857cf0e720e36bf/image15-1.png" />
            
            </figure><p>With the tunnel installed, authorized and configured I was able to finally run it and make sure that it can connect to Cloudflare. It worked! And created four connections to Cloudflare. Two to Lisbon and two to Amsterdam. Cloudflare Tunnel manages these connections to ensure that my Pi 400 is reachable across the Cloudflare network.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1vocEo7nH49JhiVsp2K6Uz/cd7dea34b918907316a3d417269e3426/image28.png" />
            
            </figure><p>And finally… I just needed to tell <code>cloudflared</code> to route pi400.jgc.org to the tunnel (once again using that tunnel ID).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5pIPdKNnP51fZprVhJZ84i/66f5966d699ad402414cd0fe723e8548/image16-1.png" />
            
            </figure>
    <div>
      <h3>Stage 5: Try it!</h3>
      <a href="#stage-5-try-it">
        
      </a>
    </div>
    <p>And then it was time to try it. I went back to my browser and browsed to pi400.jgc.org and was greeted with a login screen. Since I’d authorized any @jgc.org address I entered an @jgc.org email.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3FbbUNbLA5eXx5FvmwqOk6/72d4d1138c911792651095eaff987c25/image7-7.png" />
            
            </figure><p>The next step was to enter the one-time PIN that was emailed to me.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4AQho8PD6kZizNUZWbgO1U/3f9fdd722c1cfb1002ec794b9dc1e95e/image11-2.png" />
            
            </figure><p>And, since I am using user/password for SSH I was asked for the user name followed by password.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3QqNL3jQEecwuuDBGUrmfM/6d19258e5d3def737f58392808a0d472/image20-2.png" />
            
            </figure><p>And, wow, there I was looking at a command prompt on the Pi 400.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/WxNCKRqVDcJGSejj2fJS6/084a9d8c1ccee47b82600face96a1c20/pi400-login-OG.png" />
            
            </figure><p>Of course, just doing on my laptop wasn’t enough, so I went ahead and logged in the same way on my phone.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1niCupYzcPJoOdv3CNBQ2k/53750664fbba4d4cb277375e9685cb74/image3.jpg" />
            
            </figure><p>The absolute last step was to make sure that <code>cloudflared</code> <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service">runs automatically</a> which was as simple as typing <code>sudo cloudflared --config .cloudflared/config.yml service install</code>.</p>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>This was pretty fast (especially factoring in my ignorance about all the details of configuring Cloudflare for Teams and Cloudflare Tunnel). Now I can log into that Pi 400 from anywhere in just a browser. So powerful.</p><p>But it’s still using username/password for SSH and that can be fixed with <a href="https://developers.cloudflare.com/cloudflare-one/identity/users/short-lived-certificates">short-lived certificates</a>. And my authentication to access is using one-time PINs; for a real application it would be <a href="https://developers.cloudflare.com/cloudflare-one/identity/idp-integration">better to use SSO</a>.</p> ]]></content:encoded>
            <category><![CDATA[Raspberry Pi]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">eOVblYVCUnk4qeqeK7TBW</guid>
            <dc:creator>John Graham-Cumming</dc:creator>
        </item>
        <item>
            <title><![CDATA[A Zero Trust terminal in your web browser]]></title>
            <link>https://blog.cloudflare.com/browser-ssh-terminal-with-auditing/</link>
            <pubDate>Thu, 15 Apr 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ Starting today, your team can use that same platform to seamlessly connect to non-HTTP resources from inside of a browser with the same level of Zero Trust control available in web applications. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare for Teams gives organizations of any size the ability to add Zero Trust controls to resources and data while also improving performance with Cloudflare’s network. Starting today, your team can use that same platform to seamlessly connect to non-HTTP resources from inside of a browser with the same level of audit control available in web applications.</p><div></div>
<p></p><p>Cloudflare’s browser-based terminal renders a fully functional console that a user can launch with a single click. Users authenticate with their organization’s SSO and Cloudflare’s edge checks that they meet the team’s Zero Trust rules for the resource being accessed.</p><p>Once approved, users can run commands over <a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH</a> as if they were using their native command line without any client side configuration or agent. Cloudflare’s network will accelerate their connection, apply rules about what data transfers can take place, and record the session for administrators to audit as needed.</p><p>We built Cloudflare’s browser-based terminal based on conversations with customers who are struggling to secure and deliver applications that live outside of the browser. We heard from developers who had to deal with using, and supporting, existing workflows to connect over SSH into machines or extend legacy applications to <a href="https://www.cloudflare.com/products/zero-trust/remote-workforces/">large, remote workforces</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2OEPZ22ETbr5FjPuFmwNXN/0906139dbdc8b7d7af54474fa1751eee/image5-6.png" />
            
            </figure><p>We’re starting with a terminal for SSH use cases, but Cloudflare’s platform will provide a browser-based interface for nearly any application that your team needs. Your security team can create Zero Trust rules to determine who can reach those resources and how — while logging every connection. You'll be able to add advanced security features to record sessions and inspect and filter data to stop incidents from starting in non-HTTP connections like SSH and soon RDP.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1shMpInoK3fIMonx522zhq/43d41c4720b49bf279f6540b8d4eaa14/Tunnel-Diagram.png" />
            
            </figure><p>The platform also makes applications faster for your end users. Cloudflare’s network accelerates connections from your services to your team in any region. Existing team members can migrate to a <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/">Zero Trust model</a> without any client-side configuration. New hires can find every resource they need, not just web applications, in a single location and launch them with a single click.</p>
    <div>
      <h2>Challenges with non-web applications</h2>
      <a href="#challenges-with-non-web-applications">
        
      </a>
    </div>
    
    <div>
      <h3>Zero Trust controls</h3>
      <a href="#zero-trust-controls">
        
      </a>
    </div>
    <p>The work for an IT department to add Zero Trust controls to a web application is made easier thanks to web browsers, reverse proxies, and browser cookies. Web applications that used to live on a private network can be deployed behind a reverse proxy, like Cloudflare, and users can visit a public DNS address in any web browser while the reverse proxy checks for identity. Cloudflare Access builds on these tools to give your team the ability to add Zero Trust rules to any web application in less than 10 minutes.</p><p>Non-web applications introduce challenges. Most traditional applications that require a thick client rely on private networks. The client software expects to reach a private IP, over a specific protocol, and making that IP public is a non-starter for almost all organizations because of the risk of data loss. Even if it were public, end users would still need to run client software on their device.</p><p>Authentication to those applications also relies on legacy approaches. Developers hold long-lived SSH keys to reach machines and business users keep usernames and passwords on sticky notes for RDP sessions. These types of resources make it difficult or impossible to integrate with your SSO provider and other controls like device posture.</p>
    <div>
      <h3>Data security and logging</h3>
      <a href="#data-security-and-logging">
        
      </a>
    </div>
    <p>You can also use Cloudflare to log every authentication event and HTTP request and response without any server-side code changes. Teams can deploy a comprehensive logging layer for any web application alongside Zero Trust controls without any server-side code changes.</p><p>We’ve heard from our customers that a <a href="https://www.cloudflare.com/learning/cloud/what-is-dspm/">data control</a> and logging gap remains in “every other application” outside of the browser. While teams invest in significant improvements in web applications, anything outside of the browser becomes a blind spot.</p>
    <div>
      <h3>User experience</h3>
      <a href="#user-experience">
        
      </a>
    </div>
    <p>Web browsers make almost any SaaS application accessible to any user on any device. A user can pick up any laptop from any manufacturer and edit an Excel spreadsheet in Microsoft 365 or update a customer record in Salesforce.</p><p>That ease-of-use begins to break down for any other combination that includes a mobile device or an application that does not run in the browser. Some organizations ship dedicated hardware with a specific OS to certain team members that need it. More teams rely on expensive virtualization platforms that slow down user workflows.</p><p>Regardless of client-side approach, the connectivity between the user and the resource also suffers from the same problems of any traditional private network. Traffic is backhauled through centralized appliances and users suffer through slow performance to complete mission-critical workflows like managing production machines or enterprise resource planning.</p>
    <div>
      <h3>Client-side configuration</h3>
      <a href="#client-side-configuration">
        
      </a>
    </div>
    <p>Migrating to a Zero Trust model can become a chore when end users have to change their local configuration for non-web applications. When our own team first deleted our VPN, the most popular chat room became a thread where engineers would share SSH configuration files and answer questions about which environment variables to set to reach Kubernetes workloads.</p><p>Application discovery also becomes a problem. Organizations have to update wiki pages with inventories of IP addresses and ports for commonly used services. End users have to ask other team members for help connecting to a specific resource.</p>
    <div>
      <h2>Launching the auditable, browser-based, terminal</h2>
      <a href="#launching-the-auditable-browser-based-terminal">
        
      </a>
    </div>
    <p>We’re excited to help your team address all four of these challenges with today’s announcement. Like web application flows, the solution takes minutes to deploy, requires no end-user configuration, and consists of just three components:</p><ol><li><p>Your service running in an on-premise environment or public cloud</p></li><li><p>A secure connection from that service to Cloudflare’s edge using a lightweight daemon called <code>cloudflared</code></p></li><li><p>A user’s browser, where Cloudflare renders the SSH session</p></li></ol>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6114sGfD6LMu0IxDSzVkDF/d09f4830b5e4083857a272180dce7d63/Tunnel-Diagram-with-the-Partners.png" />
            
            </figure>
    <div>
      <h3>Apply Zero Trust controls to any resource</h3>
      <a href="#apply-zero-trust-controls-to-any-resource">
        
      </a>
    </div>
    <p>We’ve talked to enterprises who have compliance requirements to add second factor authentication to all of their self-hosted applications, but they estimated that doing so would take months of development time. With Cloudflare Access, your team can use the second factor authentication of your identity provider as a requirement to reach applications of any type in a matter of minutes.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2nSapV6PtHLHRMLR9qd8cS/c638f72e76ce523b7f36f97f032503cd/image1-21.png" />
            
            </figure><p>You can layer these types of identity-based rules with other signals, like the country where the user sits or the <a href="/endpoint-partnerships/">health of the device</a> using integrations with Tanium, Carbon Black, Crowdstrike, and other providers. Organizations can require that users only <a href="/zero-trust-with-managed-devices/">connect from corporate devices</a> or build login flows that support enterprise providers like Okta and Azure AD alongside public authentication options like GitHub and Google.</p><p>Cloudflare’s Zero Trust platform also helps your team get rid of outdated authentication processes like long-lived SSH security keys. The solution takes the JSON Web Token issued during the login and converts it to short-lived certificates that authorize the user’s session on a machine.</p>
    <div>
      <h3>Audit sessions and secure data in every application</h3>
      <a href="#audit-sessions-and-secure-data-in-every-application">
        
      </a>
    </div>
    <p>Cloudflare Zero Trust Apps platform gives your team the same level of control over files, data, and even commands that you have today in Cloudflare Gateway and applies it to any supported application type in your enterprise.</p><p>First, your team can now build rules that control who in your organization can transfer data to or away from a machine over an SSH connection or to a remote desktop over RDP. Build rules by machine, user and group identity, or country and device. Keep data on the machines or desktops in your environments and off of the roaming devices outside of your organization.</p><p>Coming soon, deploy a high visibility solution with low effort by enabling session recording for any connection type. Cloudflare Zero Trust Apps will record the screen of any session, batch the recordings in intervals, and send them to a storage location you have configured. We’ll be adding structured command logging and keyboard input to this flow as well.</p>
    <div>
      <h3>Launch any app with a single click</h3>
      <a href="#launch-any-app-with-a-single-click">
        
      </a>
    </div>
    <p>Today’s launch not only <a href="https://www.cloudflare.com/application-services/solutions/">improves security for any application</a> in your organization, it also makes life easier for all of your users.</p><p>The browser-based interface of Cloudflare Zero Trust Apps can be launched from a single dashboard that is tailored to the permissions of each end user. Users login to a home page that your organization controls and Cloudflare displays each application they can reach — web, SSH, RDP, and others.</p><p>Users can click on any tile in their view to launch the interface for a given application without leaving their browser. Cloudflare’s Zero Trust login flow authorizes them to the session and they can begin doing their work without modifying SSH configuration files or editing RDP clients locally.</p><div></div>
<p></p><p>Mobile also just works. Cloudflare can render the session in any common browser on tablets and phones, making it possible for technicians on a job site or users away from their desk to reach any service as seamlessly as they can connect to a web application.</p>
    <div>
      <h3>Accelerate user experience</h3>
      <a href="#accelerate-user-experience">
        
      </a>
    </div>
    <p>Like any product in Cloudflare One, this solution does not force your team to pick between security and performance. Cloudflare Zero Trust Apps makes the applications that your team needs faster.</p><p>The approach starts by building on the <a href="https://www.cloudflare.com/learning/access-management/what-is-browser-isolation/">remote browser isolation technology</a> that powers Cloudflare Browser. Cloudflare Zero Trust Apps renders the application in the browser as if it were a native application. Users can highlight, copy-and-paste, and use shortcuts.</p><p>Next, the solution uses Cloudflare’s network to accelerate traffic from the server to your end user. Cloudflare determines the fastest path across our global backbone and delivers the experience to your team from a data center nearby in more than 200 cities in over 100 countries.</p>
    <div>
      <h2>What’s next?</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>Today’s launch begins with support for SSH. We plan to continue to add support for additional application types over the next few months, in addition to structured command logging and filtering for SSH. Does your team have a resource that has been painful to use? <a href="https://forms.gle/a9EhhCj9dm2jY8EE8">Let us know</a> as we prioritize the expansion.</p><p>If your team uses Cloudflare Access for SSH flows, you can begin using Zero Trust Apps immediately with a single configuration change. To get started, <a href="https://community.cloudflare.com/t/feedback-for-cloudflares-zero-trust-browser-based-ssh-client/260745">follow the instructions here</a>.</p><p>As part of Cloudflare for Teams, your organization can start using Cloudflare Zero Trust Apps at no cost for up to 50 users as part of the <a href="http://dash.cloudflare.com/signup/teams">Cloudflare for Teams free plan</a>. Advanced security features, like session recording, will be available on the Cloudflare for Teams Standard plan.</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">5LbDQJRKKK4gyQCanlOW2t</guid>
            <dc:creator>Sam Rhea</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare for SSH, RDP and Minecraft]]></title>
            <link>https://blog.cloudflare.com/cloudflare-for-ssh-rdp-and-minecraft/</link>
            <pubDate>Mon, 13 Apr 2020 19:06:38 GMT</pubDate>
            <description><![CDATA[ Cloudflare now covers SSH, RDP and Minecraft, offering DDoS protection and increased network performance. Spectrum pay-as-you-go now available on all paid plans. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Almost exactly two years ago, we <a href="/spectrum/">launched Cloudflare Spectrum</a> for our Enterprise customers. Today, we’re thrilled to extend DDoS protection and traffic acceleration with Spectrum for <a href="https://www.cloudflare.com/products/cloudflare-spectrum/ssh">SSH</a>, <a href="https://www.cloudflare.com/products/cloudflare-spectrum/rdp/">RDP</a>, and <a href="https://www.cloudflare.com/products/cloudflare-spectrum/minecraft">Minecraft</a> to our Pro and Business plan customers.</p><p>When we think of Cloudflare, a lot of the time we think about protecting and improving the performance of websites. But the Internet is so much more, ranging from gaming, to managing servers, to cryptocurrencies. How do we make sure these applications are secure and performant?</p><p>With Spectrum, you can put Cloudflare in front of your SSH, RDP and Minecraft services, protecting them from DDoS attacks and improving network performance. This allows you to protect the management of your servers, not just your website. Better yet, by leveraging the Cloudflare network you also get increased reliability and increased performance: lower latency!</p>
    <div>
      <h3>Remote access to servers</h3>
      <a href="#remote-access-to-servers">
        
      </a>
    </div>
    <p>While access to websites from home is incredibly important, being able to remotely manage your servers can be equally critical. Losing access to your infrastructure can be disastrous: people need to know their infrastructure is safe and connectivity is good and performant. Usually, server management is done through SSH (Linux or Unix based servers) and RDP (Windows based servers). With these protocols, performance and reliability are <i>key</i>: you need to know you can always reliably manage your servers and that the bad people are kept out. What's more, low latency is really important. Every time you type a key in an SSH terminal or click a button in a remote desktop session, that key press or button click has to traverse the Internet to your origin before the server can process the input and send feedback. While increasing bandwidth can help, lowering latency can help even more in getting your sessions to feel like you're working on a local machine and not one half-way across the globe.</p>
    <div>
      <h3>All work and no play makes Jack Steve a dull boy</h3>
      <a href="#all-work-and-no-play-makes-jack-steve-a-dull-boy">
        
      </a>
    </div>
    <p>While we stay at home, many of us are also looking to play and not only work. Video games in particular have seen a huge <a href="https://en.wikipedia.org/wiki/Impact_of_the_2019%E2%80%9320_coronavirus_pandemic_on_the_video_game_industry">increase in popularity</a>. As personal interaction becomes more difficult to come by, Minecraft has become a popular social outlet. Many of us at Cloudflare are using it to stay in touch and have fun with friends and family in the current age of quarantine. And it’s not just employees at Cloudflare that feel this way, we’ve seen a big increase in Minecraft traffic flowing through our network. Traffic per week had remained steady for a while but has more than tripled since many countries have put their citizens in lockdown:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1AXaLJtErEqZ3dQb1wJguw/3453333c635763235c74f16688887d12/image3-10.png" />
            
            </figure><p>Minecraft is a particularly popular target for DDoS attacks: it's not uncommon for people to develop feuds whilst playing the game. When they do, some of the more tech-savvy players of this game opt to take matters into their own hands and launch a (D)DoS attack, rendering it unusable for the duration of the attacks. Our friends at Hypixel and Nodecraft have known this for many years, which is why they’ve chosen to protect their servers using Spectrum.</p><p>While we love recommending their services, we realize some of you prefer to run your own Minecraft server on a VPS (virtual private server like a DigitalOcean droplet) that you maintain. To help you protect your Minecraft server, we're providing Spectrum for Minecraft as well, available on Pro and Business plans. You'll be able to use the entire Cloudflare network to protect your server and increase network performance.</p>
    <div>
      <h3>How does it work?</h3>
      <a href="#how-does-it-work">
        
      </a>
    </div>
    <p>Configuring Spectrum is easy, just log into your dashboard and head on over to the Spectrum tab. From there you can choose a protocol and configure the IP of your server:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2AVtgjvLEEdw2qPCABTjyg/a8ff0da389d7d9cc6defa51e899f98c4/image2-10.png" />
            
            </figure><p>After that all you have to do is use the subdomain you configured to connect instead of your IP. Traffic will be proxied using Spectrum on the Cloudflare network, keeping the bad people out and your services safe.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4tBzB1f6aFcCSNo9awsyXQ/6cb1e87075fef67a752f99248f8745ad/image1-13.png" />
            
            </figure><p>So how much does this cost? We're happy to announce that <a href="https://www.cloudflare.com/plans/">all paid plans</a> will get access to Spectrum for free, with a generous free data allowance. Pro plans will be able to use SSH and Minecraft, up to 5 gigabytes for free each month. Biz plans can go up to 10 gigabytes for free and also get access to RDP. After the free cap you will be billed on a per <a href="https://support.cloudflare.com/hc/en-us/articles/360041721872">gigabyte basis</a>.</p><p>Spectrum is complementary to Access: it offers DDoS protection and improved network performance as a 'drop-in' product, no configuration necessary on your origins. If you want more control over who has access to which services, we highly recommend taking a look at <a href="https://teams.cloudflare.com/access/">Cloudflare for Teams</a>.</p><p>We're very excited to extend Cloudflare's services to not just HTTP traffic, allowing you to protect your core management services and Minecraft gaming servers. In the future, we'll add support for more protocols. If you have a suggestion, let us know! In the meantime, if you have a Pro or Business account, head on over to the dashboard and enable Spectrum today!</p> ]]></content:encoded>
            <category><![CDATA[Spectrum]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">5BPg140vG7il7lQnjTUQr7</guid>
            <dc:creator>Achiel van der Mandele</dc:creator>
        </item>
    </channel>
</rss>