
<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>Tue, 14 Apr 2026 07:58:46 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Introducing Spectrum: Extending Cloudflare To 65,533 More Ports]]></title>
            <link>https://blog.cloudflare.com/spectrum/</link>
            <pubDate>Thu, 12 Apr 2018 13:01:00 GMT</pubDate>
            <description><![CDATA[ We are introducing Spectrum, which brings Cloudflare’s security and acceleration to the whole spectrum of TCP ports and protocols for our Enterprise customers. It’s DDoS protection for any box, container or VM that connects to the internet. ]]></description>
            <content:encoded><![CDATA[ <p>Today we are introducing <a href="https://cloudflare.com/products/cloudflare-spectrum/">Spectrum</a>, which brings Cloudflare’s security and acceleration to the whole <i>spectrum</i> of TCP ports and protocols for our Enterprise customers. It’s <a href="https://www.cloudflare.com/ddos/">DDoS protection</a> for any box, container or VM that connects to the internet; whether it runs email, file transfer or a custom protocol, it can now get the full benefits of Cloudflare. If you want to skip ahead and see it in action, you can scroll to the video demo at the bottom.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3DPG25xnNPEy75TxEffEiZ/b5cc3a03fde7fe2e59ffc7e4f15b153c/spectrum-attack.svg" />
            
            </figure>
    <div>
      <h3>DDoS Protection</h3>
      <a href="#ddos-protection">
        
      </a>
    </div>
    <p>The core functionality of Spectrum is its ability to block large DDoS attacks. Spectrum benefits from Cloudflare’s existing DDoS mitigation (which this week <a href="https://twitter.com/jgrahamc/status/983278388059058181">blocked a 900 Gbps flood</a>). Spectrum’s DDoS protection has already been battle tested. Just soon as we opened up Spectrum for beta, Spectrum received its first SYN flood.</p><p>One of Spectrum's earliest deployments was in front of <a href="https://hypixel.net">Hypixel’s</a> infrastructure. Hypixel runs the largest minecraft server, and because gamers can be - uh, passionate - they were one of the earliest targets of the terabit-per-second Mirai botnet. “Hypixel was one of the first subjects of the Mirai botnet DDoS attacks and frequently receives large attacks. Before Spectrum, we had to rely on unstable services and techniques that increased latency, worsening user's experience. Now, we're able to be continually protected without added latency, which makes it the best option for any latency and uptime sensitive service such as online gaming,” Bruce Blair, the CTO at Hypixel, told us.</p><p>Another early team we talked to about Spectrum was the security team at <a href="https://montecito.bank/">Montecito Bank &amp; Trust</a>. As a financial institution, they have a highly technical and active security team; they were also one of the first customers to use Cloudflare’s DNSSEC when it was brand new. Paul Abramson, Montecito Bank &amp; Trust’s Director of Technology told us, “We were looking for a security solution to protect additional services like email and SSH so that if we are subject to attack, our operations can continue to run reliably and securely.”</p>
    <div>
      <h3>TLS Support</h3>
      <a href="#tls-support">
        
      </a>
    </div>
    <p>Security and encryption go hand in hand. With Spectrum, you can terminate TLS at Cloudflare’s edge. The main benefit of TLS termination at the edge is that is speeds up performance (there’s less distance to travel for the three round trips of the TLS handshake).</p><p>We think the most interesting outcome is that just by adding support for TLS in the client, Cloudflare can now add encryption to legacy protocols and services that don’t traditionally support encrypted transit.</p>
    <div>
      <h3>Firewall</h3>
      <a href="#firewall">
        
      </a>
    </div>
    <p>Spectrum integrates with Cloudflare’s IP Firewall so that you can choose which connections should be forwarded to your servers and which should be blocked at Cloudflare’s edge.</p><p>This can be managed via API too, so you can write scripts that allow and deny access on the fly.</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
     -H "X-Auth-Email: hello@example.com" \
     -H "X-Auth-Key: 0000000000000000000" \
     -H "Content-Type: application/json" \
     --data '{"mode":"block","configuration":{"target":"ip","value":"192.0.2.1"}}'</code></pre>
            
    <div>
      <h3>Demo</h3>
      <a href="#demo">
        
      </a>
    </div>
    <p>Many TCP load balancers and proxies can be cumbersome to set up, but Spectrum takes a few clicks. Tito Esterline on our team recorded a demo you can watch below. My suggestion is to play it with audio so you can hear the play by play.</p>
    <div>
      <h3>Get In Touch</h3>
      <a href="#get-in-touch">
        
      </a>
    </div>
    <p>If you want to get started, <a href="https://cloudflare.com/products/cloudflare-spectrum/">get in touch with our team</a>. Today Spectrum is available for applications on the Enterprise plan.</p><p>Why just Enterprise? While HTTP can use the <code>Host</code> header to identify services, TCP relies on each service having a unique IP address in order to identify it. Since IPv4 addresses are endangered, it’s quite expensive for us to delegate an IP per application and we needed to limit use. We’re actively thinking about ways to bring Spectrum to everyone. One idea is to offer IPv6-only Spectrum to non-Enterprise customers. Another idea is let anyone use Spectrum but pay for the IPv4 address. We’re not sure yet, but if you prefer one to the other, feel free to comment and let us know.</p><p>Oh and P.S. If you want to read about how Spectrum works, Marek wrote a <a href="/how-we-built-spectrum/">great blog post</a> about the Linux behavior that let us build it.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Spectrum]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[IoT]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">6c03nrfoWI8un8d8yrOSXn</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Argo Tunnel: A Private Link to the Public Internet]]></title>
            <link>https://blog.cloudflare.com/argo-tunnel/</link>
            <pubDate>Thu, 05 Apr 2018 13:00:00 GMT</pubDate>
            <description><![CDATA[ Argo Tunnel lets you deploy services that are hidden on the internet. In other words, Argo Tunnel is like a P.O. box: someone can send you packets without knowing your real address. Only Cloudflare can see the server and communicate with it. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Photo from <a href="https://commons.wikimedia.org/wiki/File:Argo-Tunnel-2009.jpg">Wikimedia Commons</a></p><p>Today we’re introducing <a href="https://www.cloudflare.com/products/argo-tunnel/">Argo Tunnel</a>, a private connection between your web server and Cloudflare. Tunnel makes it so that only traffic that routes through Cloudflare can reach your server.</p><p>You can think of Argo Tunnel as a virtual <a href="https://en.wikipedia.org/wiki/Post-office_box">P.O. box</a>. It lets someone send you packets without knowing your real address. In other words, it’s a private link. Only Cloudflare can see the server and communicate with it, and for the rest of the internet, it’s unroutable, as if the server is not even there.</p>
    <div>
      <h3><b>How this used to be done</b></h3>
      <a href="#how-this-used-to-be-done">
        
      </a>
    </div>
    <p>This type of private deployment used to be accomplished with GRE tunnels. But GRE tunnels are expensive and slow, they don’t really make sense in a 2018 internet.</p><p>GRE is a tunneling protocol for sending data between two servers by simulating a physical link. Configuring a GRE tunnel requires coordination between network administrators from both sides of the connection. It is an expensive service that is usually only available for large corporations with dedicated budgets. The GRE protocol encapsulates packets inside other packets, which means that you will have to either lower the MTU of your origin servers, or have your router do packet fragmentation, leading to slower responses.</p><p>We wanted to find a way to emulate the same security of a GRE tunnel but without the expense or hassle. And at the same time maybe it could speed up connections instead of slowing them down. And with that direction, the team started to build Tunnel.</p>
    <div>
      <h3><b>Deploy Quickly, Safely</b></h3>
      <a href="#deploy-quickly-safely">
        
      </a>
    </div>
    <p>Argo Tunnel is fast to install and run - it’s just <a href="https://developers.cloudflare.com/argo-tunnel/quickstart/quickstart/">three commands</a> to expose a locally running web application:</p>
            <pre><code>$ install cloudflared // binaries available for Linux, Mac and Windows https://developers.cloudflare.com/argo-tunnel/downloads/
$ cloudflared login
$ cloudflared --hostname example.com http://localhost:8080</code></pre>
            <p>This can be run on <a href="https://developers.cloudflare.com/argo-tunnel/downloads/">any device</a> from a Raspberry Pi, to a DigitalOcean droplet, to a hardware load balancer in your data center.</p><p>Netwrk is one of the companies using Argo Tunnel. Their Co-Founder and CTO Johan Bergström told us:</p><p>"I've been able to reduce the administrative overhead of firewalls, reduce the attack surface and get the added benefit of higher performance through the tunnel."</p>
    <div>
      <h3><b>Argo Tunnel is Powered by Argo</b></h3>
      <a href="#argo-tunnel-is-powered-by-argo">
        
      </a>
    </div>
    <p>One reason why traffic through Argo Tunnel gets a performance boost is that Tunnel is built on top of Argo, Cloudflare’s optimized smart routing (think <a href="https://www.waze.com/">Waze</a> for the internet).</p><p>Tunnel is included for free for anyone that has <a href="https://www.cloudflare.com/argo/">Argo</a> enabled.</p><p>In order for Tunnel to work we needed to get visitor traffic to reach one of the data centers closest to the origin. The right way to do this is by taking advantage of Argo. We decided it made sense to bundle Tunnel with Argo and include it at no additional cost. That way you get the best of both worlds: a secure, protected origin and the fastest path across the Internet to get to it.</p><p>Of course, we want you to one day be able to test out Tunnel without having to buy Argo, so we’re considering offering a free version of Tunnel on a Cloudflare domain. If you’re interested in testing out an early version in the future, <a href="https://goo.gl/forms/q2SNOLdqE68iH9nA2">sign up here</a>.</p>
    <div>
      <h3><b>What Happened to Warp</b></h3>
      <a href="#what-happened-to-warp">
        
      </a>
    </div>
    <p>During the beta period, Argo Tunnel went under a different name: <a href="/introducing-cloudflare-warp/">Warp</a>. While we liked Warp as a name, as soon as we realized that it made sense to bundle Warp with Argo, we wanted it to be under the Argo product name. Plus, a tunnel is what the product is so it's more descriptive.</p>
    <div>
      <h3><b>Get Started</b></h3>
      <a href="#get-started">
        
      </a>
    </div>
    <p>To get started, <a href="https://developers.cloudflare.com/argo-tunnel/downloads/">download</a> Argo Tunnel and follow our <a href="https://developers.cloudflare.com/argo-tunnel/quickstart">quickstart guide</a>. If you’re curious how it works, you can also <a href="https://github.com/cloudflare/cloudflared">check out the source</a>.</p> ]]></content:encoded>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Cloudflare Tunnel]]></category>
            <guid isPermaLink="false">2UiUohoAsjm3Is0ezUlyI9</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[NAT To Be Missed At SXSW]]></title>
            <link>https://blog.cloudflare.com/sxsw/</link>
            <pubDate>Tue, 06 Mar 2018 19:00:00 GMT</pubDate>
            <description><![CDATA[ We’re at the EDGE of our seats, about to LANd in Austin, Texas in route for SXSW. (TKIP, hip, hooray!)  ARP you going to be there? We R going to have three epoch sessions by Cloudflare speakers.  ]]></description>
            <content:encoded><![CDATA[ <p>We’re at the <a href="https://en.wikipedia.org/wiki/Enhanced_Data_Rates_for_GSM_Evolution"><b>EDGE</b></a> of our seats, about to <a href="https://en.wikipedia.org/wiki/Local_area_network"><b>LAN</b></a>d in Austin, Texas in <a href="https://en.wikipedia.org/wiki/Route_(command)"><b>route</b></a> for SXSW. (<a href="https://en.wikipedia.org/wiki/Temporal_Key_Integrity_Protocol"><b>TKIP</b></a>, h<a href="https://en.wikipedia.org/wiki/Internet_Protocol"><b>ip</b></a>, hooray!)</p><p><a href="https://en.wikipedia.org/wiki/Address_Resolution_Protocol"><b>ARP</b></a> you going to be there? We <a href="https://en.wikipedia.org/wiki/R_(programming_language)"><b>R</b></a> going to have three <a href="https://en.wikipedia.org/wiki/Unix_time"><b>epoch</b></a> <a href="https://en.wikipedia.org/wiki/Session_(computer_science)"><b>sessions</b></a> by Cloudflare speakers. <a href="https://linux.die.net/man/8/ifdown"><b>Ifdown</b></a>, seems <a href="https://linux.die.net/man/8/apt"><b>apt</b></a> you could <a href="https://en.wikipedia.org/wiki/Select_(SQL)"><b>SELECT</b></a> to <a href="https://en.wikipedia.org/wiki/Join_(SQL)"><b>JOIN</b></a>. <a href="https://linux.die.net/man/1/cat"><b>Cat</b></a> make it? Not a <a href="http://man7.org/linux/man-pages/man1/bg.1p.html"><b>bg</b></a> deal, <a href="https://linux.die.net/man/1/wget"><b>wget</b></a> it (though it <a href="https://en.wikipedia.org/wiki/Hertz"><b>mega hertz</b></a> we won’t <a href="https://en.wikipedia.org/wiki/C_(programming_language)"><b>C</b></a> you). All the audio from the three sessions will be recorded, you can listen to the <a href="https://www.unix.com/man-page/posix/1posix/cd/"><b>cd</b></a>.</p><p><a href="https://en.wikipedia.org/wiki/Wi-Fi_Protected_Setup"><b>WPS</b></a>! I almost forgot to <a href="https://en.wikipedia.org/wiki/Telnet"><b>tel(net)</b></a> you <a href="https://en.wikipedia.org/wiki/WHOIS"><b>whois</b></a> going to be there, and <a href="https://en.wikipedia.org/wiki/Wide_area_network"><b>WAN</b></a> and where to <a href="https://en.wikipedia.org/wiki/Go_(programming_language)"><b>go</b></a>.</p><p>On Friday, March 9, I’m <a href="https://schedule.sxsw.com/2018/events/PP78776">moderating a panel</a> with Emily Schechter from Google, Aaron DeVera from Deloitte and Gabe Kassel from eero about how Wi-Fi networks work and <a href="https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy"><b>WEP</b></a> happens when attackers <a href="https://en.wikipedia.org/wiki/Wi-Fi_over_Coax"><b>coax</b></a> people into joining insecure networks. It’s at Salon K in the Hilton at 3:30PM.</p><p>On Sunday the 11th, <a href="/author/nitin-rao/">Nitin Rao</a> is <a href="https://schedule.sxsw.com/2018/events/PP78457">on a panel</a> with Heather West from Mozilla, Stefan Lederer from Bitmovin and Fred Benenson from Unlimited Liability Corporation LLC about the impact of the recent revocation of Net Neutrality rules on online video streaming. It’s at 11AM at Salon J in the Hilton. Nitin is really good at putting concepts in a <a href="https://en.wikipedia.org/wiki/GNU"><b>GNU</b></a> <a href="https://en.wikipedia.org/wiki/Frame_rate"><b>frame</b></a>, so I expect this to be a <a href="https://en.wikipedia.org/wiki/Bit_rate"><b>bit (g)rate</b></a>. <a href="http://www.linfo.org/whoami.html"><b>Whoami</b></a> kidding? It will be <a href="https://en.wikipedia.org/wiki/Emacs"><b>emacs</b></a>-ulate.</p><p>And then on Thursday March 15th, <a href="/author/marc-rogers/">Marc Rogers</a> is <a href="https://schedule.sxsw.com/2018/events/PP79265">giving a talk</a> about how he hacked the Tesla Model S and the current state of automotive security. (The <a href="https://en.wikipedia.org/wiki/Top-level_domain"><b>TLD</b></a>(r) is that it’s a long road ahead, but automotive companies are driven to make it better). It’s at 11am in Room 203-204 at the JW Marriot. He gave a <a href="https://www.youtube.com/watch?v=KX_0c9R4Fng">similar talk at Defcon</a> so this is kind of a <a href="https://en.wikipedia.org/wiki/SQL"><b>SQL</b></a>.</p><p>There’s a lot but looking forward to <a href="https://en.wikipedia.org/wiki/Network_packet"><b>packet</b></a> all in. <a href="https://en.wikipedia.org/wiki/Institute_of_Electrical_and_Electronics_Engineers"><b>IEEE</b></a> hope you can join!</p><p>--</p><p>MAR 9, 2018 | 3:30PM – 4:30PM | HILTON AUSTIN DOWNTOWN SALON K<a href="https://schedule.sxsw.com/2018/events/PP78776">Should I Use This Wi-Fi?</a></p><p><i>You’re sitting at the gate, about to connect to the free airport Wi-Fi when you stop and think. You’ve heard something about insecure public Wi-Fi before, but could using a bad Wi-Fi network really leak your data or let someone hack your Facebook? Just as there will never be perfect code, there will always be inherent flaws in the tools we use to communicate, work and pay our bills. Find out how vulnerabilities in the web are exploited and what that means in the future of our online privacy.</i></p><p>MAR 11, 2018 | 11:00AM – 12:00PM | HILTON AUSTIN DOWNTOWN SALON J<a href="https://schedule.sxsw.com/2018/events/PP78457">Fighting the Demise of Net Neutrality w/Innovation</a></p><p><i>As consumer demand for streaming video explodes, digital publishers are scrambling to upgrade their video production capabilities in the fight for viewer eyeballs. But in light of eroding net neutrality protections, publishers must ensure their streaming infrastructure delivers a stellar consumer experience in order to stay relevant and compete with giants like Netflix and YouTube. Hear from industry leaders on how the war on net neutrality will alter how audiences consume video.</i></p><p>MAR 15, 2018 | 11:00AM – 12:00PM | JW MARRIOTT ROOM 203-204<a href="https://schedule.sxsw.com/2018/events/PP79265">Who’s Really in Control of Self-Driving Cars?</a></p><p><i>A few years back, I hacked the Tesla Model S. Scary, right? Actually, it’s not as scary as it seems. In this session, I’ll discuss the current state of automotive security as I see it and give a deep dive discussion on where security needs to be moving forward. I’ll discuss the steps needed to hack a car, the cars that are most vulnerable, the security of self-driving cars, and how concerned consumers can protect themselves.</i></p> ]]></content:encoded>
            <category><![CDATA[Life at Cloudflare]]></category>
            <category><![CDATA[Events]]></category>
            <category><![CDATA[Community]]></category>
            <category><![CDATA[SXSW]]></category>
            <guid isPermaLink="false">6B4Xd2sDxlDfu2SbRz2lX6</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[TLS 1.3 is going to save us all, and other reasons why IoT is still insecure]]></title>
            <link>https://blog.cloudflare.com/why-iot-is-insecure/</link>
            <pubDate>Sun, 24 Dec 2017 16:57:44 GMT</pubDate>
            <description><![CDATA[ As I’m writing this, four DDoS attacks are ongoing and being automatically mitigated by Gatebot. Cloudflare’s job is to get attacked. Our network gets attacked constantly. ]]></description>
            <content:encoded><![CDATA[ <p>As I’m writing this, four DDoS attacks are ongoing and being automatically mitigated by <a href="/meet-gatebot-a-bot-that-allows-us-to-sleep/">Gatebot</a>. Cloudflare’s job is to get attacked. Our network gets attacked constantly.</p><p>Around the fall of 2016, we started seeing DDoS attacks that looked a little <a href="/say-cheese-a-snapshot-of-the-massive-ddos-attacks-coming-from-iot-cameras/">different than usual</a>. One attack we saw around that time had traffic coming from 52,467 unique IP addresses. The clients weren’t servers or desktop computers; when we tried to connect to the clients over port 80, we got the login pages to CCTV cameras.</p><p>Obviously it’s important to lock down IoT devices so that they can’t be co-opted into evil botnet armies, but when we talk to some IoT developers, we hear a few concerning security patterns. We’ll dive into two problematic areas and their solutions: software updates and TLS.</p>
    <div>
      <h3>The Trouble With Updates</h3>
      <a href="#the-trouble-with-updates">
        
      </a>
    </div>
    <p>With PCs, the end user is ultimately responsible for securing their devices. People understand that they need to update their computers and phones. <a href="https://www.macrumors.com/2017/01/05/ios-10-installed-on-76-percent-of-ios-devices/">Just 4 months after Apple released iOS 10, it was installed on 76% of active devices</a>.</p><p>People just don’t know that they are supposed to update IoT <i>things</i> like they are supposed to update their computers because they’ve never had to update things in the past. My parents are never going to install a software update for their thermometer.</p><p>And the problem gets worse over time. The longer a device stays on an older software version, the less likely it will be compatible with the newer version. At some point, an update may not be possible anymore. This is a very real concern as the shelf life of a connected thing can be 10 years in the case of a kitchen appliance - have you ever bought a refrigerator?</p><p>This is if the device can be patched at all. First, devices that are low battery are programmed not to receive updates because it’s too draining on the battery. Second, IoT devices are too lightweight to run a full operating system, they run just a compiled binary on firmware which means there’s a limit to the code that can later be pushed to it. Some devices cannot receive specific patches.</p><p>The other thing we hear about updates from IoT developers is that often they are afraid to push a new update because it could mean breaking hundreds of thousands of devices at once.</p><p>All this may not seem like a big deal - ok, so a toaster can get hacked, so what - but two very real things are at stake. First, every device that’s an easy target makes it easier to make other applications a target. Second, once someone is sitting on a device, they are in your network, which can put at stake any traffic sent over the wire.</p><p>The security model that worked for PC doesn’t work for IoT — the end user can’t be responsible, and patching isn’t reliable. We need something else. What’s the solution?</p><p>Traffic to an IoT device passes through many different networks: the transit provider from the application server, the <a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/">content delivery network</a> used to deliver device traffic, the ISP to the building where the device sits.</p><p>It is at those network layers that protection can be added. As IoT device traffic moves through these networks, packets can be filtered to only let in good traffic. Even if a device is running vulnerable code, filters added in the network level can keep hackers out.</p>
    <div>
      <h3>The Trouble With TLS</h3>
      <a href="#the-trouble-with-tls">
        
      </a>
    </div>
    <p>TLS is used in two ways in IoT devices: First, TLS is used to encrypt data in transit. This is used for data privacy and to make it harder to reverse engineer the communications used by the device. Second, devices store client <a href="https://www.cloudflare.com/application-services/products/ssl/">TLS certificates</a> that are used to authenticate the devices to the application - makes it one step harder to fake a device.</p><p>There are three problems developers run into when they want to implement TLS in IoT. The first is that while IoT traffic needs to be quick and lightweight, TLS adds an additional two round trips to the start of every session. The second is that certificates can be large files, and device memory is limited in IoT. And the third is that some of the protocols that are being developed for IoT are plaintext by default.</p>
    <div>
      <h3>TLS Isn’t Lightweight</h3>
      <a href="#tls-isnt-lightweight">
        
      </a>
    </div>
    <p>IoT devices run on low power chips. An IoT device may only have 256 or 512 KB of RAM and often need to conserve battery. They send and receive lots of small information constantly. Imagine an internet connected wind sensor - it measures wind speed and every 30 seconds, sends the new wind speed to the application server. It’s just a few bytes of data it needs to get over the wire and it wants to be able to do so without as much overhead as possible to conserve RAM and battery life.</p><p>Here’s an HTTP POST to do that:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/10XN1xsCbML3sq6IUtHQlk/dd09f91c6593270de299f38e9490caad/Screen-Shot-2017-12-23-at-8.39.11-PM.png" />
            
            </figure><p>But let’s say the same device is going to use TLS. Here’s what the same POST looks like with the TLS handshake — this is with TLS 1.2:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4XYspSKePX6SnuugQdO58g/89efbf761a75c8a90df6d4627dc5439d/Screen-Shot-2017-12-23-at-8.40.00-PM.png" />
            
            </figure><p>Depending on distance between the device and the application server and the latency of the server, this can be hundreds of milliseconds added. The solution is likely the newest version of TLS, TLS 1.3.</p><p>TLS 1.3 eliminates a complete round trip in the TLS handshake, which makes TLS much lighter and faster. It cuts the number of round trips in the handshake by half by predicting what key agreement protocol and algorithm the server will decide to use and sends those guessed parameters and the key share directly in the client hello. And if the server likes that, it sends back its own key share for the same algorithm, and the whole handshake is done.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2LB8N0MKT0QFOFfZL3S91v/240f1a0436802f14c6c736f558b5f9f6/Screen-Shot-2017-12-23-at-8.50.04-PM.png" />
            
            </figure><p>If the same IoT device talks to the same server again, there’s actually <a href="/introducing-0-rtt/">no round trip at all</a>. The parameters chosen in the initial handshake are sent alongside application data in the first packet.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2BVBCXVFfkOtvxxvXO0M1Y/1b850b51f228b6d70540a4fbea3f3aa8/Screen-Shot-2017-12-24-at-8.23.08-AM.png" />
            
            </figure><p>Why isn’t every IoT device using 1.3 today? TLS 1.3 is still actively being developed in the IETF standards track and while Chrome as of version 56 in January and Firefox as of version 52 in March support 1.3, not everything does. The biggest problem today are middleboxes that are used by ISP’s and enterprises that panic when they see a 1.3 handshake and close the connection. This also happened when the world was upgrading to TLS 1.2 and middleboxes only understood TLS 1.1, so it’s just a matter of time.</p>
    <div>
      <h3>TLS Certificate Size</h3>
      <a href="#tls-certificate-size">
        
      </a>
    </div>
    <p>In a TLS handshake, the server can use a server-side TLS certificate to authenticate itself to the client, and the client can use a client-side certificate to authenticate itself to the server. Devices often store certificates to authenticate themselves to the application server. However, device memory is often limited in IoT, and certificates can be large. What can we do?</p><p>Most certificates today use the RSA algorithm, which has been around since the 70’s. The certificates are large because the keys in RSA to be secure need to be large - either 1,024 to 2,048 bytes, however, a newer algorithm using elliptic curve cryptography has been in wide use since the early 2000’s that can solve this problem. With elliptic curve cryptography we can use smaller keys with the same level of security as a larger RSA key and save space on the device.</p>
    <div>
      <h3>Default Plaintext IoT Protocols</h3>
      <a href="#default-plaintext-iot-protocols">
        
      </a>
    </div>
    <p>IoT devices need to be lightweight so two emerging protocols are replacing HTTP as the dominant transfer protocol for some IoT devices: MQTT and CoAP.</p><p>MQTT is a pub/sub protocol that has been around almost 20 years. In MQTT, a proxy server acts as a broker. An IoT device or web app publishes a message to the broker, and the broker distributes those messages to all the other IoT devices that need to receive that message.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/E4huJmd0Qc5gRa4N5kuxH/1116aa56a7893b95bd62909c577d525b/Screen-Shot-2017-12-23-at-8.52.51-PM.png" />
            
            </figure><p>When MQTT was written almost 20 years ago, it was written without security by intention. It was written for oil and gas companies and they were just sending sensor data and no one thought it needed to be encrypted.</p><p>CoAP was standardized just three years ago. It has all the same methods as HTTP, but it’s over UDP so it’s really light.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2PLPc3UEGFJ8RVGsEWpGpk/e073dc56e23e24c449aa96f97e1f9fa8/Screen-Shot-2017-12-23-at-8.53.03-PM.png" />
            
            </figure><p>The problem is, if you want to add TLS (DTLS really because CoAP is over UDP), it no longer is light anymore.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7Ih9SbeRbtRJk4OqCZGXgx/698e1d764c758df0cebcd832c5aefa63/Screen-Shot-2017-12-23-at-8.53.41-PM.png" />
            
            </figure>
    <div>
      <h3>The Future</h3>
      <a href="#the-future">
        
      </a>
    </div>
    <p>It will be quite interesting to see how update mechanisms and TLS implementations change as the number of deployed IoT devices continues to grow. If this type of thing interests you, <a href="https://www.cloudflare.com/careers/">come join us</a>.</p> ]]></content:encoded>
            <category><![CDATA[IoT]]></category>
            <category><![CDATA[TLS 1.3]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Gatebot]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">3u3LeCl6VoYIZx3NbtHAa0</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Why Some Phishing Emails Are Mysteriously Disappearing]]></title>
            <link>https://blog.cloudflare.com/combatting-phishing-with-dns/</link>
            <pubDate>Tue, 12 Dec 2017 14:00:00 GMT</pubDate>
            <description><![CDATA[ Phishing is the absolute worst.

Unfortunately, sometimes phishing campaigns use Cloudflare for the very convenient, free DNS.  ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4cYYmZBGDpwiXQwvj2UxUo/6373c09bfee5ab68bf6c239487f3e758/Artboard-30-2.png" />
            
            </figure><p>Phishing is the absolute worst.</p><p>Unfortunately, sometimes phishing campaigns use Cloudflare for the very convenient, free DNS. To be clear –– there’s a difference between a compromised server being leveraged to send phishing emails and an intentionally malicious website dedicated to this type of activity. The latter clearly violates our terms of service.</p><p>In the past, our Trust and Safety team would kick these intentional phishers off the platform, but now we have a new trick up our sleeve and a way for their malicious emails to mysteriously disappear into the ether.</p>
    <div>
      <h3>Background: How Email Works</h3>
      <a href="#background-how-email-works">
        
      </a>
    </div>
    <p>SMTP - the protocol used for sending email - was <a href="/the-history-of-email/">finalized in 1982</a>, when it was just a <a href="https://blog.ted.com/what-the-internet-looked-like-in-1982-a-closer-look-at-danny-hillis-vintage-directory-of-users/">small community</a> online. Many of them knew and trusted each other, and so the protocol was built entirely on trust. In an SMTP message, the MAIL FROM field can be arbitrarily defined. That means you could send an email from any email address, even one you don’t own.</p><p>This is great for phishers, and bad for everyone else.</p><p>The solution to <a href="https://www.cloudflare.com/learning/email-security/how-to-prevent-phishing/">prevent email spoofing</a> was to create the Sender Policy Framework (SPF). SPF allows the domain owner to specify which servers are allowed to send email from that domain. That policy is stored in a DNS TXT record like this one from cloudflare.com:</p>
            <pre><code>$ dig cloudflare.com txt
"v=spf1 ip4:199.15.212.0/22 ip4:173.245.48.0/20 include:_spf.google.com include:spf1.mcsv.net include:spf.mandrillapp.com include:mail.zendesk.com include:customeriomail.com include:stspg-customer.com -all"</code></pre>
            <p>This says that email clients should only accept cloudflare.com emails if they come from an IP in the ranges 199.15.212.0/22, 173.245.48.0/20, or one of the IP ranges found in the SPF records for the other domains listed. Then if a receiving email server receives an email from <a href="#">someone@cloudflare.com</a> from the server at 185.12.80.67, that email server would check the SPF records of all the allowed domains until it finds that 185.12.80.67 is allowed because 185.12.80.0/22 is listed in mail.zendesk.com’s SPF record:</p>
            <pre><code>$ dig txt mail.zendesk.com
"v=spf1 ip4:192.161.144.0/20 ip4:185.12.80.0/22 ip4:96.46.150.192/27 ip4:174.137.46.0/24 ip4:188.172.128.0/20 ip4:216.198.0.0/18 ~all"</code></pre>
            <p>Additional methods for <a href="https://www.cloudflare.com/zero-trust/solutions/email-security-services/">securing email</a> were created after SPF. SPF only validates the email sender but doesn’t do anything about verifying the content of the email. (While SMTP can be sent over an encrypted connection, SMTP is <a href="https://blog.filippo.io/the-sad-state-of-smtp-encryption/">notoriously easy to downgrade</a> to plaintext with an on-path attacker.)</p><p>To verify the content, domain owners can sign email messages using DKIM. The email sender includes the message signature in an email header called DKIM-Signature and stores the key in a DNS TXT record.</p>
            <pre><code>$ dig txt smtpapi._domainkey.cloudflare.com
"k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPtW5iwpXVPiH5FzJ7Nrl8USzuY9zqqzjE0D1r04xDN6qwziDnmgcFNNfMewVKN2D1O+2J9N14hRprzByFwfQW76yojh54Xu3uSbQ3JP0A7k8o8GutRF8zbFUA8n0ZH2y0cIEjMliXY4W4LwPA7m4q0ObmvSjhd63O9d8z1XkUBwIDAQAB"</code></pre>
            <p>There’s one more mechanism for controlling email spoofing called DMARC. DMARC sets the overarching email policy, indicates what to do if the policies are not met and sets a reporting email address for logging invalid mail attempts. Cloudflare’s DMARC record says that noncomplying emails should be sent to junk mail, 100% of messages should be subject to filtering and if policies are not met, send the report to the two email addresses below.</p>
            <pre><code>$ dig txt _dmarc.cloudflare.com
"v=DMARC1\; p=quarantine\; pct=100\; rua=mailto:rua@cloudflare.com, mailto:gjqhulld@ag.dmarcian.com"</code></pre>
            <p>When an email server receives an email from <a href="#">someone@cloudflare.com</a>, it first checks SPF, DKIM and DMARC records to know whether the email is valid, and if not, how to route it.</p>
    <div>
      <h3>Stopping Phishy Behavior</h3>
      <a href="#stopping-phishy-behavior">
        
      </a>
    </div>
    <p>For known phishing campaigns using the Cloudflare platform for evil, we have a DNS trick for getting their phishing campaigns to stop. If you remember, there are three DNS records required for sending email: SPF, DKIM and DMARC. The last one is the one that defines the overarching email policy for the domain.</p><p>What we do is rewrite the DMARC record so that the overarching email policy instructs email clients to reject all emails from that sender. We also remove the other DNS record types used for sending email.</p>
            <pre><code>"v=DMARC1; p=reject"</code></pre>
            <p>When an email client receives a phishing email, the corresponding DNS records instruct the client not to accept the email and the phishing email is not delivered.</p><p>You can see it in action on our fake phish domain, astronautrentals.com.</p><p>astronautrentals.com is configured with an SPF record, a DKIM record, and a DMARC record with a policy to accept all email.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4eFm0QSHY505LXsU2rds8C/9093fc93ccec9cd31535e997f80b4b1c/Screen-Shot-2017-12-11-at-7.58.27-PM.png" />
            
            </figure><p>However, because it is a known (fake) phishing domain, when you query DNS for these records, SPF will be missing:</p>
            <pre><code>$ dig astronautrentals.com txt
astronautrentals.com.	3600	IN	SOA	art.ns.cloudflare.com. dns.cloudflare.com. 2026351035 10000 2400 604800 3600</code></pre>
            <p>DKIM will be missing:</p>
            <pre><code>$ dig _domainkey.astronautrentals.com txt
astronautrentals.com.	3600	IN	SOA	art.ns.cloudflare.com. dns.cloudflare.com. 2026351035 10000 2400 604800 3600</code></pre>
            <p>And DMARC policy will be rewritten to reject all emails:</p>
            <pre><code>$ dig _dmarc.astronautrentals.com txt
"v=DMARC1\; p=reject"</code></pre>
            <p>If we try to send an email from @astronautrentals.com, the email never reaches the recipient because the receiving client sees the DMARC policy and rejects the email.</p><p>This DMARC alteration happens on the fly –– it's a computation we do at the moment when we answer the DNS query –– so the original DNS records are still shown to the domain owner in the Cloudflare DNS editor. This adds some mystery to why the phish attempts are failing to send.</p>
    <div>
      <h3>Using DNS To Combat Phishing</h3>
      <a href="#using-dns-to-combat-phishing">
        
      </a>
    </div>
    <p>Phishing is the absolute worst, and the problem is that it sometimes succeeds. Last year Verizon reported that <a href="https://www.prnewswire.com/news-releases/verizons-2016-data-breach-investigations-report-finds-cybercriminals-are-exploiting-human-nature-300258134.html">30% of phishing emails</a> are opened, and 13% of those opened end with the receiver clicking on the phishing link.</p><p>Keeping people safe on the internet means decreasing the number of successful phishing attempts. We're glad to be able to fight phish using the DNS.</p> ]]></content:encoded>
            <category><![CDATA[Phishing]]></category>
            <category><![CDATA[Abuse]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Reliability]]></category>
            <guid isPermaLink="false">3EGw4u6PtzahSALx0hsmcI</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Want to try Warp? We just enabled the beta for you]]></title>
            <link>https://blog.cloudflare.com/get-started-with-warp/</link>
            <pubDate>Thu, 23 Nov 2017 02:00:00 GMT</pubDate>
            <description><![CDATA[ Tomorrow is Thanksgiving in the United States. It’s a holiday for getting together with family characterized by turkey dinner and whatever it is that happens in American football. ]]></description>
            <content:encoded><![CDATA[ <p><i>NOTE: Prior to launch, this product was renamed Argo Tunnel. Read more in the </i><a href="/argo-tunnel/"><i>launch announcement</i></a><i>.</i></p><p>Tomorrow is Thanksgiving in the United States. It’s a holiday for getting together with family characterized by turkey dinner and whatever it is that happens in American football. While celebrating with family is great, if you use a computer for your main line of work, sometimes the conversation turns to how to setup the home wifi or can Russia really use Facebook to hack the US election. Just in case you’re a geek who finds yourself in that position this week, we wanted to give you something to play with. To that end, we’re opening the <a href="http://warp.cloudflare.com">Warp</a> beta to all Cloudflare users. Feel free to tell your family there’s been an important technical development you need to attend to immediately and enjoy!</p>
    <div>
      <h3>Hello Warp! Getting Started</h3>
      <a href="#hello-warp-getting-started">
        
      </a>
    </div>
    <p>Warp allows you to expose a locally running web server to the internet without having to open up ports in the firewall or even needing a public IP address. Warp connects a web server directly to the Cloudflare network where Cloudflare acts as your web server’s network gateway. Every request reaching your origin must travel to the Cloudflare network where you can apply rate limits, access policies and authentication before the request hits your origin. Plus, because your origin is never exposed directly to the internet, attackers can’t bypass protections to reach your origin.</p><p>Warp is really easy to get started with. If you use homebrew (we also have <a href="https://warp.cloudflare.com/downloads/">packages for Linux and Windows</a>) you can do:</p>
            <pre><code>$ brew install cloudflare/cloudflare/warp
$ cloudflare-warp login
$ cloudflare-warp --hostname warp.example.com --hello-world</code></pre>
            <p>In this example, replace example.com with the domain you chose at the login command. The warp.example.com subdomain doesn’t need to exist yet in DNS, Warp will automatically add it for you.</p><p>That last command spins up a web server on your machine serving the hello warp world webpage. Then Warp starts up an encrypted virtual tunnel from that web server to the Cloudflare edge. When you visit warp.example.com (or whatever domain you chose), your request first hits a Cloudflare data center, then is routed back to your locally running hello world web server on your machine.</p><p>If someone far away visits warp.example.com, they connect to the Cloudflare data center closest to them, and then are routed to the Cloudflare data center your Warp instance is connected to, and then over the Warp tunnel back to your web server. If you want to make that connection between Cloudflare data centers really fast, <a href="https://www.cloudflare.com/a/traffic/">enable Argo</a>, which bypasses internet latencies and network congestions on optimized routes linking the Cloudflare data centers.</p><p>To point Warp at a real web server you are running instead of the hello world web server, replace the hello-world flag with the location of your locally running server:</p>
            <pre><code>$ cloudflare-warp --hostname warp.example.com http://localhost:8080</code></pre>
            
    <div>
      <h3>Using Warp for Load Balancing</h3>
      <a href="#using-warp-for-load-balancing">
        
      </a>
    </div>
    <p>Let’s say you have multiple instances of your application running and you want to balance load between them or always route to the closest one for any given visitor. As you spin up Warp, you can register the origins behind Warp to a load balancer. For example, I can run this on 2 different servers (e.g. one on a container in ECS and one on a container in GKE):</p>
            <pre><code>$ cloudflare-warp --hostname warp.example.com --lb-pool origin-pool-1 http://localhost:8080</code></pre>
            <p>And connections to warp.example.com will be routed seamlessly between the two servers. You can do this with an existing origin pool or a brand new one. If you visit the <a href="https://www.cloudflare.com/a/traffic/">load balancing dashboard</a> you will see the new pool created with your origins in it, or the origins added to an existing pool.</p><p>You can also <a href="https://www.cloudflare.com/a/traffic/">set up a health check</a> so that if one goes offline, it automatically gets deregistered from the load balancer pool and requests are only routed to the online pools.</p>
    <div>
      <h3>Automating Warp with Docker</h3>
      <a href="#automating-warp-with-docker">
        
      </a>
    </div>
    <p>You can add Warp to your Dockerfile so that as containers spin up or as you autoscale, containers automatically register themselves with Warp to connect to Cloudflare. This acts as a kind of service discovery.</p><p>A reference <a href="https://warp.cloudflare.com/docs/docker/">Dockerfile is available here</a>.</p>
    <div>
      <h3>Requiring User Authentication</h3>
      <a href="#requiring-user-authentication">
        
      </a>
    </div>
    <p>If you use Warp to expose dashboards, staging sites and other internal tools to the internet that you don’t want to be available for everyone, we have a new product in beta that allows you to quickly put up a login page in front of your Warp tunnel.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/24ItxFhwmPF9EcZc1qHE45/9028a584093a8597833b93318c7cc256/1Screen-Shot-2017-11-08-at-9.00.33-AM.png" />
            
            </figure><p>To get started, go to the <a href="https://www.cloudflare.com/a/access/">Access tab in the Cloudflare dashboard</a>.</p><p>There you can define which users should be able to login to use your applications. For example, if I wanted to limit access to warp.example.com to just people who work at Cloudflare, I can do:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/sGHDnCCZoCGhGRqM1GICF/ae667903ba8524e99308853be795b13a/Screen-Shot-2017-11-22-at-11.24.51-AM.png" />
            
            </figure>
    <div>
      <h3>Enjoy!</h3>
      <a href="#enjoy">
        
      </a>
    </div>
    <p>Enjoy the Warp beta! (But don't wander too deep into the Warp tunnel and forget to enjoy time with your family.) The whole <a href="https://community.cloudflare.com/t/cloudflare-warp-beta/5656">Warp team is following this thread</a> for comments, ideas, feedback and show and tell. We’re excited to see what you build.</p> ]]></content:encoded>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[Cloudflare Tunnel]]></category>
            <guid isPermaLink="false">4HMPtPqGBoeFZ65Yv3Tnf3</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[WHOIS going to be at the Grace Hopper Celebration?]]></title>
            <link>https://blog.cloudflare.com/ghc/</link>
            <pubDate>Tue, 03 Oct 2017 10:00:00 GMT</pubDate>
            <description><![CDATA[ Ubuntu us are doing the round trip! It’s time to live - WAN you arrive at GHC, come meet us and say HELO (we love GNU faces, we’ll be very api to meet you). When you’re exhausted like IPv4, git over to the Cloudflare corner to reboot. ]]></description>
            <content:encoded><![CDATA[ <p><a href="https://en.wikipedia.org/wiki/Ubuntu_(operating_system)">Ubuntu</a> us are doing the <a href="https://en.wikipedia.org/wiki/Round-trip_delay_time">round trip</a>! It’s <a href="https://en.wikipedia.org/wiki/Time_to_live">time to live</a> - <a href="https://en.wikipedia.org/wiki/Wide_area_network">WAN</a> you arrive at GHC, come meet us and say <a href="https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">HELO</a> (we love <a href="https://en.wikipedia.org/wiki/GNU">GNU</a> faces, we’ll be very <a href="https://en.wikipedia.org/wiki/Application_programming_interface">api</a> to meet you). When you’re exhausted like <a href="https://en.wikipedia.org/wiki/IPv4">IPv4</a>, <a href="https://en.wikipedia.org/wiki/Git">git</a> over to the Cloudflare corner to reboot –– we’ll have chargers and Wi-Fi (it’s not a <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#CONNECTION-ESTABLISHMENT">SYN</a> to <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a>). <a href="https://en.wikipedia.org/wiki/R_(programming_language)">R</a> booth can be your <a href="https://en.wikipedia.org/wiki/Esc_key">ESC</a>. Then Thursday morning <a href="https://www.eventbrite.com/e/grace-hopper-better-together-breakfast-sponsored-by-cloudflare-zendesk-tickets-38404240116">we’re hosting a breakfast</a> <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)">bash</a> with Zendesk –– it will be quite the <a href="https://en.wikipedia.org/wiki/Assembly_language">Assembly</a>, you should definitely <a href="https://en.wikipedia.org/wiki/Go_(programming_language)">Go</a>,<a href="https://en.wikipedia.org/wiki/Compiler">compile</a> a bowl of <a href="https://en.wikipedia.org/wiki/Serial_communication">serial</a>, drink a <a href="https://en.wikipedia.org/wiki/Bit">bit</a> of <a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing">CIDR</a> or a cup of <a href="https://en.wikipedia.org/wiki/Tee_(command)">tee</a>.</p><p>I’m also speaking at 1:30PM on Wednesday in OCCC W414 <a href="https://en.wikipedia.org/wiki/Cryptographic_hash_function">hashing</a> out encryption and updates for IoT –– <a href="https://en.wikipedia.org/wiki/Data_Encryption_Standard">DES</a> should be a fun <a href="https://en.wikipedia.org/wiki/Session_(computer_science)">session</a>.</p><p><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol">ACK!</a> I did <a href="https://en.wikipedia.org/wiki/Network_address_translation">NAT</a> tell you how to find us. <a href="https://en.wikipedia.org/wiki/Checksum">Check for sum</a> women in capes a few <a href="https://en.wikipedia.org/wiki/Hop_(networking)">hops away</a> from the booths with the lava <a href="https://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a> stack. I'm the one with <a href="https://en.wikipedia.org/wiki/CURL">cURLs</a>.</p><p>In <a href="https://en.wikipedia.org/wiki/D_(programming_language)">D</a> air! Excited to <a href="https://en.wikipedia.org/wiki/Local_area_network">LAN</a>d. <a href="https://en.wikipedia.org/wiki/C_(programming_language)">C</a> you soon.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1tjItgsesKtLjcPjox0PI0/231114e3a4bc152a74ecc2b9f77a0534/gradient-Corgi.png" />
            
            </figure> ]]></content:encoded>
            <category><![CDATA[Events]]></category>
            <category><![CDATA[Grace Hopper]]></category>
            <category><![CDATA[API]]></category>
            <category><![CDATA[IPv4]]></category>
            <category><![CDATA[Go]]></category>
            <guid isPermaLink="false">6tkfLf5eLUToHtJa1JZTXr</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Cloudflare Warp: Hide Behind The Edge]]></title>
            <link>https://blog.cloudflare.com/introducing-cloudflare-warp/</link>
            <pubDate>Thu, 28 Sep 2017 13:01:00 GMT</pubDate>
            <description><![CDATA[ I work at a company whose job it is to be attacked. As I’m writing this, an automatic mitigation is fighting two ongoing DDoS attacks. Any machine that’s publicly routable on the internet today can be a vector for attack, and that’s a problem. ]]></description>
            <content:encoded><![CDATA[ <p><i>NOTE: Prior to launch, this product was renamed Argo Tunnel. Read more in the </i><a href="/argo-tunnel/"><i>launch announcement</i></a><i>.</i></p><p>I work at a company whose job it is to be attacked. As I’m writing this, an <a href="/meet-gatebot-a-bot-that-allows-us-to-sleep/">automatic mitigation</a> is fighting two ongoing DDoS attacks. Any machine that’s publicly routable on the internet today can be a vector for attack, and that’s a problem.</p><p>Today we want to turn the tables and give you a new way of exposing services to the internet without having them be directly, publicly routable. Meet Cloudflare Warp.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3bb2am85Di5godGargTcgE/8d8b3a6c8db786eb1256ced19bf1b787/5934405346_edd94956e8_b.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a> <a href="https://c1.staticflickr.com/7/6004/5934405346_edd94956e8_b.jpg">image</a> by <a href="https://www.flickr.com/photos/39483037@N00/">Christian Ortiz</a></p>
    <div>
      <h3>Playing Hide and Seek with Bots and Hackers</h3>
      <a href="#playing-hide-and-seek-with-bots-and-hackers">
        
      </a>
    </div>
    <p>Cloudflare internally runs about 4,000 containers that make up about 1.5K services and applications. Some of these containers need to network with other local containers, and others need to accept connections over the wire.</p><p>Every devops engineer knows that bad things happen to good machines, and so our platform operations team tries to hide servers altogether from the internet. There are several ways to do this:</p><ul><li><p>Rotate IP addresses</p></li><li><p>Deploy proxies</p></li><li><p>Create firewall rules</p></li><li><p>Configure IP tables</p></li><li><p>Limit connections by client certificate</p></li><li><p>Cross connect with an upstream provider</p></li><li><p>Configure a GRE tunnel</p></li><li><p>Authentication mechanisms like OAuth or OIDC</p></li></ul><p>These can be complicated or time consuming, yet none of them are guarantees.</p><p>We knew we could make it easier. We started building an internal tool for ourselves - a safer way to expose services running on our own infrastructure (with some service discovery and automation benefits as well...more on that later) and after talking to developers and security engineers that use Cloudflare, we realized there was benefit in opening it up to everyone.</p>
    <div>
      <h3>Cloudflare Warp</h3>
      <a href="#cloudflare-warp">
        
      </a>
    </div>
    <p>Cloudflare Warp is a security-conscious tool for exposing web applications without needing to expose the server they run on. With Cloudflare Warp, traffic to your application is run over a private, encrypted, virtual tunnel from the Cloudflare edge and traffic is only able to find and access your server if it routes through Cloudflare.</p><p>Only Cloudflare knows how to dial back to the application through the virtual tunnel created between the application and Cloudflare. Traffic can never hit your origin directly because it can never find it, your origin isn’t on the internet, it’s only there if you go through Cloudflare, via Warp. Instead, the client connects to the nearest Cloudflare data center, never directly to the application itself.</p><p>To start up Cloudflare Warp, it’s just one command. For example, if I want to run Cloudflare Warp to expose an application running locally on port 4000, I run:</p>
            <pre><code>cloudflare-warp --hostname example.com https://localhost:4000</code></pre>
            <p>Behind the scenes, Cloudflare Warp issues an <a href="https://www.cloudflare.com/application-services/products/ssl/">SSL certificate</a>, installs it on the application server and uses it to generate an encrypted, tunnelled connection back to Cloudflare. (The internal project name for Cloudflare Warp was E.T. because of this ‘phoning home’ behavior). Cloudflare Warp then sets up the corresponding DNS records for the application so that when a visitor next goes to your application, they will be connected through the virtual tunnel back to the application running locally at port 4000.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5RDYfy14A0lBORLEnBLr3t/e9fab4eb1eefde05bc224f72c4fa5d50/Screen-Shot-2017-09-27-at-7.54.05-PM.png" />
            
            </figure>
    <div>
      <h3>One Secure Gateway</h3>
      <a href="#one-secure-gateway">
        
      </a>
    </div>
    <p>With this setup, Cloudflare’s edge acts as a network shield in front of your infrastructure. At Cloudflare’s edge you can describe policies (allow 50 connections per second, only to these routes, only from these IP’s and only if they are authenticated) and because traffic through Warp can only reach your servers after it’s traveled through Cloudflare, you can drop unexpected traffic at the edge, only receive clean traffic on your server, and know that it’s been validated by Cloudflare. As you continue to set up applications connected to Cloudflare using Warp, you only have to configure this once with Cloudflare and it can apply holistically across all of your applications, protecting your entire infrastructure.</p>
    <div>
      <h3>Did we say service discovery?</h3>
      <a href="#did-we-say-service-discovery">
        
      </a>
    </div>
    <p>One of the side benefits of Cloudflare Warp is that immediately when you spin up the Cloudflare Warp agent, it registers DNS records for your application, making it an effective tool for service discovery.</p><p>We also allow you to tag tunnels the way you would label your kubernetes pods with key-value pairs like <code>release:stable</code> and <code>release:canary</code>. Soon you’ll also be able to configure routing based on these labels (send 90% of my traffic to the stable release and 10% to the canary release).</p>
    <div>
      <h3>What’s next?</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>The Cloudflare Warp beta is available today and we’re gradually adding people every day. Ready to get started? You can <a href="https://warp.cloudflare.com">jump in and read the docs</a> or <a href="https://cloudflare.com/products/cloudflare-warp">sign up for access to the beta</a>.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[Cloudflare Tunnel]]></category>
            <guid isPermaLink="false">1oFK3fbdqFnp5IZ5c9u0Pb</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Delivering Dot]]></title>
            <link>https://blog.cloudflare.com/f-root/</link>
            <pubDate>Sun, 10 Sep 2017 17:04:26 GMT</pubDate>
            <description><![CDATA[ Since March 30, 2017, Cloudflare has been providing DNS Anycast service as additional F-Root instances under contract with ISC (the F-Root operator).


F-Root is a single IPv4 address plus a single IPv6 address which both ISC and Cloudflare announce to the global Internet as a shared Anycast. This document reviews how F-Root has performed since that date in March 2017.


The DNS root servers are an important utility provided to all clients on the Internet for free - all F root instances includin ]]></description>
            <content:encoded><![CDATA[ <p>Since March 30, 2017, Cloudflare has been providing DNS Anycast service as additional F-Root instances under contract with ISC (the F-Root operator).</p><p>F-Root is a single IPv4 address plus a single IPv6 address which both ISC and Cloudflare announce to the global Internet as a shared Anycast. This document reviews how F-Root has performed since that date in March 2017.</p><p>The DNS root servers are an important utility provided to all clients on the Internet for free - all F root instances including those hosted on the Cloudflare network are a free service provided by both ISC and Cloudflare for public benefit. Because every online request begins with a DNS lookup, and every DNS lookup requires the retrieval of information stored on the DNS root servers, the DNS root servers plays an invaluable role to the functioning of the internet.</p><p>At Cloudflare, we were excited to work with ISC to bring greater security, speed and new software diversity to the root server system. First, the root servers, because of their crucial role, are often the subject of large scale volumetric DDoS attacks, which Cloudflare specializes in mitigating (Cloudflare is currently mitigating two concurrently ongoing DDoS attacks as we write this). Second, with a distributed network of data centers in well over 100 global cities, Cloudflare DNS is close to the end client which reduces <a href="https://www.cloudflare.com/learning/cdn/glossary/round-trip-time-rtt/">round trip times</a>. And lastly, the F-root nodes hosted by Cloudflare also run Cloudflare’s in-house DNS software, written in Go, which brings new code diversity to the root server system.</p><p>Throughout the deployment, ISC and Cloudflare paid close attention to telemetry measurements to ensure positive impact on the global DNS and root server system. Here is what both organizations observed when transit was enabled to Cloudflare DNS servers for F-Root.</p><p>Using <a href="https://atlas.ripe.net/">RIPE atlas probe measurements</a>, we can see an immediate performance benefit to the F-Root server, from 8.24 median RTT to 4.24 median RTT.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/13L4zY61yMlB1DhhOhsUZk/f0ad9663fd5784f54d843cf7f0f5dfd1/Screen-Shot-2017-03-30-at-5.03.20-PM.png" />
            
            </figure><p>F-Root actually became one of the fastest performing root servers:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/RcvHB8xBIzPqC6ImemPj2/170f12f49f51779083c0fa174d26efb6/Screen-Shot-2017-03-30-at-4.54.03-PM.png" />
            
            </figure><p>The biggest performance improvement was in the 90th percentile, or what are the top 10% of queries that received the slowest replies. This graph below shows the 90th percentile response time for any given RIPE atlas probe. Each probe is represented by two markers, a red X for before Cloudflare enabled transit and a blue X for after Cloudflare began announcing. You can see a drop in 90th percentile response times, the blue X’s are much lower than the red X’s.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3PtFnGp2WgTaocUCbcGDsT/b4bf46ac1949b419db1c6902045e4cde/image2017-4-4-14-11-9.png" />
            
            </figure><p>One of the optimizations that DNS resolvers do is preferring the faster root servers. As F-Root picked up speed, DNS resolvers also started sending it more traffic. Here you can see the aggregate number of queries received by each root letter per day, with an increase to F starting on March 30th.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3g8Idpfyj3eTGjHg6oICIo/037be9c789d68d5c5d9c199618b239bf/root-servers---stacked.png" />
            
            </figure><p>One large public DNS resolver shared with us their internal metrics, where you can also see a large shift of traffic to F-Root as F-Root increased in speed.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3KpIbZqEsaMnJReKarZRs3/bd29090c946e5f274fe9121f104816a8/resolver-traffictocfroot.png" />
            
            </figure><p>When one external DNS monitor published their <a href="https://blog.thousandeyes.com/2017-update-comparing-root-server-performance-globally/">Root Server measurement report</a> in June 2017, they mentioned F-Root’s increased performance. “9 more countries than in 2015 observed F-Root as the fastest — this is the biggest change across all of the root servers, so in this sense F-Root is “most improved.” F-Root has increasingly become the fastest root server in significant portions of Asia Pacific, Latin America and Eastern Europe.” They noted that “F-Root is now the fastest for roughly one quarter of the countries we tested from.”</p><p>We are happy to be working with ISC on delivering answers for F-Root and aim in the process to improve the speed and security of the F-Root server.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Anycast]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Optimization]]></category>
            <guid isPermaLink="false">6HZGHulKO43flc4dFeD4pv</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[How to use Cloudflare for Service Discovery]]></title>
            <link>https://blog.cloudflare.com/service-discovery/</link>
            <pubDate>Fri, 21 Jul 2017 08:01:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare runs 3,588 containers, making up 1,264 apps and services that all need to be able to find and discover each other in order to communicate -- a problem solved with service discovery. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare runs 3,588 containers, making up 1,264 apps and services that all need to be able to find and discover each other in order to communicate -- a problem solved with service discovery.</p><p>You can use Cloudflare for service discovery. By deploying microservices behind Cloudflare, microservices’ origins are masked, secured from DDoS and L7 exploits and authenticated, and service discovery is natively built in. Cloudflare is also cloud platform agnostic, which means that if you have distributed infrastructure deployed across cloud platforms, you still get a holistic view of your services and the ability to manage your security and authentication policies in one place, independent of where services are actually deployed.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/461lV3kUQYG0CMPbfHrqTF/d31991eaa6a3d3fed698bddebbb74710/Service-Discovery-Diagram.png" />
            
            </figure>
    <div>
      <h3>How it works</h3>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>Service locations and metadata are stored in a distributed KV store deployed in all 100+ Cloudflare edge locations (the service registry).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7IwFdoeuc1YrVKYY2rS39X/3351746e40fa6143fe8ab0d85259458a/ServiceRegistry.png" />
            
            </figure><p>Services register themselves to the service registry when they start up and deregister themselves when they spin down via a POST to Cloudflare’s API. Services provide data in the form of a DNS record, either by giving Cloudflare the address of the service in an A (IPv4) or AAAA (IPv6) record, or by providing more metadata like transport protocol and port in an SRV record.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5XIaHZx9pShYjAUc6emZcq/df2b9766e24cb0cd62404439c147ee2c/SRV-POST.png" />
            
            </figure><p>Services are also automatically registered and deregistered by health check monitors so only healthy nodes are sent traffic. Health checks are over HTTP and can be setup with custom configuration so that responses to the health check must return a specific response body and or response code otherwise the nodes are marked as unhealthy.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3NrIrLYeW04BqxhC7vXoBd/c7230db77ea6169e57cd9161d5cd410e/healthcheck.png" />
            
            </figure><p>Traffic is distributed evenly between redundant nodes using a load balancer. Clients of the service discovery query the load balancer directly over <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a>. The load balancer receives data from the service registry and returns the corresponding service address. If services are behind Cloudflare, the load balancer returns a Cloudflare IP address to route traffic to the service through Cloudflare’s L7 proxy.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4ZhYdGIkVKzDb6xlk9rYRR/baf664081d5ed6da310c41581efb1eb7/loadbalancer.png" />
            
            </figure><p>Traffic can also be sent to specific service nodes based on <a href="https://support.cloudflare.com/hc/en-us/articles/115000540888-Load-Balancing-Geographic-Regions">client geography</a>, so the data replication service in North America, for example, can talk to a specific North American version of the billing service, or European data can stay in Europe.</p><p>Clients query the service registry over DNS, and service location and metadata is packaged in A, AAAA, CNAME or SRV records. The benefit of this is that no additional client software needs to be installed on service nodes beyond a DNS client. Cloudflare works natively over DNS, meaning that if your services have a DNS client, there’s no extra software to install, manage, upgrade or patch.</p><p>While usually, TTL’s in DNS mean that if a service location changes or deregisters, clients may still get stale information, Cloudflare DNS keeps low TTL’s (it’s able to do this and maintain <a href="https://www.dnsperf.com/">fast performance</a> because of its distributed network) and if you are using Cloudflare as a proxy, the DNS answers always point back to Cloudflare even when the IP’s of services behind Cloudflare change, removing the effect of cache staleness.</p><p>If your services communicate over HTTP/S and websockets, you can additionally use Cloudflare as a L7 proxy for added security, authentication and optimization. Cloudflare <a href="https://www.cloudflare.com/learning/ddos/how-to-prevent-ddos-attacks/">prevents DDoS attacks</a> from hitting your infrastructure, masks your IP’s behind its network, and routes traffic through an <a href="https://www.cloudflare.com/argo/">optimized edge PoP to edge PoP route</a> to shave latency off the internet.</p><p>Once service &lt;--&gt; service traffic is going through Cloudflare, you can use TLS client certificates to <a href="/introducing-tls-client-auth/">authenticate traffic</a> between your services. Cloudflare can authenticate traffic at the edge by ensuring that the client certificate presented during the TLS handshake is signed by your root CA.</p>
    <div>
      <h3>Setting it up</h3>
      <a href="#setting-it-up">
        
      </a>
    </div>
    <p><a href="https://cloudflare.com/a/sign-up">Sign up for Cloudflare account</a></p><p>During the signup process, add all your initial services as DNS records in the DNS editor.</p><p>To finish sign up, move DNS to Cloudflare by logging into your <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrar</a> and changing your nameservers to the Cloudflare nameservers assigned to you when you signed up for Cloudflare. If you want traffic to those services to be proxied through Cloudflare, click on the cloud next to each DNS record to make it orange.</p><p>Run a script on each node so that:</p><p>On startup, the node sends a <a href="https://api.cloudflare.com/#dns-records-for-a-zone-create-dns-record">POST to the DNS record API</a> to register itself and <a href="https://api.cloudflare.com/#load-balancer-pools-modify-a-pool">PUT to load balancing API</a> to add itself to the origin pool.</p><p>On shutdown, the node sends a <a href="https://api.cloudflare.com/#dns-records-for-a-zone-delete-dns-record">DELETE to the DNS record API</a> to deregister itself and <a href="https://api.cloudflare.com/#load-balancer-pools-modify-a-pool">PUT to load balancing API</a> to remove itself to the origin pool.</p><p>These can be accomplished via <a href="https://cloud.google.com/compute/docs/startupscript">startup and shutdown scripts on Google Compute Engine</a> or <a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts">user data scripts</a> or <a href="http://docs.aws.amazon.com/autoscaling/latest/userguide/lifecycle-hooks.html">auto scaling lifecycle hooks</a> on AWS.</p><p>Registration:</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"type":"SRV","data":{"service":"_http","proto":"_tcp","name":"name","priority":1,"weight":1,"port":80,"target":"staging.badtortilla.com"},"ttl":1,"zone_name":"badtortilla.com","name":"_http._tcp.name.","content":"SRV 1 1 80 staging.badtortilla.com.","proxied":false,"proxiable":false,"priority":1}'
