How DDoS protection works: scrubbing, filtering and rate limits

Where attack traffic is stopped, what upstream scrubbing can and cannot see, and why filtering close to the server matters.

Security and DDoS22 min readUpdated

From the internet, inwardhow much it can absorbhow much it can seeIllustration: relative, not measuredUpstream networkcapacity, scrubbingSeesaddresses, ports,sizes and ratesWeak spotyour protocol, andanything inside TLSCan absorbCan seeProvider routersblackhole, if usedSeesthe destinationaddress, nothing elseWeak spotdrops real userswith the attackCan absorbCan seeYour server's linka fixed port speedSeesnothing: it carriesor it overflowsWeak spotwhen full, dropsreal and fake alikeCan absorbCan seeHost filterXDP, at the driverSeesevery packet thatarrives, in fullWeak spotwhat a full linkdropped; TLS dataCan absorbCan seeApplicationafter decryptionSeeswhole requests,users and sessionsWeak spotvolume: everyrequest costs CPUCan absorbCan seeFrom the internet, inwardhow much it can absorbhow much it can seeIllustration: relative, not measuredUpstream networkcapacity, scrubbingSees: addresses, ports, sizes and ratesWeak spot: your protocol, and TLS contentsProvider routersblackhole, if usedSees: the destination address, nothing elseWeak spot: drops real users with the attackYour server's linka fixed port speedSees: nothing, it carries or it overflowsWeak spot: when full, drops real and fakeHost filterXDP, at the driverSees: every packet that arrives, in fullWeak spot: a flooded link; TLS contentsApplicationafter decryptionSees: whole requests, users and sessionsWeak spot: volume, every request costs CPU

In short

  • DDoS protection is a stack of filters at different distances from your server, and each one trades what it can see against how much traffic it can absorb.
  • Far upstream, networks with far more capacity than any single link absorb volumetric floods and scrub them by address, port, size and rate, but they know little about your protocol and nothing about what is inside TLS.
  • Blackholing (RTBH, which a network can ask its neighbours to apply with the BLACKHOLE community 65535:666) drops every packet to the target at the provider's routers. It protects everyone else, and for the target it finishes the attack.
  • A filter on the host, such as an XDP program at the network driver, sees every packet that fits through the port and can check the protocol, which catches floods a rate limit misses and spares real users a rate limit would block.
  • Only whatever terminates TLS can see requests, so a flood of requests inside encrypted connections has to be stopped by your web server or by a service that holds your key.
On this page
  1. Every layer trades sight for capacity
  2. Upstream: capacity and scrubbing, far from your server
  3. Blackholing: the emergency brake that finishes the attack
  4. On the host: every packet that arrives, and nothing that did not
  5. Rate limits count, they do not understand
  6. False positives, and why protocol awareness cuts them
  7. Application-layer filtering: full sight, but only after TLS
  8. One attack, five layers: a worked example
  9. Putting the layers together
  10. Questions
  11. Sources

A flood of 100 Gbit/s aimed at a server with a 1 Gbit/s port is decided before a single packet reaches the machine. The link in front of it is full a hundred times over, and whatever runs on the server, however clever, sees one gigabit of the hundred and can do nothing about the other ninety-nine. A flood of a few thousand ordinary-looking requests a second, carried inside encrypted connections, is the opposite problem. It crosses every router and filter on the way without looking unusual, and only the program that decrypts it can tell that anything is wrong.

So the question worth asking about DDoS protection is where it sits. Every place that can stop traffic trades what it can see against how much it can absorb, and following the path from the internet inward to your application shows what each one is good for and where it goes blind.

Every layer trades sight for capacity

An attack needs something to run out (the guide to DDoS attacks sorts them by what that is), and the simplest is the link. Traffic that ignores congestion, sent faster than a link can carry it, fills the queues in front of that link until real packets are lost along with the attack's.1 A filter on the server cannot undo that, because by the time it sees a packet the packet has already used the scarce link, so this kind of flood has to be stopped somewhere nearer the attacker.1

