# ------------------------------------------------------------------------------------------- # # ______ _____ _ # # | ___| | __ \ | | # # | |_ ___ __ __| | \/ __ _ | |_ ___ # # | _|/ _ \\ \/ /| | __ / _` || __|/ _ \ # # | | | (_) |> < | |_\ \| (_| || |_| __/ # # \_| \___//_/\_\ \____/ \__,_| \__|\___| # # # # [v1.0.3] # # # # ------------------------------------------------------------------------------------------- # # If you still has questions, you can join to the discord server in: # https://discord.com/invite/FTtVXfj or you can use the Discussion page in https://www.spigotmc.org/threads/646308/. # ___ _ _ # / \__ _| |_ __ _| |__ __ _ ___ ___ # / /\ / _` | __/ _` | '_ \ / _` / __|/ _ \ # / /_// (_| | || (_| | |_) | (_| \__ \ __/ # /___,' \__,_|\__\__,_|_.__/ \__,_|___/\___| # Configure a database for use. database: # - Available options in type. # All options use HikariCP for better performance. # |=> MySQL # |=> MariaDB # |=> PostgreSQL # |=> SQLite # |=> H2 # |=> Jaybird (Experimental, USE IN YOUR RISK!) # # ----------------------------------------------------------------------------- # Type | Stability | Performance | Support | Popularity | Concurrence | # ----------------------------------------------------------------------------- # MariaDB | 4⭐ | 4⭐ | 5⭐ | 5⭐ | 5⭐ # MySQL | 4⭐ | 4⭐ | 5⭐ | 5⭐ | 4⭐ # PostgreSQL | 5⭐ | 5⭐ | 4⭐ | 3⭐ | 5⭐ # SQLite | 2⭐ | 5⭐ | 4⭐ | 4⭐ | 1⭐ # H2 | 2⭐ | 4⭐ | 3⭐ | 2⭐ | 1⭐ # Jaybird | 2⭐ | 2⭐ | 1⭐ | 1⭐ | 1⭐ # # If you change this configuration and your server is already # started. You can use the command "/foxgate db reconnect" to # apply the changes without restarting plugin or server. # Remember first reload the plugin with "/foxgate reload" # and use that command. type: "SQLite" # Edit table in case you want a different. # If you want to use your actually stats (of 1.0.5-pre4 or older), # use the next: # - "vpn_cache" table: "foxgate" # You want to save the cache in the database in new table # instead of use a file? # - Use this only if you want to use multi-proxy or you're sure # you don't has problems with your database. # # Name of this table it's '"table"_cache', so, if the "table" # it's "foxgate", the name will be: "foxgate_cache", or if # the "table" it's "vpn_cache", will be "vpn_cache_cache". Always # finish with "_cache". cache_database: false # Do you want enable whitelist base in database? # - Set this feature to enabled in case you want to save # whitelist IP's/names in a database instead of a file. # Recommended in case you use multi-proxy. # # If you use this feature in a server equal, you can use # reason and timestamp feature. Otherwise, you can only save # IP and Names to a whitelist list in file (don't has this # options of reason and timestamp). # # (!) This feature only works in MySQL, MariaDB and PostgreSQL. # # Name of this table it's '"table"_whitelist", so, if the "table" # it's "foxgate", the name will be: "foxgate_whitelist", or if # the "table" it's "vpn_cache", will be "vpn_cache_whitelist". Always # finish with "_whitelist". whitelist_database: false # MariaDB/MySQL databases type. Edit here. remote: # Determine information of your database. hostname: "localhost" port: 3306 database: "foxav_db" username: "root" password: "password123" # These settings apply to the MySQL/MariaDB connection pool (HikariCP). # - Default values are suitable for most users. Only modify these if you know what you're doing! pool-settings: # The maximum number of connections in the connection pool. # - Determines the upper limit of active database connections that can be managed simultaneously. # - Setting this too high can overload your database server, while setting it too low can cause delays. # Example: # If your server has high traffic and the database can handle it, set this to 10 or higher. # Recommended: 10 # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing maximum-pool-size: 10 # Minimum number of idle connections to maintain in the pool. # - The pool will try to maintain this number of idle (inactive) connections ready for use. # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool, # ensuring consistent resource allocation. # Example: # For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'. # Recommended: 2 minimum-idle: 2 # Sets the maximum time an idle connection can remain in the pool before being automatically closed. # - Connections that remain idle for longer than the configured value will be removed from the pool # and replaced with new connections as needed. # - This is useful to free up resources and keep connections "fresh" avoiding possible problems with # stale connections. # Recommended: 600000 (10 minutes) idle-timeout: 600000 # Maximum lifetime of a connection in the pool, in milliseconds. # - Connections older than this value will be closed and replaced. # - This prevents stale connections from lingering indefinitely and reduces database timeout issues. # - Should be at least 30 seconds less than the timeout imposed by the database itself. # Example: # If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms). # Recommended: 1500000 (25 minutes) maximum-lifetime: 1500000 # Frequency of pings to keep the connection alive, in milliseconds. # - This prevents connections from being closed due to inactivity (common in many databases or firewalls). # - Must be less than 'maximum-lifetime' and greater than 30 seconds (30000 ms). # Example: # For long-running servers, a value of 10 minutes (600000 ms) is generally ideal. # Recommended: 600000 (10 minutes) keepalive-time: 600000 # The maximum time in milliseconds to wait for a connection from the pool. # - If no connection is available within this time, an exception will be thrown. # - Setting a low value ensures responsiveness but may cause issues under heavy load. # Example: # For responsive applications, a value between 3-5 seconds (3000-5000 ms) is ideal. # Recommended: 5000 (5 seconds) connection-timeout: 5000 # Custom validation timeout (time taken to validate a connection), in milliseconds. # - Determines how long the pool will wait while testing if a connection is still valid. # - A low value improves responsiveness, but setting it too low may cause false negatives. # Example: # For most databases, 3 seconds (3000 ms) is sufficient for validation. # Recommended: 3000 (3 seconds) validation-timeout: 3000 # Custom properties for advanced users. # Add any additional properties to fine-tune the connection. # # You can uncomment unnecesary properties or remove, # also edit to values that is perfect for you. # (!) THIS PROPERTIES IS BASED WITH SUPPORT # MARIADB, IF YOU GET ERROR IN MYSQL, YOU CAN # ADAPT OR CONSIDERING TO CHANGE TO MARIADB, # THAT WORKS WITH MYSQL DATABASES. properties: # - SSL. # Database connection settings. # Adjust these properties to optimize the connection with your MySQL/MariaDB server. # Enables or disables SSL for secure connections. # It is highly recommended to set this to true if your server supports SSL. # Default is false, as many MySQL/MariaDB servers do not support SSL. sslMode: "disabled" requireSSL: "false" # If set to "true", forces SSL connections. Overrides 'sslMode'. verifyServerCertificate: "false" # Validates the server's SSL certificate. Set to "true" for production. # - Connection Optimization cachePrepStmts: "true" # Enables prepared statement caching prepStmtCacheSize: "250" # Number of prepared statements to cache prepStmtCacheSqlLimit: "2048" # Maximum size of a query in the cache useServerPrepStmts: "true" # Uses server-side prepared statements # - Performance and Buffering rewriteBatchedStatements: "true" # Optimizes batch insert/update performance useCompression: "false" # Enables compression for data transfer (optional) maintainTimeStats: "false" # Disables time statistics for improved performance autoReconnect: "true" # Automatically reconnects if the connection is lost # - Character Encoding # Specifies whether Unicode character encoding should be used. # If working with multilingual data, this is highly recommended. useUnicode: "true" # Defines the character encoding for the database connection. # Use "utf8" for compatibility with most character sets. characterEncoding: "utf8" # - Time Zone serverTimezone: "UTC" # Ensures consistent timezone handling postgresql: hostname: "localhost" port: 5432 database: "foxav_db" username: "postgres" password: "password123" # Database connection settings for PostgreSQL. settings: # Adjust these properties to optimize the connection with your PostgreSQL server. # Enables or disables SSL for secure connections. # It is highly recommended to set this to true if your server supports SSL. # Default is false. ssl: false # The maximum time in seconds to wait for a connection from the pool. # Choose a value between 1 and 5 for a balance between availability and performance. # Recommended: 3.0 connectiontimeout: 3.0 # Specifies whether Unicode character encoding should be used. # PostgreSQL natively supports Unicode, so this can be left as true. useUnicode: true # Defines the character encoding for the database connection. # Use "UTF-8" to handle multilingual data and ensure compatibility. characterEncoding: "UTF-8" # Keeps idle connections alive. tcpKeepAlive: true # Timeout for socket operations in seconds. socketTimeout: 30 # Number of prepared statement executions before switching to server-side prepared statements. prepareThreshold: 5 # Application name for debugging or monitoring purposes. applicationName: "FoxGate" # Enables optimized binary transfer for certain data types. binaryTransfer: true # These settings apply to this PostgreSQL, because uses Hikari for connection. # - Default values are suitable for most users. Only modify these if you know what you're doing! pool-settings: # The maximum number of connections in the connection pool. # - Determines the upper limit of active database connections that can be managed simultaneously. # - Setting this too high can overload your database server, while setting it too low can cause delays. # Example: # If your server has high traffic and the database can handle it, set this to 10 or higher. # Recommended: 10 # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing maximum-pool-size: 10 # Minimum number of idle connections to maintain in the pool. # - The pool will try to maintain this number of idle (inactive) connections ready for use. # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool, # ensuring consistent resource allocation. # Example: # For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'. # Recommended: 2 minimum-idle: 2 # Maximum lifetime of a connection in the pool, in milliseconds. # - Connections older than this value will be closed and replaced. # - This prevents stale connections from lingering indefinitely and reduces database timeout issues. # - Should be at least 30 seconds less than the timeout imposed by the database itself. # Example: # If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms). # Recommended: 1800000 (30 minutes) maximum-lifetime: 1800000 # The maximum time in milliseconds to wait for a connection from the pool. # - If no connection is available within this time, an exception will be thrown. # - Setting a low value ensures responsiveness but may cause issues under heavy load. # Example: # For responsive applications, a value between 30-50 seconds (30000-50000 ms) is ideal. # Recommended: 30000 (30 seconds) connection-timeout: 30000 # For avoid any auto closing, this only connect to HikariCP without additional values, # so prevent any issues, allowing the usage of pure SQLite. sqlite: file: "FoxGate.db" h2: file: "h2db" # These settings apply to this H2, because uses Hikari for connection. # - Default values are suitable for most users. Only modify these if you know what you're doing! pool-settings: # The maximum number of connections in the connection pool. # - Determines the upper limit of active database connections that can be managed simultaneously. # - Setting this too high can overload your database server, while setting it too low can cause delays. # Example: # If your server has high traffic and the database can handle it, set this to 10 or higher. # Recommended: 10 # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing maximum-pool-size: 10 # Minimum number of idle connections to maintain in the pool. # - The pool will try to maintain this number of idle (inactive) connections ready for use. # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool, # ensuring consistent resource allocation. # Example: # For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'. # Recommended: 1 minimum-idle: 1 # Maximum lifetime of a connection in the pool, in milliseconds. # - Connections older than this value will be closed and replaced. # - This prevents stale connections from lingering indefinitely and reduces database timeout issues. # - Should be at least 30 seconds less than the timeout imposed by the database itself. # Example: # If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms). # Recommended: 1800000 (30 minutes) maximum-lifetime: 1800000 # The maximum time in milliseconds to wait for a connection from the pool. # - If no connection is available within this time, an exception will be thrown. # - Setting a low value ensures responsiveness but may cause issues under heavy load. # Example: # For responsive applications, a value between 30-50 seconds (30000-50000 ms) is ideal. # Recommended: 30000 (30 seconds) connection-timeout: 30000 # This database is experimental. jaybird: hostname: "localhost" port: 3050 database: "FoxGate.fdb" username: "foxgate" password: "" # These settings apply to this Firebird database, as it uses Hikari for connection pooling. # - Default values are suitable for most users. Modify only if necessary. pool-settings: # The maximum number of connections in the connection pool. # - Determines the upper limit of active database connections that can be managed simultaneously. # - Setting this too high can overload your database server, while setting it too low can cause delays. # Recommended: 10 maximum-pool-size: 10 # Minimum number of idle connections to maintain in the pool. # - The pool will try to maintain this number of idle (inactive) connections ready for use. # Recommended: 1 minimum-idle: 1 # Maximum lifetime of a connection in the pool, in milliseconds. # - Connections older than this value will be closed and replaced. # Recommended: 1800000 (30 minutes) maximum-lifetime: 1800000 # The maximum time in milliseconds to wait for a connection from the pool. # - If no connection is available within this time, an exception will be thrown. # Recommended: 30000 (30 seconds) connection-timeout: 30000 # When an IP isn't detected a vpn or proxy, this need to save in # cache to don't make more requests for a little time for save # performance and requests, customizable here. bypass: # Enable this feature? enable: true # Determine the amount in hours to save the IP in cache and avoid # make more requests to this IP. Useful to save performance and # verify only one time for certain time. # # Recommended: 2 # Type 'permanent' for bypass permanent. expiration_time: 2 # When an IP is detected in a result, this is save in the cache # to don't make more request for a little time, this value is # saved in hours. # # Recommended: 36 # Type 'permanent' for blocking permanent. expiration_time: 36 # ___ __ _ _ _ # / __\___ _ __ / _(_) __ _ _ _ _ __ __ _| |_(_) ___ _ __ # / / / _ \| '_ \| |_| |/ _` | | | | '__/ _` | __| |/ _ \| '_ \ # / /__| (_) | | | | _| | (_| | |_| | | | (_| | |_| | (_) | | | | # \____/\___/|_| |_|_| |_|\__, |\__,_|_| \__,_|\__|_|\___/|_| |_| # |___/ # Configure some others little options. configuration: # Allow the usage of Metrics (bStats) in your server? # - This is only for stadistics usage. # # ❝ What data is collected? # We are using bStats (https://bstats.org/), this does not collect # any personal data. Most of the collected data is information about # the plugin's server like player count, online mode, Minecraft version, # Java version, and more. All data gets sent and stored completely # anonymously. See more in information about this in "bStats: Getting Started" # https://bstats.org/getting-started # # (!) Since 1.0.2 (premium) and 1.1.0 (free), FoxGate uses # their own code base for Metrics, but following their # rules. This use asynchronous methods to send data and # changes to Gson for better stability; improving the # performance of this. You can safety has enable this to # help to the creator without affecting the performance. metrics: true # Print to console? # - Enable this to send the equal notification to the console when # a player is flagged. console: true # Define the permission. # - Set here the permission to see the notification in case this # is used in case a player is using VPN. By default, this is one # permission default of the antivpn: 'foxav.notifications' permission: 'foxav.notifications' # Do you want to enable this feature? # - Automatic check new updates in the Market pages. This only detect # when the server is starting. You need to have connection for check # new updates. # # (!) Since 1.0.0 (premium) and 1.0.6 (free), FoxGate uses # their own code code for update chacking. This use # asynchronous methods to scan updates; improving the # performance of this. You can safety has enable this to # verify updates without affecting the performance. update: true # Do you want debug enable debug messages of FoxGate? # - Set what messages you want to debug when the debugging mode # is enabled with the command '/fg debug'. This only shows in # the console. debug: # Messages about Events of the player? events: true # Messages returning service's responses for better # creation or control of this. Enable only for testing, # don't recommend enable this in production, otherwise, # your console can be flooded a lot. services: true # Messages about actions making by FoxGate. # Like, sending discord webhooks (responses), downloading # GeoLocation databases and seding Telegram (requests). actions: true # Enable the option to hide any disconnection message # when a player is detected for VPN, it's blocked for # their Country or ASN. # This probably doesn't go to work in some platforms or # versions, because only support Apache Log4J and SLF4J. consolefilter: # Enable hide the message of disconnection if the next # scenaries. vpn: true limiter: true isp: true # Premium Edition features. country: true asn: true # # /\/\ ___ ___ ___ __ _ __ _ ___ ___ # / \ / _ / __/ __|/ _` |/ _` |/ _ / __| # / /\/\ | __\__ \__ | (_| | (_| | __\__ \ # \/ \/\___|___|___/\__,_|\__, |\___|___/ # |___/ # 🔨 Configure here the messages to show. # You can use MiniMessage in this section. This also works with # legacy bukkit colors, but isn't recommended, because this # has incompatibility! # Also, PlaceholderAPI is supported. # # 📷 Viewer: # https://webui.advntr.dev/ # # 📚 Format: # https://docs.advntr.dev/minimessage/format.html message: # Message to return when a player is kicked with the option of actions in 'kick', this # his useful if you want kick with the plugin and no with command. You can use the # placeholders: %PLAYER%, %IP%, %UUID%, %ISP%, %COUNTRY% (Premium and only if function is enabled) # and %ASN% (Premium and only if function is enabled). kick: "You have been disconnected by FoxGate:\nVPN or Proxy has been found in your connection!\n\nThis is an error? Join to our discord server.\ndiscord.idcteam.xyz" # Notification when a player is kicked. You can suppress this with only # leave in blank. notify: '{prefix} {player} has been detected using VPN and has been removed! ({IP})' # This only show in console. # This can help in debug in case a service is not working correctly. # On the end, the plugin already send the message of error. You can # suppress this with only leave in blank. error: '{prefix} Error while verifying VPN in service "{service}" to {player}: {error}' # Determine the prefix to use when a player use a command. prefix: 'FGT' help: add: 'Add a IP to the database.' check: 'Check an external IP and save in database.' clearcache: 'Clear the cache file with username saves.' db: 'Purge or reconnect the database.' debug: 'Debug actions made by FoxGate in the console.' reload: 'Reload configuration file to apply changes.' remove: 'Remove a IP from the database.' status: 'View information from a cached IP in the database.' verbose: 'Enable/disable verbose mode.' whitelist: 'Edit configuration via command whitelist user/IP.' predebug: '(Premium) Send a discord webhook/telegram forward for test.' add-remove: invalidip: '{prefix} {IP} is not a valid IP/Username!' already: '{prefix} {IP} is already added/removed from the database!' add: '{prefix} {IP} has been added to the dabatase!' remove: '{prefix} {IP} has been removed from the database!' check: invalidip: '{prefix} {IP} is not a valid IP!' cached: '{prefix} {IP} is already cached in the database. You can click here to view information saved in the database.' checking: '{prefix} Checking {IP}...' checked: '{prefix} {IP} was successfully checked, view the information obtained in the database with the command (/foxgate status) or click here.' clearcache: purging: '{prefix} We are purging the cache file...' purging_correctly: '{prefix} The cache file has been purged/reseted.' purging_problem: '{prefix} Error while trying to purge the cache file. Check the console.' db: invalid_usage: '{prefix} Use the command /foxgate db .' reconnecting: '{prefix} Trying to reconnecting the database...' reconnect_correctly: '{prefix} The database was reconnected.' reconnect_problem: '{prefix} Error while trying to reconnect the database. Check the console.' purging: '{prefix} Trying to purging the database...' purging_correctly: '{prefix} The database has been purged/reseted.' purging_problem: '{prefix} Error while trying to purge the database. Check the console.' debug: enable: '{prefix} You enabled the debug mode. Check the console.' disable: '{prefix} You disabled the debug mode.' reload: message: '{prefix} The configuration file has been reloaded.' status: invalidip: '{prefix} {IP} is not a valid IP!' # Here you can find new placeholders only for this message: # # {DETECTED} - Return only the services that detected that IP has VPN. # {UNDETECTED} - Return only the services that doesn't detect that IP is VPN. # {LIST} - Return both list, but this difference with color (customizable). # {MAX} - Return the number of maximum flags to deny access to the player. # {COUNT_DETECTED} - Return the count of services that the player has been detected. # {COUNT_UNDETECTED} - Return the count of services that the player doesn't has been detected. # {STATUS} - Return the status of the player. # {ISP} - Return the ISP of the IP (in case it's cached/IP) from ISP module. # {GEO_COUNTRY} - Return the country player (Premium and only works enabling the feature). # {GEO_ASN} - Return the ASN player (Premium and only works enabling the feature). detected: '' undetected: '' none: 'None.' no_cached: 'Not cached in database.' allow: 'Verified.' deny: 'Blocked.' saved: 'Scanned.' info: " \n Viewing status of {IP}\n ISP: {ISP}\n Status: {STATUS} ({COUNT_DETECTED}/{MAX})\n Undetected: {COUNT_UNDETECTED} Detected: {COUNT_DETECTED} \n Services: {LIST}\n ASN: {GEO_ASN} \n Country: {GEO_COUNTRY} \n " verbose: enable: '{prefix} You enabled the verbose mode.' disable: '{prefix} You disabled the verbose mode.' no_malicious: '{prefix} [VERBOSE] {player} is not a VPN in service: {service} ({IP})' malicious: '{prefix} [VERBOSE] {player} is marked a VPN in service: {service} ({IP})' ignored: '{prefix} [VERBOSE] {player} has been ignored for whitelist in {type} ({IP})' whitelist: invalid_usage: '{prefix} Use the command ''/fg whitelist [name/ip] [reason] [time]''.' already: '{prefix} {IP} is already whitelisted/unwhitelisted in the configuration!' whitelisted: '{prefix} {IP} was whitelisted in the configuration with type {type} for {time}. You can click here for remove again.' unwhitelisted: '{prefix} {IP} was unwhitelisted in the configuration with type {type}. You can click here for add again.' type_ip: 'IP' type_name: 'Name' problem: '{prefix} Error while trying to add/remove to the whitelist. Check the console.' invalid_time: '{prefix} The time format is invalid. Use epoch or formats like 1d, 3h, 15m, 30s or permanent.' purging: '{prefix} Trying to purging the whitelist...' purging_correctly: '{prefix} The whitelist has been purged/reseted.' purging_problem: '{prefix} Error while trying to purge the whitelist. Check the console.' # Here you can find new placeholders only for this message: # # {TYPE} - Return "IP"/"Name" value. # {REASON} - Return the reason of the whitelist in this name/IP. # {EXPIRATION} - Return the expiration time. # {ISP} - Return the ISP of the IP (in case it's cached/IP) from ISP module. # {GEO_COUNTRY} - Return the country player (Premium and only works enabling the feature). # {GEO_ASN} - Return the ASN player (Premium and only works enabling the feature). info: ' \n Whitelist information of {IP}\n Type: {TYPE} \n Reason: {REASON}\n Expire: {EXPIRATION}\n ASN: {GEO_ASN} \n Country: {GEO_COUNTRY} \n ' # View about the format date here: # https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html format: 'yyyy-MM-dd HH:mm:ss' permanent: "Permanent." noreason: "No reason." nowhitelist: '{prefix} {IP} isn''t saved in the whitelist in type {type}.' predebug: invalid_usage: '{prefix} Use the command /fg .' sending: '{prefix} Sending for testing your {type} in mode {mode}...' sended: '{prefix} Sended!' problem: '{prefix} Error while trying to send debug of {type}!' # _ _ _ ___ __ # /_\ _ __ | |_(_/\ /\/ _ \/\ \ \ # //_\\| '_ \| __| \ \ / / /_)/ \/ / # / _ | | | | |_| |\ V / ___/ /\ / # \_/ \_|_| |_|\__|_| \_/\/ \_\ \/ # # 🪓 Configure and customize VPN detection. # This section allows you to configure and manage anti-VPN lists, which are used to perform # checks when players join to determine if they are using a VPN. By default, several anti-VPN # services are pre-configured for detection purposes. antivpn: # Limit maximum connections per IP. # - When a player join to the server, this is saved # in a list for count the numbers of players in # a connection. If the limit is reached, the # player isn't allowed from joining. limiter: # Enable this feature? enable: true # Determine the maximum limit of connections per # IP. '3' is the best value by default, increase in # case is required. This can help in prevent bots with # same IP. maxium: 3 # Message to return when a player is kicked with this option. # placeholders: %PLAYER%, %IP%, %UUID%, %COUNTRY% (Premium and # only if function is enabled) and %ASN% (Premium and only if # function is enabled). kick: "You have been disconnected by FoxGate:\nMaximum accounts per IP in your connection.\n\nThis is an error? Join to our discord server.\ndiscord.idcteam.xyz" # ISP Provider Detection # - Limit connections and/or allow bypass if a player is using # an allowed or disallowed ISP. # This feature works by downloading a file from Zowi Central/IPInfo # containing a list of ISPs based on their IP addresses. # # (!) This only works if the file is successfully downloaded from # Zowi Central/IPInfo. If the site goes down and the file is deleted # locally, the feature will stop working. # We always strive to keep the service stable and online. # # REMEMBER! This is a Lite "ASN" module, you could purchase our # Premium Edition for a complete and perfect alternative of this. # The complete module, works with MaxMind DB, which works faster, # more optimized, complete list of IP's, extensive support, etc. isp: # You want to download in Zowi's Central the database # files? If you has enabled this, this will be downloading # in Zowi's Central instead of IPInfo. (this update every # 12 hours and has ratelimit of 10 downloads per 10 # minutes) # # (!) This could be unstable, it's only recommended # use this option in case you need fast, first # startup or you already received ratelimit in # IPInfo. zowi_database: false # Enter here your key of IPInfo for enabling this # feature, if you leave this empty, this disable # this feature. This is used to download # the database. # # Get a key from: https://ipinfo.io/login key: "" # Determine here the time to pass for update the # database of ISp list. This is for avoid # downloading every time and is checked every 2 hours # and when plugin starts or reload (with /foxgate reload). # Use in hours. update: 12 # How to find the ISP name to allow or block it? # Use the following service: https://ipinfo.io/{IP} # For example, visit https://ipinfo.io/1.1.1.1 and look for the "ASN" # field in the response. You’ll see something like: # # ASN: AS13335 - Cloudflare, Inc. # # Use the part after the dash ("-") — in this case, "Cloudflare, Inc." — # as the ISP name to configure in your allow/block list. # Bypass detections of FoxGate. bypass: # Add the list of ISP name allowed for bypass detections # of VPN in FoxGate. Use the value "[]" to disable, like: # # list: [] list: [] # - 'Cloudflare, Inc.' # - 'Google LLC' # Blacklist the bypass to this name's. # Works like the configuration of the antivpn system. blacklist-name: - 'ImZowi' # It's me! :3 # Blacklist the bypass to this IP's. # Works like the configuration of the antivpn system. blacklist-ip: - '127.0.0.1' # Whitelist/blacklist connections from X ISPs. # The player is blocked from joining but the IP doesn't get verified! blocker: # Define the type of usage to this list. # 'whitelist': Allow the access to certain ISPs. # 'blacklist': Deny the access in certain ISPs. type: 'blacklist' # Add the list of ISP names for block/allow connections # to the server. Use the value "[]" to disable, like: # # list: [] list: - 'InMotion Hosting, Inc.' - 'root SA' - 'Datacamp Limited' - 'M247 Europe SRL' # Add the connections to the database for prevent joining # in X amount of type? This is useful if you want deny # connections of bots in certain countries. # # "The player is blocked from joining but the IP doesn't get verified!" # In this case, the plugin add the player to the database like # "Blocked", but doesn't save services detected, because the player # isn't scanned for VPN/Proxy. database: # Enable this feature? enable: true # Determine here the time to add the player to # the database in case their ISP isn't allowed to # join in hours. time: 2 # Message to return when a player isn't from a ISP that isn't allowed # to join, this is useful for kick the player fast without commands. You can # use the placeholders: %PLAYER%, %IP%, %UUID% and %ISP%. kick: "You have been disconnected by FoxGate:\nYour ISP isn't allowed from joining! (%ISP%)\n\nThis is an error? Join to our discord server.\ndiscord.idcteam.xyz" # Notification when a player is kicked. You can suppress this with only # leave in blank. notify: '{prefix} {player} has been removed for joining in blacklisted ISP: {ISP}! ({IP})' # Whitelist the detection to this name's. # Works like the configuration of the antivpn system. whitelist-name: - 'ImZowi' # It's me! :3 # Whitelist the detection to this IP's. # Works like the configuration of the antivpn system. whitelist-ip: - '127.0.0.1' # Actions to make when is detected. # - Use this to kick with the plugin instantly: # # - 'kick' # # Or add your custom command. Disable this feature # with only adding 'actions: {}'. actions: - 'kick' # Change here the status name in the command '/foxgate status' # to show when a player is detected in the database has been blocked # for their ISP. This is in the case, the player was blocked # for the option 'database' enabled. status: 'Blocked by their ISP.' # Specify the minimum number of services # required to flag a player's IP as a VPN/proxy. # - This value must be equal to or less than the # number of enabled/created services. max_flags: 3 # Continue when reached minium to flag? # - To save requests and performance, you can # disable FoxGate in still checking in the # others services to verify for VPN. By # default, it's enable for better experience # for beginners users using this plugin. # # In '/foxgate status': # This can affect in some cases, because only go # to show only the services that was request. # # (!) This don't affect to '/foxgate check' command. continue: true # Change userAgent value in case is necessary. # Recommended default: # - 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11' # Or: # - 'FoxGate/plugin' userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11" # Determine here the timeout to prevent any # type of crash if the API is down, this help # a lot in case an API dead or you use a # service that is down. # - Use in milliseconds. # # (1500ms = 1.5s) # (1000ms = 1.0s) timeout: 1750 # Actions to make when is detected. # - Use this to kick with the plugin instantly: # # - 'kick' # # Or add your custom command. Disable this feature # with only adding 'actions: {}'. actions: - 'kick' #- 'ipban %IP% Trying to access with %PLAYER% using a VPN.' # List of services. # You can create your check antivpn with: # # 'servicename': # # Enable this service? # enabled: true # # Add this field in case requere key. # key: "KEY" # # Add the model to request the page, this # # use JSON in case is invalid the value or # # is not set. # # # # Supported: # # JSON, HTML # model: "JSON" # # This field is necessary. Insert your # # service URL. # # # # Remember: # # %IP% = Return player's ip. # # %KEY% = Return 'key' field value. # url: "https://example-antivpn.com/check/%IP%?key=%KEY%" # # Headers in case is necessary. # # # # Set to: 'headers: []' to disable or only don't # # add in the settings for this service. # headers: # 'Example-header': 'KEY' # # Values to check. # # This equal is necessary to determine. # values: # # Fields to check. # # In case you disable this with adding # # 'fields: {}' to exclude and only get if # # 'type' option contains in the final request. # # This is a example. # fields: # - "vpn" # # Type to determine. # # If this return true/false, use "boolean", in case # # this is string, only put string, example: # # # # type: 'yes' # type: boolean services: # ⛽ IP-API # 🔗 https://ip-api.com/ # # 🛒 Details: # - Unlimited requests, no key. ipapi: # Enable this service? enabled: true # Model request to use. model: "JSON" # URL. url: "http://ip-api.com/json/%IP%?fields=status,message,proxy,hosting,query" # Values to check. values: # Fields to check. fields: - "proxy" - "hosting" # Type to determine. type: boolean # ⛽ BlackBox # 🔗 https://blackbox.ipinfo.app/ # # 🛒 Details: # - Unlimited requests, no key. blackbox: # Enable this service? enabled: true # Model request to use. model: "HTML" # URL. url: "https://blackbox.ipinfo.app/lookup/%IP%" # Values to check. values: # Fields to check. fields: {} # Type to determine. type: "Y" # ⛽ Rayzs DE # 🔗 https://www.rayzs.de/ # # 🛒 Details: # - Unlimited requests, no key. rayzsde: # Enable this service? enabled: true # Model request to use. model: "HTML" # URL. url: "https://www.rayzs.de/provpn/api/proxy.php/?a=%IP%" # Values to check. values: # Fields to check. fields: {} # Type to determine. type: boolean # ⛽ SkyDB # 🔗 http://ipcheck.skydb.de/ # WARNING: DISABLED BY DEFAULT BECAUSE THEIR BIG DELAY IN # RESPONSE! ENABLE IT IF YOU REALLY WANT THIS. # # 🛒 Details: # - Unlimited requests, no key. skydb: # Enable this service? enabled: false # Model request to use. model: "JSON" # URL. url: "http://ipcheck.skydb.de/getinfo?ip=%IP%" # Values to check. values: # Fields to check. fields: - "Hosting" - "Proxy" - "VPN" - "TOR" # Type to determine. type: boolean # ⛽ FunkeMunky # 🔗 https://funkemunky.cc/ # # 🛒 Details: # - 20k montly requests, no key. # - 150k-2Mo montly requests, paid account. # - 200 minutly requests, paid account (unlimited). funkemunky: # Enable this service? enabled: true # Model request to use. model: "JSON" # URL. # Use this for paid account: # url: "https://funkemunky.cc/vpn?ip=%IP%&license=%KEY%&cached=USE_WEB_CACHE" url: "https://funkemunky.cc/vpn?ip=%IP%" # Insert your key here. # You can use this field in case you # has a paid account. key: "" # Values to check. values: # Fields to check. fields: - "proxy" - "data_center" - "vpn" # Type to determine. type: boolean # ⛽ IPRisk # 🔗 https://api.iprisk.info/ # # 🛒 Details: # - Unlimited requests, no key. iprisk: # Enable this service? enabled: true # Model request to use. model: "JSON" # URL. url: "https://api.iprisk.info/v1/%IP%" # Values to check. values: # Fields to check. fields: - "vpn" - "data_center" - "open_proxy" # Type to determine. type: boolean # ⛽ IP2LOCATION # 🔗 https://ip2location.io/ # # 🛒 Details: # 💼 https://ip2location.io/sign-up # # - 500 requests per day, no key, only proxy detection. # - 30k monthly requests, "free" plan, basic vpn detection. # - 150k monthly requests, "starter" plan, basic vpn detection. # - 300k monthly requests, "plus" plan, advanced vpn detection. # - 600k monthly requests, "security" plan, full vpn detection. ip2location: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! # # I changed here because if "key" parameters is # in the URL, this make like this is trying to # use a key. Delete '#' under and delete 'key: ""', # remember to replace 'KEY' with your API key. #key: "&key=KEY" key: "" # URL. url: "https://api.ip2location.io/?ip=%IP%&format=json%KEY%" # Values to check. values: # Fields to check. # "is_proxy" only field if you don't has "Security" plan, the # others if you pay 499$ for this... 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 to determine. type: boolean # ⛽ FreeIPAPI # 🔗 https://freeipapi.com/ # # 🛒 Details: # 📃 See more information in https://docs.freeipapi.com/request.html#authorization # 🏷 Prices and usages: https://freeipapi.com/#pricing # 💼 Login: https://freeipapi.com/register # # - 60 requests per minute, without key. # - Unlimited requests, "premium" plan. freeipapi: # Enable this service? enabled: true # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. #headers: # 'Authorization': 'Bearer KEY' # # Remove comment from above to use key in case # you has one. headers: [] # URL. url: "https://freeipapi.com/api/json/%IP%" # Values to check. values: # Fields to check. fields: - "isProxy" # Type to determine. type: boolean # ⛽ Negativity API # 🔗 https://negativity.fr/ # # 🛒 Details: # - Unlimited requests, no key. negativity: # Enable this service? enabled: true # Model request to use. model: "JSON" # URL. url: "https://api.negativity.fr/ip/%IP%" # Values to check. values: # Fields to check. fields: - "proxy" - "vpn" # Type to determine. type: boolean # ⛽ IPAPI IS # 🔗 https://ipapi.is/ # # 🛒 Details: # 💼 https://ipapi.is/app/signup # # - 1k daily requests, free account or without key (IP-based for limit). # - 10k daily requests, pay $10 monthly. # - 20k daily requests, pay $20 monthly. # - 50k daily requests, pay $50 monthly. # - 100k daily requests, pay $100 monthly. # - 2M daily requests, pay $200 monthly. ipapiis: # Enable this service? enabled: true # Model request to use. model: "JSON" # You can use this field in case you # has an account in this page. key: "" # URL. url: "https://api.ipapi.is/?q=%IP%&key=%KEY%" # Values to check. values: # Fields to check. fields: - "is_datacenter" - "is_tor" - "is_proxy" - "is_vpn" - "is_abuser" - "is_bogon" # Read more about this in https://ipgeolocation.io/blog/bogon-ip-addresses # Type to determine. type: boolean # ⛽ IPQuery # 🔗 https://ipquery.io/ # # 🛒 Details: # - Unlimited requests, no key. ipquery: # Enable this service? enabled: true # Model request to use. model: "JSON" # URL. url: "https://api.ipquery.io/%IP%?format=json" # Values to check. values: # Fields to check. fields: - "risk.is_vpn" - "risk.is_tor" - "risk.is_datacenter" - "risk.is_proxy" # Type to determine. type: boolean # ⛽ BanProxy # 🔗 https://www.banproxy.com/ # # 🛒 Details: # 💼 https://banproxy.com/panel # # - 50 minutly requests, free account. # - Unlimited requests, paid account. banproxy: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://banproxy.com/api/%IP%/%KEY%" # Values to check. values: # Fields to check. fields: - "proxy" - "hosting" # Type to determine. type: boolean # ⛽ GetIPIntel # 🔗 https://getipintel.net/ # # 🛒 Details: # 💼 https://getipintel.net/free-proxy-vpn-tor-detection-api/#FAQ # # - 500 requests per day and 15 requests per minute - normal. # - Unknowned requests with a "package". getipintel: # Enable this service? # PLEASE, PUT A VALID "EMAIL" LIKE # KEY TO USE THIS, OTHERWISE, THIS CAN # BLOCK YOU (SOMETIMES, INSTANTLY). enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! # PLEASE, PUT A VALID "EMAIL" LIKE # KEY TO USE THIS, OTHERWISE, THIS CAN # BLOCK YOU (SOMETIMES, INSTANTLY). key: "" # URL. url: "https://check.getipintel.net/check.php?ip=%IP%&contact=%KEY%&flags=m&format=json" # Values to check. values: # Fields to check. fields: - "result" # Type to determine. type: boolean # ⛽ VPN-API XYZ # 🔗 https://vpn-api.xyz/ # # 🛒 Details: # 💼 https://vpn-api.xyz/dashboard # 🔑 Autokey: https://vpn-api.xyz/getkey.php # # - Unlimited requests, key required. vpn-apixyz: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://vpn-api.xyz/detector?key=%KEY%&host=%IP%" # Values to check. values: # Fields to check. fields: - "is_proxy" # Type to determine. type: boolean # ⛽ VPN Blocker # 🔗 https://vpnblocker.net/ # # 🛒 Details: # 💼 https://vpnblocker.net/ # # - 500 monthly requests, no key/free. # - Unlimited requests, paid. vpnblocker: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. headers: 'X-API-KEY': 'KEY' # URL. url: "https://api.vpnblocker.net/v2/json/%IP%" # Values to check. values: # Fields to check. fields: - "host-ip" # Type to determine. type: boolean # ⛽ IPQualityScore # 🔗 https://www.ipqualityscore.com/ # # 🛒 Details: # 💼 https://www.ipqualityscore.com/user/dashboard # # - 5.000 monthly requests, free account. # - 500k monthly requests, "SMB Basic" plan. # - 1M monthly requests, "SMB Premium" plan. # - 4M monthly requests, "SMB Enhanced" plan. # - "CUSTOM" monthly requests, "Enterprise" plan. ipqualityscore: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://ipqualityscore.com/api/json/ip/%KEY%/%IP%?strictness=0&allow_public_access_points=true" # Values to check. values: # Fields to check. # "bot_status" and "recent_abuse" can probably detect bots, I added for better detection in # some services of VPN. If you get false flags of this, delete both values and try. fields: - "proxy" - "vpn" - "tor" - "bot_status" - "recent_abuse" # Type to determine. type: boolean # ⛽ ProxyCheck # 🔗 https://proxycheck.io/ # # 🛒 Details: # 💼 https://proxycheck.io/pricing # # - 100 daily requests, no key. # - 1,000 daily requests, free account. # - 10k-512m daily requests, paid account. # # WARNING! This use 2 requets, why? This use # the field 'vpn=3' (3) to check for vpn and proxy, # this in the DOCS say this use 2 request instead of # 1, but this is because use value '3' to detect # better VPNs and proxys. Set to '1' for only # check 'VPN' or '2' to only check 'PROXY', and # only use 1 request. proxycheck: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://proxycheck.io/v2/%IP%?vpn=3&key=%KEY%" # Values to check. values: # Fields to check. fields: - "%IP%.proxy" - "%IP%.vpn" # Type to determine. type: "yes" # ⛽ VPNAPI # 🔗 https://vpnapi.io/ # # 🛒 Details: # 💼 https://vpnapi.io/signup # # - 100 daily requests, no key. # - 1,000 daily requests, free account. # - 10k-200k daily requests, paid account. vpnapi: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Set empty to don't use one. Don't delete this field! key: "" # URL. url: "https://vpnapi.io/api/%IP%?key=%KEY%" # Values to check. values: # Fields to check. fields: - "security.vpn" - "security.proxy" - "security.tor" - "security.relay" # Type to determine. type: boolean # ⛽ ANTIVPN NET # 🔗 https://www.antivpn.net/ # # 🛒 Details: # 💼 https://www.antivpn.net/account/ # # - 10k requests, free account. # - 1M-10M requests, paid account. antivpnnet: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://antivpn.net/api/v1/lookup?ip=%IP%&key=%KEY%&format=-json" # Values to check. values: # Fields to check. fields: - "is_proxy" # Type to determine. type: boolean # ⛽ ANTIVPN IO # 🔗 https://www.antivpn.io/ # # 🛒 Details: # 💼 https://dash.antivpn.io/ # # - 15k mothly requests, free account. # - 2M-10M monthly requests, paid account. antivpnio: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. # How to get a key here? Easy, when you # create a server, this send you a command, # you only need to copy the code (key) and # replace 'KEY' for that code. REMOVE # THE COMMAND NAME AND / WHEN YOU COPY! # # Example value: # 'Bearer XXXXXXXX' headers: 'Authorization': 'Bearer KEY' # URL. url: "https://connection.antivpn.io/api/check?ip=%IP%" # Values to check. values: # Fields to check. fields: - "VPN" # Type to determine. type: boolean # ⛽ IPHub # 🔗 https://iphub.info/ # # 🛒 Details: # 💼 https://iphub.info/login # # - 1,000 daily requests, free account. # - 10k-200k daily requests, paid account. iphub: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. headers: 'X-Key': 'KEY' # URL. url: "https://v2.api.iphub.info/ip/%IP%" # Values to check. values: # Fields to check. fields: - "block" # Type to determine. type: boolean # ⛽ IPHunter # 🔗 https://www.iphunter.info/ # # 🛒 Details: # 💼 https://www.iphunter.info/user/register # # - 1,000 daily requests, free account. # - 60k-20M daily requests, paid account. iphunter: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. headers: 'X-Key': 'KEY' # URL. url: "https://www.iphunter.info:8082/v1/ip/%IP%" # Values to check. values: # Fields to check. fields: - "data.block" # Type to determine. type: boolean # ⛽ IPDetective # 🔗 https://ipdetective.io/ # # 🛒 Details: # 💼 https://ipdetective.io/login # # - 1,000 daily requests, free account. # - 30k daily requests, basic account. # - 80k daily requests, premium account. # - 200k daily requests, enterprise account. ipdetective: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. headers: 'x-api-key': 'KEY' # URL. url: "https://api.ipdetective.io/ip/%IP%?info=true" # Values to check. values: # Fields to check. fields: - "type" # Type to determine. type: ["vpn", "datacenter", "bot", "proxy"] # ⛽ IPStack # 🔗 https://ipstack.com/ # # 🛒 Details: # 💼 https://ipstack.com/signup/free # # - 100 monthly requests, free account. # - 50k monthly requests, basic account. # - 500k monthly requests, professional account. # - 2M monthly requests, professional plus account. ipstack: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://api.ipstack.com/%IP%?access_key=%KEY%&security=1" # Values to check. values: # Fields to check. fields: - "security.is_proxy" - "security.is_crawler" - "security.is_tor" - "security.hosting_facility" # Type to determine. type: boolean # ⛽ 2IP # 🔗 https://2ip.io/ # # 🛒 Details: # 💼 https://2ip.io/registration/api/ # # - 10k requests free per month. # (Based in Billing) 2ip: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://api.2ip.io/%IP%?token=%KEY%" # Values to check. values: # Fields to check. fields: - "asn.hosting" # Type to determine. type: boolean # ⛽ GreIP # 🔗 https://greip.io/ # # 🛒 Details: # 💼 https://dashboard.greip.io/login # # - 15k monthly requests, free account. # - 170k monthly requests, Standard account. # - 400k monthly requests, Premium account. # - Unlimited requests, "Pay-as-you-go". greip: # Enable this service? enabled: false # Model request to use. model: "JSON" # Headers in case is necessary. # # Set to: 'headers: []' to disable. headers: 'Authorization': 'Bearer KEY' # URL. url: "https://greipapi.com/lookup/ip/threats?ip=%IP%" # Values to check. values: # Fields to check. fields: - "data.threats.isProxy" - "data.threats.isRelay" - "data.threats.isTor" - "data.threats.isHosting" # Type to determine. type: boolean # ⛽ ProxyRadar # 🔗 https://proxyradar.io/ # # 🛒 Details: # 💼 https://proxyradar.io/login # # - 1k daily requests, free account. # - 10k daily requests, "Personal" plan. # - 50k daily requests, "Pro" plan. # - 100k daily requests, "Business" plan. # - 200k daily requests, "Enterprise" plan. proxyradar: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://proxyradar.io/v1/check?key=%KEY%&ip=%IP%&format=json" # Values to check. values: # Fields to check. fields: - "proxy" # Type to determine. type: boolean # ⛽ IPGeolocation (PAID SERVICE) # 🔗 https://ipgeolocation.io/ # # 🛒 Details: # 💼 https://app.ipgeolocation.io/login # # This is a PAID SERVICE, require starting from # $15 monthly subscription for using IP-security # feature. First plan it's $15 (Bronze). # # - 150k monthly requests, Bronze ($15) # - 1M monthly requests, Solver ($65) # - 6M monthly requests, Gold ($200) # - 120M+ monthly requests, Enterprise. ipgeolocation: # Enable this service? enabled: false # Model request to use. model: "JSON" # Insert your key here. # Don't delete this field! key: "" # URL. url: "https://api.ipgeolocation.io/ipgeo?apiKey=%KEY%&ip=%IP%" # Values to check. values: # Fields to check. fields: - "security.is_tor" - "security.is_proxy" - "security.is_cloud_provider" - "security.is_known_attacker" - "security.is_anonymous" # Type to determine. type: boolean # ___ _ # / _ \_ __ ___ _ __ ___ (_)_ _ _ __ ___ __/\__ # / /_)/ '__/ _ \ '_ ` _ \| | | | | '_ ` _ \ \ / # / ___/| | | __/ | | | | | | |_| | | | | | | /_ _\ # \/ |_| \___|_| |_| |_|_|\__,_|_| |_| |_| \/ # # Premium features, only available for paid users, # this is here in case you purchase the premium # version, this is generated in first startup with the # premium edition. # # If you still has questions, you can join to the discord server in: # https://discord.com/invite/FTtVXfj or you can use the Discussion page in https://www.spigotmc.org/threads/646308/. # # You can get the Premium Edition in: # 💼 BuiltByBit: https://builtbybit.com/resources/61530 # 🧰 Polymart: https://polymart.org/resource/7327/ # 📢 SpigotMC: https://www.spigotmc.org/resources/123563/ premium: # Enable the detection for GeoBlocking when a player # join to the server. If you enable this feature, you can # block or whitelist country from joining or detecting. # # This uses MaxMind for working this feature. # https://www.maxmind.com/en/home geo: # You want to download in Zowi's Central the database # files? If you has enabled this, this will be downloading # in Zowi's Central instead of MaxMind. (this update every # 12 hours and has ratelimit of 10 downloads per 10 # minutes) # # (!) This could be unstable, it's only recommended # use this option in case you need fast, first # startup or you already received ratelimit in # MaxMind. zowi_database: true # Enter here your key of maxmind for enabling this # feature, if you leave this empty, this disable # this feature. This is used to download # the database. key: "" # Determine here the time to pass for update the # database of ASN and Country. This is for avoid # downloading every time and is checked every 2 hours # and when plugin starts or reload (with /foxgate reload). # Use in hours. update: 12 # We allow customize options here, # you can allow to FoxGate in verify whitelist # for bypass detection by Country or ASN, # and blacklist/whitelist by Country and ASN. # List for allow/deny connections in certain countries. # Use ISO code for this system, view all ISO codes in # the list: (A-2) # https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes country: # Bypass detections of FoxGate. bypass: # Add the list of ISO codes allowed for bypass detections # of VPN in FoxGate. Use the value "[]" to disable, like: # # list: [] list: [] #- AR #- BR #- MX #- ES #- VE # Blacklist the bypass to this name's. # Works like the configuration of the antivpn system. blacklist-name: - 'ImZowi' # It's me! :3 # Blacklist the bypass to this IP's. # Works like the configuration of the antivpn system. blacklist-ip: - '127.0.0.1' # Whitelist/blacklist connections from X countries. # The player is blocked from joining but the IP doesn't get verified! blocker: # Define the type of usage to this list. # 'whitelist': Allow the access to certain countries. # 'blacklist': Deny the access in certain countries. type: 'blacklist' # Add the list of ISO codes for block/allow connections # to the server. Use the value "[]" to disable, like: # # list: [] list: - PK - IR - DZ # Add the connections to the database for prevent joining # in X amount of type? This is useful if you want deny # connections of bots in certain countries. # # "The player is blocked from joining but the IP doesn't get verified!" # In this case, the plugin add the player to the database like # "Blocked", but doesn't save services detected, because the player # isn't scanned for VPN/Proxy. database: # Enable this feature? enable: true # Determine here the time to add the player to # the database in case their country isn't allowed to # join in hours. time: 2 # Message to return when a player isn't from a country that isn't allowed # to join, this is useful for kick the player fast without commands. You can # use the placeholders: %PLAYER%, %IP%, %UUID%, %COUNTRY% and %ASN%. kick: "You have been disconnected by FoxGate:\nYour country isn't allowed from joining! (%COUNTRY%)\n\nThis is an error? Join to our discord server.\ndiscord.idcteam.xyz" # Notification when a player is kicked. You can suppress this with only # leave in blank. notify: '{prefix} {player} has been removed for joining in blacklisted country: {COUNTRY}! ({IP})' # Whitelist the detection to this name's. # Works like the configuration of the antivpn system. whitelist-name: - 'ImZowi' # It's me! :3 # Whitelist the detection to this IP's. # Works like the configuration of the antivpn system. whitelist-ip: - '127.0.0.1' # Actions to make when is detected. # - Use this to kick with the plugin instantly: # # - 'kick' # # Or add your custom command. Disable this feature # with only adding 'actions: {}'. actions: - 'kick' # Change here the status name in the command '/foxgate status' # to show when a player is detected in the database has been blocked # for their country. This is in the case, the player was blocked # for the option 'database' enabled. status: 'Blocked by their Country.' # List for allow/deny connections in certain ASN. # Use ASN system for this part, you can get ASN from an # IP with the link: # https://www.ipvoid.com/ip-to-asn/ # Example: # 1.1.1.1 (Cloudflare) is: AS13335 # Use the number for this list: 13335 asn: # Bypass detections of FoxGate. bypass: # Add the list of ASN allowed for bypass detections # in FoxGate. Use the value "[]" to disable, like: # # list: [] list: [] #- '13335' # (Cloudflare) #- '15169' # (Google) # Blacklist the bypass to this name's. # Works like the configuration of the antivpn system. blacklist-name: - 'ImZowi' # It's me! :3 # Blacklist the bypass to this IP's. # Works like the configuration of the antivpn system. blacklist-ip: - '127.0.0.1' # Whitelist/blacklist connections from X ASN's. # The player is blocked from joining but the IP doesn't get verified! blocker: # Define the type of usage to this list. # 'whitelist': Allow the access to certain ASN's. # 'blacklist': Deny the access in certain ASN's. type: 'blacklist' # Add the list of ASN'S allowed for join to the server. # Use the value "[]" to disable, like: # # list: [] # (!) In this list, we are blocking ASN from knowed # services of hosting, can prevent some bots and VPN. list: - '210644' # More in the original Premium .jar # Add the connections to the database for prevent joining # in X amount of type? This is useful if you want deny # connections of bots in certain ASN's. # # "The player is blocked from joining but the IP doesn't get verified!" # In this case, the plugin add the player to the database like # "Blocked", but doesn't save services detected, because the player # isn't scanned for VPN/Proxy. database: # Enable this feature? enable: true # Determine here the time to add the player to # the database in case their country isn't allowed to # join in hours. time: 2 # Message to return when a player isn't from a ASN that isn't allowed # to join, this is useful for kick the player fast without commands. You can # use the placeholders: %PLAYER%, %IP%, %UUID%, %COUNTRY% and %ASN%. kick: "You have been disconnected by FoxGate:\nYour ASN isn't allowed from joining! (%ASN%)\n\nThis is an error? Join to our discord server.\ndiscord.idcteam.xyz" # Notification when a player is kicked. You can suppress this with only # leave in blank. notify: '{prefix} {player} has been removed for joining in blacklisted ASN: {ASN}! ({IP})' # Whitelist the detection to this name's. # Works like the configuration of the antivpn system. whitelist-name: - 'ImZowi' # It's me! :3 # Whitelist the detection to this IP's. # Works like the configuration of the antivpn system. whitelist-ip: - '127.0.0.1' # Actions to make when is detected. # - Use this to kick with the plugin instantly: # # - 'kick' # # Or add your custom command. Disable this feature # with only adding 'actions: {}'. actions: - 'kick' # Change here the status name in the command '/foxgate status' # to show when a player is detected in the database has been blocked # for their ASN. This is in the case, the player was blocked # for the option 'database' enabled. status: 'Blocked by their ASN.' # Enable the usage of Discord Webhooks to send any alert's or # messages if the player is vpn/proxy or if is allowed to connect # to the server. discord: # Enter here the webhook URL, set to empty to # disable this feature or add URL of webhook to # enable this feature. # # See https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks # for how to use it. webhook: "" # Customize the messages. # Here you can find some placeholders for use: # # {NAME} - Return name of the user. # {IP} - Return IP of the user. # {UUID} - Return IP of the user. # {DETECTED} - Return only the services that detected that IP has VPN. # {UNDETECTED} - Return only the services that doesn't detect that IP is VPN. # {LIST} - Return both list, but this difference with color (customizable). # {MAX} - Return the number of maximum flags to deny access to the player. # {COUNT_DETECTED} - Return the count of services that the player has been detected. # {COUNT_UNDETECTED} - Return the count of services that the player doesn't has been detected. # {ISP} - Return the ISP of the IP (in case it's cached/IP) from ISP module. # {GEO_COUNTRY} - Return the country player (Only works enabling the feature). # {GEO_ASN} - Return the ASN player (Only works enabling the feature). # Use '%nl%', '\n' or '\nl' for new line. embed: # Messages when the player is allowed to connect. allowed: # Enable this webhook? enable: true # Username to show. # - Determine here a custom username for the webhook. username: "FoxGate: High Quality AntiVPN" # Avatar to show. # - Determine here a custom avatar for the webhook. avatar: "https://i.imgur.com/86T0cIF.png" # Determine here the content in the message. # Set "" to disable the content. content: "" # Determine here the title of the embed. # Set "" to disable the title or url. title: text: "An IP was verified by FoxGate." url: "https://www.spigotmc.org/resources/116596/" # Determine here the description of the embed. # Set "" to disable the description. description: "" # Show thumbnail in the embed. # Set "" to disable the content. thumbnail: "https://api.creepernation.net/avatar/{UUID}" # Add fields. # Delete "fields" for disable anything about it. fields: '1': name: "User" description: "`{NAME}`" inline: true '2': name: "IP" description: "`{IP}`" inline: true '3': name: "Count" description: "`{COUNT_DETECTED}`/`{MAX}`" inline: true '4': name: "Detected ({COUNT_DETECTED})" description: "`{DETECTED}`" inline: true '5': name: "Undetected ({COUNT_UNDETECTED})" description: "`{UNDETECTED}`" inline: true '6': name: "Country & ASN" description: "`{GEO_COUNTRY}`/`{GEO_ASN}`" inline: true # Determine here the color in decimal. color: 5793266 # Determine the footer to use. footer: text: "Powered by FoxGate" icon: "https://i.imgur.com/86T0cIF.png" # Messages when the player is denied to connect. denied: # Enable this webhook? enable: true # Username to show. # - Determine here a custom username for the webhook. username: "FoxGate: High Quality AntiVPN" # Avatar to show. # - Determine here a custom avatar for the webhook. avatar: "https://i.imgur.com/86T0cIF.png" # Determine here the content in the message. # Set "" to disable the content. content: "" # Determine here the title of the embed. # Set "" to disable the title or url. title: text: "An IP was blocked by FoxGate." url: "https://www.spigotmc.org/resources/116596/" # Determine here the description of the embed. # Set "" to disable the description. description: "" # Show thumbnail in the embed. # Set "" to disable the content. thumbnail: "https://api.creepernation.net/avatar/{UUID}" # Add fields. # Delete "fields" for disable anything about it. fields: '1': name: "User" description: "`{NAME}`" inline: true '2': name: "IP" description: "`{IP}`" inline: true '3': name: "Count" description: "`{COUNT_DETECTED}`/`{MAX}`" inline: true '4': name: "Detected ({COUNT_DETECTED})" description: "`{DETECTED}`" inline: true '5': name: "Undetected ({COUNT_UNDETECTED})" description: "`{UNDETECTED}`" inline: true '6': name: "Country & ASN" description: "`{GEO_COUNTRY}`/`{GEO_ASN}`" inline: true # Determine here the color in decimal. color: 16711680 # Determine the footer to use. footer: text: "Powered by FoxGate" icon: "https://i.imgur.com/86T0cIF.png" # Messages when the player is blocked to connect # because their country. country: # Enable this webhook? enable: true # Username to show. # - Determine here a custom username for the webhook. username: "FoxGate: High Quality AntiVPN" # Avatar to show. # - Determine here a custom avatar for the webhook. avatar: "https://i.imgur.com/86T0cIF.png" # Determine here the content in the message. # Set "" to disable the content. content: "" # Determine here the title of the embed. # Set "" to disable the title or url. title: text: "An IP was blocked by FoxGate." url: "https://www.spigotmc.org/resources/116596/" # Determine here the description of the embed. # Set "" to disable the description. description: "A player tried to join from banned country." # Show thumbnail in the embed. # Set "" to disable the content. thumbnail: "https://api.creepernation.net/avatar/{UUID}" # Add fields. # Delete "fields" for disable anything about it. fields: '1': name: "User" description: "`{NAME}`" inline: true '2': name: "IP" description: "`{IP}`" inline: true '3': name: "Country & ASN" description: "`{GEO_COUNTRY}`/`{GEO_ASN}`" inline: true # Determine here the color in decimal. color: 16741120 # Determine the footer to use. footer: text: "Powered by FoxGate" icon: "https://i.imgur.com/86T0cIF.png" # Messages when the player is blocked to connect # because their ASN. asn: # Enable this webhook? enable: true # Username to show. # - Determine here a custom username for the webhook. username: "FoxGate: High Quality AntiVPN" # Avatar to show. # - Determine here a custom avatar for the webhook. avatar: "https://i.imgur.com/86T0cIF.png" # Determine here the content in the message. # Set "" to disable the content. content: "" # Determine here the title of the embed. # Set "" to disable the title or url. title: text: "An IP was blocked by FoxGate." url: "https://www.spigotmc.org/resources/116596/" # Determine here the description of the embed. # Set "" to disable the description. description: "A player tried to join from banned ASN." # Show thumbnail in the embed. # Set "" to disable the content. thumbnail: "https://api.creepernation.net/avatar/{UUID}" # Add fields. # Delete "fields" for disable anything about it. fields: '1': name: "User" description: "`{NAME}`" inline: true '2': name: "IP" description: "`{IP}`" inline: true '3': name: "Country & ASN" description: "`{GEO_COUNTRY}`/`{GEO_ASN}`" inline: true # Determine here the color in decimal. color: 16741120 # Determine the footer to use. footer: text: "Powered by FoxGate" icon: "https://i.imgur.com/86T0cIF.png" # Messages when the player is blocked to connect # because their ISP. isp: # Enable this webhook? enable: true # Username to show. # - Determine here a custom username for the webhook. username: "FoxGate: High Quality AntiVPN" # Avatar to show. # - Determine here a custom avatar for the webhook. avatar: "https://i.imgur.com/86T0cIF.png" # Determine here the content in the message. # Set "" to disable the content. content: "" # Determine here the title of the embed. # Set "" to disable the title or url. title: text: "An IP was blocked by FoxGate." url: "https://www.spigotmc.org/resources/116596/" # Determine here the description of the embed. # Set "" to disable the description. description: "A player tried to join from banned ISP." # Show thumbnail in the embed. # Set "" to disable the content. thumbnail: "https://api.creepernation.net/avatar/{UUID}" # Add fields. # Delete "fields" for disable anything about it. fields: '1': name: "User" description: "`{NAME}`" inline: true '2': name: "IP" description: "`{IP}`" inline: true '3': name: "ISP" description: "`{ISP}`" inline: true # Determine here the color in decimal. color: 16741120 # Determine the footer to use. footer: text: "Powered by FoxGate" icon: "https://i.imgur.com/86T0cIF.png" # Prevent bots from joining to your server if this # has any type of attack. This blocks connections and prevent # making new requests. Normal players can join when this occurrs. # # This is based for small servers, if you server is bigger, please, # configure better if you can. # [THIS STILL IN DEVELOPMENT, DOESN'T WORKING CURRENTLY] antibot: # Enable this feature? enable: true # Determine the maxium connections per second to start blocking these IP's. max: 6 # Determine the time to continue blocking with this little shield that # bots (in seconds). timer: 10 # Buffer # Configure here a little buffer to add more seconds if this continue. # If you has disabled this feature, the antibot system is disabled only # when timer ends. If you enable "buffer", this feature increase the time # of the timer to still blocking. buffer: # Enable this feature? enable: true # Determine the maxium connections per second to # increase more additional seconds to the timer. max: 3 # Dertermine the time to add when "max" is reached # and need to increase the timer. Remember, all in seconds. add: 5 # Send to the console all details about the attacks? log: true # Add this IP's to the vpn list to avoid detection for X hours? # (depend on your configuration) blacklist: true # Block that IP's from pinging the server? # THIS FUNCTION REQUIRE PACKETEVENTS! pinging: true # Deny all. # Configure here if you want block any join if still joining bots # when reach X amount of joins (this has a count). This automatically # blacklist connections for 1 hour, the count of connections is # reseted when timer finish. denyall: # Enable this feature? enable: true # Determine the maxium connection to block any type of connection # to the server (don't allow *ANY* connection from join). maxium: 500 # List of urls with knowned proxies. # Add list of proxies to save ips to the database, so this can be used # to block connections of bots (the possible) and don't make requests. list: - "https://tcpshield.com/blocklist.txt" # Enable the usage of Telegram Webhooks to send any alert's or # messages if the player is vpn/proxy or if is allowed to connect # to the server. # # For using this, you need a bot token, for that, need to create # a bot. See more in: # https://core.telegram.org/bots#how-do-i-create-a-bot telegram: # Enter here the bot's token, set to empty to # disable this feature, you need to add both # credentials for enabling this feature. # # See https://core.telegram.org/bots/webhooks # for how to use it. bot_token: "" # Enter here the channel to send the alert. Set # empty to disable this feature, you need to add both # credentials for enabling this feature. # # Must be unique identifier for the target chat or # username of the target channel (in the format @channelusername). chat_id: "" # Customize the messages. # Here you can find some placeholders for use: # # {NAME} - Return name of the user. # {IP} - Return IP of the user. # {UUID} - Return IP of the user. # {DETECTED} - Return only the services that detected that IP has VPN. # {UNDETECTED} - Return only the services that doesn't detect that IP is VPN. # {LIST} - Return both list, but this difference with color (customizable). # {MAX} - Return the number of maximum flags to deny access to the player. # {COUNT_DETECTED} - Return the count of services that the player has been detected. # {COUNT_UNDETECTED} - Return the count of services that the player doesn't has been detected. # {ISP} - Return the ISP of the IP (in case it's cached/IP) from ISP module. # {GEO_COUNTRY} - Return the country player (Only works enabling the feature). # {GEO_ASN} - Return the ASN player (Only works enabling the feature). # Use '%nl%', '\n' or '\nl' for new line. text: # Messages when the player is allowed to connect. allowed: # Enable this webhook? enable: true # Determine here the content in the message. # (!) This is required to send the message. text: "*FoxGate: High Quality AntiVPN*\n\nPlayer *{NAME}* `({IP})` has been verified by *FoxGate* with a result of `{COUNT_DETECTED}/{MAX}` detected services.\n\n- Detected in `({COUNT_DETECTED})`: `{DETECTED}`\n- Undetected in `({COUNT_UNDETECTED})`: `{UNDETECTED}`\n- Country: `{GEO_COUNTRY}`\n- ASN: `{GEO_ASN}`" # Determine here the thread message ID to send. # Set "" to disable this feature. # # (!) Use this in case you want send in different # channel-thread to separate. This must be # unique identifier for the target message thread # (topic) of the forum; for forum supergroups only. thread_id: "" # Protect the message for privacy? # Protects the contents of the sent message from # forwarding and saving. protection: true # Disable notification sound? # Sends the message silently. Users will receive a # notification with no sound. nosound: false # Determine the mode of parsing. # Values can be: # - MarkdownV2 (Recommended) # - HTML # - Markdown # # (!) Invalid value go to use "MarkdownV2". # https://core.telegram.org/bots/api#formatting-options parsemode: "MarkdownV2" # Messages when the player is denied to connect. denied: # Enable this webhook? enable: true # Determine here the content in the message. # (!) This is required to send the message. text: "*FoxGate: High Quality AntiVPN*\n\nPlayer *{NAME}* `({IP})` has been blocked by *FoxGate* for a result of `{COUNT_DETECTED}/{MAX}` detected services.\n\n- Detected in `({COUNT_DETECTED})`: `{DETECTED}`\n- Undetected in `({COUNT_UNDETECTED})`: `{UNDETECTED}`\n- Country: `{GEO_COUNTRY}`\n- ASN: `{GEO_ASN}`" # Determine here the thread message ID to send. # Set "" to disable this feature. # # (!) Use this in case you want send in different # channel-thread to separate. This must be # unique identifier for the target message thread # (topic) of the forum; for forum supergroups only. thread_id: "" # Protect the message for privacy? # Protects the contents of the sent message from # forwarding and saving. protection: true # Disable notification sound? # Sends the message silently. Users will receive a # notification with no sound. nosound: false # Determine the mode of parsing. # Values can be: # - MarkdownV2 (Recommended) # - HTML # - Markdown # # (!) Invalid value go to use "MarkdownV2". # https://core.telegram.org/bots/api#formatting-options parsemode: "MarkdownV2" # Messages when the player is blocked to connect # because their country. country: # Enable this webhook? enable: true # Determine here the content in the message. # (!) This is required to send the message. text: "*FoxGate: High Quality AntiVPN*\n\nPlayer *{NAME}* `({IP})` has been blocked by *FoxGate* for their country.\n\n- Country: `{GEO_COUNTRY}`\n- ASN: `{GEO_ASN}`" # Determine here the thread message ID to send. # Set "" to disable this feature. # # (!) Use this in case you want send in different # channel-thread to separate. This must be # unique identifier for the target message thread # (topic) of the forum; for forum supergroups only. thread_id: "" # Protect the message for privacy? # Protects the contents of the sent message from # forwarding and saving. protection: true # Disable notification sound? # Sends the message silently. Users will receive a # notification with no sound. nosound: true # Determine the mode of parsing. # Values can be: # - MarkdownV2 (Recommended) # - HTML # - Markdown # # (!) Invalid value go to use "MarkdownV2". # https://core.telegram.org/bots/api#formatting-options parsemode: "MarkdownV2" # Messages when the player is blocked to connect # because their ASN. asn: # Enable this webhook? enable: true # Determine here the content in the message. # (!) This is required to send the message. text: "*FoxGate: High Quality AntiVPN*\n\nPlayer *{NAME}* `({IP})` has been blocked by *FoxGate* for their ASN.\n\n- Country: `{GEO_COUNTRY}`\n- ASN: `{GEO_ASN}`" # Determine here the thread message ID to send. # Set "" to disable this feature. # # (!) Use this in case you want send in different # channel-thread to separate. This must be # unique identifier for the target message thread # (topic) of the forum; for forum supergroups only. thread_id: "" # Protect the message for privacy? # Protects the contents of the sent message from # forwarding and saving. protection: true # Disable notification sound? # Sends the message silently. Users will receive a # notification with no sound. nosound: true # Determine the mode of parsing. # Values can be: # - MarkdownV2 (Recommended) # - HTML # - Markdown # # (!) Invalid value, will use "MarkdownV2". # https://core.telegram.org/bots/api#formatting-options parsemode: "MarkdownV2" # Messages when the player is blocked to connect # because their ISP. isp: # Enable this webhook? enable: true # Determine here the content in the message. # (!) This is required to send the message. text: "*FoxGate: High Quality AntiVPN*\n\nPlayer *{NAME}* `({IP})` has been blocked by *FoxGate* for their ISP.\n\n- ISP: `{ISP}`" # Determine here the thread message ID to send. # Set "" to disable this feature. # # (!) Use this in case you want send in different # channel-thread to separate. This must be # unique identifier for the target message thread # (topic) of the forum; for forum supergroups only. thread_id: "" # Protect the message for privacy? # Protects the contents of the sent message from # forwarding and saving. protection: true # Disable notification sound? # Sends the message silently. Users will receive a # notification with no sound. nosound: true # Determine the mode of parsing. # Values can be: # - MarkdownV2 (Recommended) # - HTML # - Markdown # # (!) Invalid value, will use "MarkdownV2". # https://core.telegram.org/bots/api#formatting-options parsemode: "MarkdownV2"