Description
WaruiAntiVPN is a lightweight, highly configurable Spigot plugin designed to block players connecting through VPNs, proxies, data centers, Tor exit nodes, and other anonymizers. Ships with a rich set of built‑in detection services, and lets you easily add your own IP‑checking APIs.
Features
- Multiple Detection Services: Out‑of‑the‑box support for ProxyCheck, IPAPI, Blackbox, Funkemunky, IPQuery, IPRisk, MITL, Negativity, SkyDB, RayZS, and more.
- Custom Sources: Define your own HTTP‑based services to check any IP using JSON or HTML models.
- Bypass & Blacklist: Whitelist specific IPs and blacklist unwanted ones.
- Customizable Messages: Fully configurable kick/deny messages with color codes.
- Extensible: Add or disable services, tweak parameters (risk score, days seen, tags) in your config.
Configuration (config.yml)
Code (YAML):
bypass-ips
:
-
"45.66.55.21"
blacklist-ips
:
-
"10.0.0.5"
-
"203.0.113.42"
messages:
vpn-detected
:
-
"&cVPN или прокси запрещены."
blacklisted-detected
:
-
"&cВаш IP в чёрном списке."
services:
proxycheck:
enabled
: false
api-key
:
"your-proxycheck-api-key"
vpn
: true
asn
: true
risk
: true
port
: true
seen
: true
days
: 7
tag
:
"WaruiAntiVPN"
ipapi:
enabled
: true
proxy-field
: true
hosting-field
: true
ip2:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.2ip.io/{IP}?token={KEY}"
values:
fields
:
-
"asn.hosting"
type
: boolean
antivpn-io:
enabled
: false
model
:
"JSON"
headers:
Authorization
:
"Bearer KEY"
url
:
"https://connection.antivpn.io/api/check?ip={IP}"
values:
fields
:
-
"VPN"
type
: boolean
antivpn-net:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://antivpn.net/api/v1/lookup?ip={IP}&key={KEY}&format=-json"
values:
fields
:
-
"is_proxy"
type
: boolean
banproxy:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://banproxy.com/api/{IP}/{KEY}"
values:
fields
:
-
"proxy"
-
"hosting"
type
: boolean
blackbox:
enabled
: true
model
:
"HTML"
url
:
"https://blackbox.ipinfo.app/lookup/{IP}"
values:
fields
:
{
}
# не используются
type
:
"Y"
# сравниваем ответ body == "Y"
freeipapi:
enabled
: true
model
:
"JSON"
headers
:
[
]
# можно указать Authorization: Bearer KEY
url
:
"https://freeipapi.com/api/json/{IP}"
values:
fields
:
-
"isProxy"
type
: boolean
funkemunky:
enabled
: true
model
:
"JSON"
url
:
"https://funkemunky.cc/vpn?ip={IP}"
key
:
""
values:
fields
:
-
"proxy"
-
"data_center"
-
"vpn"
type
: boolean
getipintel:
enabled
: false
model
:
"JSON"
key
:
""
# укажи здесь свой email, иначе блокировка
url
:
"https://check.getipintel.net/check.php?ip={IP}&contact={KEY}&flags=m&format=json"
values:
fields
:
-
"result"
type
: boolean
greip:
enabled
: false
model
:
"JSON"
headers:
Authorization
:
"Bearer KEY"
url
:
"https://greipapi.com/lookup/ip/threats?ip={IP}"
values:
fields
:
-
"data.threats.isProxy"
-
"data.threats.isRelay"
-
"data.threats.isTor"
-
"data.threats.isHosting"
type
: boolean
ip2location:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.ip2location.io/?ip={IP}&format=json{KEY}"
values:
fields
:
-
"is_proxy"
-
"proxy.is_vpn"
-
"proxy.is_tor"
-
"proxy.is_public_proxy"
-
"proxy.is_web_proxy"
-
"proxy.is_web_crawler"
-
"proxy.is_residential_proxy"
-
"proxy.is_botnet"
-
"proxy.is_spammer"
-
"proxy.is_scanner"
-
"proxy.is_consumer_privacy_network"
-
"proxy.is_enterprise_private_network"
-
"proxy.is_data_center"
type
: boolean
ipapi_is:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.ipapi.is/?q={IP}&key={KEY}"
values:
fields
:
-
"is_datacenter"
-
"is_tor"
-
"is_proxy"
-
"is_vpn"
-
"is_abuser"
-
"is_bogon"
type
: boolean
ipdetective:
enabled
: false
model
:
"JSON"
headers:
x-api-key
:
"KEY"
url
:
"https://api.ipdetective.io/ip/{IP}?info=true"
values:
fields
:
-
"type"
type
:
-
"vpn"
-
"datacenter"
-
"bot"
-
"proxy"
ipgeolocation:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.ipgeolocation.io/ipgeo?apiKey={KEY}&ip={IP}"
values:
fields
:
-
"security.is_tor"
-
"security.is_proxy"
-
"security.is_cloud_provider"
-
"security.is_known_attacker"
-
"security.is_anonymous"
type
: boolean
iphub:
enabled
: false
model
:
"JSON"
headers:
X-Key
:
"KEY"
url
:
"https://v2.api.iphub.info/ip/{IP}"
values:
fields
:
-
"block"
type
: boolean
iphunter:
enabled
: false
model
:
"JSON"
headers:
X-Key
:
"KEY"
url
:
"https://www.iphunter.info:8082/v1/ip/{IP}"
values:
fields
:
-
"data.block"
type
: boolean
ipqualityscore:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://ipqualityscore.com/api/json/ip/{KEY}/{IP}?strictness=0&allow_public_access_points=true"
values:
fields
:
-
"proxy"
-
"vpn"
-
"tor"
-
"bot_status"
-
"recent_abuse"
type
: boolean
ipquery:
enabled
: true
model
:
"JSON"
url
:
"https://api.ipquery.io/{IP}?format=json"
values:
fields
:
-
"risk.is_vpn"
-
"risk.is_tor"
-
"risk.is_datacenter"
-
"risk.is_proxy"
type
: boolean
iprisk:
enabled
: true
model
:
"JSON"
url
:
"https://api.iprisk.info/v1/{IP}"
values:
fields
:
-
"vpn"
-
"data_center"
-
"open_proxy"
type
: boolean
ipstack:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.ipstack.com/{IP}?access_key={KEY}&security=1"
values:
fields
:
-
"security.is_proxy"
-
"security.is_crawler"
-
"security.is_tor"
-
"security.hosting_facility"
type
: boolean
mitl:
enabled
: true
model
:
"JSON"
url
:
"https://antivpn.mitl.it/api/v1/checkip?ip={IP}"
values:
fields
:
-
"isVPN"
type
: boolean
negativity:
enabled
: true
#медленный отклик (примерно 1200 мс)
model
:
"JSON"
url
:
"https://api.negativity.fr/ip/{IP}"
values:
fields
:
-
"proxy"
-
"vpn"
type
: boolean
protectcord:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://api.protectcord.com/checkip/{IP}?key={KEY}"
values:
fields
:
-
"is_bogon"
-
"is_crawler"
-
"is_datacenter"
-
"is_tor"
-
"is_proxy"
-
"is_vpn"
-
"is_abuser"
type
: boolean
proxycheck_alt:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://proxycheck.io/v2/{IP}?vpn=3&key={KEY}"
values:
fields
:
-
"%IP%.proxy"
-
"%IP%.vpn"
type
:
"yes"
proxyradar:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://proxyradar.io/v1/check?key={KEY}&ip={IP}&format=json"
values:
fields
:
-
"proxy"
type
: boolean
rayzs:
enabled
: true
model
:
"HTML"
url
:
"https://www.rayzs.de/provpn/api/proxy.php/?a={IP}"
values:
fields
:
{
}
# не используются
type
: boolean
# кик по любому не-null/не-"false"
skydb:
enabled
: true
#медленный отклик (примерно 1500 мс)
model
:
"JSON"
url
:
"http://ipcheck.skydb.de/getinfo?ip={IP}"
values:
fields
:
-
"Hosting"
-
"Proxy"
-
"VPN"
-
"TOR"
type
: boolean
vpnapi:
enabled
: false
model
:
"JSON"
key
:
""
# оставь пустым, если без ключа (100 запросов бесплатно)
url
:
"https://vpnapi.io/api/{IP}?key={KEY}"
values:
fields
:
-
"security.vpn"
-
"security.proxy"
-
"security.tor"
-
"security.relay"
type
: boolean
vpnapi_xyz:
enabled
: false
model
:
"JSON"
key
:
""
url
:
"https://vpn-api.xyz/detector?key={KEY%}&host={IP}"
values:
fields
:
-
"is_proxy"
type
: boolean
vpnblocker:
enabled
: false
model
:
"JSON"
headers:
X-API-KEY
:
"KEY"
url
:
"https://api.vpnblocker.net/v2/json/{IP}"
values:
fields
:
-
"host-ip"
type
: boolean
zowi:
enabled
: false
#криво работает
model
:
"JSON"
url
:
"https://central.zowi.gay/check/{IP}"
values:
fields
:
-
"malicious"
type
: boolean
How to Add Custom Sources
- Copy one of the existing service blocks in services:.
- Rename the block (e.g. mycustom).
- Configure:
- enabled: true
- model: "JSON" or "HTML"
- url: Use {IP} placeholder for the player’s IP.
- Optional headers or api-key / key fields.
- Under values:, list the JSON fields to inspect, and set type: boolean (or "Y" for HTML).