Closer to the attacker means further from you, and that is the trade. A network many hops upstream has room to take a flood in, but it carries everyone's traffic, has never seen your protocol, and must judge millions of packets a second with rules general enough for all its customers. Your application knows exactly what a valid request looks like, but by the time it can check one, the request has crossed the link and the kernel and, on HTTPS, been decrypted.

Short of having vastly more capacity than any attacker, there is one real defence against an attack that uses up resources: treat attackers differently from everyone else, which means finding "something that legitimate users can do but attackers can't".1

Upstream: capacity and scrubbing, far from your server

Upstream capacity exists to take in a flood that no single customer's link could carry, and to sort it before the traffic narrows down to that link. That work falls to your providers, which is where the UK National Cyber Security Centre's guidance on volume starts.2

Sorting a flood is called scrubbing, and it only works if the traffic reaches the scrubber before it reaches you. A protection service has to pull your traffic away from your network, drop the attack and hand the rest back.3 What gets dropped is decided by rules that range from blocking any address that has sent too much to far more involved logic.2

How traffic gets to the scrubber and back

The pulling is done with routing. Either the scrubbing network announces your prefix over BGP, so that the rest of the internet prefers the path through it, or your provider points its own routes for those addresses at its scrubbers. Routes more specific than a /24 are usually not accepted across the internet,5 so a service that diverts by announcement moves at least a whole /24, 256 addresses, at a time. What survives the filtering is handed back to your network over a separate path, such as a direct interconnect, rather than across the open internet, where it would meet the flood again.

The timing depends on how the service runs. Always-on scrubbing keeps your traffic flowing through the filters all the time. On-demand scrubbing diverts only after it has detected an attack, so every flood gets a head start: from its first packet until it has been noticed and the new routes have spread, it lands on your link as if there were no protection at all.

What an upstream filter can see

A scrubbing network sees packets in bulk: addresses, ports, protocols, sizes and rates, and how they change. That is enough for the crudest floods. A server that asked no DNS questions has no reason to receive hundreds of thousands of DNS answers a second, which is what a reflected DNS flood looks like, so those packets can be dropped without knowing what the server runs. The guide to amplification attacks explains how a small spoofed request becomes that large reply.

What it cannot see is what your traffic means. A provider filtering for many customers has little feel for the fine detail of any one application, and once the traffic is encrypted, as HTTPS is, it has even less to go on when looking for anything unusual.2 An upstream filter can tell that 300 Mbit/s of UDP is arriving at your game port, but not whether it is players or a flood built to look like them. That judgement has to happen closer to you.

Blackholing: the emergency brake that finishes the attack

When a flood is bigger than the links it has to cross, it hurts more than its target. If more attack traffic heads for one customer than the provider's links to that customer can carry, real traffic to that customer is crowded out, and other customers and the provider's own network often suffer with it.4

The provider's tool for that situation is the blackhole. Remotely triggered blackhole filtering, or RTBH, is a widely used way of mitigating denial of service,4 and it works through the routers' forwarding tables rather than their filters. Every edge router is given a discard route in advance, a route to a null interface. When an address comes under attack, one trigger router announces a route for that address over BGP, tagged with an agreed community and with NO_EXPORT so it stays inside the network, and each router that receives it points the address at the discard route.4 Routes are used instead of filters for scale: a router's forwarding path handles more traffic, and far more entries, than its filters can.4

