Atenção, este plugin é apenas o núcleo do sistema. Para funcionar totalmente, são necessários subplugins (os chamados módulos, provedores de dados). Leia atentamente a ‘Instalação e configuração’.
Bypass Guard foi projetado para combater jogadores que contornam maliciosamente o banimento, alterando seu SteamID e/ou endereço IP, inclusive usando serviços de proxy/VPN. O plugin é uma adição independente (não um substituto!) às principais ferramentas de restrição de acesso, como Fresh Bans , Lite Bans , Dopban by mazdan, etc.
Este não é um sistema de proibição! O plugin não bane jogadores pessoalmente (no sentido tradicional, ou seja, não os adiciona à lista de banimentos do seu servidor), mas apenas restringe seu acesso ao servidor com base no resultado de algoritmos internos (com base em uma série de verificações).
O que o plug-in pode fazer? Cada provedor de Internet possui seu próprio número exclusivo (ASN). Este plugin pode bloquear o acesso via ASN (ou seja, bloquear totalmente o acesso a provedores específicos). O plugin pode bloquear o acesso com base em um intervalo de endereços IP. O plugin pode bloquear o acesso a países específicos (modo de lista negra e branca). O plugin também verifica os endereços IP dos jogadores usando o serviço de verificação Proxy/VPN. Aqueles. isola aqueles que gostam de contornar a proibição usando uma VPN.
O plugin me protegerá 100% e me salvará de desvios de banimento? Não. Parte do trabalho pode ser feito automaticamente, mas em alguns casos é necessária a intervenção do administrador (análise dos sintomas do ataque, ou seja, leitura dos logs deste plugin em ‘amxmodx/logs/bypass_guard’, esclarecimento de dados sobre provedores/países dos quais o bypass é tomada e, com base nisso, tomar uma decisão usando o método de contramedidas).
Funcional:
- Passe sem verificar a lista de permissões do SteamID
- Passe sem verificar jogadores legítimos (steam)
- Passe sem verificações se um determinado sinalizador estiver presente ou se o sinalizador amx_default_access estiver ausente
- Trabalhando com Números de Sistema Autônomo (AS/ASN). Você pode bloquear/permitir completamente o acesso a provedores de Internet específicos.
- Listas pretas e brancas de endereços IP com a adição de <start_ip – end_ip> em um formato claro
- Verificar o país do jogador como principal linha de proteção contra bypass via Proxy/VPN
- Verificar o endereço IP do jogador para determinar se ele pertence a um serviço Proxy/VPN como uma linha adicional de defesa
- Bloqueio automático de “estranhos” se houver suspeita de um ataque sequencial como “contornar a proibição” (plugin Supervisor adicional).
Instalação:
- Coloque os arquivos no servidor de acordo com a hierarquia de arquivos
- Edite cstrike/addons/amxmodx/data/lang/bypass_guard.txt
- Edite as configurações na fonte
- Compile o plugin ( SE NÃO SABE COMO COMPILAR, VEJA EM NOSSOS TUTORIAIS! ).
- Copie o plugin compilado para o diretório cstrike/addons/amxmodx/plugins
- Registre o plugin no arquivo amxmodx/configs/plugins.ini
- Após iniciar ou reiniciar o servidor, a configuração do plugin plugin-bypass_guard.cfg será criada em cstrike/addons/amxmodx/configs/plugins . Nele você pode configurar o plugin editando os valores do cvar. Inicialmente, a configuração já está configurada para atender às necessidades da maioria dos usuários, ou seja, em princípio você pode deixar a maioria dos cvars inalterados. Aconselho você a prestar atenção ao bypass_guard_immunity_flags cvar . Não especifique seu valor como flags de acesso que você emite como VIP grátis/VIP noturno, pois desta forma você criará uma brecha na lógica de segurança do plugin (jogadores com VIP grátis/noturno terão permissão massiva no servidor sem verificações ). Você também pode prestar atenção ao bypass_guard_country_check_mode cvar . O plugin é configurado por padrão para a Rússia e exclui todos os países, exceto a Rússia e os países da CEI. Alguns usuários não desejam excluir estrangeiros por padrão. Neste caso, este cvar pode ser definido como 2 ou -1, mas observe que isso também prejudica a lógica de proteção, pois Uma das linhas de defesa é a proibição de conexões de países cujos jogadores não constituam o contingente do seu servidor. O cvar bypass_guard_show_url pode ser definido como 0 se você não quiser notificar os jogadores sobre onde e como eles podem obter acesso se não forem permitidos no servidor (esta informação é editada em cstrike/addons/amxmodx/data/lang/bypass_guard.txt ).
- A instalação e configuração do kernel do sistema estão concluídas. Agora você precisa selecionar e instalar provedores de dados (subplugins, chamados módulos de sistema). Para o pleno funcionamento do sistema, o núcleo (este plugin) requer um provedor de número ASN, um provedor de geodados (verificação de país) e um provedor de verificação de Proxy/VPN. Aqueles. existem três tipos de dados e você precisa garantir que cada tipo de dados seja fornecido instalando um ou mais plug-ins apropriados. A seguir estão os plug-ins de provedores de dados (links clicáveis) e os tipos de dados que eles podem fornecer. Recomenda-se escolher um plugin que forneça todos os três tipos de dados de uma vez. Isso tornará tudo mais fácil para você e, no futuro, se necessário, você poderá alterar a configuração.
- IPHub-Client (ASN/Geo/VPN) [Recomendado] [módulo iphubclient]
- iphub.info (ASN/Geo/VPN) [Módulo Curl/Grip]
- ip-api.com (ASN/Geo/VPN) [Módulo Grip] [Não é necessário registro, mas é menos preciso que o iphub]
- GeoIP (Geo) [módulo geoip do pacote amxx]
- Instale os provedores de dados escolhidos, configure-os e retorne a este guia.
- Opcionalmente (ou seja, você pode ignorá-lo), você pode instalar um plug-in Supervisor adicional , projetado principalmente para detectar automaticamente ataques sequenciais de “ignorar banimento”.
Configurações:
Cvars:
bypass_guard_enabled 1/0 - determina o status operacional do plugin
bypass_guard_kick_if_cant_check - permite expulsar um jogador se houver um erro de verificação (definido como "abc"):
a - Erro na obtenção do número AS
b - Erro na verificação de proxy/VPN
c - Erro ao verificar o país
bypass_guard_allow_steam 1/0 - permite que jogadores licenciados (Steam) passem sem verificar
bypass_guard_country_check_mode -1/0/1/2
-1 - solicita dados geográficos (para logs e bg_status), mas pula a verificação do país
0 - não faça isso verificar o país (o provedor do país não estará envolvido)
1 - verificar pela lista branca (allowed_countries.ini)
2 - verificar na lista negra (banned_countries.ini)
bypass_guard_check_proxy 1/0 - ativar (1) ou desativar (0) verificação para proxy/VPN?
bypass_guard_immunity_flags - permite pular jogadores com qualquer um dos sinalizadores especificados sem verificação (se não for especificado, aqueles que não possuem um sinalizador do cvar amx_default_access são ignorados sem verificação, se estiver registrado)
bypass_guard_show_url 1/0 - ao chutar, permite que você exiba a string 'BG__URL' no console a partir do arquivo lang (informações sobre onde e como você pode acessar o servidor)
bypass_guard_max_check_tries - número de tentativas de verificação para cada jogador
bypass_guard_check_delay - atraso de verificação após o jogador entrar no servidor (em segundos )
bypass_guard_kick_delay - atraso antes do jogador chutar (em segundos)
Fonte:
// Create config with cvars in 'configs/plugins' and execute it?
//
// Criar uma configuração com cvars em 'configs/plugins' e executá-la?
#define AUTO_CFG
// Default access flag for all console commands
//
// Sinalizador para acesso padrão a todos os comandos do console
new DIR_NAME[] = "bypass_guard" // 'configs/%s', 'data/%s', 'logs/%s'
new const IP_FILE_NAME[] = "ip_list.ini"
new const AS_FILE_NAME[] = "as_list.ini"
new const ALLOWED_COUNTRY_FILE_NAME[] = "allowed_countries.ini"
new const BANNED_COUNTRY_FILE_NAME[] = "banned_countries.ini"
new const IMMUNE_STEAMS_VAULT[] = "bypass_guard_steams"
enum _:LOG_ENUM { // Não toque nisso!!
LOG__CMD,
//
// <--- novo tipo de log vai aqui!
//
LOG__ERROR, // Deve ser o último antes de LOG__DENY
// Deve ser o último no enum --->
LOG__DENY,
LOG__ALLOW
// <---
}
new const LOG_NAME[LOG_ENUM][] = {
"CMD.log",
"ERROR.log",
"DENY.log",
"ALLOW.log"
}
API:
#if defined _bypass_guard_included
#endinput
#endif
#define _bypass_guard_included
#if AMXX_VERSION_NUM >= 175
#pragma reqlib bypass_guard_core
#if !defined AMXMODX_NOAUTOLOAD
#pragma loadlib bypass_guard_core
#endif
#else
#pragma library bypass_guard_core
#endif
#define MAX_COUNTRY_LEN 64
#define MAX_CODE_LEN 3
#define MAX_AS_LEN 16
#define MAX_DESC_LEN 64
#define MAX_RESPONSE_LEN 256
#define MAX_ACCESS_LEN 32
#define MAX_ACCESS_EXT_LEN 128
#define MAX_SV_STATUS_LEN 64
#define INVALID_ACCESS_TYPE -1
stock const _NA_[] = "N/A" // don't change this!
// Note that this is not bits. If you will need to use this, you probably will need to use CheckBit/SetBit/ClearBit (see in bypass_guard.sma)
// or manually shift this values via (1<<VALUE)
enum _:BG_CHECK_FAIL_FLAGS {
BG_CHECK_FAIL__AS,
BG_CHECK_FAIL__PROXY,
BG_CHECK_FAIL__COUNTRY
}
enum _:ALLOW_TYPE_ENUM {
ALLOW_TYPE__BOT_OR_HLTV,
ALLOW_TYPE__STEAM,
ALLOW_TYPE__ACCESS_FLAGS,
ALLOW_TYPE__STEAMID_IMMUNITY,
ALLOW_TYPE__IP_WHITELIST,
ALLOW_TYPE__AS_WHITELIST,
ALLOW_TYPE__CHECK
}
enum KICK_TYPE_ENUM {
KICK_TYPE__AS_BAN,
KICK_TYPE__IP_BAN,
KICK_TYPE__BAD_COUNTRY,
KICK_TYPE__PROXY_DETECTED,
KICK_TYPE__AS_CHECK_FAIL,
KICK_TYPE__PROXY_CHECK_FAIL,
KICK_TYPE__COUNTRY_CHECK_FAIL,
KICK_TYPE__SUPERVISOR
}
enum _:BG_PLAYER_DATA_STRUCT {
BG_PDS__AS[MAX_AS_LEN], // AS number
BG_PDS__DESC[MAX_DESC_LEN], // Provider description
BG_PDS__CODE[MAX_CODE_LEN * 2], // Country code
BG_PDS__COUNTRY[MAX_COUNTRY_LEN], // Country name
BG_PDS__ACCESS_TYPE, // Allow/deny access reason as integer (any value from ALLOW_TYPE_ENUM or KICK_TYPE_ENUM)
BG_PDS__ACCESS[MAX_ACCESS_LEN], // Allow/deny access reason as string
BG_PDS__ACCESS_EXT[MAX_ACCESS_EXT_LEN], // Access external data
BG_PDS__CHECK_FAIL_FLAGS, // Bitsum of triggered check fail flags (see 'BG_CHECK_FAIL_FLAGS')
BG_PDS__SV_STATUS[MAX_SV_STATUS_LEN] // Supervisor status as string
}
/**
* Called to request country name and country code for specified IP address.
*
* @note Plugin that handles request MUST return PLUGIN_HANDLED
*
* @param pPlayer Checking player index or 0 if this is call for any command
* @param szIP IP address to check
* @param iMaxTries Max check retry count (if check fails)
*
* @return PLUGIN_HANDLED to handle request (agregate it)
* PLUGIN_CONTINUE to skip request (pass to other provider)
*/
forward BypassGuard_RequestGeoData(pPlayer, const szIP[], iMaxTries);
/**
* Called to request AS number for specified IP address.
*
* @note Plugin that handles request MUST return PLUGIN_HANDLED
*
* @param pPlayer Checking player index or 0 if this is call for 'bg_get_as_by_ip' command
* @param szIP IP address to check
* @param iMaxTries Max check retry count (if check fails)
*
* @return PLUGIN_HANDLED to handle request (agregate it)
* PLUGIN_CONTINUE to skip request (pass to other provider)
*/
forward BypassGuard_RequestAsInfo(pPlayer, const szIP[], iMaxTries);
/**
* Called to check specified IP address for Proxy/VPN.
*
* @note Plugin that handles request MUST return PLUGIN_HANDLED
*
* @param pPlayer Checking player index or 0 if this is call for 'bg_check_ip' command
* @param szIP IP address to check
* @param iMaxTries Max check retry count (if check fails)
*
* @return PLUGIN_HANDLED to handle request (agregate it)
* PLUGIN_CONTINUE to skip request (pass to other provider)
*/
forward BypassGuard_RequestProxyStatus(pPlayer, const szIP[], iMaxTries);
/**
* Called to check specified player in Supervisor.
*
* @note Plugin that handles request MUST return PLUGIN_HANDLED
*
* @param pPlayer Checking player index
* @param szAsNumber Player AS number
*
* @return PLUGIN_HANDLED to handle request (agregate it)
* PLUGIN_CONTINUE to skip request (pass to other provider)
*/
forward BypassGuard_RequestSupervising(pPlayer, const szAsNumber[MAX_AS_LEN]);
/**
* Called when checks chain is over, so player allowed to enter the server, or not.
*
* @note This forward is not called for bots/hltv
* @note From now on you can use BypassGuard_GetPlayerData() native
*
* @param pPlayer Player index
* @param bAllowConnect Allow connect (true) or deny (false, so player will be kicked soon)
* @param ePlayerData Player data (see 'BG_PLAYER_DATA_STRUCT')
*
* @noreturn
*/
forward BypassGuard_PlayerCheckComplete(pPlayer, bool:bAllowConnect, const ePlayerData[BG_PLAYER_DATA_STRUCT]);
/**
* Sends country code and country name to main plugin as reply to BypassGuard_RequestGeoData().
*
* @note Calling this with pPlayer = 0 suppose that this is instant cache-based answer for any command
*
* @param pPlayer Checking player index or 0 if this is answer for any command
* @param szCode Country code
* @param szCountry Country name
* @param bSuccess true if request was successful, false otherwise
*
* @noreturn
*/
native BypassGuard_SendGeoData(pPlayer, const szCode[], const szCountry[], bool:bSuccess);
/**
* Sends AS number to main plugin as reply to BypassGuard_RequestAsInfo().
*
* @note Calling this with pPlayer = 0 suppose that this is instant cache-based answer for 'bg_get_as_by_ip'
*
* @param pPlayer Checking player index or 0 if this is answer for 'bg_get_as_by_ip' command
* @param szAsNumber AS number
* @param szDesc Provider description
* @param bSuccess true if request was successful, false otherwise
*
* @noreturn
*/
native BypassGuard_SendAsInfo(pPlayer, const szAsNumber[], const szDesc[], bool:bSuccess);
/**
* Sends proxy status to main plugin as reply to BypassGuard_RequestProxyStatus().
*
* @note Calling this with pPlayer = 0 suppose that this is instant cache-based answer for 'bg_check_ip'
*
* @param pPlayer Checking player index or 0 if this is answer for 'bg_check_ip' command
* @param IsProxy Proxy status (supposed to be false if bSuccess is false)
* @param bSuccess true if request was success, false otherwise
*
* @noreturn
*/
native BypassGuard_SendProxyStatus(pPlayer, bool:IsProxy, bool:bSuccess);
/**
* Sends supervising result to main plugin as reply to BypassGuard_RequestSupervising().
*
* @param pPlayer Player index
* @param bAllowConnect Allow connect (true) or deny (false, so player will be kicked soon)
* @param szStatus Supervising status as string
*
* @noreturn
*/
native BypassGuard_SendSupervisingResult(pPlayer, bool:bAllowConnect, const szStatus[MAX_SV_STATUS_LEN]);
/**
* Logs specified text to error log.
*
* @param szText Text to log
*
* @noreturn
*/
native BypassGuard_LogError(const szText[]);
/**
* Returns plugin folder name.
*
* @param szBuffer Buffer to store folder name
* @param iMaxLen Maximum length of the buffer (usually sizeof - 1)
*
* @noreturn
*/
native BypassGuard_GetPluginFolderName(szBuffer[], iMaxLen);
/**
* Gets data for the specified player (see 'BG_PLAYER_DATA_STRUCT').
*
* @note You can use this only after player passed through forward BypassGuard_PlayerCheckComplete()
*
* @param pPlayer Player index
* @param ePlayerData buffer to store player data
*
* @return 1 if player is ready and data was stored to buffer
* 0 if player is not ready, so data not stored
* -1 if player is not connected
*/
native BypassGuard_GetPlayerData(pPlayer, ePlayerData[BG_PLAYER_DATA_STRUCT]);
/**
* Returns if the player is checked.
*
* @param pPlayer Player index
*
* @return true if player is checked, false otherwise
*/
native bool:BypassGuard_IsPlayerChecked(pPlayer);