</code></pre>
            <p>De-Registration:</p>
            <pre><code>curl -X DELETE "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json"</code></pre>
            <p>Add or remove an origin from an origin pool (this should be a unique IP per node added to the pool):</p>
            <pre><code>curl -X PUT "https://api.cloudflare.com/client/v4/user/load_balancers/pools/17b5962d775c646f3f9725cbc7a53df4" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"description":"Primary data center - Provider XYZ","name":"primary-dc-1","enabled":true,"monitor":"f1aba936b94213e5b8dca0c0dbf1f9cc","origins":[{"name":"app-server-1","address":"1.2.3.4","enabled":true}],"notification_email":"someone@example.com"}'</code></pre>
            <p>Create a health check. You can do this <a href="https://api.cloudflare.com/#load-balancer-monitors-create-a-monitor">in the API</a> or in the <a href="https://www.cloudflare.com/a/traffic/">Cloudflare dashboard</a> (in the Load Balancer card).</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/organizations/01a7362d577a6c3019a474fd6f485823/load_balancers/monitors" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"type":"https","description":"Login page monitor","method":"GET","path":"/health","header":{"Host":["example.com"],"X-App-ID":["abc123"]},"timeout":3,"retries":0,"interval":90,"expected_body":"alive","expected_codes":"2xx"}'</code></pre>
            <p>Create an initial load balancer, either <a href="https://api.cloudflare.com/#load-balancers-create-a-load-balancer">through the API</a> or in the <a href="https://www.cloudflare.com/a/traffic/">Cloudflare dashboard</a>.</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/zones/699d98642c564d2e855e9661899b7252/load_balancers" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"description":"Load Balancer for www.example.com","name":"www.example.com","ttl":30,"fallback_pool":"17b5962d775c646f3f9725cbc7a53df4","default_pools":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196","00920f38ce07c2e2f4df50b1f61d4194"],"region_pools":{"WNAM":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196"],"ENAM":["00920f38ce07c2e2f4df50b1f61d4194"]},"pop_pools":{"LAX":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196"],"LHR":["abd90f38ced07c2e2f4df50b1f61d4194","f9138c5d07c2e2f4df57b1f61d4196"],"SJC":["00920f38ce07c2e2f4df50b1f61d4194"]},"proxied":true}'</code></pre>
            <p>(optional) Setup geographic routing rules. You can do this <a href="https://api.cloudflare.com/#load-balancers-modify-a-load-balancer">via API</a> or in the <a href="https://www.cloudflare.com/a/traffic/">Cloudflare dashboard</a>.</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/zones/699d98642c564d2e855e9661899b7252/load_balancers" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"description":"Load Balancer for www.example.com","name":"www.example.com","ttl":30,"fallback_pool":"17b5962d775c646f3f9725cbc7a53df4","default_pools":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196","00920f38ce07c2e2f4df50b1f61d4194"],"region_pools":{"WNAM":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196"],"ENAM":["00920f38ce07c2e2f4df50b1f61d4194"]},"pop_pools":{"LAX":["de90f38ced07c2e2f4df50b1f61d4194","9290f38c5d07c2e2f4df57b1f61d4196"],"LHR":["abd90f38ced07c2e2f4df50b1f61d4194","f9138c5d07c2e2f4df57b1f61d4196"],"SJC":["00920f38ce07c2e2f4df50b1f61d4194"]},"proxied":true}'</code></pre>
            <p>(optional) Setup Argo for faster PoP to PoP transit in the <a href="https://www.cloudflare.com/a/traffic/">traffic app of the Cloudflare dashboard</a>.</p><p>(optional) Setup rate limiting <a href="https://api.cloudflare.com/#rate-limits-for-a-zone-create-a-ratelimit">via API</a> or <a href="https://www.cloudflare.com/a/firewall/">in the dashboard</a></p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/rate_limits" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","disabled":false,"description":"Prevent multiple login failures to mitigate brute force attacks","match":{"request":{"methods":["GET","POST"],"schemes":["HTTP","HTTPS"],"url":"*.example.org/path*"},"response":{"status":[401,403],"origin_traffic":true}},"bypass":[{"name":"url","value":"api.example.com/*"}],"threshold":60,"period":900,"action":{"mode":"simulate","timeout":86400,"response":{"content_type":"text/xml","body":"&lt;error&gt;This request has been rate-limited.&lt;/error&gt;"}}}'</code></pre>
            <p>(optional) Setup TLS client authentication. (Enterprise only) Send your account manager your root CA certificate and <a href="https://support.cloudflare.com/hc/en-us/articles/115000088491-Cloudflare-TLS-Client-Auth">which options you would like enabled</a>.</p> ]]></content:encoded>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[IPv4]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[API]]></category>
            <category><![CDATA[Programming]]></category>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">6M0qCxRf8vx0pS0XWu7sMU</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Less Is More - Why The IPv6 Switch Is Missing]]></title>
            <link>https://blog.cloudflare.com/always-on-ipv6/</link>
            <pubDate>Thu, 25 May 2017 17:30:00 GMT</pubDate>
            <description><![CDATA[ At Cloudflare we believe in being good to the Internet and good to our customers. By moving on from the legacy world of IPv4-only to the modern-day world where IPv4 and IPv6 are treated equally, we believe we are doing exactly that. ]]></description>
            <content:encoded><![CDATA[ <p>At Cloudflare we believe in being good to the Internet and good to our customers. By moving on from the legacy world of IPv4-only to the modern-day world where IPv4 and IPv6 are treated equally, we believe we are doing exactly that.</p><p><i>"No matter what happens in life, be good to people. Being good to people is a wonderful legacy to leave behind."</i> - Taylor Swift (whose website has been IPv6 enabled for many many years)</p><p>Starting today with free domains, IPv6 is no longer something you can toggle on and off, it’s always just on.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6UqOfN1xF7mt0PpJ1BbVCy/2d645cfd651e7722c6c0790f039a0aa0/before-after-ipv6.png" />
            
            </figure>
    <div>
      <h3>How we got here</h3>
      <a href="#how-we-got-here">
        
      </a>
    </div>
    <p>Cloudflare has always been a gateway for visitors on IPv6 connections to access sites and applications hosted on legacy IPv4-only infrastructure. Connections to Cloudflare are terminated on either IP version and then proxied to the backend over whichever IP version the backend infrastructure can accept.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7w5o9faqmZFjQSgXnYIVIP/49472b8b1f3eebc0682f3d7fd67eb4fb/ipv4-ipv6-translation-gateway.png" />
            
            </figure><p>That means that a v6-only mobile phone (looking at you, T-Mobile users) can establish a clean path to any site or mobile app behind Cloudflare instead of doing an expensive 464XLAT protocol translation as part of the connection (shaving milliseconds and conserving very precious battery life).</p><p>That IPv6 gateway is set by a simple toggle that for a while now has been default-on. And to make up for the time lost before the toggle was default on, in August 2016 we went back retroactively and enabled IPv6 for those millions of domains that joined before IPv6 was the default. Over those next few months, we <a href="/98-percent-ipv6/">enabled IPv6 for nearly four million domains</a> –– you can see Cloudflare’s <a href="https://www.vyncke.org/ipv6status/plotsite.php?metric=w&amp;global=legacy&amp;pct=y">dent in the IPv6 universe</a> below –– and by the time we were done, 98.1% of all of our domains had IPv6 connectivity.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1yqnG0ahmUyEnfeUjLrqOi/083db64874e3322e8080e0c44183722e/plotsite.png" />
            
            </figure><p>As an interim step, we added an extra feature –– when you turn off IPv6 in our dashboard, we remind you just how archaic we think that is.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3oXyg84nb4l00KrDpmbrez/e7828711f44a4cf0fe78d16277d912be/modal.png" />
            
            </figure><p>With close to 100% IPv6 enablement, it no longer makes sense to offer an IPv6 toggle. Instead, Cloudflare is offering IPv6 always on, with no off-switch. We’re starting with free domains, and over time we’ll change the toggle on the rest of Cloudflare paid-plan domains.</p>
    <div>
      <h3>The Future: How Cloudflare and OpenDNS are working together to make IPv6 even faster and more globally deployed</h3>
      <a href="#the-future-how-cloudflare-and-opendns-are-working-together-to-make-ipv6-even-faster-and-more-globally-deployed">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6NjiPMVo4MsctGZW2P7RvI/b9dc657c93e35a5f7955b1378f1da61c/logos.png" />
            
            </figure><p>In November <a href="/98-percent-ipv6/">we published stats about the IPv6 usage</a> we see on the Cloudflare network in an attempt to answer who and what is pushing IPv6. The top operating systems by percent IPv6 traffic are iOS, ChromeOS, and MacOS respectively. These operating systems push significantly more IPv6 traffic than their peers because they use a routing choice algorithm called Happy Eyeballs. Happy Eyeballs opportunistically chooses IPv6 when available by doing two <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> lookups –– one for an IPv6 address (this IPv6 address is stored in the DNS AAAA record - pronounced quad-A) and then one for the IPv4 address (stored in the DNS A record). Both DNS queries are flying over the Internet at the same time and the client chooses the address that comes back first. The client even gives IPv6 a few milliseconds head start (iOS and MacOS give IPv6 lookups a 25ms head start for example) so that IPv6 may be chosen more often. This works and has fueled some of IPv6’s growth. But it has fallen short of the goal of a 100% IPv6 world.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/27vp45uqt2lIMVqjzndv86/f6136dbc91d329894a131433df044bfb/A-AAAA.png" />
            
            </figure><p>While there are perfectly good historical reasons why IPv6 and IPv4 addresses are stored in separate DNS types, today clients are IP version agnostic and it no longer makes sense for it to require two separate round trips to learn what addresses are available to fetch a resource from.</p><p>Alongside OpenDNS, we are testing a new idea - what if you could ask for all the addresses in just one DNS query?</p><p>With OpenDNS, we are prototyping and testing just that –– a new DNS metatype that returns all available addresses in one DNS answer –– A records and AAAA records in one response. (A metatype is a query type in DNS that end users can’t add into their DNS zone file, it’s assembled dynamically by the authoritative nameserver.)</p><p>What this means is that in the future if a client like an iPhone wants to access a mobile app that uses Cloudflare DNS or using another DNS provider that supports the spec, the iPhone DNS client would only need to do one DNS lookup to find where the app’s API server is located, cutting the number of necessary round trips in half.</p><p>This reduces the amount of bandwidth on the DNS system, and pre-populates global DNS caches with IPv6 addresses, making IPv6 lookups faster in the future, with the side benefit that Happy Eyeballs clients prefer IPv6 when they can get the address quickly, which increases the amount of IPv6 traffic that flows through the Internet.</p><p>We have the metaquery working in code with the reserved TYPE65535 querytype. You can ask a Cloudflare nameserver for TYPE65535 of any domain on Cloudflare and get back all available addresses for that name.</p>
            <pre><code>$ dig cloudflare.com @ns1.cloudflare.com -t TYPE65535 +short
198.41.215.162
198.41.214.162
2400:cb00:2048:1::c629:d6a2
2400:cb00:2048:1::c629:d7a2
$</code></pre>
            <p>Did we mention Taylor Swift earlier?</p>
            <pre><code>$ dig taylorswift.com @ns1.cloudflare.com -t TYPE65535 +short
104.16.193.61
104.16.194.61
104.16.191.61
104.16.192.61
104.16.195.61
2400:cb00:2048:1::6810:c33d
2400:cb00:2048:1::6810:c13d
2400:cb00:2048:1::6810:bf3d
2400:cb00:2048:1::6810:c23d
2400:cb00:2048:1::6810:c03d
$</code></pre>
            <p>We believe in proving concepts in code and through the <a href="https://ietf.org/">IETF</a> standards process. We’re currently working on an experiment with OpenDNS and will translate our learnings to an Internet Draft we will submit to the IETF to become an RFC. We’re sure this is just the beginning to faster, better deployed IPv6.</p> ]]></content:encoded>
            <category><![CDATA[IPv4]]></category>
            <category><![CDATA[IPv6]]></category>
            <category><![CDATA[OpenDNS]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Reliability]]></category>
            <guid isPermaLink="false">6GuglMyL4s8AnqoL9NOliF</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Meet The Brand New DNS Analytics Dashboard]]></title>
            <link>https://blog.cloudflare.com/dns-analytics/</link>
            <pubDate>Fri, 05 May 2017 14:55:53 GMT</pubDate>
            <description><![CDATA[ Have you noticed something new in your Cloudflare analytics dashboard this morning? You can now see detailed DNS analytics for your domains on Cloudflare. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Have you noticed something new in your Cloudflare analytics dashboard this morning? You can now see detailed DNS analytics for your domains on Cloudflare.</p><p>If you want to skip to the punch and start exploring, go check it out <a href="https://www.cloudflare.com/a/analytics/">here</a>. Otherwise, hop on the DNS magic school bus - and let us show you all the neat stats in your now-available DNS analytics.</p>
    <div>
      <h3>DNS analytics dashboard: What does it know? Does it know things? Let’s find out.</h3>
      <a href="#dns-analytics-dashboard-what-does-it-know-does-it-know-things-lets-find-out">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2gayLtboo439PBfUSqfaYG/51de684933ca5691d8a11fd1e1660800/dns-analytics-cloudflare-queries-by-response-code.png" />
            
            </figure><p>At the top of the DNS analytics dashboard you can see your DNS traffic health. This “Queries by Response Codes” graph breaks down queries by what response code Cloudflare DNS answered to the visitor. Like HTTP response codes, DNS response codes give an indication of what is happening behind the scenes. Mostly you will just see NOERROR, the HTTP 200 of DNS response codes, and NXDOMAIN, the HTTP 404 of DNS response codes. NXDOMAIN is particularly interesting - what are people querying for that doesn’t exist?</p><p>If you are an enterprise customer and you want to know what all the NXDOMAIN queries are, just scroll down a little bit where we show you the top queries for your domain and top queries for your domain for DNS records that don’t exist (aka top NXDOMAIN queries).</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1dYCnr6MPzKtLXwRbG6CWw/c691683380592ebd2a46ec72930cc955/dns-analytics-cloudflare-top-n.png" />
            
            </figure><p>If you are curious then where all of these NXDOMAIN queries are coming from, all Pro, Business and Enterprise plan customers can scroll down a little bit further to the geography section where we show you the breakdown of where your queries come from and also where your queries returning NXDOMAIN come from.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/79Or1yswL8gEzb5uJdF6OS/1f68945573194417efbaf93a86aeac5f/dns-analytics-cloudflare-map-nxdomain.png" />
            
            </figure><p>If you are an Enterprise customer and want to dive in deeper just for one or a few names, you can filter down the entire dashboard by hostname. You can even filter the dashboard by names that don’t exist in your DNS records so you can explore traffic for misconfigured records resolvers are looking for that don’t exist.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2a1UfGtCWo3rjgDYLdJKu7/22947f0dc005b252b9dad2ed43c3661c/filter.png" />
            
            </figure><p>Lastly, back up at the top, business and enterprise customers can see a breakdown of traffic by record type. If your domain has DNSSEC enabled, you’ll even see queries for DNSKEY records, meaning DNS resolvers that are DNSSEC-aware are asking Cloudflare for your DNSSEC keys to verify DNS records are untampered with.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/D1lhrXdCiBMGUV85ipFos/74bede452777f1d44ab03dd287ef1268/dns-analytics-cloudflare-qtype.png" />
            
            </figure><p>If you like what you’re seeing and wish you could use the data to piece together your own dashboards? You can. We’ve developed a <a href="/grafana-plugin/">Grafana plugin</a> you can use to build your own dashboards and an API you can use to create your own tools. Plus the API gives you some added neat information like the distribution of queries over IPv6 vs IPv4 and UDP vs TCP, as well as the distribution of answers by query and response size. (DNS people rejoice -- now you can finally see if there’s a difference in query size between IPv6 and IPv4, and what is the breaking point where Cloudflare DNS answers switch from UDP to TCP.)</p>
    <div>
      <h3>What about DNS Firewall and CNAME setup?</h3>
      <a href="#what-about-dns-firewall-and-cname-setup">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/dns/dns-firewall/">DNS Firewall</a> customers, you’re next! Stay tuned! We have a really cool dashboard coming up for you that shows latency and errors on a per origin basis. We can’t wait for you to see it. In the meantime, you can see all your data through the <a href="/grafana-plugin/">Grafana plugin</a> and <a href="https://api.cloudflare.com/#virtual-dns-analytics-users--properties">API</a>.</p><p>If you use Cloudflare but don’t see traffic in the DNS analytics dashboard, it’s because you use Cloudflare through a CNAME setup where your DNS is hosted outside of Cloudflare. Your DNS isn’t on us, so we can’t give you cool DNS analytics. If you’re interested in moving your <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> over to Cloudflare to try out DNS analytics and the newly announced Cloudflare <a href="https://www.cloudflare.com/load-balancing/">Load Balancing</a>, <a href="https://support.cloudflare.com/hc/en-us/requests/new">give our team a holler</a>, they will swap your setup for you.</p>
    <div>
      <h3>Let’s get started!</h3>
      <a href="#lets-get-started">
        
      </a>
    </div>
    <p>We are excited for you to get started digging into your DNS traffic. Let us know what you think by sending your feedback to <a href="#">dns-analytics-feedback@cloudflare.com</a>. Cloudflare DNS team eagerly awaits your feedback :). Now go on vacation, we’ll look after your DNS!</p> ]]></content:encoded>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Analytics]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Dashboard]]></category>
            <guid isPermaLink="false">7dqXy5JWaKXyNpZ95vkWAm</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing TLS with Client Authentication]]></title>
            <link>https://blog.cloudflare.com/introducing-tls-client-auth/</link>
            <pubDate>Mon, 01 May 2017 15:58:01 GMT</pubDate>
            <description><![CDATA[ In a traditional TLS handshake, the client authenticates the server, and the server doesn’t know too much about the client. However, starting now, Cloudflare is offering enterprise customers TLS with client authentication.
 ]]></description>
            <content:encoded><![CDATA[ <p></p><p>In a traditional TLS handshake, the client authenticates the server, and the server doesn’t know too much about the client. However, starting now, Cloudflare is offering enterprise customers TLS with client authentication, meaning that the server additionally authenticates that the client connecting to it is authorized to connect.</p><p>TLS Client Authentication is useful in cases where a server is keeping track of hundreds of thousands or millions of clients, as in IoT, or in a mobile app with millions of installs exchanging secure information. For example, an IoT company can issue a unique client certificate per device, and then limit connections to their IoT infrastructure to only their devices by blocking connections where the client doesn’t present a certificate signed by the company’s certificate authority.</p><p>Or in the case of a mobile banking app, where the bank wants to ensure customers’ secure financial data doesn’t get stolen by bots spoofing their mobile app, they can issue a unique certificate to every app install and in the TLS handshake validate requests are coming from their mobile app. Client authentication is also useful for VPNs, <a href="https://www.cloudflare.com/learning/network-layer/enterprise-networking/">enterprise networks</a> or staging sites, where corporations and developers need to lock down connections to only laptops and phones owned by their employees and teammates.</p><p>You may be thinking - don’t we have API keys for that? But client certificates offer a layer of security that API keys cannot provide. If an API key gets compromised mid-connection, it can be reused to fire its own valid, trusted requests to the backend infrastructure. However, the private key of the client certificate is used to create a digital signature in every TLS connection, and so even if the certificate is sniffed mid-connection, new requests can’t be instantiated with it.</p>
    <div>
      <h3>Handshakes With TLS Client Auth</h3>
      <a href="#handshakes-with-tls-client-auth">
        
      </a>
    </div>
    <p>In a handshake with TLS Client Authentication, the server expects the client to present a certificate, and sends the client a client certificate request with the server hello. Then in the key exchange in the next trip to the server, the client also sends its client certificate. The client certificate is then used to sign the TLS handshake and the digital signature is sent to the server for verification. You can see the whole handshake here:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1j5hvPyQ2Apt0THlts9xh1/c82c747ea4e81f92d567a3047e1ac9c9/illustration-tls-ssl-client-auth.png" />
            
            </figure>
    <div>
      <h3>TLS Client Authentication On The Edge</h3>
      <a href="#tls-client-authentication-on-the-edge">
        
      </a>
    </div>
    <p>TLS Client Authentication can be CPU intensive to implement - it’s an additional cryptographic operation on every request. And if there’s a flood of invalid traffic, each request in that traffic flood kicks off a verification step. Companies can move the TLS client authentication to Cloudflare’s edge to offload the expensive verification.</p><p>If we are performing TLS Client Authentication for a company, the company sends us the root certificate(s) we should validate the client certificates against. Then the company can set TLS Client Authentication to one of two modes: enforce mode returns a 403 and optional custom JSON or HTML when the client certificate is invalid, and report mode forwards all requests to the origin, even if the certificate is invalid. Cloudflare will send a header including the status of the certificate (none, valid, invalid) and the certificate Subject Key Identifier (SKI) to the origin. For companies that use the client certificate for identification, Cloudflare can also forward any field of the client certificate as a custom header.</p>
    <div>
      <h3>Get Started</h3>
      <a href="#get-started">
        
      </a>
    </div>
    <p>To use TLS client authentication, you must first set up PKI (Public Key Infrastructure) infrastructure to issue client certificates. If you are interested in running TLS client authentication but don’t have PKI infrastructure set up to issue client certificates, we have <a href="https://github.com/cloudflare/cfssl">open sourced our PKI</a> for you to use. Here is great documentation by our friends at CoreOS on <a href="https://coreos.com/os/docs/latest/generate-self-signed-certificates.html">how to use cfssl to issue client certificates</a>. If you prefer not to run your own CA and rely on an established certificate authority, we have partnered with a few certificate authorities who can provide the client certificates for you.</p><p>If you are an enterprise customer and would like to get started using TLS client authentication with Cloudflare, reach out to your account team and we’ll help you get setup. If you are not yet an enterprise customer but are interested in trying out TLS client authentication, <a href="https://www.cloudflare.com/plans/enterprise/contact/">get in touch</a>.</p><p>Within the next year, we’ll be adding TLS client authentication support for all Cloudflare plans. After all, using encryption to make the web more trusted is what we’re about. Stay tuned.</p><p><i>UPDATE - 1/22/19: This functionality has changed and is being </i><a href="https://developers.cloudflare.com/access/service-auth/mtls/"><i>incorporated into Cloudflare Access</i></a><i>. A beta is currently underway. Apologies for any confusion.</i></p> ]]></content:encoded>
            <category><![CDATA[IoT]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[API]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">4VeQz3Iq2qMrx6Te9j6Ccd</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Cloudflare Orbit: A Private Network for IoT Devices]]></title>
            <link>https://blog.cloudflare.com/orbit/</link>
            <pubDate>Thu, 27 Apr 2017 13:00:01 GMT</pubDate>
            <description><![CDATA[ In October, we wrote about a 1.75M rps DDoS attack we mitigated on our network, launched by 52,467 unique IP’s, mostly hacked CCTV cameras. We continued to see more IoT devices in DDoS attacks. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>In October, we <a href="/say-cheese-a-snapshot-of-the-massive-ddos-attacks-coming-from-iot-cameras/">wrote about a 1.75M rps DDoS attack</a> we mitigated on our network, launched by 52,467 unique IP’s, mostly hacked CCTV cameras.</p><p>We continued to see more IoT devices in DDoS attacks, and so we started to put together a security solution to protect the devices from becoming part of the botnet in the first place. Today we’re announcing it: Cloudflare Orbit.</p>
    <div>
      <h2>PC-era security doesn’t work in IoT-era computing</h2>
      <a href="#pc-era-security-doesnt-work-in-iot-era-computing">
        
      </a>
    </div>
    <p>As we talked to IoT companies, over and over again we heard the same thing. In the consumer electronics space, IoT manufacturers were telling us that they were shipping patches to their devices, but their end users didn’t always download and install them. (Reserve your judgment, how many times have you pressed ignore when your phone asked you to update its operating system?) In the industrial control, medical and automotive spaces, where devices are used in life-critical functions, we heard a different story. Even if someone wanted to apply a patch, it just wasn’t that easy. For example, even if the manager of a nuclear power plant wants to update software on their thermostats, shutting down operations long enough to do that means the update has to be scheduled.</p><p>This is if the device can be patched at all - most devices are patchable, but up to a point. When <a href="https://www.wired.com/2015/07/hackers-remotely-kill-jeep-highway/">Jeep was shown to be vulnerable</a> to <a href="https://www.cloudflare.com/learning/security/what-is-remote-code-execution/">remote code execution</a>, Chrysler had to <a href="https://www.wired.com/2015/07/jeep-hack-chrysler-recalls-1-4m-vehicles-bug-fix/">recall 1.4 million</a> vehicles.</p><p>This model where the end user is responsible for the security of the overall device is a relic of the PC age, where users knew and understood that their computers could have vulnerabilities, and as their software vendors released patches ––on so called “Patch Tuesdays,” for example––users knew to go and download them.</p><p>PC security does not work for IoT. Consumers do not share that similar understanding that they need to update their toasters, lightbulbs and cars, because they’ve never needed to in the past. And since we will never write perfect code, we <a href="http://www.economist.com/news/science-and-technology/21720268-consequences-pile-up-things-are-starting-improve-computer-security">need a better way of securing devices</a> without waiting for users to do it for us.</p>
    <div>
      <h2>Introducing Orbit</h2>
      <a href="#introducing-orbit">
        
      </a>
    </div>
    <p>Thinking about this challenge, we were reminded of when the ShellShock vulnerability was discovered, Cloudflare was able to <a href="/shellshock-protection-enabled-for-all-customers/">automatically keep the requests</a> that would trigger the vulnerability from reaching our customers. With Orbit, Cloudflare can do the same thing, only for devices. For example, when Jeep was shown to be vulnerable, instead of recalling 1.4 million vehicles, Fiat Chrysler could have patched the bug in all the vehicles with just a simple rule in Cloudflare's firewall restricting access to the vulnerable DBUS service listening on port 6667 of every Jeep.</p><p>Orbit sits one layer before the device and provides a shield of security, so even if the device is running past its operating system’s expiration date, Cloudflare protects it from exploits. And while devices may be seldom patched, the Cloudflare security team is shipping code every day, adding new firewall rules to Cloudflare’s edge. Think of it like changing IoT to I*oT — devices can still access the Internet, but only after passing through Cloudflare where malicious requests can be filtered.</p><p>For the last year, Cloudflare has been working with a number of IoT vendors to develop Orbit. Already more than 120 million IoT devices are safer behind Cloudflare’s network. <a href="https://lockitron.com/">Lockitron</a> is one of the IoT companies using Cloudflare. “Keeping our products and customers secure is our primary concern,” says Paul Gerhardt, co-founder of Lockitron. “Cloudflare provides an extra layer of security that allows us to keep our devices continually updated and ahead of any vulnerabilities.”</p><p>Instead of writing and shipping a patch, IoT companies can write logic on Cloudflare’s edge, and write their own firewall rules to run on Cloudflare, and it updates the Cloudflare Orbit layer immediately, for all of their devices, without their users ever being so much as nudged to install something.</p><p>Plus, with requests going through Cloudflare, Cloudflare can compress transmitted data and speed up traffic, meaning less time is spent waiting on open connections and more time left in battery.</p>
    <div>
      <h2>An Extra Layer of Authentication</h2>
      <a href="#an-extra-layer-of-authentication">
        
      </a>
    </div>
    <p>A common challenge we heard from IoT device manufacturers was how to authenticate devices and know which connecting clients were authorized company devices, and which were bots only pretending to be. Starting today, Cloudflare now offers Enterprise domains <a href="https://support.cloudflare.com/hc/en-us/articles/115000088491">TLS Client Authentication</a>, a TLS handshake where the client authenticates the server’s certificate (as with any TLS handshake) and also the client has a certificate that the server authenticates.</p><p>Some IoT vendors already implement their own Client Authentication, but do so at the same origin servers that handle the rest of their IoT infrastructure. Not only is this computationally expensive, but any invalid traffic flood causes a burden on the whole server.</p><p>With Client Authentication on Cloudflare, Cloudflare’s edge handles the load of the TLS handshakes, validating the device client certificates and only sending the IoT infrastructure traffic from authorized devices.</p>
    <div>
      <h2>What People Are Saying</h2>
      <a href="#what-people-are-saying">
        
      </a>
    </div>
    <p>“This approach of adding security to the network is extremely important for industrial manufacturers. Being able to patch vulnerabilities from the network rather than at the device level is a major shift in the way we secure IoT devices, and one that is completely necessary.” — Sam Cece, CEO of <a href="https://www.swiftsensors.com/">Swift Sensors</a>, an industrial IoT company.</p><p>“Car controllers are IoT devices. Karamba Security hardens these devices and prevents cyberattacks with zero false positives to maintain driver and passenger safety. We view Cloudflare’s Orbit as a complementary solution that enables secure connectivity between the cars’ hardened controllers and the car company’s data center for trusted, over-the-air updates.” — Ami Dotan, CEO of <a href="https://www.karambasecurity.com/">Karamba Security</a>, which is building secure platforms for smart automobiles.</p><p>“We are at the beginning of a new era in which a vast number of devices will be connecting to the Internet and security will play a critical role in the successful roll-out and adoption of IoT devices. Cloudflare’s Orbit adds another layer of defense that compliments other security measures such as strong hardware-based device security and helps ensure a safer Internet of Things." — Quinn Li, VP and global head of <a href="https://www.qualcommventures.com/">Qualcomm Ventures</a>, the investment arm of Qualcomm Incorporated, the leading supplier of components for IoT devices.</p><p>"IoT devices create a distinct security challenge both because of the inability of most end users to update their software, as well as the cost that manufacturers bear if they release an update that bricks devices. This is even worse for legacy devices, many of which are effectively unpatchable. Cloudflare's Orbit provides a unique approach to help with these challenges, by deploying a defensive layer in the network where security updates can be safely made without end-user intervention or on-device changes." — Michael Freedman, professor of computer science at Princeton University and CTO of <a href="http://www.timescale.com/">Timescale</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/68bFX1ixVLjDCSQwoRW5dO/2fcaafdeb8db4255917dd64712186c4f/IoT-Illustration-infographic.jpg" />
            
            </figure>
    <div>
      <h2>Get Started</h2>
      <a href="#get-started">
        
      </a>
    </div>
    <p>Orbit is available now to all IoT device companies. To learn more or get started, <a href="https://www.cloudflare.com/orbit/">visit the site</a>, or <a href="https://www.cloudflare.com/plans/enterprise/contact/">get in touch</a>. We’re excited to hear from you.</p> ]]></content:encoded>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[IoT]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Attacks]]></category>
            <guid isPermaLink="false">1Gta8X8Wz1YL5o2UAicwmv</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Changing Internet Standards to Build A Secure Internet]]></title>
            <link>https://blog.cloudflare.com/dk-dnssec/</link>
            <pubDate>Wed, 12 Apr 2017 15:06:07 GMT</pubDate>
            <description><![CDATA[ We’ve been working with registrars and registries in the IETF on making DNSSEC easier for domain owners, and over the next two weeks we’ll be starting out by enabling DNSSEC automatically for .dk domains. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We’ve been working with <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrars</a> and registries in the IETF on making DNSSEC easier for domain owners, and over the next two weeks we’ll be starting out by enabling DNSSEC automatically for .dk domains.</p>
    <div>
      <h3>DNSSEC: A Primer</h3>
      <a href="#dnssec-a-primer">
        
      </a>
    </div>
    <p>Before we get into the details of how we've improved the DNSSEC experience, we should explain why DNSSEC is important and the function it plays in keeping the web safe.</p><p>DNSSEC’s role is to verify the integrity of DNS answers. When DNS was written in the early 1980’s, it was only a few researchers and academics on the internet. They all knew and trusted each other, and couldn’t imagine a world in which someone malicious would try to operate online. As a result, DNS relies on trust to operate. When a client asks for the address of a hostname like <a href="http://www.cloudflare.com">www.cloudflare.com</a>, without DNSSEC it will trust basically any server that returns the response, even if it wasn’t the same server it originally asked. With DNSSEC, every DNS answer is signed so clients can verify answers haven’t been manipulated over transit.</p>
    <div>
      <h3>The Trouble With DNSSEC</h3>
      <a href="#the-trouble-with-dnssec">
        
      </a>
    </div>
    <p>If DNSSEC is so important, why do so few domains support it? First, for a domain to have the opportunity to enable DNSSEC, not only do its DNS provider, its registrar and its registry all have to support DNSSEC, all three of those parties have to also support the same encryption algorithms.</p><p>For domains that do have the ability to enable DNSSEC, DNSSEC is just not easy enough -- domain owners need to first enable DNSSEC with their DNS provider, and then copy and paste some values (called a DS record) from their DNS provider’s dashboard to their registrar’s dashboard, making sure not to miss any characters when copying and pasting, because that would cut off traffic to their whole domain. What we need here is automation.</p>
    <div>
      <h3>Changing an outdated model</h3>
      <a href="#changing-an-outdated-model">
        
      </a>
    </div>
    <p>It's been Cloudflare's long-standing statement that as the DNS operator, we would like to update the DS automatically for a user, but <a href="/updating-the-dns-registration-model-to-keep-pace-with-todays-internet/">DNS operates on a legacy model</a> where the registrar is able to talk directly to the registry, but the DNS operator (Cloudflare) is left completely out of that model.</p><p>Here at Cloudflare, we’re determined it’s time to change that outdated system. We have <a href="https://tools.ietf.org/html/draft-ietf-regext-dnsoperator-to-rrr-protocol">published an Internet Draft</a> to propose a new model for how DNS operators, registries and registrars could operate and communicate to make specific user-authorized changes to domains. It’s important to point out that the IETF works on the principle of rough consensus and running code. Cloudflare, in conjunction with the .dk registry, has produced running code, and we’re very close to getting consensus. That Internet Draft is now making its way through the Standards Track within the IETF and on it’s way to becoming an fully-fledged RFC.</p>
    <div>
      <h3>How .dk and Cloudflare are working together</h3>
      <a href="#how-dk-and-cloudflare-are-working-together">
        
      </a>
    </div>
    <p>The ccTLD operator for Denmark (ie. the .dk domains) has also realized that the model is outdated. They provide their users (and the operators of nameservers associated with .dk domains) a programmatic way of installing and updating DS records. This is exactly what operators like Cloudflare need.</p><p>Cloudflare has been testing their API and is now ready to kick off an automated, clean, safe and reliable way of updating DS records for our .dk customers. Over the next two weeks we will enable DNSSEC for .dk domains that have started to in the past, but haven’t finished the process.</p><p>Of course, for Cloudflare, there’s no surprise that Denmark is the home to forward thinkers like this!</p>
    <div>
      <h3>Onwards!</h3>
      <a href="#onwards">
        
      </a>
    </div>
    <p>If you have a .dk domain on Cloudflare, you really don’t need to do anything except flip the switch enabling DNSSEC within the Cloudflare login console before we do the migration on Tuesday, April 18, 2017.</p><p>We are excited to work with the .dk registry on this first step to making DNSSEC automatic, and are looking for other TLD’s looking to make DNSSEC easy to use.</p> ]]></content:encoded>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[IETF]]></category>
            <guid isPermaLink="false">5laIvCdz888qNvdBTd86rl</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[An AMP validator you can cURL]]></title>
            <link>https://blog.cloudflare.com/amp-validator-api/</link>
            <pubDate>Wed, 08 Mar 2017 14:01:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare has been a long time supporter of AMP, an open-source markup language 1.5 billion web pages are using to accelerate their mobile web performance. Cloudflare runs Ampersand. ]]></description>
            <content:encoded><![CDATA[ <p>NOTE: <i>This feature is no longer available. Please see the </i><a href="/announcing-amp-real-url/"><i>AMP Real URL post</i></a><i>.</i> </p><hr /><p>Cloudflare has been a long time supporter of <a href="https://www.ampproject.org/">AMP</a>, an open-source markup language 1.5 billion web pages are using to accelerate their mobile web performance. Cloudflare runs <a href="https://www.cloudflare.com/website-optimization/ampersand/">Ampersand</a>, the only alternative to Google’s AMP cache, and earlier this year we launched <a href="/accelerated-mobile/">Accelerated Mobile Links</a>, a way for sites on Cloudflare to open external links on their site in AMP format, as well as <a href="https://www.cloudflare.com/website-optimization/firebolt/">Firebolt</a>, leveraging AMP to speed up ad performance.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3AA1JRxaaIaO9Ld8I39pXi/d415dd595275e382469b7503be68790d/icon_mobile-interface-1.png" />
            
            </figure><p>One of the biggest challenges developers face in converting their web pages to AMP is testing their AMP pages for valid AMP syntax before deploying. It's not enough to make the templates work at dev time, you also need to validate individual pages before they’re published.</p><p>Imagine, for example, a publishing company where content creators who are unfamiliar with AMP are modifying pages. Because the AMP markup language is so strict, one person adding an interactive element to a page can all of a sudden break the AMP formatting and stop the page from validating.</p><p>We wanted to make it as easy as possible to move webpages and sites to AMP so we built an AMP linter API for developers to check that their AMP pages are formatted correctly, even before they are deployed.</p><p>To check if a webpage’s AMP markup is correct, just send the AMP page to the endpoint <code>URL Removed</code> like this:</p>
            <pre><code>curl URL REMOVED/amp.usatoday.com/story/82055560/
{
  "source": "http://amp.usatoday.com/story/82055560/", 
  "valid": true, 
  "version": "1488238516283"
}</code></pre>
            <p>The API has options to send just the markup content, or point the linter to the live site. To send a file, add the <code>--data-binary</code> flag:</p>
            <pre><code>curl -X POST --data-binary @amp_page.html -H 'Content-Type: text/html; charset=UTF-8' URL REMOVED</code></pre>
            <p>If you send an AMP page with invalid AMP syntax, the message returned will tell you exactly what breaks your AMP page, and will point you to the specific place in the AMP reference where you can see the implementation guide for the broken element.</p>
            <pre><code>curl -X POST --data-binary @invalid_amp.html -H 'Content-Type: text/html; charset=UTF-8' URL REMOVED
{
  "errors": [
    {
      "code": "MANDATORY_TAG_MISSING", 
      "col": 7, 
      "error": "The mandatory tag 'link rel=canonical' is missing or incorrect.", 
      "help": "https://www.ampproject.org/docs/reference/spec.html#required-markup", 
      "line": 13
    }
  ], 
  "source": "POST", 
  "valid": false, 
  "version": "1485227592804"
}

</code></pre>
            <p>Here’s a reference in python, and if you want to send html directly instead of a live webpage, replace line two with <code>r = requests.post([URL Removed], data=html)</code></p>
            <pre><code>import requests

u = 'www.bbc.co.uk/news/amp/39192025'
r = requests.get('URL REMOVED' + u)
validation = r.json()
if validation['valid']:
  print u, 'is valid'
else:
  print u, 'failed!'
  for e in validation['errors']: 
    print e</code></pre>
            <p>Let us know what you think - you can send us feedback at <a href="#">amp-publisher@cloudflare.com</a>. Whether you embed this tool into your build and continuous integration processes, or into your CMS workflows, we’re excited to hear how you use it.</p><p>We protect <a href="https://www.cloudflare.com/network-services/">entire corporate networks</a>, help customers build <a href="https://workers.cloudflare.com/">Internet-scale applications efficiently</a>, accelerate any <a href="https://www.cloudflare.com/performance/accelerate-internet-applications/">website or Internet application</a>, <a href="https://www.cloudflare.com/ddos/">ward off DDoS attacks</a>, keep <a href="https://www.cloudflare.com/application-security/">hackers at bay</a>, and can help you on <a href="https://www.cloudflare.com/products/zero-trust/">your journey to Zero Trust</a>.</p><p>Visit <a href="https://one.one.one.one/">1.1.1.1</a> from any device to get started with our free app that makes your Internet faster and safer.</p><p>To learn more about our mission to help build a better Internet, <a href="https://www.cloudflare.com/learning/what-is-cloudflare/">start here</a>. If you're looking for a new career direction, check out <a href="http://www.cloudflare.com/careers">our open positions</a>.</p> ]]></content:encoded>
            <category><![CDATA[AMP]]></category>
            <category><![CDATA[Cache]]></category>
            <guid isPermaLink="false">7oJ1e03JkUiJLidnpslltc</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Announcing New Features To Help Hosting Providers Run Their Own Reliable DNS Infrastructure]]></title>
            <link>https://blog.cloudflare.com/virtual-dns-just-got-better/</link>
            <pubDate>Thu, 06 Oct 2016 16:01:12 GMT</pubDate>
            <description><![CDATA[ Over the last six years, we’ve built the tooling, infrastructure and expertise to run a DNS network that handles our scale - we’ve answered a few million DNS queries in the few seconds since you started reading this. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Over the last six years, we’ve built the tooling, infrastructure and expertise to run a DNS network that handles our scale - we’ve answered a few million DNS queries in the few seconds since you started reading this.</p><p><a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> is the backbone of the internet. Every email, website visit, and API call ultimately begins with a DNS lookup. Internet is built on DNS, so every hosting company, registrar, TLD operator, and cloud provider must be able to run reliable DNS.</p><p>Last year CloudFlare launched <a href="https://www.cloudflare.com/dns/virtual-dns/">Virtual DNS</a>, providing DDoS mitigation and a strong caching layer of <a href="/amsterdam-to-zhuzhou-cloudflare-global-network/">100 global data centers</a> to those running DNS infrastructure.</p><p>Today we’re expanding that offering with two new features for an extra layer of reliability: Serve Stale and DNS Rate Limiting.</p>
    <div>
      <h3>Serve Stale</h3>
      <a href="#serve-stale">
        
      </a>
    </div>
    <p>Virtual DNS sits in front of your DNS infrastructure. When DNS resolvers lookup answers on your authoritative DNS, the query first goes to CloudFlare Virtual DNS. We either serve the answer from cache if we have the answer in cache, or we reach out to your nameservers to get the answer to respond to the DNS resolver.</p><p>Even if your DNS servers are down, Virtual DNS can now answer on your behalf by serving a stale answer from cache. It’s a backup for you when your nameservers aren’t up, keeping your customers’ records online.</p>
    <div>
      <h3>Rate Limiting</h3>
      <a href="#rate-limiting">
        
      </a>
    </div>
    <p>Virtual DNS can now help you control what hits your network. Because Virtual DNS sits in front of your DNS nameservers, it shields your infrastructure from the load, and only sends you the traffic that you want to get.</p><p>With rate limiting, you configure a threshold of how many queries per second Virtual DNS should send through to your DNS servers. The rate limit only counts queries that are sent to your server, not what gets answered from cache. Queries that exceed the rate limit may still be answered with answers in cache, even if they are stale, with our new Serve Stale functionality.</p>
    <div>
      <h3>Getting Started With Virtual DNS</h3>
      <a href="#getting-started-with-virtual-dns">
        
      </a>
    </div>
    <p>If you’re running your own DNS infrastructure and would like to get started with Virtual DNS, <a href="https://www.cloudflare.com/plans/enterprise/contact/">get in touch</a>.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Reliability]]></category>
            <guid isPermaLink="false">3z6rupreNflvZxw9ueZNFk</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[You Can Finally Get More Page Rules For 5 For $5]]></title>
            <link>https://blog.cloudflare.com/5-more-page-rules-for-5-dollars/</link>
            <pubDate>Thu, 25 Aug 2016 16:01:53 GMT</pubDate>
            <description><![CDATA[ Since CloudFlare launched Page Rules in 2012, our Free, Pro and Business users have been asking for a way to get more Page Rules without committing to the next plan up. Starting today, anyone on CloudFlare can add 5 additional Page Rules for just $5/month. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Since CloudFlare <a href="/introducing-pagerules-fine-grained-feature-co/">launched Page Rules in 2012</a>, our Free, Pro and Business users have been asking for a way to get more Page Rules without committing to the next plan up. Starting today, anyone on CloudFlare can <a href="https://cloudflare.com/a/page-rules">add 5 additional Page Rules</a> for just $5/month.</p><p>Page Rules allows you to fine tune your site speed and to apply CloudFlare’s wide range of features to specific parts of your site. Page Rules are also <a href="https://api.cloudflare.com/#page-rules-for-a-zone-properties">accessible over our API</a>, so you can integrate them into your build process or sync them across your domains.</p><p>To help you get the most out of Page Rules, we’re also launching a <a href="https://www.cloudflare.com/features-page-rules/">tutorial site</a> that features videos to help you setup Page Rules for specific content management systems like <a href="https://www.cloudflare.com/features-page-rules/optimize-wordpress/">WordPress</a>, <a href="https://www.cloudflare.com/features-page-rules/optimize-magento/">Magento</a> and <a href="https://www.cloudflare.com/features-page-rules/optimize-drupal/">Drupal</a>, and for specific goals like <a href="https://www.cloudflare.com/features-page-rules/optimize-speed/">optimizing your website's speed</a>, <a href="https://www.cloudflare.com/features-page-rules/harden-security/">increasing security</a>, and <a href="https://www.cloudflare.com/features-page-rules/maximize-bandwidth/">saving on your bandwidth costs</a>.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Page Rules]]></category>
            <category><![CDATA[Optimization]]></category>
            <guid isPermaLink="false">3tobeIKGZHstJAvZtu3t5R</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Economical With The Truth: Making DNSSEC Answers Cheap]]></title>
            <link>https://blog.cloudflare.com/black-lies/</link>
            <pubDate>Fri, 24 Jun 2016 16:31:10 GMT</pubDate>
            <description><![CDATA[ We launched DNSSEC late last year and are already signing 56.9 billion DNS record sets per day. At this scale, we care a great deal about compute cost. ]]></description>
            <content:encoded><![CDATA[ <p>We launched DNSSEC late last year and are already signing 56.9 billion DNS record sets per day. At this scale, we care a great deal about compute cost. One of the ways we save CPU cycles is our unique implementation of negative answers in DNSSEC.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/39pYW2SBON2GibSMDXYXr9/1f9e5f863b435eaa642f67b810acbfbf/217591669_c31a16e301_o.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a> <a href="https://www.flickr.com/photos/88478656@N00/217591669">image</a> by <a href="https://www.flickr.com/photos/chris-short/">Chris Short</a></p><p>I will briefly explain a few concepts you need to know about <a href="https://www.cloudflare.com/learning/dns/dnssec/ecdsa-and-dnssec/">DNSSEC</a> and negative answers, and then we will dive into how CloudFlare saves on compute when asked for names that don’t exist.</p>
    <div>
      <h3>What You Need To Know: DNSSEC Edition</h3>
      <a href="#what-you-need-to-know-dnssec-edition">
        
      </a>
    </div>
    <p>Here’s a quick summary of DNSSEC:</p><p>This is an unsigned DNS answer (unsigned == no DNSSEC):</p>
            <pre><code>cloudflare.com.		299	IN	A	198.41.214.162
cloudflare.com.		299	IN	A	198.41.215.162</code></pre>
            <p>This is an answer with DNSSEC:</p>
            <pre><code>cloudflare.com.		299	IN	A	198.41.214.162
cloudflare.com.		299	IN	A	198.41.215.162
cloudflare.com.		299	IN	RRSIG	A 13 2 300 20160311145051 20160309125051 35273     cloudflare.com. RqRna0qkih8cuki++YbFOkJi0DGeNpCMYDzlBuG88LWqx+Aaq8x3kQZX TzMTpFRs6K0na9NCUg412bOD4LH3EQ==</code></pre>
            <p>Answers with DNSSEC contain a signature for every record type that is returned. (In this example, only A records are returned so there is only one signature.) The signatures allow DNS resolvers to validate the records returned and prevent on-path attackers from intercepting and changing the answers.</p>
    <div>
      <h3>What You Need To Know: Negative Answer Edition</h3>
      <a href="#what-you-need-to-know-negative-answer-edition">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/EDDHJnSfGNBWos6pw07VT/cbc431245dbf7cb97dc788ea6a909fcb/250521158_0c5de0ef97_z.jpg" />
            
            </figure><p>There are two types of negative answers. The first is <code>NXDOMAIN</code>, which means that the name asked for does not exist. An example of this is a query asking for <code>missing.cloudflare.com</code>. <code>missing.cloudflare.com</code> doesn’t exist at all.</p><p>The second type is <code>NODATA</code>, which means that the name does exist, just not in the requested type. An example of this would be asking for the <code>MX</code> record of <code>blog.cloudflare.com</code>. There are <code>A</code> records for <code>blog.cloudflare.com</code> but no <code>MX</code> records so the appropriate response is <code>NODATA</code>.</p>
    <div>
      <h3>What Goes Into An <code>NXDOMAIN</code> With DNSSEC</h3>
      <a href="#what-goes-into-an-nxdomain-with-dnssec">
        
      </a>
    </div>
    <p>To see what gets returned in a negative <code>NXDOMAIN</code> answer, let’s look at the response for a query for <code>bogus.ietf.org</code>.</p><p>The first record that has to be returned in a negative answer with DNSSEC is an SOA, just like in an unsigned negative answer. The SOA contains some metadata about the zone and lets the recursor know how long to cache the negative answer for.</p>
            <pre><code>ietf.org.	1179	IN	SOA	ns0.amsl.com. glen.amsl.com. 1200000325 1800 1800 604800 1800</code></pre>
            <p>Because the domain is signed with DNSSEC, the signature for the <code>SOA</code> is also returned:</p>
            <pre><code>ietf.org.	1179	IN	RRSIG	SOA 5 2 1800 20170308083354 20160308073501 40452 ietf.org. S0gIjTnQGA6TyIBjCeBXL4ip8aEQEgg2y+kCQ3sLtFa3oNy9vj9kj4aP 8EVu4oIexr8X/i9L8Oj5ec4HOrQoYsMGObRUG0FGT0MEbxepi+wWrfed vD/3mq8KZg/pj6TQAKebeSQGkmb8y9eP0PdWdUi6EatH9ZY/tsoiKyqg U4vtq9sWZ/4mH3xfhK9RBI4M7XIXsPX+biZoik6aOt4zSWR5WDq27pXI 0l+BLzZb72C7McT4PlBiF+U86OngBlGxVBnILyW2aUisi2LY6KeO5AmK WNT0xHWe5+JtPD5PgmSm46YZ8jMP5mH4hSYr76jqwvlCtXvq8XgYQU/P QyuCpQ==</code></pre>
            <p>The next part of the negative answer in DNSSEC is a record type called <code>NSEC</code>. The <code>NSEC</code> record returns the previous and next name in the zone, which proves to the recursor that the queried name cannot possibly exist, because nothing exists between the two names listed in the NSEC record.</p>
            <pre><code>www.apps.ietf.org.	1062	IN	NSEC	cloudflare-verify.ietf.org. A RRSIG NSEC</code></pre>
            <p>This <code>NSEC</code> record above tells you that <code>bogus.ietf.org</code> does not exist because no names exist canonically between <code>www.apps.ietf.org</code> and <code>cloudflare-verify.ietf.org</code>. Of course, this record also has a signature contained in the answer:</p>
            <pre><code>www.apps.ietf.org.	1062	IN	RRSIG	NSEC 5 4 1800 20170308083322 20160308073501 40452 ietf.org. NxmjhCkTtoiolJUow/OreeBRxTtf2AnIPM/r2p7oS/hNeOdFI9tpgGQY g0lTOYjcNNoIoDB/r56Kd+5wtuaKT+xsYiZ4K413I+cmrNQ+6oLT+Mz6 Kfzvo/TcrJD99PVAYIN1MwzO42od/vi/juGkuKJVcCzrBKNHCZqu7clu mU3DEqbQQT2O8dYIUjLlfom1iYtZZrfuhB6FCYFTRd3h8OLfMhXtt8f5 8Q/XvjakiLqov1blZAK229I2qgUYEhd77n2pXV6SJuOKcSjZiQsGJeaM wIotSKa8EttJELkpNAUkN9uXfhU+WjouS1qzgyWwbf2hdgsBntKP9his 9MfJNA==</code></pre>
            <p>A second NSEC record is also returned to prove that there is no wildcard that would have covered <code>bogus.ietf.org</code>:</p>
            <pre><code>ietf.org.	1062	IN	NSEC	ietf1._domainkey.ietf.org. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY SPF</code></pre>
            <p>This record above tells you that a wildcard (<code>*. ietf.org</code>) would have existed between those two names. Because there is no wildcard record at <code>*.ietf.org</code>, as proven by this NSEC record, the DNS resolver knows that really nothing should have been returned for <code>bogus.ietf.org</code>. This <code>NSEC</code> record also has a signature:</p>
            <pre><code>ietf.org.	1062	IN	RRSIG	NSEC 5 2 1800 20170308083303 20160308073501 40452 ietf.org. homg5NrZIKo0tR+aEp0MVYYjT7J/KGTKP46bJ8eeetbq4KqNvLKJ5Yig ve4RSWFYrSARAmbi3GIFW00P/dFCzDNVlMWYRbcFUt5NfYRJxg25jy95 yHNmInwDUnttmzKuBezdVVvRLJY3qSM7S3VfI/b7n6++ODUFcsL88uNB V6bRO6FOksgE1/jUrtz6/lEKmodWWI2goFPGgmgihqLR8ldv0Dv7k9vy Ao1uunP6kDQEj+omkICFHaT/DBSSYq59DVeMAAcfDq2ssbr4p8hUoXiB tNlJWEubMnHi7YmLSgby+m8b97+8b6qPe8W478gAiggsNjc2gQSKOOXH EejOSA==</code></pre>
            <p>All in all, the negative answer for <code>bogus.ietf.org</code> contains an <code>SOA + SOA RRSIG + (2) NSEC + (2) NSEC RRSIG</code>. It is 6 records in total, returning an answer that is 1095 bytes (this is a large DNS answer).</p>
    <div>
      <h3>Zone Walking</h3>
      <a href="#zone-walking">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/IvO8IS03cvULjAZJGiGNh/493fdb6facdde177c88222bd3226f535/4950628049_030625b5e1_z.jpg" />
            
            </figure><p>What you may have noticed is that because the negative answer returns the previous and next name, you can keep asking for next names and essentially “walk” the zone until you learn every single name contained in it.</p><p>For example, if you ask for the <code>NSEC</code> on <code>ietf.org</code>, you will get back the first name in the zone, <code>ietf1._domainkey.ietf.org</code>:</p>
            <pre><code>ietf.org.		1799	IN	NSEC 	ietf1._domainkey.ietf.org.  A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY SPF</code></pre>
            <p>Then if you ask for the <code>NSEC</code> on <code>ietf1._domainkey.ietf.org</code> you will get the next name in the zone:</p>
            <pre><code>ietf1._domainkey.ietf.org. 1799	IN	NSEC 	apps.ietf.org. TXT RRSIG NSEC</code></pre>
            <p>And you can keep going until you get every name in the zone:</p>
            <pre><code>apps.ietf.org.		1799	IN	NSEC 	mail.apps.ietf.org. MX RRSIG NSEC</code></pre>
            <p>The root zone uses <code>NSEC</code> as well, so you can walk the root to see every TLD:</p><p>The root NSEC:</p>
            <pre><code>.			21599	IN	NSEC 	aaa. NS SOA RRSIG NSEC DNSKEY</code></pre>
            <p><code>.aaa NSEC</code>:</p>
            <pre><code>aaa.			21599	IN	NSEC 	aarp. NS DS RRSIG NSEC</code></pre>
            <p><code>.aarp NSEC</code>:</p>
            <pre><code>aarp.			21599	IN	NSEC	 abb. NS DS RRSIG NSEC</code></pre>
            <p>Zone walking was actually considered a feature of the original design:</p><blockquote><p>The complete <code>NXT</code> chains specified in this document enable a resolver to obtain, by successive queries chaining through <code>NXT</code>s, all of the names in a zone. - <a href="https://www.ietf.org/rfc/rfc2535.txt">RFC2535</a></p></blockquote><p>(<a href="https://www.ietf.org/rfc/rfc2535.txt"><code>NXT</code></a> is the original DNS record type that <code>NSEC</code> was based off of)</p><p>However, as you can imagine, this is a terrible idea for some zones. If you could walk the <code>.gov</code> zone, you could learn every US government agency and government agency portal. If you owned a real estate company where every realtor got their own subdomain, a competitor could walk through your zone and find out who all of your realtors are.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3r4Sa7oIA4l8dHp0Vfb8ZE/600b78872744b8a3af69169d1c3b2dfc/3694621030_76a7e356e8_z.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a> <a href="https://www.flickr.com/photos/kiui/3694621030/in/photolist-6CtU7A-asJTAM-7CPbHo-8EwW4-3eVmjc-hJRKMq-6yqn7i-fHud6f-vkbXQ-dYdajL-Tvem-hhyi-yCJFx-faZG48-4NqD5n-4AznYu-agJiCs-7rHcZi-uctPy-86shBZ-5i6jk8-2FM8ku-4r6pDg-nKT4AD-89gnn7-4raAGu-5GZFu6-ediZYA-4ALrZC-47jTd2-dDUiSp-2UDPN5-dDU83M-89d89Z-dDUhX6-52rBrz-hkLCcd-dDTPvR-9yZg4K-67tzSW-8YUTHK-4YeciD-pdczj5-otQve1-72reNd-dDUoZV-F5Pg-4qFHBC-6yuv4A-54xhoz">image</a> by <a href="https://www.flickr.com/photos/kiui/">KIUI</a></p><p>So the DNS community rallied together and found a solution. They would continue to return previous and next names, but they would hash the outputs. This was defined in an upgrade to <code>NSEC</code> called <a href="https://tools.ietf.org/html/rfc5155"><code>NSEC3</code></a>.</p>
            <pre><code>6rmo7l6664ki2heho7jtih1lea9k6los.icann.org. 3599 IN NSEC3 1 0 5 2C21FAE313005174 6S2J9F2OI56GPVEIH3KBKJGGCL21SKKL A RRSIG</code></pre>
            <p><code>NSEC3</code> was a “close but no cigar” solution to the problem. While it’s true that it made zone walking harder, it did not make it impossible. Zone walking with <code>NSEC3</code> is still possible with a dictionary attack. An attacker can use a list of the most common hostnames, hash them with the hashing algorithm used in the <code>NSEC3</code> record (which is listed in the record itself) and see if there are any matches. Even if the domain owner uses a salt on the hash, the length of the salt is included in the <code>NSEC3</code> record, so there are a finite number of salts to guess.</p><blockquote><p>The Salt Length field defines the length of the salt in octets, ranging in value from 0 to 255.”</p></blockquote><ul><li><p><a href="https://tools.ietf.org/html/rfc5155">RFC5155</a></p></li></ul>
    <div>
      <h3><code>NODATA</code> Responses</h3>
      <a href="#nodata-responses">
        
      </a>
    </div>
    <p>If you recall from above, <code>NODATA</code> is the response from a server when it is asked for a name that exists, but not in the requested type (like an <code>MX</code> record for <code>blog.cloudflare.com</code>). <code>NODATA</code> is similar in output to <code>NXDOMAIN</code>. It still requires <code>SOA</code>, but it only takes one <code>NSEC</code> record to prove the next name, and to specify which types do exist on the queried name.</p><p>For example, if you look for a <code>TXT</code> record on <code>apps.ietf.org</code>, the <code>NSEC</code> record will tell you that while there is no <code>TXT</code> record on <code>apps.ietf.org</code>, there are <code>MX</code>, <code>RRSIG</code> and <code>NSEC</code> records.</p>
            <pre><code>apps.ietf.org.		1799	IN	NSEC 	mail.apps.ietf.org. MX RRSIG NSEC</code></pre>
            
    <div>
      <h3>Problems With Negative Answers</h3>
      <a href="#problems-with-negative-answers">
        
      </a>
    </div>
    <p>There are two problems with negative answers:</p><p>The first is that the authoritative server needs to return the previous and next name. As you’ll see, this is computationally expensive for CloudFlare, and as you’ve already seen, it can leak information about a zone.</p><p>The second is that negative answers require two <code>NSEC</code> records and their two subsequent signatures (or three <code>NSEC3</code> records and three <code>NSEC3</code> signatures) to authenticate the nonexistence of one name. This means that answers are bigger than they need to be.</p>
    <div>
      <h3>The Trouble with Previous and Next Names</h3>
      <a href="#the-trouble-with-previous-and-next-names">
        
      </a>
    </div>
    <p>CloudFlare has a custom in house DNS server built in Go called <a href="/what-weve-been-doing-with-go/">RRDNS</a>. What's unique about RRDNS is that unlike standard DNS servers, it does not have the concept of a zone file. Instead, it has a <a href="/kyoto-tycoon-secure-replication/">key value store</a> that holds all of the DNS records of all of the domains. When it gets a query for a record, it can just pick out the record that it needs.</p><p>Another unique aspect of CloudFlare's DNS is that a lot of our business logic is handled in the DNS. We often dynamically generate DNS answers on the fly, so we don't always know what we will respond with before we are asked.</p><p>Traditional negative answers require the authoritative server to return the previous and next name of a missing name. Because CloudFlare does not have the full view of the zone file, we'd have to ask the database to do a sorted search just to figure out the previous and next names. Beyond that, because we generate answers on the fly, we don’t have a reliable way to know what might be the previous and next name, unless we were to precompute every possible option ahead of time.</p><p>One proposed solution to the previous and next name, and secrecy problems is <a href="https://www.ietf.org/rfc/rfc4470.txt">RFC4470</a>, dubbed 'White Lies'. This RFC proposes that DNS operators make up a previous and next name by randomly generating names that are canonically slightly before and after the requested name.</p><p>White lies is a great solution to block zone walking (and it helps us prevent unnecessary database lookups), but it still requires 2 <code>NSEC</code> records (one for previous and next name and another for the wildcard) to say one thing, so the answer is still bigger than it needs to be.</p>
    <div>
      <h3>When CloudFlare Lies</h3>
      <a href="#when-cloudflare-lies">
        
      </a>
    </div>
    <p>We decided to take lying in negative answers to its fullest extent. Instead of white lies, we do black lies.</p><p>For an <code>NXDOMAIN</code>, we always return <code>\000</code>.(the missing name) as the next name, and because we return an <code>NSEC</code> directly on the missing name, we do not have to return an additional <code>NSEC</code> for the wildcard. This way we only have to return <code>SOA</code>, <code>SOA RRSIG</code>, <code>NSEC</code> and <code>NSEC RRSIG</code>, and we do not need to search the database or precompute dynamic answers.</p><p>Our negative answers are usually around 300 bytes. For comparison, negative answers for <code>ietf.org</code> which uses <code>NSEC</code> and <code>icann.org</code>, which uses <code>NSEC3</code> are both slightly over 1000 bytes, three times the size. The reason this matters so much is that the maximum size of an unsigned UDP packet is typically 512 octets. DNSSEC requires support for at least 1220 octets long messages over UDP, but above that limit, the client may need to upgrade to DNS over TCP. A good practice is to keep enough headroom in order to keep response sizes below fragmentation threshold during zone signing key rollover periods.</p><p><code>NSEC</code>: 1096 bytes</p>
            <pre><code>ietf.org.		1799	IN	SOA	ns0.amsl.com. glen.amsl.com. 1200000317 1800 1800 604800 1800
ietf.org.		1799	IN	RRSIG	SOA 5 2 1800 20170213210533 20160214200831 40452 ietf.org. P8XoJx+SK5nUZAV/IqiJrsoKtP1c+GXmp3FvEOUZPFn1VwW33242LVrJ GMI5HHjMEX07EzOXZyLnQeEvlf2QLxRIQm1wAnE6W4SUp7TgKUZ7NJHP dgLr2gqKYim4CI7ikYj3vK7NgcaSE5jqIZUm7oFxxYO9/YPz4Mx7COw6 XBOMYS2v8VY3DICeJdZsHJnVKlgl8L7/yqrL8qhkSW1yDo3YtB9cZEjB OVk8uRDxK7aHkEnMRz0LODOJ10AngJpg9LrkZ1CO444RhZGgTbwzN9Vq rDyH47Cn3h8ofEOJtYCJvuX5CCzaZDInBsjq9wNAiNBgIQatPkNriR77 hCEHhQ==
ietf.org.		1799	IN	NSEC	ietf1._domainkey.ietf.org. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY SPF
ietf.org.		1799	IN	RRSIG	NSEC 5 2 1800 20170213210816 20160214200831 40452 ietf.org. B9z/JJs30tkn0DyxVz0zaRlm4HkeNY1TqYmr9rx8rH7kC32PWZ1Fooy6 16qmB33/cvD2wtOCKMnNQPdTG2qUs/RuVxqRPZaQojIVZsy/GYONmlap BptzgOJLP7/HOxgYFgMt5q/91JHfp6Mn0sd218/H86Aa98RCXwUOzZnW bdttjsmbAqONuPQURaGz8ZgGztFmQt5dNeNRaq5Uqdzw738vQjYwppfU 9GSLkT7RCh3kgbNcSaXeuWfFnxG1R2SdlRoDICos+RqdDM+23BHGYkYc /NEBLtjYGxPqYCMe/7lOtWQjtQOkqylAr1r7pSI2NOA9mexa7yTuXH+x o/rzRA==
www.apps.ietf.org.	1799	IN	NSEC	cloudflare-verify.ietf.org. A RRSIG NSEC
www.apps.ietf.org.	1799	IN	RRSIG	NSEC 5 4 1800 20170213210614 20160214200831 40452 ietf.org. U+hEHcTps2IC8VKS61rU3MDZq+U0KG4/oJjIHVYbrWufQ7NdMdnY6hCL OmQtsvuZVRQjWHmowRhMj83JMUagxoZuWTg6GuLPin3c7PkRimfBx7jI wjqORwcuvpBh92A/s/2HXBma3PtDZl2UDLy4z7wdO62rbxGU/LX1jTqY FoJJLJfJ/C+ngVMIE/QVneXSJkAjHV96FSEnreF81V62x9azv3AHo4tl qnoYvRDtK+cR072A5smtWMKDfcIr2fI11TAGIyhR55yAiollPDEz5koj BfMstC/JXVURJMM+1vCPjxvwYzTZN8iICf1AupyyR8BNWxgic5yh1ljH 1AuAVQ==</code></pre>
            <p>Black Lies: 357 bytes</p>
            <pre><code>cloudflare.com.		1799	IN	SOA	ns3.cloudflare.com. dns.cloudflare.com. 2020742566 10000 2400 604800 3600
blog.cloudflare.com.	3599	IN	NSEC	\000.blog.cloudflare.com. RRSIG NSEC
cloudflare.com.		1799	IN	RRSIG	SOA 13 2 86400 20160220230013 20160218210013 35273 cloudflare.com. kgjtJDuuNC/yX8yWQpol4ZUUr8s8yAXZi26KWBI6S3HDtry2t6LnP1ou QK10Ut7DXO/XhyZddRBVj3pIpWYdBQ==
blog.cloudflare.com.	3599	IN	RRSIG	NSEC 13 3 3600 20160220230013 20160218210013 35273 cloudflare.com. 8BKAAS8EXNJbm8DxEI1OOBba8KaiimIuB47mPlteiZf3sVLGN1edsrXE +q+pHaSHEfYG5mHfCBJrbi6b3EoXOw==</code></pre>
            
    <div>
      <h3>DNS Shotgun</h3>
      <a href="#dns-shotgun">
        
      </a>
    </div>
    <p>Our take on <code>NODATA</code> responses is also unique. Traditionally, <code>NODATA</code> responses contain one <code>NSEC</code> record to tell the resolver which types exist on the requested name. This is highly inefficient. To do this, we’d have to search the database for all the types that do exist, just to answer that the requested type does not exist. Remember that’s not even always possible because we have dynamic answers that are generated on the fly.</p><p>What we realized was that <code>NSEC</code> is a denial of existence. What matters in <code>NSEC</code> are the missing types, not the present ones. So what we do is we set all the types. We say, this name does exist, just not on the one type you asked for.</p><p>For example, if you asked for an <code>TXT</code> record of <code>blog.cloudflare.com</code> we would say, all the types exist, just not <code>TXT</code>.</p>
            <pre><code>blog.cloudflare.com.	3599	IN	NSEC	\000.blog.cloudflare.com. A WKS HINFO MX AAAA LOC SRV CERT SSHFP IPSECKEY RRSIG NSEC TLSA HIP OPENPGPKEY SPF</code></pre>
            <p>And then if you queried for a <code>MX</code> on <code>blog.cloudflare.com</code>, we would return saying we have every record type, even <code>TXT</code>, but just not <code>MX</code>.</p>
            <pre><code>blog.cloudflare.com.	3599	IN	NSEC	\000.blog.cloudflare.com. A WKS HINFO TXT AAAA LOC SRV CERT SSHFP IPSECKEY RRSIG NSEC TLSA HIP OPENPGPKEY SPF</code></pre>
            <p>This saves us a database lookup and from leaking any zone information in negative answers. We call this the DNS Shotgun.</p>
    <div>
      <h3>How Are Black Lies and DNS Shotgun Standards Compliant</h3>
      <a href="#how-are-black-lies-and-dns-shotgun-standards-compliant">
        
      </a>
    </div>
    <p>We put a lot of care to ensure CloudFlare’s negative answers are standards compliant. We’re even pushing for them to become an Internet Standard by <a href="https://tools.ietf.org/html/draft-valsorda-dnsop-black-lies">publishing an Internet Draft</a> earlier this year.</p><p><a href="https://www.ietf.org/rfc/rfc4470.txt">RFC4470</a>, White Lies, allows us to randomly generate next names in <code>NSEC</code>. Not setting the second <code>NSEC</code> for the wildcard subdomain is also allowed, so long as there exists an <code>NSEC</code> record on the actual queried name. And lastly, our lie of setting every record type in <code>NSEC</code> records for <code>NODATA</code>, is okay too –– after all, domains are constantly changing, it’s feasible that the zone file changed in between the time the <code>NSEC</code> record indicated to you there was no <code>MX</code> record on <code>blog.cloudflare.com</code> and when you queried successfully for <code>MX</code> on <code>blog.cloudflare.com</code>.</p>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>We’re proud of our negative answers. They help us keep packet size small, and CPU consumption low enough for us to provide <a href="https://www.cloudflare.com/dnssec/">DNSSEC for free</a> for any domain. Let us know what you think, we’re looking forward to hearing from you.</p> ]]></content:encoded>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[RRDNS]]></category>
            <category><![CDATA[Salt]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">2gk2SvhQNI2AbzoJivm97n</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[Join Us And Paul Vixie On Tuesday To Discuss BIND, Root Servers, And DNS Security]]></title>
            <link>https://blog.cloudflare.com/paul-vixie-meetup/</link>
            <pubDate>Fri, 17 Jun 2016 16:00:22 GMT</pubDate>
            <description><![CDATA[ CloudFlare and Gandi have been hosting a speaker series on DNS, previously bringing in the founder of DNS Paul Mockapetris and Dan Kaminsky, who uncovered one of the most critical vulnerabilities in DNS. ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5qDXL71HNTR5y9BJvkLjo5/4a8b8debb5286b8302ea9122948be2bd/full_7041519.jpeg.jpeg" />
            
            </figure><p>CloudFlare and <a href="http://www.gandi.net/">Gandi</a> have been hosting a speaker series on DNS, previously bringing in the founder of DNS <a href="http://internethalloffame.org/inductees/paul-mockapetris">Paul Mockapetris</a> and <a href="https://dankaminsky.com/bio/">Dan Kaminsky</a>, who uncovered one of the <a href="https://www.wired.com/2008/07/details-of-dns/">most critical vulnerabilities in DNS</a>.</p><p>Our third and final talk is coming up on June 21st at 6PM PST at the Gandi office in San Francisco (live stream link will be posted on <a href="http://www.meetup.com/The-Root-Zone/events/231047866/">the Meetup page</a>) and you won’t want to miss it, because our speaker is none other than <a href="http://www.internethalloffame.org/inductees/paul-vixie">Paul Vixie</a>.</p><p>Paul wrote most of <a href="https://www.isc.org/downloads/bind/">BIND Version 8</a> and hired the team who wrote BIND Version 9, the most widely used DNS software on the Internet. He founded <a href="https://www.isc.org/">ISC</a>, home of BIND and <a href="https://www.isc.org/f-root/">F-root</a> and later operated <a href="http://c.root-servers.org/">C-root</a>.</p><p>We'll talk about <a href="http://www.circleid.com/posts/20160330_let_me_make_yeti_dns_perfectly_clear/">alternative DNS root servers</a>, email security and spam (Paul founded the <a href="https://en.wikipedia.org/wiki/Mail_Abuse_Prevention_System">first ever anti-spam company</a>), and what needs to be done about DNS and security (Paul added most of BIND’s current security systems).</p><p>So come grab a beer and let's geek out about DNS one more time.</p><p><a href="http://www.meetup.com/The-Root-Zone/events/231047866/">RSVP here</a>.</p> ]]></content:encoded>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Events]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Cloudflare Meetups]]></category>
            <guid isPermaLink="false">1ScJPNwApHvikW6jVvoYBM</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
    </channel>
</rss>