To ask a neighbouring network to do the same, there is a standard tag: BLACKHOLE, a well-known BGP community that asks the neighbour to discard everything sent to the tagged prefix.5 Its value, 0xFFFF029A, splits into two 16-bit halves: 0xFFFF is 65,535 and 0x029A is 2 × 256 + 154 = 666, so it is written 65535:666, 666 being the number operators already associated with blackholing.5 It comes with guard rails. The receiving network should stop the route spreading further (NO_EXPORT or NO_ADVERTISE), and the prefix should be as specific as possible, typically one address: a /32 in IPv4, a /128 in IPv6.5 That cuts across normal practice, in which routes more specific than a /24 are usually refused, so networks that honour BLACKHOLE accept these longer routes as an exception: only when tagged, only from a neighbour authorised to announce a prefix covering them, and only on sessions where both sides agreed to it.5 Blackholing a whole /24, 256 addresses, to deal with one server would take 255 innocent neighbours down with it.

1. During the floodProvider's edge routerforwards everythingattackusers of .10other userslink fullTarget203.0.113.10downNeighbour203.0.113.11slowed tooNeighbour203.0.113.12slowed too2. After a blackhole on 203.0.113.10/32Provider's edge router203.0.113.10/32 to discardattackusers of .10other usersnormal loadTarget203.0.113.10unreachableNeighbour203.0.113.11workingNeighbour203.0.113.12working
1. During the floodProvider's edge routerforwards everythingattackusers of .10other userslink fullTarget203.0.113.10downNeighbour203.0.113.11slowed tooNeighbour203.0.113.12slowed too2. After a blackhole on 203.0.113.10/32Provider's edge router203.0.113.10/32 to discardattackusers of .10other usersnormal loadTarget203.0.113.10unreachableNeighbour203.0.113.11workingNeighbour203.0.113.12working
A flood aimed at 203.0.113.10 fills the provider's link to the customer, so the neighbours on that link suffer too. After a discard route for the /32, the router drops every packet to .10, from attackers and real users alike. The neighbours recover; the target is gone. Illustration.

Why a blackhole completes the attack

RFC 5635 is candid that a destination blackhole finishes the job for the attacker. Every packet to that address is discarded, the attack's and your users' alike, and the target is offline. The rest of the network is spared, and the target, if anything, is worse off than before.4 An attacker who wanted your server unreachable has got exactly that, and can stop spending.

That makes the blackhole the provider's emergency brake, not a defence of the target. It can be pulled at the customer's request, or by the provider on its own judgement to keep the network running.4 Source-based RTBH turns the idea around and discards by source address, which cuts off all traffic to and from each listed address, not only what it sends to the victim.4 Against a directly spoofed flood that is useless, because the source addresses are invented; the real fix for forged sources is ingress filtering at the edge of the networks they come from,6 which the victim does not control. Against a reflected flood it can work, because reflectors are real servers at fixed addresses. The cost is losing contact with each of those servers in both directions, and a large flood can come from a great many of them.

FlowSpec: dropping one kind of traffic, not everything

Between the blackhole and full scrubbing sits BGP Flow Specification, or FlowSpec. It uses BGP to carry filter rules instead of routes: each rule matches fields such as the destination prefix, the IP protocol, source and destination ports and the packet's length, and carries an action, such as discarding what matches or capping its rate.7 It exists mainly so that a network can have its upstream drop unwanted traffic at the upstream's own ingress routers.7 A rule to discard UDP from source port 53 to 203.0.113.10 removes a reflected DNS flood at the provider's edge while every other packet to that address keeps flowing, at the price of any DNS answers the server really asked for.

The rules run on the routers' access-list and firewall features,7 the slower and scarcer resource that RTBH was designed to avoid,4 so a network can hold only so many of them. And they match headers, not meaning: a forged packet with the right protocol, port and length passes as easily as a real one.

On the host: every packet that arrives, and nothing that did not

Whatever survives upstream meets your server's link, which has a fixed speed and no judgement. Anything that fits through it can be judged with far more context than any upstream network has.

