Manual / Leviathan 1.3
Manual/Configuration

Configuration

The settings that decide what Leviathan sees, what it refuses, and when it hardens.

The configuration is leviathan.yml beside the proxy jar. Runtime data lives in ./leviathan/. This is proxy-level configuration, not a plugin folder. Public defaults below are the shipped defaults; tune against your own join rate.

The file

Start from the file written on first boot and keep a copy before editing. The operator command /leviathan reload re-reads it; AbyssLink keys are restart-required and do not rebind on reload.

Do not copy secrets into a public configLicense keys, API keys, fingerprints, and TLS private keys are credentials. Keep them out of issues, screenshots, and repository examples. Environment variables take precedence for the Premium license fields.

Throttle

Per-IP and global rate limits run on the socket and handshake, before a username exists.

throttle.max-connections-per-ip3 per 2000 ms (window-ms)
throttle.max-connections-per-24Optional IPv4 /24 cap; 0 disables
throttle.max-logins-per-second80 proxy-wide
throttle.reject-malformed-handshaketrue
throttle.max-hostname-length255

Verify + FrameGuard

Fresh IPs must return after a reconnect challenge. FrameGuard only exists during handshake/login and detaches once the connection is verified.

verify.reconnect-challengetrue
verify.reconnect-window-ms30000
verify.trust-duration-ms3600000 (one hour)
verify.max-names-per-ip4 per 60000 ms
verify.keepalive-checktrue
packet-guard.max-packets-per-second40
packet-guard.max-login-bytes8192
packet-guard.login-deadline-ms10000
packet-guard.max-packets-per-tick8 per 50 ms tick
packet-guard.max-frame-bytes2097152

Socket fingerprint

An optional Linux epoll check on negotiated MSS. It is a no-op on unsupported hosts and never fails a connection it cannot inspect.

fingerprint.enabledfalse
fingerprint.only-during-attacktrue
fingerprint.min-mss500
fingerprint.max-mss1500

GeoIP / ASN / VPN

Offline country/ASN blocks use operator-supplied MaxMind databases. Online reputation lookups are optional, asynchronous, HTTPS-only, and cached.

anti-vpn.enabledfalse (online lookups)
anti-vpn.only-during-attacktrue
anti-vpn.cache-ttl-ms86400000
anti-vpn.providerproxycheck or iphub
geoip-country-db / geoip-asn-dbOperator-supplied .mmdb paths
blocked-countries / blocked-asnsEmpty by default

The GeoIP2 library is shaded; the .mmdb data is not bundled. Missing databases skip that check.

Blacklist + reputation

Automatic blacklist entries expire. Reputation catches slow bots that stay under each individual window; scores decay over time.

blacklist.auto-blacklist-threshold6 failures per 60000 ms
blacklist.auto-duration-ms1800000 (30 minutes)
blacklist.persisttrue
reputation.blacklist-threshold100 points
reputation.decay-per-minute5 points
reputation.persisttrue

Attack + webhook

Crossing the trigger hardens verification and can enable paid lookups. The webhook is async and fires on start/end, never on every blocked connection.

attack.trigger-cps60 new connections/second
attack.cooldown-seconds20
attack.harden-on-attacktrue
webhook.enabledfalse
webhook.urlHTTPS Discord-compatible endpoint
webhook.on-attack-start / endtrue / true

Set trigger-cps above your real restart-stampede peak. A trigger that is too low makes normal joins look like an attack; a trigger that is too high delays the hardened mode.

Metrics

When enabled, the Prometheus endpoint exposes fixed-cardinality counters and gauges. It has no authentication, so bind it to loopback or a private interface; never expose it directly to the public internet.

No per-player labelsThe metrics do not label by player, IP, node, or certificate. Keep it that way. Verify the bind address before enabling it on a public host.

The Premium-only control plane is disabled by default, requires verified entitlement, and is restart-required. It belongs on a private bind and is never a public HTTP mutation endpoint. See AbyssLink for the full boundary.

Read the operations manual →