Live PPS (last 15m)
Drag horizontally on the chart to select a region, then use the buttons above.
Drop reasons (window)
| reason | enforced | would-have |
|---|
Recent bans
| time | ip | port | reason |
|---|
Detected & labeled attacks
| id | started | ended | peak pps | dropped | source | verdict |
|---|
Live players & sessions
| edition | username | ip | port | protocol | intent | joined | bytes | pkts |
|---|
Bedrock players show the source IP but not the username (RakNet/JWT parsing is a separate project). Pings aren't shown — Minecraft encrypts after login so the proxy can't see keepalive packets.
Banned IPs
| ip | banned | expires in |
|---|
Bans live in the BPF map and apply to ALL traffic from that IP, not just Minecraft ports. Duration is the global
ban_duration_sec from BPF tunables (currently set in Settings).
Forward to backend
Forwards traffic from this scrubber's protected ports to a target IP. TCP uses HAProxy with PROXY protocol v2 so Velocity sees the real player IP. UDP (Bedrock via Geyser) uses plain DNAT — Geyser players appear with the scrubber IP.
Backend ports (leave equal to listener for default)
| proto | listener | → backend |
|---|
What your friend needs to do
- In
velocity.tomlunder[advanced]setproxy-protocol = true, then restart Velocity. - Forward TCP
25565(and UDP19132,19133if using Geyser/Bedrock) on his router to Velocity's LAN IP. - Firewall those ports to accept ONLY from
51.195.5.131— otherwise attackers can bypass the scrubber.
Detector weights
| feature | weight |
|---|
Threshold
Untrainable ranges
| start | end | note |
|---|
Operating mode
Train and Dry-run never drop packets. Train also lets baselines update on real attacks unless you mark regions untrainable.
BPF tunables (live)
Auto-tuner overwrites SYN/UDP rate & burst every 5 minutes based on peaceful baselines.
Change password