On Linux the earliest place to judge a packet is XDP, which runs an eBPF program at the earliest possible point in software, the moment the network driver picks the packet up,8 and in native mode before the kernel allocates a socket buffer for it.9 A program that returns XDP_DROP discards the packet there without spending anything more on it, which is why DDoS mitigation is a standard use.89 The guide to XDP and eBPF covers how it works. What matters here is that a drop is paid for once, at the cheapest place on the machine, not again in a firewall, the TCP stack and the application. That counts most in a packet flood: a 1 Gbit/s port can deliver about 1.49 million minimum-size packets a second (the arithmetic is in the guide to DDoS attacks), each a separate decision.

What a host filter gains is context. It sees every packet that arrives, in full, including the payload of unencrypted protocols, and it can keep state per source: which addresses completed a handshake, which answered a challenge. Its rules can be specific to one server's services instead of general enough for a whole network. Its blind spots are the two ends of the path: a flood the link has already dropped, and anything inside TLS.

State has a price. A stateful firewall can be attacked in a way a stateless one cannot: by making it keep too many entries, or entries arranged to make every lookup slow. An attacker who can predict its hash function can push each lookup from O(1) to O(n).1 So a host filter should hold state only for sources that have earned it, the principle behind SYN cookies, which SYN floods explained covers.

Rate limits count, they do not understand

A rate limit counts something per key over time and drops what goes over a threshold. The key can be a source address, a destination port, a connection, or all traffic at once. Rate limits are cheap and predictable, and good at one job: stopping a handful of sources that each send far too much. They have two blind spots, and attacks aim at both.

Floods inside established connections

A limit on new connections counts handshakes, and a modern client needs few. HTTP/2 multiplexes requests: each request and its response travel as a separate stream inside one connection.10 One bot can open a single TLS connection and send requests down it for as long as the server keeps it open, and a connection-rate limit counts it once. A filter on the path sees encrypted records of ordinary sizes, because TLS is designed to prevent eavesdropping and tampering11 and the requests are inside it.

Clientone botone TCP connection,all of it encryptedConnection-rate limitcounts 1 connection, then noneFilter on the pathsees encrypted bytes onlyTLS endpointholds the keyGET /searchGET /searchGET /searchGET /searchdecryptedrequestsRequest limit at the endpointsees every request: 10 a second
One bot, one connection. On the wire it is a single TCP connection full of encrypted records; only the TLS endpoint, which holds the key, turns them back into requests. A connection limit counts one connection and a filter on the path counts bytes. Only a limit at the endpoint sees the ten requests a second. Illustration.

Rapid Reset, exploited in the wild from August to October 2023,12 went further: HTTP/2 lets a client cancel requests, and resetting many streams very quickly tied up server resources,13 all inside connections that were already open. HTTP/2 lets each side cap how many streams the other may have open at once, but only open and half-closed streams count against that cap, and cancelling a stream closes it at once.10 A stream cancelled a moment after it starts frees its place for the next one, while the server may still be working on the request it carried. That is exactly the room Rapid Reset used. The protocol's own advice covers the case: an endpoint should keep track of features that can be abused, set limits on how much each is used, and may close a connection that behaves suspiciously.10 Only the endpoint that decrypts the traffic can apply limits like that, or limit requests per client, per URL or per connection.

Shared addresses and floods spread thin

The second blind spot is the key. A per-source limit assumes that one address means one sender, and on today's internet it often does not: carrier-grade NAT puts many subscribers behind one public IPv4 address. A server that counts requests per address and sends a noisy one to a penalty box then locks out everyone behind it, and once sharing is widespread, penalty boxes stop working as a defence against abuse.14

Forged source addresses exploit the same assumption from the other side, spreading a flood so thin that each address looks quiet: 375,000 packets a second from 150,000 forged addresses is 375,000 ÷ 150,000 = 2.5 packets a second each, and a limit low enough to catch that would cut off any real client sending more than twice a second. A limit on the port's total catches the volume but cannot tell who is who, so it drops real and fake packets in proportion.

False positives, and why protocol awareness cuts them

