Attacks & threats

6 min readUpdated

What is a UDP flood?

Quick answer

A UDP flood sends a large volume of UDP packets to a target so that it spends all its capacity receiving, inspecting and discarding them. Unlike TCP there is no handshake, so the attacker never has to prove anything or wait for a reply, and packets can be fired continuously with forged source addresses. It is the most common attack against game servers, voice servers and anything else that has to keep a UDP port open, precisely because those services cannot simply refuse the protocol.

01Why attackers prefer UDP

TCP requires a handshake, which means the sender has to hold state and respond. UDP requires nothing. RFC 768, the 1980 specification, describes it as transaction oriented, with delivery and duplicate protection not guaranteed: a packet is sent, and that is the whole interaction. The attacker can therefore emit at line rate with no bookkeeping. The wider trade-offs are laid out in TCP vs UDP.

It also means source addresses can be forged freely, since no reply needs to come back. The traffic arriving at the victim appears to originate everywhere at once, and blocking sources is both futile and harmful.

  • No handshake, so no state or cost on the attacker's side
  • Source addresses can be spoofed with no downside for the attacker
  • Ideal for reflection and amplification through third-party servers
  • Targets that need UDP open cannot simply drop the protocol

02How big UDP floods get

UDP is the workhorse of volumetric attacks. Cloudflare's DDoS report for the third quarter of 2025 found UDP floods the most common network-layer vector, ahead of DNS, SYN and ICMP floods, and its records that quarter were a UDP attack peaking at 29.7 Tbps and a separate attack of 14.1 billion packets per second.

The 29.7 Tbps attack was carpet bombing: it spread across an average of 15,000 destination ports per second, so no single port stood out. It came from Aisuru, a botnet Cloudflare estimated at 1 to 4 million infected hosts. Floods at that scale are not something any single server, or most hosting networks, can absorb on their own.

03What actually breaks first

The packets do not need to be valid or even reach an open port. If the port is closed, the operating system answers with an ICMP port-unreachable message. Linux rate-limits those replies by default, but every packet still costs a lookup and a decision, and a stack without such a limit spends its own outbound bandwidth on replies.

If the port is open, the application has to look at every packet to decide it is garbage. For a game server that means the same thread handling player movement is being interrupted thousands of times a second to discard junk, which is why the symptom is stuttering and rubber-banding long before anything goes fully offline. The specifics for game hosts are covered in DDoS protection for game servers.

04Amplification makes it much larger

Because UDP has no handshake, an attacker can send a small request to a third-party server with the victim's address forged as the source. The server replies to the victim with something much larger. Public DNS resolvers, NTP servers, memcached instances and some game-server query protocols all have this property; amplification attacks covers the whole family.

The multipliers are large. CISA's alert on UDP-based amplification lists bandwidth amplification factors of 28 to 54 for DNS, 556.9 for NTP and 10,000 to 51,000 for memcached; the guides to NTP amplification and memcached amplification cover each in detail.

This turns a modest connection into a large attack, and it means the traffic arriving at the victim genuinely comes from legitimate servers, a further reason source-based blocking does more harm than good.

05The shortcut that looks like protection

Many providers respond to a UDP flood by null-routing the target address, or by dropping all UDP traffic for the duration. Both stop the flood from reaching them. Neither is protection, because from the player's point of view the server is exactly as unreachable as it would have been if the attack had succeeded. RFC 5635, which documents remotely triggered blackholing, says so plainly: it completes the attack, in that the target becomes unreachable.

For anything that depends on UDP, the useful question when comparing providers is not whether they can stop the flood but whether your legitimate UDP traffic keeps flowing while they do.

06How to confirm a UDP flood

A packet capture settles the question in seconds. Look at what dominates: source ports of well-known reflection services, IP fragments, or a spread of random ports from random sources. The table maps what you see to where it has to be fixed.

