
<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>Wed, 08 Apr 2026 09:32:10 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Mitigating Bot Attacks against Cloudflare]]></title>
            <link>https://blog.cloudflare.com/mitigating-bot-attacks-against-cloudflare/</link>
            <pubDate>Fri, 26 Mar 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ The word “bots” on the Internet is a fairly loaded one. My earliest ‘bot’ experience was on IRC, where bots were quite helpful in making sure your favorite channel didn’t get taken over by malicious users and allowed for fun games of trivia. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>The word “bots” on the Internet is a fairly loaded one. My earliest ‘bot’ experience was <a href="https://en.wikipedia.org/wiki/IRC_bot">on IRC</a>, where bots were quite helpful in making sure your favorite channel didn’t get taken over by malicious users and allowed for fun games of trivia. Around five years ago, “bots” were often referencing text chats in combination with AI and messaging platforms/apps as a new way to interact with customers. Today most of the connotations around bots on the Internet, particularly in the security space, are negative, and we have a number of vendors offering new ways to detect and block bots.</p><p>In its most simple form, a bot is an automated piece of software that replaces human interaction. In the examples above, this is done, so we can scale a process to be faster or more extensive than a single manual action. <a href="https://help.duckduckgo.com/duckduckgo-help-pages/results/duckduckbot/">Search Engine bots</a> exist because it is impossible (or at the very least, impractical) to crawl the Internet one curl at a time. The benefit of scale can be used for both good and for bad, by attacking a property on the Internet. Bots are used for <a href="https://www.cloudflare.com/learning/bots/what-is-a-bot-attack/">attacks</a> at scale — they can be deployed to attack an improperly configured API, to take a site down, or take a list of pwned credentials and see which work on a login endpoint before <a href="/protecting-apis-from-abuse-and-data-exfiltration/">exfiltrating data</a>.</p><p>The global pandemic has caused a <a href="https://hbr.org/2021/02/why-were-in-the-midst-of-a-global-semiconductor-shortage">global shortage of microchips</a>. In 2020, Microsoft, Nvidia, and Sony all launched high demand, low supply gaming devices or video cards that remain scarce months later. This type of environment is ripe for all manner of bot activity — from the hobbyist trying to gain access to one of these items for their own use, to the hoarder who is actively trying to buy as many as possible at retail price for resale on the much higher priced open market. A bot will scrape for inventory and then script through the add to cart/buy process much faster than a legitimate user behind a browser. This can lead to frustration at the very least, but can also cause a Layer 7 DDoS on the application which compounds the issue. Nvidia was forced to manually and retroactively <a href="https://www.theverge.com/2020/9/21/21449353/nvidia-apology-rtx-3080-gpu-preorder-shortage-issues">cancel sales to bots</a> during one of its releases as a result. While gaming is a fun distraction, this same set of circumstances can also unfortunately affect <a href="https://www.capitalgazette.com/coronavirus/ac-cn-maryland-vaccine-bots-20210324-ngcmoadnwne6peb3fv6iu2hbri-story.html">vaccine distribution</a>.</p>
    <div>
      <h3>Using Bot Management on cloudflare.com</h3>
      <a href="#using-bot-management-on-cloudflare-com">
        
      </a>
    </div>
    <p>The current generation of Cloudflare Bot Management was released in 2019. The product was originally borne out of an internal experiment to see if we could predict whether a given request would solve a challenge using our network data and <a href="https://www.cloudflare.com/learning/ai/what-is-machine-learning/">machine learning (ML) models</a>. This eventually led to our first Bot Score and full-fledged Bot Management product, which has gone through a number of enhancements and iterations and has been an extremely successful product in our customers’ security toolkit. Today we enhanced it further for our Pro and Business plans with <a href="/super-bot-fight-mode">Super Bot Fight Mode</a>.</p><p>During the initial internal development stages, we discovered a problem on one of our own customer-facing sites. For reasons that are still not entirely clear (but likely malicious), attackers would put junk data into forms on various Cloudflare landing pages where legitimate users would enter their information to register for an event or promotion, or to be contacted by our sales team. Initially this was a nuisance, as it would cause our teams to sort through and delete bad data. We also had to go back and identify the legitimate submissions. As the problem grew, it became so significant that it impacted our back end provider (where the forms were being correlated) and entered into our CRM. It turned from nuisance into a form of application DDoS which had to be carefully stopped to avoid false positives, i.e., blocks of legitimate submissions.</p><p>Word of the problem reached our engineering team, and it became clear that this was a great place to launch our first customer and dogfood our product. At first, attackers were not attempting to hide very much. They used out-of-the-box scripts and oftentimes didn’t even bother to change obvious signals like the User Agent header or spread the attack over a significant number of IPs or ASNs. As we added heuristics into the system and tuned the ML model, the attackers adjusted their tactics. Over time, our full array of tools became necessary as the attackers continued to adapt. An example of a more recent attack is below; during the attack, automated traffic increased to 7x over normal for roughly 30 minutes. Scaling would have likely been an issue for our downstream provider, where we ultimately sent API calls on form submission. During this attack, our Anomaly Detection (which is the basis for our new <a href="/api-abuse-detection/">API abuse detection</a>) did the majority of the heavy lifting, accounting for 42% of the detections.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4YqMNYLNqnz7rDAUmkSeSq/8cc76fda1504da1999fe72b9d0d5d1cb/image2-40.png" />
            
            </figure><p>We also battle bots on our dashboard across many of our user-facing APIs. A common pattern of abuse we have seen over the years is that a malicious user signs up numerous domains, often from free <a href="https://www.cloudflare.com/learning/dns/top-level-domain/">TLDs</a>, and often spread across multiple accounts. The user takes these domains and engages in a form of Search Engine Optimization (SEO) spam. It is believed that one of the ways you increase your search ranking is to have many sites linking to your domain. SEO spammers sign up large numbers of domains and create thousands of hostname records within and then charge unscrupulous website owners to crosslink from each of these domains.</p><p>SEO shenanigans aside, this presents two technical issues for our systems. First: if enough of these domains and records are created at the same time, it can cause <a href="/how-we-made-our-dns-stack-3x-faster/">DNS Pump</a>, our system designed to push customer DNS records to 200+ locations in a manner of seconds, to slow down. We pride ourselves on making DNS propagation seem like magic and our customers are used to and rely on this speed. Second, there is the practical cost of storing these records on each of our edge servers for no purpose other than to possibly trick search engines into thinking a site is popular.</p><p>This type of abuse only works through scale. An SEO spammer must be able to sign up a lot of domains in an efficient and automated fashion in order to sell their services. So we threw Bot Management at the problem. Originally we slowed the problem down through Rate Limiting as well as preventing a given IP from signing up numerous accounts over a short period of time, but attackers persisted. We challenged new account signups that appeared automated through our Bot Management product and the problem immediately went away.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6ggwTCrqsxcZOBuuS8eusz/ee4f93673e22bcca57f4675320bdb6d5/image1-47.png" />
            
            </figure><p>Another part of Cloudflare’s dashboard that deals with bots is our billing system. Attackers will use our payment card processing system to test stolen credit card numbers for validity, which allows them to use or resell the card for use on another, more expensive transaction at a different site. Once again, speed and scale are key here. An attacker does not want to test one or two card numbers — they want to test dozens or hundreds and automate the process. Our billing engineering team uses Bot Management to trigger challenges or blocks when a user adds or changes a payment method to stop this attack. The billing team also passes the bot score to our third party payment provider’s own fraud detection system (via <a href="https://developers.cloudflare.com/bots/bot-management-enterprise#bot-management-variables">Cloudflare Workers</a>), which incorporates the score into its analysis for manual transaction reviews.</p>
    <div>
      <h3>Building on a Foundation of Global Data</h3>
      <a href="#building-on-a-foundation-of-global-data">
        
      </a>
    </div>
    <p>Our Bot Management products are successful because of the sheer number of customers and amount of traffic on our network. With approximately 25M Internet properties protected by Cloudflare, we are uniquely positioned to gather these signals and interpret them into actionable intelligence. Today’s Super Bot Fight Mode release extends this capability to Pro and Business but will also provide a boost across all Bot Management users. As Pro and Business zones start to challenge and block bots based directly on bot signals, this data more directly trains our models versus the inferred data we use for non bot-related challenges and blocks. This diversity of signal and scale of data on a global platform gives us confidence in our ability not just to block bots today, but in the future as well.</p><p>We are excited to get early access feedback from our Enterprise customers on our API detection and abuse models. APIs present different challenges than those posed by web-facing properties, but our experience in building our <a href="/lessons-learned-from-scaling-up-cloudflare-anomaly-detection-platform/">Anomaly Detection platform</a> for Bot Management allows us to use related techniques to identify API endpoints and detect anomalies within automated traffic. The inclusion of these new techniques with our existing security portfolio is part of our commitment to providing our customers with the best tools on a single platform, no matter what traffic they have on their domain. The combination of all of our tools allows for flexible response as well — customers can block DDoS attacks and definite bots, challenge likely bots, and use our rate limiting to target suspicious API traffic.</p> ]]></content:encoded>
            <category><![CDATA[Security Week]]></category>
            <category><![CDATA[Bot Management]]></category>
            <category><![CDATA[Bots]]></category>
            <category><![CDATA[Attacks]]></category>
            <guid isPermaLink="false">2HcF0vKofBFQP4T4UyargL</guid>
            <dc:creator>Sergi Isasi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Deprecating the __cfduid cookie]]></title>
            <link>https://blog.cloudflare.com/deprecating-cfduid-cookie/</link>
            <pubDate>Wed, 09 Dec 2020 12:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare is deprecating the __cfduid cookie. While we have never tracked end-users across sites or sell their personal data, we don’t want any customer to think they need a cookie banner because of what we do. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare is deprecating the __cfduid cookie. Starting on 10 May 2021, we will stop adding a “Set-Cookie” header on all HTTP responses. The last __cfduid cookies will expire 30 days after that.</p><p>We never used the __cfduid cookie for any purpose other than providing critical performance and security services on behalf of our customers. Although, we must admit, calling it something with “uid” in it really made it sound like it was some sort of user ID. It wasn't. Cloudflare never tracks end users across sites or sells their personal data. However, we didn't want there to be any questions about our cookie use, and we don’t want any customer to think they need a <a href="https://www.cloudflare.com/learning/privacy/what-are-cookies/">cookie</a> banner because of what we do.</p>
    <div>
      <h3>So why did we use the __cfduid cookie before, and why can we remove it now?</h3>
      <a href="#so-why-did-we-use-the-__cfduid-cookie-before-and-why-can-we-remove-it-now">
        
      </a>
    </div>
    <p>The primary use of the cookie is for <b>detecting</b> <b>bots</b> on the web. Malicious bots may disrupt a service that has been explicitly requested by an end user (through DDoS attacks) or compromise the security of a user's account (e.g. through brute force password cracking or credential stuffing, among others). We use many signals to build <a href="https://www.cloudflare.com/learning/ai/what-is-machine-learning/">machine learning models</a> that can detect automated bot traffic. The presence and age of the cfduid cookie was just one signal in our models. So for our customers who benefit from our bot management products, the cfduid cookie is a tool that allows them to provide a service explicitly requested by the end user.</p><p>The value of the cfduid cookie is derived from a one-way MD5 hash of the cookie's IP address, date/time, user agent, hostname, and referring website -- which means we can’t tie a cookie to a specific person. Still, as a privacy-first company, we thought: Can we find a better way to detect bots that doesn’t rely on collecting end user IP addresses?</p><p>For the past few weeks, we’ve been experimenting to see if it’s possible to run our bot detection algorithms without using this cookie. We’ve learned that it will be <i>possible</i> for us to transition away from using this cookie to detect bots. We’re giving notice of deprecation now to give our customers time to transition, while our bot management team works to ensure there’s no decline in quality of our bot detection algorithms after removing this cookie. (Note that some Bot Management customers will still require the use of <a href="https://support.cloudflare.com/hc/en-us/articles/200170156-Understanding-the-Cloudflare-Cookies#12345681">a different cookie</a> after April 1.)</p><p>While this is a small change, we’re excited about any opportunity to make the web simpler, faster, and more private.</p> ]]></content:encoded>
            <category><![CDATA[Privacy]]></category>
            <category><![CDATA[Privacy Week]]></category>
            <category><![CDATA[Bots]]></category>
            <guid isPermaLink="false">32cvQhh7ZyGZ9lcKgNN6Nj</guid>
            <dc:creator>Sergi Isasi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Moving from reCAPTCHA to hCaptcha]]></title>
            <link>https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/</link>
            <pubDate>Wed, 08 Apr 2020 13:00:00 GMT</pubDate>
            <description><![CDATA[ We recently migrated the CAPTCHA provider we use from Google's reCAPTCHA to a service provided by the independent hCaptcha. Here's a walk through of the rationale in more detail. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We recently migrated the CAPTCHA provider we use from Google's reCAPTCHA to a service provided by the independent hCaptcha. We're excited about this change because it helps address a privacy concern inherent to relying on a Google service that we've had for some time and also gives us more flexibility to customize the CAPTCHAs we show. Since this change potentially impacts all Cloudflare customers, we wanted to walk through the rationale in more detail.</p>
    <div>
      <h3>CAPTCHAs at Cloudflare</h3>
      <a href="#captchas-at-cloudflare">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2ZzleadTrmvoAHqnbOYSIh/c2d99e3ae30b053f3e4004c4ed86f6be/image1-9.png" />
            
            </figure><p>One of the services Cloudflare provides is a way to block <a href="https://www.cloudflare.com/learning/bots/what-is-bot-traffic/">malicious automated ("bot") traffic</a>. We use a number of techniques to accomplish that. When we are confident something is malicious bot activity we block it entirely. When we are confident it's good human traffic (or a good bot like a search engine crawler) then we let it through. But, sometimes, when we're not 100% sure if something is malicious or good we issue it a “challenge”.</p><p>We have different types of challenges, some are entirely automatic, but one requires human intervention. Those challenges are known as <a href="https://www.cloudflare.com/learning/bots/how-captchas-work/">CAPTCHAs</a>. That's an acronym for Completely Automated Public Turing Test to Tell Computers and Humans Apart (a few Ts are dropped otherwise it'd be CAPTTTCHA). These are the prompts to enter squiggly letters in a box or identify traffic lights or cross walks. Generally, they're supposed to be something that's easy for humans to do but hard for machines.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2rC4odqDfae4WAV1tIDYXd/a99f805fe98fc7bf288b275bbde55ba4/image2-7.png" />
            
            </figure><p>Since Cloudflare's earliest days, we have used Google's reCAPTCHA service. ReCAPTCHA started as a research project out of Carnegie Mellon University in 2007. Google acquired the project in 2009, around the same time that Cloudflare was first getting started. Google provided reCAPTCHA for free in exchange for data from the service being used to train its visual identification systems. When we were looking for a CAPTCHA for Cloudflare, we chose reCAPTCHA because it was effective, could scale, and was offered for free — which was important since so many of Cloudflare's customers use our free service.</p>
    <div>
      <h3>Privacy and Blocking Concerns</h3>
      <a href="#privacy-and-blocking-concerns">
        
      </a>
    </div>
    <p>Since those early days, some customers have expressed concerns about using a Google service to serve CAPTCHAs. Google's business is targeting users with advertising. Cloudflare's is not. We have strict privacy commitments. We were able to get comfortable with the Privacy Policy around reCAPTCHA, but understood why some of our customers were concerned about feeding more data to Google.</p><p>Furthermore, we also had issues in some regions, such as China, where Google's services are intermittently blocked. China alone accounts for 25 percent of all Internet users. Given that some subset of those could not access Cloudflare's customers if they triggered a CAPTCHA was always concerning to us.</p><p>Over the years, the privacy and blocking concerns were enough to cause us to think about switching from reCAPTCHA. But, like most technology companies, it was difficult to prioritize removing something that was largely working instead of brand-new features and functionality for our customers.</p>
    <div>
      <h3>Google's Changing Business Model</h3>
      <a href="#googles-changing-business-model">
        
      </a>
    </div>
    <p>Earlier this year, Google informed us that they were going to begin charging for reCAPTCHA. That is entirely within their right. Cloudflare, given our volume, no doubt imposed significant costs on the reCAPTCHA service, even for Google.</p><p>Again, this is entirely rational for Google. If the value of the image classification training did not exceed those costs, it makes perfect sense for Google to ask for payment for the service they provide. In our case, that would have added millions of dollars in annual costs just to continue to use reCAPTCHA for our free users. That was finally enough of an impetus for us to look for a better alternative.</p>
    <div>
      <h3>A Better CAPTCHA</h3>
      <a href="#a-better-captcha">
        
      </a>
    </div>
    <p>We evaluated a number of CAPTCHA vendors as well as building a system ourselves. In the end, <a href="https://www.hcaptcha.com/">hCaptcha</a> emerged as the best alternative to reCAPTCHA. We liked a number of things about the hCaptcha solutions: 1) they don't sell personal data; they collect only minimum necessary personal data, they are transparent in describing the info they collect and how they use and/or disclose it, and they agreed to only use such data to provide the hCaptcha service to Cloudflare; 2) performance (both in speed and solve rates) was as good as or better than expected during our A/B testing; 3) it has a robust solution for visually impaired and other users with accessibility challenges; 4) it supported <a href="https://privacypass.github.io/">Privacy Pass</a> to reduce the frequency of CAPTCHAs; 5) it worked in regions where Google was blocked; and 6) the hCaptcha team was nimble and responsive in a way that was refreshing.</p><p>The standard hCaptcha business model was similar to how reCAPTCHA started. They planned to charge customers that needed image classification data and pay publishers to install their CAPTCHA on their sites. Sounded great to us, but, unfortunately, while that may work well for most publishers, it doesn't at Cloudflare's scale.</p><p>We worked with hCaptcha in two ways. First, we are in the process of leveraging our <a href="https://www.cloudflare.com/plans/developer-platform/">Workers platform</a> to bear much of the technical load of the CAPTCHAs and, in doing so, reduce their costs. And, second, we proposed that rather than them paying us we pay them. This ensured they had the resources to scale their service to meet our needs. While that has imposed some additional costs, those costs were a fraction of what reCAPTCHA would have. And, in exchange, we have a much more flexible CAPTCHA platform and a much more responsive team.</p>
    <div>
      <h3>When do Customers Serve CAPTCHAs?</h3>
      <a href="#when-do-customers-serve-captchas">
        
      </a>
    </div>
    <p>When we first started working on this project, the assumption was that <a href="https://www.cloudflare.com/application-services/products/bot-management/">Cloudflare Bot Management</a> and Firewall Rules would be by far the largest consumer of CAPTCHAs. This was somewhat correct. While Firewall/Bots was the #1 consumer, it only was a bit over 50% of our CAPTCHAs served.</p><p>These are the breakdowns of when Cloudflare customers asked us to serve a CAPTCHA on their zones, by total CAPTCHAs served.</p><table><tr><td><p><b>Source</b></p></td><td><p></p></td></tr><tr><td><p>Firewall and Bot Rules</p></td><td><p>54.8%</p></td></tr><tr><td><p>IP Firewall</p></td><td><p>18.6%</p></td></tr><tr><td><p>Security Level</p></td><td><p>16.8%</p></td></tr><tr><td><p>DDoS</p></td><td><p>6.3%</p></td></tr><tr><td><p>Rate Limiting</p></td><td><p>1.7%</p></td></tr><tr><td><p>WAF Rules</p></td><td><p>1.5%</p></td></tr><tr><td><p>Other</p></td><td><p>0.3%</p></td></tr></table><p>Our Firewall and Bot Rules are at the top and are the majority of the CAPTCHAs served by Cloudflare. These are rules written by our customers that specifically throw a CAPTCHA when the rule is matched. Examples of these include firing a Captcha if a <a href="https://developers.cloudflare.com/bots/concepts/bot-score/">Bot Management score</a> is below a threshold where you believe it is likely that the connection is automated, but the score is above a threshold where you are not certain. Another common rule in this bucket is to CAPTCHA 100% of all traffic behind a site or specific endpoint. Customers may be doing this to limit connections to their origins, or to slow down automated systems from doing something like credential stuffing on a login page or polluting registration data. This leads to some sites on Cloudflare serving hundreds of millions of CAPTCHAs per day.</p><p>The second most popular is our <a href="https://support.cloudflare.com/hc/en-us/articles/217074967-Configuring-IP-Access-Rules">IP Firewall</a>. This is similar to the Firewall and Bot Rules, but much less granular at the IP, <a href="https://www.cloudflare.com/learning/network-layer/what-is-an-autonomous-system/">ASN</a>, or country level. The majority of CAPTCHAs for this category are done for rules written at the ASN or country level. Presumably our customers find some level of distrust with a particular ASN (for example, why would there be supposed user traffic coming from a cloud infrastructure provider?) or are being attacked from specific countries.</p><p>Next comes <a href="https://support.cloudflare.com/hc/en-us/articles/200170056-Understanding-the-Cloudflare-Security-Level">Security Levels</a>. Security levels have two distinct use cases: 1) as a blunt tool for IP address reputation and 2) I’m Under Attack Mode. While we recommend to customers that they only use I’m Under Attack Mode while under an active denial of service attack, some customers leave the feature on 100% of the time as a rudimentary form of rate limiting and filtering.</p><p>The final major use of CAPTCHA is through one of our automated systems: recently our Denial of Service protection engineering team taught <a href="/meet-gatebot-a-bot-that-allows-us-to-sleep/">Gatebot</a> to use CAPTCHAs to mitigate small floods in specific scenarios. Gatebot can now write temporary rules that result in CAPTCHAs being shown to attackers.</p><p>Lastly, there were also some customers selecting it as an override action for their <a href="https://www.cloudflare.com/application-services/products/rate-limiting/">Rate Limiting</a> or Managed WAF rulesets.</p><p>We also took a look at which types of customers were serving the CAPTCHAs. Over a week’s period of time (normalizing for attacks), our free customers configured their zones to serve roughly 40-60% of the total CAPTCHAs served by Cloudflare. Of our paying customers, there is a generally even split between our pay-as-you-go and our enterprise customers. Overall, we have measured that Cloudflare will show multiple millions of CAPTCHAs per second when one or more of our customers are under attack.</p>
    <div>
      <h3>Fixing Challenges</h3>
      <a href="#fixing-challenges">
        
      </a>
    </div>
    <p>Whenever we change any part of Cloudflare's systems, it makes things significantly better for some, but temporarily worse for others. We and the hCaptcha team are committed to addressing any problems that come up. If you or your users see issues with the new hCaptcha implementation, please <a href="https://community.cloudflare.com/">post on the forum</a> or open a <a href="https://support.cloudflare.com/hc/en-us/articles/200172476-Contacting-Cloudflare-Support">Support ticket</a> with as much detail as possible.</p><p>Whenever possible, please include the RayID that usually appears on the footer of the CAPTCHA page so we can track down what went wrong.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6PzJKNivdvbBrD44OEP5eM/9e34ea294023466b4e7977dc4415ba47/image4-8.png" />
            
            </figure><p>Over time, we believe visual (and audio) CAPTCHAs are an imperfect answer to a number of difficult problems. Cloudflare is continuing work to minimize and hopefully eventually eliminate altogether the number of CAPTCHAs we issue, and we will be excited to share the results of that work in this blog as we move along. The name of our internal chat room for the team making this change isn’t New CAPTCHA, it’s (No)CAPTCHA.</p> ]]></content:encoded>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">QDAde2WTZuTXePawU2CBq</guid>
            <dc:creator>Matthew Prince</dc:creator>
            <dc:creator>Sergi Isasi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Spectrum with Load Balancing]]></title>
            <link>https://blog.cloudflare.com/introducing-spectrum-with-load-balancing/</link>
            <pubDate>Thu, 25 Oct 2018 13:00:00 GMT</pubDate>
            <description><![CDATA[ We’re excited to announce the full integration of Cloudflare Spectrum with Load Balancing. Combining Spectrum with Load Balancing enables traffic management of TCP connections utilising the same battle tested Load Balancer our customers already use for billions of HTTP requests every day. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We’re excited to announce the full integration of Cloudflare Spectrum with Load Balancing. Combining Spectrum with Load Balancing enables traffic management of TCP connections utilising the same battle tested Load Balancer our customers already use for billions of HTTP requests every day.</p><p>Customers can configure load balancers with TCP health checks, failover, and steering policies to dictate where traffic should flow. This is live in the Cloudflare dashboard and API — give it a shot!</p>
    <div>
      <h3>TCP Health Checks</h3>
      <a href="#tcp-health-checks">
        
      </a>
    </div>
    <p>You can now configure <a href="https://www.cloudflare.com/load-balancing/">Cloudflare’s Load Balancer</a> health checks to probe any TCP port for an accepted connection. This is in addition to the existing HTTP and HTTPS options.</p><p>Health checks are an optional feature within Cloudflare’s Load Balancing product. Without health checks, the Cloudflare Load Balancer will distribute traffic to all origins in the first pool. While this is in itself useful, adding a health check to a Load Balancer provides additional functionality.</p><p>With a health check configured for a pool in a Load Balancer, Cloudflare will automatically distribute traffic within a pool to any origins that are marked up by the health check. Unhealthy origins will be dropped automatically. This allows for intelligent failover both within a pool and amongst pools. Health checks can be configured from multiple regions (and even all of Cloudflare’s PoPs as an Enterprise customer) to detect local and global connectivity issues from your origins.</p><p>In this example, we will configure a TCP health check for an application running on port 2408 with a refresh rate of every 30 seconds via either the dashboard or our API.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/wwdhg0k3y6QUdo9oSRic1/23425df3294af54b150d95f5ec05e1fc/Load-Balancing-Manage-Monitors.png" />
            
            </figure><p>Configuring a TCP health check</p>
            <pre><code># POST accounts/:account_identifier/load_balancers/monitors

{
  "description": "Spectrum Health Check",
  "type": "tcp",
  "port": 2048,
  "interval": 30,
  "retries": 2,
  "timeout": 5,
  "method": "connection_established",
}</code></pre>
            
    <div>
      <h3>Weights</h3>
      <a href="#weights">
        
      </a>
    </div>
    <p>Origin weights are beneficial should you have origins that are not of equal capacity or if you want to unequally split traffic for any other reason.</p><p>Weights configured within a load balancer pool will be honored with transport load balancing through Spectrum. If configured, Cloudflare will distribute traffic amongst the available origins within a pool according to the relative weights assigned to each origin.</p><p>For further information on weighted steering, see the <a href="https://support.cloudflare.com/hc/en-us/articles/360001372131-Load-Balancing-Configurable-Origin-Weights">knowledge base article</a>.</p>
    <div>
      <h3>Steering Modes</h3>
      <a href="#steering-modes">
        
      </a>
    </div>
    <p>All steering modes are available for transport load balancing through Spectrum: You can choose standard failover, dynamic steering, or geo steering:</p><ul><li><p><b>Failover</b>In this mode, the Cloudflare Load Balancer will <a href="https://www.cloudflare.com/learning/performance/what-is-server-failover/">fail over</a> amongst pools listed in a given load balancer configuration as they are marked down by health checks. If all pools are marked down, Cloudflare will send traffic to the fallback pool. The fallback pool is the last pool in the list in the dashboard or specifically nominated via a parameter in the API. If no health checks are configured, Cloudflare will send to the primary pool exclusively.</p></li><li><p><b>Dynamic Steering</b><a href="/i-wanna-go-fast-load-balancing-dynamic-steering/">Dynamic steering</a> was recently introduced by Cloudflare as a way of directing traffic to the fastest pool for a given user. In this mode, the Cloudflare load balancer will select the fastest pool for the given Cloudflare Region or PoP (ENT only) through health check data. If there is no health check data for a given colo or region, the load balancer will select a pool in failover order. It is important to note that with TCP health checks, latency calculated may not be representative of true latency to origin if you are terminating TCP at a cloud provider edge location.</p></li><li><p><b>Geo Steering</b><a href="https://support.cloudflare.com/hc/en-us/articles/115000540888-Load-Balancing-Geographic-Regions">Geo Steering</a> allows you to specify pools for a given Region or PoP (ENT only). In this configuration, Cloudflare will direct traffic from specified Cloudflare locations to configured pools. You may configure multiple pools, and the load balancer will use them in failover order. If this steering mode is selected and there is no configuration for a region or pool, the load balancer will use the default failover order.</p></li></ul>
    <div>
      <h3>Build Scalable TCP Applications</h3>
      <a href="#build-scalable-tcp-applications">
        
      </a>
    </div>
    <p>Once your load balancer is configured, it’s available for use as an origin with your Spectrum application:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7dMaJShOEXdDpK5pu4sbLm/7fe4496c05d50895bd3c48e4896e26c4/Load-balancing-Edit-Application.png" />
            
            </figure><p>Configuring a Spectrum application with Load Balancing</p><p>Combining Spectrum’s ability to proxy TCP applications, our Load Balancer’s full feature set, and Cloudflare’s global network allows our customers to build performant, reliable, and secure network applications with minimal effort.</p><p>We’ve seen customers combine Spectrum and Load Balancing to build scalable gaming platforms, make their live streaming infrastructure more robust, push the envelope with interesting cryptocurrency use cases, and lots more. What will you build?</p><p>Spectrum with Load Balancing is available to all current Spectrum and Load Balancing users. Want access to Spectrum? <a href="https://cloudflare.com/products/cloudflare-spectrum/">Get in touch with our team</a>. Spectrum is available for applications on the Enterprise plan.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Load Balancing]]></category>
            <category><![CDATA[Spectrum]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">4tdZv1JvUSLlr67ji4kXC1</guid>
            <dc:creator>Rustam Lalkaka</dc:creator>
            <dc:creator>Sergi Isasi</dc:creator>
        </item>
        <item>
            <title><![CDATA[Expanding DNSSEC Adoption]]></title>
            <link>https://blog.cloudflare.com/automatically-provision-and-maintain-dnssec/</link>
            <pubDate>Tue, 18 Sep 2018 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare first started talking about DNSSEC in 2014 and at the time, Nick Sullivan wrote: “DNSSEC is a valuable tool for improving the trust and integrity of DNS, the backbone of the modern Internet.” ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare first started talking about <a href="https://www.cloudflare.com/dns/dnssec/universal-dnssec/">DNSSEC</a> in <a href="/dnssec-an-introduction/">2014</a> and at the time, <a href="https://twitter.com/grittygrease">Nick Sullivan</a> wrote: “DNSSEC is a valuable tool for improving the trust and integrity of <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a>, the backbone of the modern Internet.”</p><p>Over the past four years, it has become an even more critical part of securing the internet. While <a href="/chrome-not-secure-for-http/">HTTPS</a> has gone a long way in preventing user sessions from being hijacked and maliciously (or innocuously) redirected, not all internet traffic is HTTPS. A safer Internet should secure every possible layer between a user and the origin they are intending to visit.</p><p>As a quick refresher, DNSSEC allows a user, application, or recursive resolver to trust that the answer to their DNS query is what the domain owner intends it to be. Put another way: DNSSEC proves authenticity and integrity (though not confidentiality) of a response from the authoritative nameserver. Doing so makes it much harder for a bad actor to inject malicious DNS records into the resolution path through <a href="/bgp-leaks-and-crypto-currencies/">BGP Leaks</a> and cache poisoning. Trust in DNS matters even more when a domain is publishing <a href="/additional-record-types-available-with-cloudflare-dns/">record types</a> that are used to declare trust for other systems. As a specific example, DNSSEC is helpful for preventing malicious actors from obtaining fraudulent certificates for a domain. <a href="https://blog.powerdns.com/2018/09/10/spoofing-dns-with-fragments/">Research</a> has shown how DNS responses can be spoofed for domain validation.</p><p>This week we are announcing our full support for CDS and CDNSKEY from <a href="https://datatracker.ietf.org/doc/rfc8078/">RFC 8078</a>. Put plainly: this will allow for setting up of DNSSEC without requiring the user to login to their <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrar</a> to upload a DS record. Cloudflare customers on supported registries will be able to enable DNSSEC with the click of one button in the Cloudflare dashboard.</p>
    <div>
      <h3>Validation by Resolvers</h3>
      <a href="#validation-by-resolvers">
        
      </a>
    </div>
    <p>DNSSEC’s largest problem has been adoption. The number of DNS queries validated by recursive resolvers for DNSSEC has remained flat. Worldwide, less than 14% of DNS requests have DNSSEC validated by the resolver according to our friends at <a href="https://stats.labs.apnic.net/dnssec/XA?c=XA&amp;x=1&amp;g=1&amp;r=1&amp;w=7&amp;g=0">APNIC</a>. The blame here falls on the shoulders of the default DNS providers that most devices and users receive from DHCP via their ISP or network provider. Data shows that some countries do considerably better: Sweden, for example, has over <a href="https://stats.labs.apnic.net/dnssec/XE?o=cXAw7x1g1r1">80% of their requests validated</a>, showing that the default DNS resolvers in those countries validate the responses as they should. APNIC also has a fun <a href="https://stats.labs.apnic.net/dnssec">interactive map</a> so you can see how well your country does.</p><p>So what can we do? To ensure your resolver supports DNSSEC, visit <a href="http://brokendnssec.net/">brokendnssec.net</a> in your browser. If the page <b>loads,</b> you are not protected by a DNSSEC validating resolver and should <a href="https://1.1.1.1/#setup-instructions">switch your resolver</a>. However, in order to really move the needle across the internet, Cloudflare encourages network providers to either turn on the validation of DNSSEC in their software or switch to publicly available resolvers that validate DNSSEC by default. Of course we have <a href="https://one.one.one.one">a favourite</a>, but there are other fine choices as well.</p>
    <div>
      <h3>Signing of Zones</h3>
      <a href="#signing-of-zones">
        
      </a>
    </div>
    <p>Validation handles the user side, but another problem has been the signing of the zones themselves. Initially, there was concern about adoption at the <a href="https://www.cloudflare.com/learning/dns/top-level-domain/">TLD</a> level given that TLD support is a requirement for DNSSEC to work. This is now largely a non-issue with over 90% of TLDs signed with DS records in the root zone, as of <a href="http://stats.research.icann.org/dns/tld_report/">2018-08-27</a>.</p><p>It’s a different story when it comes to the individual domains themselves. Per <a href="https://usgv6-deploymon.antd.nist.gov/cgi-bin/generate-com">NIST data</a>, a woefully low 3% of the Fortune 1000 sign their primary domains. Some of this is due to apathy by the domain owners. However, some large DNS operators do not yet support the option at all, requiring domain owners who want to protect their users to move to another provider altogether. If you are on a service that does not support DNSSEC, we encourage you to switch to one that does and let them know that was the reason for the switch. Other large operators, such as GoDaddy, charge for DNSSEC. Our stance here is clear: DNSSEC should be available and included at all DNS operators for free.</p>
    <div>
      <h3>The DS Parent Issue</h3>
      <a href="#the-ds-parent-issue">
        
      </a>
    </div>
    <p>In December of 2017, APNIC wrote about <a href="https://blog.apnic.net/2017/12/06/dnssec-deployment-remains-low/">why DNSSEC deployment remains so low</a> and that remains largely true today. One key point was that the number of domain owners who attempt DNSSEC activation but do not complete it is very high. Using Cloudflare as an example, APNIC measured that 40% of those who enabled DNSSEC in the Cloudflare Dash (evidenced by the presence of a DNSKEY record) were actually successful in serving a DS key from the registry. Current data over a recent 90 day period is slightly better: we are seeing just over 50% of all zones which attempted to enable DNSSEC were able to complete the process with the registry (Note: these domains still resolve, they are just still not secured). Of our most popular TLDs, .be and .nl have success rates of over 70%, but these numbers are still not where we would want them to be in an ideal world. The graph below shows the specific rates for the most popular TLDs (most popular from left to right).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/20XNgbCpC85y8X91Bpo7zS/2e85b5a9563fbe1d9e726141989d01df/Graph.png" />
            
            </figure><p>This end result is likely not surprising to anyone who has tried to add a DS record to their registrar. Locating the part of the registrar UI that houses DNSSEC can be problematic, as can the UI of adding the record itself. Additional factors such as varying degrees of technical knowledge amongst users and simply having to manage multiple logins and roles can also explain the lack of completion in the process. Finally, varying levels of DNSSEC compatibility amongst registrars may prevent even knowledgeable users from creating DS records in the parent.</p><p>As an example, at Cloudflare, we took a minimalist UX approach for adding DS records for delegated child domains. A novice user may not understand the fields and requirements for the DS record:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5uBtcWkLicobwesLsEJ1MF/68a4051c4b0746cfafb08fc93c4c0f0a/pasted-image-0.png" />
            
            </figure>
    <div>
      <h3></h3>
      <a href="#">
        
      </a>
    </div>
    <p>CDS and CDNSKEY</p><p>As mentioned in the aforementioned APNIC blog, Cloudflare is supportive of <a href="https://datatracker.ietf.org/doc/rfc8078/">RFC 8078</a> and the CDS and CDNSKEY records. This should come as no surprise given that our own <a href="https://twitter.com/OGudm">Olafur Gudmundsson</a> is a co-author of the RFC. CDS and CDNSKEY are records that mirror the DS and DNSKEY record types but are designated to signal the parent/registrar that the child domain wishes to enable DNSSEC and have a DS record presented by the registry. We have been pushing for automated solutions in this space for <a href="/updating-the-dns-registration-model-to-keep-pace-with-todays-internet/">years</a> and are encouraging the industry to move with us.</p><p>Today, we are announcing General Availability and full support for CDS and CDNSKEY records for all Cloudflare managed domains that enable DNSSEC in the Cloudflare dash.</p>
    <div>
      <h3>How It Works</h3>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>Cloudflare will publish CDS and CDNSKEY records for all domains who enable DNSSEC. Parent registries should scan the nameservers of the  domains under their purview and check for these rrsets. The presence of a CDS key for a domain delegated to Cloudflare indicates that a verified Cloudflare user has enabled DNSSEC within their dash and that the parent operator (a registrar or the registry itself) should take the CDS record content and create the requisite DS record to start signing the domain. TLDs .ch and .cz already support this automated method through Cloudflare and any other DNS operators that choose to support RFC8078. The registrar <a href="https://www.gandi.net/">Gandi</a> and a number of TLDs have indicated support in the near future.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6NWwLVYnosedEpsDH0NNQS/36198c65294dbdcce40045262c5f61a9/Flow.png" />
            
            </figure><p>Cloudflare also supports CDS0 for the removal of the DS record in the case that the user <a href="https://www.cloudflare.com/learning/dns/how-to-transfer-a-domain-name/">transfers</a> their domain off of Cloudflare or otherwise disables DNSSEC.</p>
    <div>
      <h3>Best Practices for Parent Operators</h3>
      <a href="#best-practices-for-parent-operators">
        
      </a>
    </div>
    <p>Below are a number of suggested procedures that parent registries may take to provide for the best experience for our users:</p><ul><li><p><i>Scan Selection</i> - Parent Operators should only scan their child domains who have nameservers pointed at Cloudflare (or other DNS operators who adopt RFC8078). Cloudflare nameservers are indicated *.ns.cloudflare.com.</p></li><li><p><i>Scan Regularly</i> - Parent Operators should scan at regular intervals for the presence and change of CDS records. A scan every 12 hours should be sufficient, though faster is better.</p></li><li><p><i>Notify Domain Contacts</i> - Parent Operators should notify their designated contacts through known channels (such as email and/or SMS) for a given child domain upon detection of a new CDS record and an impending change of their DS record. The Parent Operator may also wish to provide a standard delay (24 hours) before changing the DS record to allow the domain contact to cancel or otherwise change the operation.</p></li><li><p><i>Verify Success</i> - Parent Operators must ensure that the domain continues to resolve after being signed. Should the domain fail to resolve immediately after changing the DS record, the Parent Operator must fall back to the previous functional state and should notify designated contacts.</p></li></ul>
    <div>
      <h3>What Does This All Mean and What’s Next?</h3>
      <a href="#what-does-this-all-mean-and-whats-next">
        
      </a>
    </div>
    <p>For Cloudflare customers, this means an easier implementation of DNSSEC once your registry/registrar supports CDS and CDNSKEY. Customers can also enable DNSSEC for free on Cloudflare and manually enter the DS to the parent. To check your domain’s DNSSEC status, <a href="http://dnsviz.net/d/cloudflare.com/dnssec/">DNSViz (example cloudflare.com</a>) has one of the most standards compliant tools online.</p><p>For registries and registrars, we are taking this step with the hope that more providers support RFC8078 and help increase the global adoption of technology that helps end users be less vulnerable to DNS attacks on the internet.</p><p>For other DNS operators, we encourage you to join us in supporting this method as the more major DNS operators that publish CDS and CDNSKEY, the more likely it will be that the registries will start looking for and use them.</p><p>Cloudflare will continue pushing down this path and has plans to create and open source additional tools to help registries and operators push and consume records. If this sounds interesting to you, we are <a href="https://www.cloudflare.com/careers/">hiring</a>.</p><p><a href="/subscribe/"><i>Subscribe to the blog</i></a><i> for daily updates on our announcements.</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4SOBfg9SIxbV23r9vS1Vlt/072c7daa0d365194497c3c11f0d6c807/Crypto-Week-1-1-1.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Crypto Week]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">7FVga47DKN7yhAMwIAvQrV</guid>
            <dc:creator>Sergi Isasi</dc:creator>
            <dc:creator>Vicky Shrestha</dc:creator>
        </item>
        <item>
            <title><![CDATA[Additional Record Types Available with Cloudflare DNS]]></title>
            <link>https://blog.cloudflare.com/additional-record-types-available-with-cloudflare-dns/</link>
            <pubDate>Mon, 06 Aug 2018 16:45:17 GMT</pubDate>
            <description><![CDATA[ Cloudflare recently updated the authoritative DNS service to support nine new record types. Since these records are less commonly used than what we previously supported, we thought it would be a good idea to do a brief explanation of each record type and how it is used. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Photo by <a href="https://unsplash.com/@minkmingle?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Mink Mingle</a> / <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></p><p>Cloudflare recently updated the authoritative DNS service to support nine new record types. Since these records are less commonly used than what we previously supported, we thought it would be a good idea to do a brief explanation of each record type and how it is used.</p>
    <div>
      <h3>DNSKEY and DS</h3>
      <a href="#dnskey-and-ds">
        
      </a>
    </div>
    <p>DNSKEY and DS work together to allow you to enable DNSSEC on a child zone (subdomain) that you have delegated to another Nameserver. DS is useful if you are delegating DNS (through an NS record) for a child to a separate system and want to keep using DNSSEC for that child zone; without a DS entry in the parent, the child data will not be validated. We’ve blogged about the details of <a href="/introducing-universal-dnssec/">Cloudflare’s DNSSEC</a> <a href="/tag/dnssec/">implementation</a> and <a href="/bgp-leaks-and-crypto-currencies/">why it is important</a> in the past, and this new feature allows for more flexible adoption for customers who need to delegate subdomains.</p>
    <div>
      <h3>Certificate Related Record Types</h3>
      <a href="#certificate-related-record-types">
        
      </a>
    </div>
    <p>Today, there is no way to restrict which <a href="https://www.cloudflare.com/application-services/products/ssl/">TLS (SSL) certificates</a> are trusted to be served for a host. For example if an attacker were able to maliciously generate an SSL certificate for a host, they could use a on-path attacker attack to appear as the original site. With SSHFP, TLSA, SMIMEA, and CERT, a website owner can configure the exact certificate public key that is allowed to be used on the domain, stored inside the DNS and secured with DNSSEC, reducing the risk of these kinds of attacks working.</p><p><b>It is critically important that if you rely on these types of records that you enable and configure DNSSEC for your domain.</b></p>
    <div>
      <h4><a href="https://tools.ietf.org/html/rfc4255">SSHFP</a></h4>
      <a href="#">
        
      </a>
    </div>
    <p>This type of record is an answer to the question “When I’m connecting via SSH to this remote machine, it’s authenticating me, but how do I authenticate it?” If you’re the only person connecting to this machine, your <a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/">SSH client</a> will compare the fingerprint of the public host key to the one it kept in the known_hosts file during the first connection. However across multiple machines or multiple users from an organization, you need to verify this information against a common source of trust. In essence, you need the equivalent of the authentication that a certificate authority provides by signing an HTTPS certificate, but for SSH. Although it’s possible to set certificate authorities for SSH and to have them sign public host keys, another way is to publish the fingerprint of the keys in the domain via the SSHFP record type.</p><p><b>Again, for these fingerprints to be trustworthy it is important to enable DNSSEC on your zone.</b></p><p>The SSHFP record type is similar to TLSA record. You are specifying the algorithm type, the signature type, and then the signature itself within the record for a given hostname.</p><p>If the domain and remote server have SSHFP set and you are running an SSH client (such as <a href="https://www.openbsd.org/openssh/txt/release-5.1">OpenSSH 5.1+</a>) that supports it, you can now verify the remote machine upon connection by adding the following parameters to your connection:</p><p><code>❯ ssh -o "VerifyHostKeyDNS=yes" -o "StrictHostKeyChecking=yes" [insertremoteserverhere]</code></p>
    <div>
      <h4>TLSA and SMIMEA</h4>
      <a href="#tlsa-and-smimea">
        
      </a>
    </div>
    <p>TLSA records were designed to specify which keys are allowed to be used for a given domain when connecting via TLS. They were introduced in the <a href="https://tools.ietf.org/html/rfc6698">DANE</a> specification and allow domain owners to announce which certificate can and should be used for specific purposes for the domain. While most major browsers do not support TLSA, it may still be valuable for non browser specific applications and services.</p><p>For example, I’ve set a TLSA record for the domain hasvickygoneonholiday.com for TCP traffic over port 443. There are a number of ways to generate the record, but the easiest is likely through <a href="https://www.huque.com/bin/gen_tlsa">Shumon Huque’s tool</a>.</p><p>For most of the examples in this post we will be using <a href="https://www.knot-dns.cz/docs/2.6/html/man_kdig.html">kdig</a> rather than the ubiquitous dig. Generally preinstalled dig versions can be old and may not handle newer record types well. If your queries do not quite match up, you should either upgrade your version of dig or install knot.</p>
            <pre><code>;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY; status: NOERROR; id: 2218
;; Flags: qr rd ra ad; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 1

;; QUESTION SECTION:
;; _443._tcp.hasvickygoneonholiday.com. 	IN	TLSA

;; ANSWER SECTION:
_443._tcp.hasvickygoneonholiday.com. 300	IN	TLSA	3 1 1 4E48ED671DFCDF6CBF55E52DBC8B9C9CC21121BD149BC24849D1398DA56FB242
_443._tcp.hasvickygoneonholiday.com. 300	IN	RRSIG	TLSA 13 4 300 20180803233834 20180801213834 35273 hasvickygoneonholiday.com. JvC9mZLfuAyEHZUZdq4n8kyRbF09vwgx4c1fas24Ag925LILr1armjHbr7ZTp8ycS/Go3y3lgyYCuBeW/vT/3w==

;; Received 232 B
;; Time 2018-08-02 15:38:34 PDT
;; From 192.168.1.1@53(UDP) in 28.5 ms</code></pre>
            <p>From the above request and response, we can see that a) the response for the zone is secured and signed with DNSSEC (Flag: <i><b>ad</b></i>) and that I should be verifying a certificate with the public key (3 <i><b>1</b></i> 1) SHA256 hash (3 1 <i><b>1</b></i>) of 4E48ED671DFCDF6CBF55E52DBC8B9C9CC21121BD149BC24849D1398DA56FB242. We can use openssl (v1.1.x or higher) to verify the results:</p>
            <pre><code>❯ openssl s_client  -connect hasvickygoneonholiday.com:443 -dane_tlsa_domain "hasvickygoneonholiday.com" -dane_tlsa_rrdata "
3 1 1 4e48ed671dfcdf6cbf55e52dbc8b9c9cc21121bd149bc24849d1398da56fb242"
CONNECTED(00000003)
depth=0 C = US, ST = CA, L = San Francisco, O = "CloudFlare, Inc.", CN = hasvickygoneonholiday.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=CA/L=San Francisco/O=CloudFlare, Inc./CN=hasvickygoneonholiday.com
   i:/C=US/ST=CA/L=San Francisco/O=CloudFlare, Inc./CN=CloudFlare Inc ECC CA-2
 1 s:/C=US/ST=CA/L=San Francisco/O=CloudFlare, Inc./CN=CloudFlare Inc ECC CA-2
   i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE7jCCBJSgAwIBAgIQB9z9WxnovNf/lt2Lkrfq+DAKBggqhkjOPQQDAjBvMQsw
...
---
SSL handshake has read 2666 bytes and written 295 bytes
Verification: OK
Verified peername: hasvickygoneonholiday.com
DANE TLSA 3 1 1 ...149bc24849d1398da56fb242 matched EE certificate at depth 0</code></pre>
            <p><a href="https://tools.ietf.org/html/rfc8162">SMIMEA</a> records function similar to TLSA but are specific to email addresses. The domain for these records should be prefixed by “_smimecert.” and specific formatting is required to attach a SMIMEA record to an email address. The local-part (username) of the email address must be treated in a specific format and SHA-256 hashed as detailed in the RFC. From the RFC example: “ For example, to request an SMIMEA resource record for a user whose email address is "<a>hugh@example.com</a>", an SMIMEA query would be placed for the following QNAME: <code>c93f1e400f26708f98cb19d936620da35eec8f72e57f9eec01c1afd6._smimecert.example.com</code></p>
    <div>
      <h4><a href="https://tools.ietf.org/html/rfc4398">CERT</a></h4>
      <a href="#">
        
      </a>
    </div>
    <p>CERT records are used for generically storing certificates within DNS and are most commonly used by systems for email encryption. To create a CERT record, you must specify the certificate type, the key tag, the algorithm, and then the certificate, which is either the certificate itself, the CRL, a URL of the certificate, or fingerprint and a URL.</p>
    <div>
      <h3>Other Newly Supported Record Types</h3>
      <a href="#other-newly-supported-record-types">
        
      </a>
    </div>
    
    <div>
      <h4>PTR</h4>
      <a href="#ptr">
        
      </a>
    </div>
    <p>PTR (Pointer) records are pointers to canonical names. They are similar to CNAME in structure, meaning they only contain one FQDN (fully qualified domain name) but the RFC dictates that subsequent lookups are not done for PTR records, the value should just be returned back to the requestor. This is different to a CNAME where a recursive resolver would follow the target of the canonical name. The most common use of a PTR record is in reverse DNS, where you can look up which domains are meant to exist at a given IP address. These are useful for outbound mailservers as well as authoritative DNS servers.</p><p>It is only possible to delegate the authority for IP addresses that you own from your Regional Internet Registry (RIR). Creating reverse zones and PTR records for IPs that you can not (or do not) delegate does not serve any practical purpose.</p><p>For example, looking up the A record for marek.ns.cloudflare.com gives us the IP of 173.245.59.202.</p>
            <pre><code>❯ kdig a marek.ns.cloudflare.com +short
173.245.59.202</code></pre>
            <p>Now imagine we want to know if the owner of this IP ‘authorizes’ <code>marek.ns.cloudflare.com</code> to point to it. Reverse Zones are specifically crafted child zones within <code>in-addr.arpa.</code> (for IPv4) and <code>ip6.arpa.</code> (for IPv6) whom are delegated via the Regional Internet Registries to the owners of the IP address space. That is to say if you own a /24 from ARIN, ARIN will delegate the reverse zone space for your /24 to you to control. The IPv4 address is represented inverted as the subdomain in in-addr.arpa. Since Cloudflare owns the IP, we’ve delegated the reverse zone and created a PTR there.</p>
            <pre><code>❯ kdig -x 173.245.59.202
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY; status: NOERROR; id: 18658
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; 202.59.245.173.in-addr.arpa.		IN	PTR

;; ANSWER SECTION:
202.59.245.173.in-addr.arpa.	1222	IN	PTR	marek.ns.cloudflare.com.</code></pre>
            <p>For completeness, here is the +trace for the 202.59.245.173.in-addr.arpa zone. We can see that the /24 59.245.173.in-addr.arpa has been delegated to Cloudflare from ARIN:</p>
            <pre><code>❯ dig 202.59.245.173.in-addr.arpa +trace

; &lt;&lt;&gt;&gt; DiG 9.8.3-P1 &lt;&lt;&gt;&gt; 202.59.245.173.in-addr.arpa +trace
;; global options: +cmd
.			48419	IN	NS	a.root-servers.net.
.			48419	IN	NS	b.root-servers.net.
.			48419	IN	NS	c.root-servers.net.
.			48419	IN	NS	d.root-servers.net.
.			48419	IN	NS	e.root-servers.net.
.			48419	IN	NS	f.root-servers.net.
.			48419	IN	NS	g.root-servers.net.
.			48419	IN	NS	h.root-servers.net.
.			48419	IN	NS	i.root-servers.net.
.			48419	IN	NS	j.root-servers.net.
.			48419	IN	NS	k.root-servers.net.
.			48419	IN	NS	l.root-servers.net.
.			48419	IN	NS	m.root-servers.net.
;; Received 228 bytes from 2001:4860:4860::8888#53(2001:4860:4860::8888) in 25 ms

in-addr.arpa.		172800	IN	NS	e.in-addr-servers.arpa.
in-addr.arpa.		172800	IN	NS	d.in-addr-servers.arpa.
in-addr.arpa.		172800	IN	NS	b.in-addr-servers.arpa.
in-addr.arpa.		172800	IN	NS	f.in-addr-servers.arpa.
in-addr.arpa.		172800	IN	NS	c.in-addr-servers.arpa.
in-addr.arpa.		172800	IN	NS	a.in-addr-servers.arpa.
;; Received 421 bytes from 192.36.148.17#53(192.36.148.17) in 8 ms

173.in-addr.arpa.	86400	IN	NS	u.arin.net.
173.in-addr.arpa.	86400	IN	NS	arin.authdns.ripe.net.
173.in-addr.arpa.	86400	IN	NS	z.arin.net.
173.in-addr.arpa.	86400	IN	NS	r.arin.net.
173.in-addr.arpa.	86400	IN	NS	x.arin.net.
173.in-addr.arpa.	86400	IN	NS	y.arin.net.
;; Received 165 bytes from 199.180.182.53#53(199.180.182.53) in 300 ms

59.245.173.in-addr.arpa. 86400	IN	NS	ns1.cloudflare.com.
59.245.173.in-addr.arpa. 86400	IN	NS	ns2.cloudflare.com.
;; Received 95 bytes from 2001:500:13::63#53(2001:500:13::63) in 188 ms</code></pre>
            
    <div>
      <h4><a href="https://tools.ietf.org/html/rfc2915">NAPTR</a></h4>
      <a href="#">
        
      </a>
    </div>
    <p>Naming Authority Pointer Records are used in conjunction with SRV records, generally as a part of the SIP protocol. NAPTR records point to domains to specific services, if available for that domain. <a href="http://twitter.com/anders94">Anders Brownworth</a> has an excellent description in detail on his <a href="https://anders.com/cms/264/">blog</a>. The start of his example, with his permission:</p><blockquote><p>Let’s consider a call to <a>2125551212@example.com</a>. Given only this address though, we don't know what IP address, port or protocol to send this call to. We don't even know if example.com supports SIP or some other VoIP protocol like H.323 or IAX2. I'm implying that we're interested in placing a call to this URL but if no VoIP service is supported, we could just as easily fall back to emailing this user instead. To find out, we start with a NAPTR record lookup for the domain we were given:</p></blockquote>
            <pre><code>#host -t NAPTR example.com
example.com NAPTR 10 100 "S" "SIP+D2U" "" _sip._udp.example.com.
example.com NAPTR 20 100 "S" "SIP+D2T" "" _sip._tcp.example.com.
example.com NAPTR 30 100 "S" "E2U+email" "!^.*$!mailto:info@example.com!i" _sip._tcp.example.com.</code></pre>
            <blockquote><p>Here we find that example.com gives us three ways to contact example.com, the first of which is "SIP+D2U" which would imply SIP over UDP at _sip._udp.example.com.</p></blockquote>
    <div>
      <h4><a href="https://tools.ietf.org/html/rfc7553">URI</a></h4>
      <a href="#">
        
      </a>
    </div>
    <p>Uniform Resource Identifier records are commonly used as a compliment to NAPTR records and per the RFC, can be used to replace SRV records. As such, they contain a Weight and Priority field as well as Target, similar to SRV.</p><p>One use case is proposed by this <a href="https://tools.ietf.org/html/draft-mccallum-kitten-krb-service-discovery-03">draft RFC</a> is to replace SRV records with URI records for discovering Kerberos key distribution centers (KDC). It minimizes the number of requests over SRV records and allows the domain owner to specify preference for TCP or UDP.</p><p>In the below example, it specifies that we should use a KDC on TCP at the default port and UDP on port 89 should the primary connection fail.</p>
            <pre><code>❯ kdig URI _kerberos.hasvickygoneonholiday.com
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY; status: NOERROR; id: 8450
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; _kerberos.hasvickygoneonholiday.com. 	IN	URI

;; ANSWER SECTION:
_kerberos.hasvickygoneonholiday.com. 283	IN	URI	1 10 "krb5srv:m:tcp:kdc.hasbickygoneonholiday.com"
_kerberos.hasvickygoneonholiday.com. 283	IN	URI	1 20 "krb5srv:m:udp:kdc.hasbickygoneonholiday.com:89"</code></pre>
            
    <div>
      <h3>Summary</h3>
      <a href="#summary">
        
      </a>
    </div>
    <p>Cloudflare now supports CERT, DNSKEY, DS, NAPTR, PTR, SMIMEA, SSHFP, and TLSA in our authoritative DNS products. We would love to hear if you have any interesting example use cases for the new record types and what other record types we should support in the future.</p><p>Our DNS engineering teams in London and San Francisco are both hiring if you would like to contribute to the fastest authoritative and recursive DNS services in the world.</p><p><a href="https://boards.greenhouse.io/cloudflare/jobs/1213352?gh_jid=1213352">Software Engineer</a></p> ]]></content:encoded>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">4hEsGfxkUT0Q2b2B53HPel</guid>
            <dc:creator>Sergi Isasi</dc:creator>
            <dc:creator>Etienne Labaume</dc:creator>
        </item>
        <item>
            <title><![CDATA[I Wanna Go Fast - Load Balancing Dynamic Steering]]></title>
            <link>https://blog.cloudflare.com/i-wanna-go-fast-load-balancing-dynamic-steering/</link>
            <pubDate>Sat, 21 Jul 2018 15:51:48 GMT</pubDate>
            <description><![CDATA[ Earlier this month we released Dynamic Steering for Load Balancing which allows you to have your Cloudflare load balancer direct traffic to the fastest pool for a given Cloudflare region or colo (Enterprise only). ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Earlier this month we released <a href="https://support.cloudflare.com/hc/en-us/articles/360006900952-Load-Balancing-Dynamic-Steering">Dynamic Steering</a> for Load Balancing which allows you to have your Cloudflare load balancer direct traffic to the fastest pool for a given Cloudflare region or colo (Enterprise only).</p><p>To build this feature, we had to solve two key problems: 1) How to decide which pool of origins was the fastest and 2) How to distribute this decision to a growing group of 151 locations around the world.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/52lBF8CGh1rOdQrpgHQHHa/0e3233691489f0cc9d8640892c5924fa/steering_logo.png" />
            
            </figure>
    <div>
      <h3>Distance, Approximate Latency, and a Better Way</h3>
      <a href="#distance-approximate-latency-and-a-better-way">
        
      </a>
    </div>
    <p>As my math teacher taught me, the shortest distance between two points is a straight line. This is also typically true on the internet - the shorter approximate distance there is between a user going through Cloudflare location to a customer origin, the better the experience is for the user. Geography is one way to approximate speed and we included the <a href="https://support.cloudflare.com/hc/en-us/articles/115000540888-Load-Balancing-Geographic-Regions">Geo Steering</a> function when we initially introduced the <a href="/introducing-load-balancing-intelligent-failover-with-cloudflare/">Cloudflare Load Balancer</a>. It is powerful, but manual; it’s not the best way. A customer on Twitter said it best:</p><blockquote><p><a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> <a href="https://twitter.com/hashtag/FeatureRequest?src=hash&amp;ref_src=twsrc%5Etfw">#FeatureRequest</a> why can’t your load balancers determine which server is closest to the user then direct them to that one?</p><p>I don't want to have configure 10+ regions manually. This feels like something that should be built in? Am I missing it?</p><p>cc: <a href="https://twitter.com/eastdakota?ref_src=twsrc%5Etfw">@eastdakota</a></p><p>— Adam Evers ? OAK / SFO (@adamevers) <a href="https://twitter.com/adamevers/status/979849896738963456?ref_src=twsrc%5Etfw">March 30, 2018</a></p></blockquote>
    <div>
      <h3>A Brief Refresher on Cloudflare Load Balancing</h3>
      <a href="#a-brief-refresher-on-cloudflare-load-balancing">
        
      </a>
    </div>
    <p>Cloudflare’s <a href="https://www.cloudflare.com/load-balancing/">Load Balancers</a> are comprised of a combination of origins, pools, and health checks. Origins are IPs or hostnames from which our customers serve content. Pools are collections of origins, usually grouped in along some dimension, like geography, cloud service provider, or a combination thereof (eg. a pool named GCP-West-1 may contain a customer’s origins in Google Cloud’s Oregon west1 region). Finally, there are health checks — configurable probes by our customers to their pools and origins to identify whether a given pool or origin is up or down. These health checks allow Cloudflare load balancers to quickly identify and fail over from downed origins from a network of systems that can map to the customer’s user base.</p>
    <div>
      <h3>Measuring and Determining “Fast”</h3>
      <a href="#measuring-and-determining-fast">
        
      </a>
    </div>
    <p>The first decision we faced was when and how to measure speed. We already probe at regular intervals for uptime from the Cloudflare locations that our customers tell us are relevant for their setup. It was an obvious choice to use our existing health checks and gather the <a href="https://www.cloudflare.com/learning/cdn/glossary/round-trip-time-rtt/">round trip time (RTT)</a> from there.</p><p>As pool origins are probed periodically we get RTT information from the edge. The next question was how to use this data to decide which pool is the fastest: we decided to calculate the pool RTT using Exponential Weighted Moving Average (EWMA).</p>
    <div>
      <h4>Why did we choose EWMA?</h4>
      <a href="#why-did-we-choose-ewma">
        
      </a>
    </div>
    <p>We considered other ways to calculate the RTT such as Simple Moving Average (SMA). Although the RTT calculation is much simpler using SMA, we chose EWMA is because it responds to RTT changes faster than SMA, since it applies more weight to the most recent RTT. Also, it can reduce the noise and help make the trend clearer in a dataset with large variance. Another benefit EWMA has is that stays more true to the trend than other types of moving averages, some of which can over- or under-correct, or others that smooth things out too much.</p>
    <div>
      <h4>How does EWMA work?</h4>
      <a href="#how-does-ewma-work">
        
      </a>
    </div>
    <p>EWMA works by applying weights to the data in such a way that older data weighs less (and therefore becomes less impactful to the result) than more recent data. The weight for a datapoint decreases exponentially for each time period further in the past. The exponential decay is determined by the time bias parameter. When the time bias is set to 1 minute, about 63.2% of the value is coming from the last minute measurements, 23.3% from the minute before that (0.233 = (1 – 0.632) * 0.632), etc. The weight is decreasing exponentially with each passing minute, historical data older than t minutes have weight 1 / exp(t). The most recent minute has weight 63.2%, since 63.2% = 1 – 1 / exp(1).</p>
    <div>
      <h4>Actual Implementation</h4>
      <a href="#actual-implementation">
        
      </a>
    </div>
    <p>For every load balancer that has Dynamic Steering enabled, the RTT is calculated independently for each of its pools using an EWMA. We wait for a period of time (default is 10m, but this is configurable) before writing the calculated pool RTT values to our internal key-value store, QuickSilver (QS). This is done to build the RTT profile, which helps reduce the noise in cases of large variance data. From then on, we keep writing the values periodically (default 10m, again this value is tunable) and only if there is a change in RTT value to avoid unnecessary writes to QuickSilver.</p>
    <div>
      <h3>Data Propagation</h3>
      <a href="#data-propagation">
        
      </a>
    </div>
    <p>To make sure that Dynamic Steering is as performant as possible, all data we use for steering decisions needs to be as close as possible to every machine serving requests. When it comes down to delivering responses as fast as possible, requesting data from another machine - even in the same datacenter - can add non-trivial overhead.</p><p>We run a custom inhouse key-value store on every machine servicing requests. The main advantage of this datastore lies in how its replication logic takes advantage of the hierarchy nature of our network layout to facilitate faster replication while transfering less data.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/14niTMB5ZnIjSfRkYSke3N/a6febb2d0d368d41249bd98e85e7fc4c/data_model.png" />
            
            </figure><p>Since we keep a copy of the data on every machine in <a href="https://www.cloudflare.com/network/">every data center</a>, we need to make sure our dataset is as small as possible. We evaluated what additional data we actually needed to select a pool inside a Load Balancer configured with Dynamic Steering. Currently the only information we propagate is a map of the pool identifier to the EWMA.</p>
    <div>
      <h3>Eyeball Experience</h3>
      <a href="#eyeball-experience">
        
      </a>
    </div>
    <p>Internally at Cloudflare we often talk about eyeballs, the actual visitors of a site clicking away in their browsers, and their experience of the process. Let's say you’ve setup three pools around the world: North America, Europe, and Australia. With Dynamic Steering, we will route your traffic to the pool with the lowest EWMA. Assuming all your pools are in good health and reporting expected RTT values an eyeballs experience should look like this.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3u3ZIX76FCGgkc5TViWtTu/211374f51d8e1446a80f78fefc5756fc/IMG_1101.jpeg.jpeg" />
            
            </figure>
    <div>
      <h3>Trying It Out</h3>
      <a href="#trying-it-out">
        
      </a>
    </div>
    <p>All Enterprise customers and customers with the Geo Routing add-on for Load Balancing have access to Dynamic Steering. To enable Dynamic Steering, select the option in your Load Balancing traffic steering configuration. Please see the <a href="https://support.cloudflare.com/hc/en-us/articles/360006900952-Load-Balancing-Dynamic-Steering">KB article</a> or your Cloudflare account team for more information.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4OKw6wPzI1kyNZK7GPf5ZD/0883d9e807dbf9ff319095f13c9a75f2/Step_4.png" />
            
            </figure>
    <div>
      <h3>Interested in helping us go faster?</h3>
      <a href="#interested-in-helping-us-go-faster">
        
      </a>
    </div>
    <p>The Cloudflare Load Balancing and DNS Engineering teams are hiring in San Francisco and London.</p><p><a href="https://boards.greenhouse.io/cloudflare/jobs/935603?gh_jid=935603">Backend Systems Engineer San Francisco</a><a href="https://boards.greenhouse.io/cloudflare/jobs/982644?gh_jid=982644">Backend Systems Engineer London</a><a href="https://boards.greenhouse.io/cloudflare/jobs/1213352?gh_jid=1213352">Software Engineer London</a></p> ]]></content:encoded>
            <category><![CDATA[Load Balancing]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">1ywWFFTY6puQqP4GInkLHY</guid>
            <dc:creator>Sergi Isasi</dc:creator>
            <dc:creator>Sindu Vijayakumar</dc:creator>
            <dc:creator>Tim Polich</dc:creator>
        </item>
        <item>
            <title><![CDATA[Living In A Multi-Cloud World]]></title>
            <link>https://blog.cloudflare.com/living-in-a-multi-cloud-world/</link>
            <pubDate>Tue, 21 Nov 2017 16:30:00 GMT</pubDate>
            <description><![CDATA[ A few months ago at Cloudflare’s Internet Summit, we hosted a discussion on A Cloud Without Handcuffs with Joe Beda, one of the creators of Kubernetes, and Brandon Phillips, the co-founder of CoreOS. ]]></description>
            <content:encoded><![CDATA[ <p>A few months ago at Cloudflare’s Internet Summit, we hosted a discussion on <a href="/a-cloud-without-handcuffs/">A Cloud Without Handcuffs</a> with Joe Beda, one of the creators of Kubernetes, and Brandon Phillips, the co-founder of CoreOS. The conversation touched on multiple areas, but it’s clear that more and more companies are recognizing the need to have some strategy around hosting their applications on multiple cloud providers.</p><p>Earlier this year, Mary Meeker published her annual <a href="http://www.kpcb.com/internet-trends">Internet Trends</a> report which revealed that 22% of respondents viewed Cloud Vendor Lock-In as a top 3 concern, up from just 7% in 2012. This is in contrast to previous top concerns, Data Security and Cost &amp; Savings, both of which dropped amongst those surveyed.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3lCKoQPPU77zT1kPMwe2Mb/11e6f100efab86138150f3d911fa39ad/Mary-Meeker-Internet-Trends-2017.png" />
            
            </figure><p>At Cloudflare, our mission is to help build a better internet. To fulfill this mission, our customers need to have consistent access to the best technology and services, over time. This is especially the case with respect to storage and compute providers. This means not becoming locked-in to any single provider and taking advantage of multiple cloud computing vendors (such as Amazon Web Services or Google Cloud Platform) for the same end user services.</p>
    <div>
      <h3>The Benefits of Having Multiple Cloud Vendors</h3>
      <a href="#the-benefits-of-having-multiple-cloud-vendors">
        
      </a>
    </div>
    <p>There are a number of potential challenges when selecting a single cloud provider. Though there may be scenarios where it makes sense to consolidate on a single vendor, our belief is that it is important that customers are aware of their choice and downsides of being potentially locked-in to that particular vendor. In short, know what trade offs you are making should you decide to continue to consolidate parts of your network, compute, and storage with a single cloud provider. While not comprehensive, here are a few trade-offs you may be making if you are locked-in to one cloud.</p>
    <div>
      <h4>Cost Efficiences</h4>
      <a href="#cost-efficiences">
        
      </a>
    </div>
    <p>For some companies, there may be a cost savings involved in spreading traffic across multiple vendors. Some can take advantage of free or reduced cost tiers at lower volumes. Vendors may provide reduced costs for certain times of day that are lower utilized on their infrastructure. Applications can have varying compute requirements amongst layers of the application: some may require faster, immediate processing while others may benefit from delayed processing at a lower cost.</p>
    <div>
      <h4>Negotiation Strength</h4>
      <a href="#negotiation-strength">
        
      </a>
    </div>
    <p>One of the most important reasons to consider deploying in multiple cloud providers is to minimize your reliance on a single vendor’s technology for your critical business processes. As you become more vertically integrated with any vendor, your negotiation posture for pricing or favorable contract terms becomes diminished. Having production ready code available on multiple providers allows you to have less technical debt should you need to change. If you go a step further and are already sending traffic to multiple providers, you have minimized the technical debt required to switch and can negotiate from a position of strength.</p>
    <div>
      <h4>Business Continuity or High Availability</h4>
      <a href="#business-continuity-or-high-availability">
        
      </a>
    </div>
    <p>While the major cloud providers are generally reliable, there have been a few notable outages in recent years. The most significant in recent memory being Amazon’s <a href="https://aws.amazon.com/message/41926/">US-EAST S3</a> outage in February. Some organizations may have a policy specifying multiple providers for high availability while others should consider it where necessary and feasible as a best practice. A multi-cloud strategy can lower operational risk from a single vendor’s mistakes causing a significant outage for a mission critical application.</p>
    <div>
      <h4>Experimentation</h4>
      <a href="#experimentation">
        
      </a>
    </div>
    <p>One of the exciting things about having competition in the space is the level of innovation and feature velocity of each provider. Every year there are major announcements of new products or features that may have a significant impact on improving your organization's competitive advantage. Having test and production environments in multiple providers gives your engineers the ability to understand and experiment with a new capability in the context of your technology stack and data. You may even try these features for a portion of your traffic and get real world data on any benefits realized.</p>
    <div>
      <h3>Cloudflare’s Role</h3>
      <a href="#cloudflares-role">
        
      </a>
    </div>
    <p>Cloudflare is an independent third party in your multi-cloud strategy. Our goal is to minimize the layers of lock-in between you and a provider and lower the effort of change. In particular, one area where we can help right away is to minimize the operational changes necessary at the network, similar to what Kubernetes can do at the storage and compute level. As a benefit of our network, you can also have a centralized point for security and operational control.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/63ggEFEj8gBOjaS6OJ8HKJ/849234502f57a31cfe7a84244831e930/Cloudflare_Multi_Cloud.png" />
            
            </figure><p>Cloudflare’s Load Balancing can easily be configured to act as your global application traffic aggregator and distribute your traffic amongst origins at as many clouds as you choose to utilize. Active layer 7 health checks continually probe your origins and can automatically move traffic in the case of network or application failure. All consolidated web traffic can be inspected and acted upon by Cloudflare’s best of breed <a href="https://www.cloudflare.com/security/">Security</a> services, providing a single control point and visibility across all application traffic, regardless of which cloud the origin may be on. You also have the benefit of Cloudflare’s <a href="https://www.cloudflare.com/network/">Global Anycast Network</a>, providing for better speed and higher availability regardless of which clouds your origins are hosted on.</p>
    <div>
      <h3>Billforward: Using Cloudflare to Implement Multi-Cloud</h3>
      <a href="#billforward-using-cloudflare-to-implement-multi-cloud">
        
      </a>
    </div>
    <p>Billforward is a San Francisco and London based startup that is focused and mission driven on changing the way people bill and charge their customers, providing a solution to the complexities of Quote-to-Cash. Their platform is built on a number of Rest APIs that other developers call to bill and generate revenue for their own companies.</p><p>Billforward is using Cloudflare for its core customer facing application to failover traffic between Google Compute Engine and Amazon Web Services. Acting as a reverse proxy, Cloudflare receives all requests for and decides which of Billforward’s two configured cloud origins to use based upon the availability of that origin in near real-time. This allows Billforward to completely manage the connections to and from two disparate cloud providers using Cloudflare’s UI or API. Billforward is in the process of migrating all of their customer facing domains to a similar setup.</p>
    <div>
      <h4>Configuration</h4>
      <a href="#configuration">
        
      </a>
    </div>
    <p>Billforward has a single load balanced hostname with two available Pools. They’ve named the two Pools with “gce” and “aws” labels and each Pool has one Origin associated with it. All of the Pools are enabled and the entire LB/hostname is proxied through Cloudflare (as indicated by the orange cloud).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/28B3npbU2VtpVbeHeQApBz/7914a5ca5d0d9b9019e77a669aa81fa7/Billforward_Config_UI.png" />
            
            </figure><p>Cloudflare probes Billforward’s Origins once every minute from all of Cloudflare’s data centers around the world (a feature available to all Load Balancing Enterprise customers). If Billforward’s GCE Origin goes down, Cloudflare will quickly and automatically failover to the AWS Origin with no actions required from Billforward’s team.</p><p>Google Compute Engine was chosen as the primary provider for this application by virtue of cost. Martin Lee, Site Reliability Engineer at Billforward says, “Essentially, GCE is cheaper for our general purpose computing needs but we're more experienced with deployments in AWS. This strategy allows us to switch back and forth at will and avoid being tied in to either platform.” It is likely that Billforward will change the priority as pricing models evolve.</p><blockquote><p>“It's a fairly fast moving world and features released by cloud providers can have a meaningful impact on performance and cost on a week by week basis - it helps to stay flexible,” says Martin. “We may also change priority based on features.”</p></blockquote><p>For orchestration of the compute and storage layers, Billforward uses <a href="https://www.docker.com/">Docker</a> containers managed through <a href="http://www.rancher.com/">Rancher</a>. They use distinct environments between cloud providers but are considering bridging an environment across cloud providers and using VPNs between them, which will enable them to move load between providers even more easily. “Our system is loosely coupled through a message queue,” adds Martin. “Having a container system across clouds means we can really take advantage of this - we can very easily move workloads across clouds without any danger of dropping tasks or ending up in an inconsistent state.”</p>
    <div>
      <h4>Benefits</h4>
      <a href="#benefits">
        
      </a>
    </div>
    <p>Billforward manages these connections at Cloudflare’s edge. Through this interface (or via the Cloudflare APIs), they can also manually move traffic from GCE to AWS by just disabling the GCE pool or by rearranging the Pool priority and make AWS the primary. These changes are near instant on the Cloudflare network and require no downtime to Billforward’s customer facing application. This allows them to act on potential advantageous pricing changes between the two cloud providers or move traffic to hit pricing tiers.</p><p>In addition, Billforward is now not “locked-in” to either provider’s network; being able to move traffic and without any downtime means they can make traffic changes independent of Amazon or Google. They can also integrate additional cloud providers any time they deem fit: adding Microsoft Azure, for example, as a third Origin would be as simple as creating a new Pool and adding it to the Load Balancer.</p><p>Billforward is a good example of a forward thinking company that is taking advantage of technologies from multiple providers to best serve their business and customers, while not being reliant on a single vendor. For further detail on their setup using Cloudflare, please check their <a href="https://www.billforward.net/blog/being-multi-cloud-with-cloudflare/">blog</a>.</p> ]]></content:encoded>
            <category><![CDATA[Google Cloud]]></category>
            <category><![CDATA[Internet Summit]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Kubernetes]]></category>
            <guid isPermaLink="false">VwEr9XiNrvDVfzTQliPa4</guid>
            <dc:creator>Sergi Isasi</dc:creator>
        </item>
    </channel>
</rss>