A false positive is a real user dropped as an attacker. Every generic rule produces them, because a rule that only counts or matches shapes cannot tell a surge of real users from a flood. In principle, a subtle enough attack is indistinguishable from a sudden crowd of real visitors.1 The worked example below has a small case of it: 40 players behind one carrier address, each sending 20 packets a second, add up to 40 × 20 = 800 a second from that address, which a counter set for one player reads as an attack.

The way out is the test from the start of this guide, something real users can do and attackers cannot. On the network, the most dependable such thing is speaking the protocol. A real client completes the service's handshake, answers the server's challenge and sends packets structured the way the service expects. A forged source cannot complete a handshake at all, because the server's reply goes to the address it forged, and a flood built from a recorded packet repeats one shape endlessly. A protocol check asks "is this the service speaking?" instead of "is this too much?", and the answer does not depend on how many people share an address.

Per-source rate limitat most 100 packets/s per addressProtocol checkclient must finish the handshakeSpoofed flood375,000 packets/s from150,000 forged addresses2.5 packets/s eachSees2.5 packets/s per address,well under the limitLets the flood throughSeesno forged source canfinish a handshakeDrops the floodOne shared address40 real players behindone carrier NAT addressNATall on one addressSees800 packets/s, all fromone addressBlocks real playersSees40 players, each witha finished handshakeLets the players in
Spoofed flood375,000 packets/s from150,000 forged addressesPer-source rate limit (100/s)2.5 packets/s per address, under the limitLets the flood throughProtocol checkno forged source can finish a handshakeDrops the floodOne shared address40 real players behindone carrier NAT addressPer-source rate limit (100/s)800 packets/s, all from one addressBlocks real playersProtocol check40 players, each with a finished handshakeLets the players in
The two cases where a per-source rate limit gets it wrong. A spoofed flood spread over 150,000 forged addresses stays under a limit of 100 packets a second per address; 40 real players behind one carrier NAT address go over it. A check that asks whether each client finished the protocol's handshake gets both right. Illustration; numbers from the worked example below.

Protocol awareness has costs. A validator has to be written for each protocol, and a check running on a port that serves something else drops real traffic as surely as a crude limit, so protocol checks are tied to known services on known ports. It also stops at encryption: a check can read a game's handshake or a DNS query, but not an HTTPS request.

Application-layer filtering: full sight, but only after TLS

At the end of the path is the program that answers: nginx, your application server, the game. It sees what no other layer can: the URL, the user, the session and the cost of each request. Attacks that look legitimate everywhere else can finally be recognised here, such as a flood of searches that each cost a database query.

For HTTPS, "application layer" has a precise meaning: after TLS is terminated. Anything before that point sees encrypted records, so a third party can filter your requests only if it terminates TLS for you. For a CDN in front of an HTTPS site, that means the CDN holds your private key, or a certificate that clients accept as yours.2 In return it can work on requests, for example by rate-limiting particular URLs,2 which is how the search flood in part three of the worked example below could be stopped before it reaches your server. It only helps if the attacker cannot go around it: an origin whose real address leaks can be attacked directly, so the CDN has to keep that address hidden.2

The price of full sight is capacity. Every request that reaches the application has already cost a TCP handshake, a TLS handshake, a connection-table entry and decryption before any of your code runs. Filtering here is the most precise and the most expensive per decision, so it has to be the last layer, never the only one.

One attack, five layers: a worked example

Take one server with a 1 Gbit/s port. It runs a game on UDP and a website on HTTPS, and on a normal evening it receives 20 Mbit/s of real traffic, including 5,000 packets a second from 250 players sending 20 each. Forty of those players are on one mobile carrier that puts them all behind one shared address. An attack arrives in three parts at once. The numbers are illustrative, not from a real incident.