What you seeLikely causeWhere it has to be fixed
Inbound link saturated, server idleVolumetric flood, often amplifiedUpstream, before your link
Link fine, CPU busy handling packetsA high rate of small packets, measured in packets per secondUpstream, or early drops on the host for small floods
Players lag, the process stays upJunk packets at the game portA filter that understands the game protocol
Many outbound ICMP unreachable messagesA flood aimed at closed portsUpstream; the kernel's rate limit only softens it
Traffic from source port 53, 123 or 11211Reflection through third-party serversUpstream, by source port and packet shape
tcpdump filters for a UDP flood (checked with tcpdump -d)
# replies from common reflection services (DNS, NTP, CLDAP, SSDP, WS-Discovery, memcached)
tcpdump -ni eth0 -c 200 'udp and (src port 53 or src port 123 or src port 389
  or src port 1900 or src port 3702 or src port 11211)'

# IPv4 fragments, common in amplified floods
tcpdump -ni eth0 -c 200 'ip[6:2] & 0x3fff != 0'

# your own IPv4 port-unreachable replies: a flood is hitting closed ports
tcpdump -ni eth0 -c 50 'icmp[icmptype] == icmp-unreach and icmp[icmpcode] == 3'

07What real filtering looks like

None of this can be done on the server itself: by the time packets arrive there, the bandwidth has already been consumed, which is the ceiling a host firewall runs into. UDP filtering only works upstream, which is why non-HTTP services are delivered protection through routing, typically over a GRE tunnel, rather than through a proxy.

Host rules still have a place behind that upstream filter: they keep junk away from the game process once the link is no longer the bottleneck. The example below drops reflection traffic aimed at a game port, drops IPv4 fragments and caps each source. The port and rates are placeholders to replace with your own game's measured traffic, and game-specific guides such as FiveM DDoS protection list the ports worth covering.

  • Rate and shape per source and per destination port, upstream of your link
  • Drop packets that cannot be valid for the protocol on that port
  • Recognise the signatures of reflection sources and discard them early
  • Keep the legitimate protocol flowing: filtering, not blanket blocking
  • Hide the origin address so the attacker can only reach the filtered path
Host-side UDP hygiene with nftables (placeholders; validated with nft -c and loaded in a netns)
table inet udp_guard {
    set reflect_ports {
        type inet_service
        elements = { 19, 53, 123, 389, 1900, 3702, 11211 }
    }
    set game_src {
        type ipv4_addr
        flags dynamic
        timeout 1m
    }
    # before reassembly: drop IPv4 fragments (only if your game never fragments)
    chain pre_defrag {
        type filter hook prerouting priority -450; policy accept;
        ip frag-off & 0x3fff != 0 counter drop
    }
    chain prerouting {
        type filter hook prerouting priority raw; policy accept;
        udp dport 27015 udp sport @reflect_ports counter drop
        udp dport 27015 update @game_src { ip saddr limit rate over 300/second burst 600 packets } counter drop
    }
}

Questions

Frequently asked questions

The packets have already crossed your uplink by the time your firewall sees them, so the bandwidth is spent either way. A local firewall stops the application being disturbed, not the link being saturated.

Very likely. Degraded tick rate with the process still running is the classic signature: the server is spending its time discarding packets instead of simulating the game.

No, and it can hurt. A closed port makes the operating system answer packets with ICMP unreachable messages. Linux rate-limits those by default, but the flood still has to be received and processed, and the bandwidth is spent either way.

Yes, but it requires filtering upstream on a network with capacity, rather than null-routing. The filter judges packets on shape, rate and source behaviour while letting valid game traffic through.

Sources

Sources and verification

tcpdump filters checked with tcpdump 4.99.3 (tcpdump -d); nftables ruleset syntax-checked with nft -c and loaded in an isolated network namespace (nft 1.0.6), on Debian 12, October 2026.

  1. 01RFC 768: User Datagram Protocol · IETF
  2. 02DDoS threat report for 2025 Q3 · Cloudflare
  3. 03UDP-Based Amplification Attacks (TA14-017A) · CISA
  4. 04RFC 5635: Remote Triggered Black Hole Filtering with Unicast Reverse Path Forwarding · IETF
  5. 05IP Sysctl (icmp_ratelimit, icmp_ratemask, icmp_msgs_per_sec) · kernel.org
  6. 06Sets · nftables wiki

Last updated