Part one: 80 Gbit/s of reflected DNS answers. With nothing upstream, 80 Gbit/s of attack and 20 Mbit/s of real traffic compete for a 1 Gbit/s link, which carries about one bit in eighty of what arrives: 1 ÷ 80.02 ≈ 1.25%. Real traffic gets through in the same proportion, 20 × 0.0125 = 0.25 Mbit/s, which for players is no service at all. The server's own filter can drop every DNS answer it sees and achieve nothing, because the loss happened in front of it. A blackhole takes real traffic from 1.25% to none and completes the attack. Only something upstream helps, scrubbing or a FlowSpec rule for UDP from port 53: 80 Gbit/s of DNS answers to a server that asked no questions is easy to recognise by its shape, and it never reaches the link.

Part two: 300 Mbit/s of forged game traffic. Packets of 100 bytes built to resemble the game's own: 300,000,000 ÷ 8 ÷ 100 = 375,000 packets a second, from 150,000 forged addresses. Upstream it is unremarkable, UDP to the right port at a rate the port can carry. Per-source limits get it backwards: each forged address sends 2.5 packets a second, under any limit a real player could live with, while a limit of 100 a second, five times one player's rate, cuts off the 40 players on the shared address, who send 40 × 20 = 800 between them. A cap of 50,000 packets a second on the whole port lets through 50,000 of the 380,000 arriving, about 13%, so the players lose 87% of their packets along with the attack. A protocol check on the host drops all 375,000, because none of the forged sources can finish the game's handshake, and passes the 5,000 that can. Dropped at the driver, the forged packets never cost the kernel a socket buffer.

Part three: an HTTPS request flood. 2,000 bots each open one connection to the website and send 10 requests a second over HTTP/2, which makes 20,000 requests a second. At about 500 bytes a request that is 20,000 × 500 × 8 = 80 Mbit/s, 8% of the port. Upstream it is ordinary HTTPS. A connection-rate limit sees 2,000 connections opened once, then nothing new. The host filter can judge the connections, how many each address holds and whether their handshakes were genuine, but not what travels inside them. The TLS endpoint, your web server or a proxy holding your key, sees 20,000 requests a second for the search page, and is the only place a per-client request limit can stop them.

Real traffic that crosses the flooded port with nothing upstream
1.25%
Real traffic after a blackhole: the attack completed
0%
From each forged address, under any limit a real client could pass
2.5packets/s
What a connection limit sees of each bot in part three
1connection

Putting the layers together

LayerSeesCan absorbBlind toUsual failure
Upstream scrubbingAddresses, ports, sizes and ratesFar more than any single linkYour protocol; anything inside TLSGeneric rules drop unusual but real traffic
Blackhole (RTBH)The destination addressWhatever reaches the routers applying it; upstream neighbours too, if asked with BLACKHOLEEverything elseTakes the target completely offline
FlowSpec ruleHeader fields: prefix, protocol, ports, lengthWhatever reaches the routers applying itMeaning; forged packets with the right headersDrops real traffic that matches the rule
Rate limitCounts per address, port or connectionAs much as the place it runsWhat is inside a connection; who shares an addressMisses thin, spread-out floods; blocks shared addresses
Host filter (XDP)Every arriving packet, unencrypted payloads, per-source stateUp to the port's speedFloods the link already dropped; TLS contentsMissing or wrong protocol rules
Application, after TLSWhole requests, users and sessionsThe least: every request costs CPULittle: it sees meaning, but only for traffic that got this farSwamped by volume that got this far

Mistakes that break the stack

Counting a blackhole as protection. It protects the provider's other customers. For the target it delivers the attacker's goal.

Tightening rate limits until the attack stops. It stops when the limit is low enough to block your busiest real users too, often the ones sharing an address. If a limit has to sit below a real client's normal rate to catch a flood, it is the wrong tool for that flood.

Reading one big capacity figure as complete protection. Capacity answers volume. Parts two and three of the worked example came to 380 Mbit/s between them, 38% of a single port, and capacity did nothing about either.

What to set up before you need it

  • Ask your provider the awkward questions. Find out what mitigation is on your account, whether it is applied automatically and whether you are told, and whether the provider reserves the right to sink-hole your traffic to protect its other customers.2
  • Tell the filter what each port serves. Protocol checks run only on ports they know about. List the ports your services really use, describe each one, and close the rest.
  • Put request limits where TLS ends. Rate-limit the expensive URLs per client in your web server or proxy, and patch its HTTP/2 support (see Rapid Reset above).
  • Know what normal looks like. Monitoring that records a baseline of normal traffic has to be running before an attack to be of any use during one.1 A limit set without one is a guess.

One piece of that baseline is who holds your connections. This lists the addresses with the most established connections to port 443 on your own server:

ss -Htn state established '( sport = :443 )' | awk '{print $4}' | sed 's/:[0-9]*$//' | sort | uniq -c | sort -rn | head -5    212 203.0.113.40     31 198.51.100.7      4 192.0.2.19      3 192.0.2.88      2 198.51.100.23

Here 203.0.113.40 holds 212. That could be a crawler, or an office, a university or a mobile carrier with hundreds of people behind one address. Find out which before a limit decides for you.

Questions

What is a blackhole or null route in DDoS protection?

A route that sends every packet for one address to a discard interface instead of delivering it. Providers use it when a flood aimed at one customer threatens the rest of their network. It protects everyone else, but the target receives nothing at all, real users included, so for that address the attack has succeeded.

What does the BGP community 65535:666 mean?

It is BLACKHOLE, the well-known community defined in RFC 7999. A network tags a route with it to ask a neighbouring network to discard all traffic to that prefix, which is usually a single address. 65535:666 is the value 0xFFFF029A written as two 16-bit halves.

What is DDoS scrubbing?

Filtering done by a network with far more capacity than the target. Traffic for the protected addresses is routed through it, packets that look like attack traffic are dropped, and the rest is passed on. It is the only way to survive a flood bigger than your own link while staying reachable, but it judges by addresses, ports, sizes and rates, not by what your application means.

What is BGP FlowSpec?

A way of sending traffic filter rules between routers over BGP, defined in RFC 8955. Each rule matches header fields such as destination prefix, protocol, port and packet length, and carries an action such as discard or a rate limit, so a provider can drop one kind of flood without dropping everything sent to the address. It matches headers only, so a forged packet that looks right passes as easily as a real one.

Is rate limiting enough to stop a DDoS attack?

No. A rate limit counts, so it stops a few sources that send far too much. It misses floods spread thinly over many forged addresses and floods of requests inside a few long-lived connections, and it blocks real users who share one address. It works as one layer among several.

Can DDoS protection inspect HTTPS traffic?

Only whatever terminates TLS: your own server, or a service you give your key or certificate to, such as a CDN. Everything else on the path sees encrypted records. It can judge connections, addresses and rates, but not the requests inside them.

Sources

  1. RFC 4732: Internet Denial-of-Service ConsiderationsIETF
  2. Denial of Service (DoS) guidance: Upstream defencesUK National Cyber Security Centre
  3. Understanding Denial-of-Service AttacksCISA
  4. RFC 5635: Remote Triggered Black Hole Filtering with Unicast Reverse Path Forwarding (uRPF)IETF
  5. RFC 7999: BLACKHOLE CommunityIETF
  6. RFC 2827 (BCP 38): Network Ingress FilteringIETF
  7. RFC 8955: Dissemination of Flow Specification RulesIETF
  8. BPF and XDP Reference Guide: Program TypesThe Cilium project
  9. Program Type BPF_PROG_TYPE_XDPeBPF Docs
  10. RFC 9113: HTTP/2IETF
  11. RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3IETF
  12. HTTP/2 Rapid Reset Vulnerability, CVE-2023-44487CISA
  13. CVE-2023-44487 (CVE record)The CVE Program
  14. RFC 6269: Issues with IP Address SharingIETF

Put it to work on a server of your own.

Size a server for your workload with the calculator, or see which plan fits the job you have in mind.