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:

  1. Coloque os arquivos no servidor de acordo com a hierarquia de arquivos
  2. Edite cstrike/addons/amxmodx/data/lang/bypass_guard.txt
  3. Edite as configurações na fonte
  4. Compile o plugin ( SE NÃO SABE COMO COMPILAR, VEJA EM NOSSOS TUTORIAIS!  ).
  5. Copie o plugin compilado para o diretório cstrike/addons/amxmodx/plugins
  6. Registre o plugin no arquivo amxmodx/configs/plugins.ini
  7. 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 ).
  8. 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.
  9. IPHub-Client (ASN/Geo/VPN) [Recomendado] [módulo iphubclient]
  10. iphub.info (ASN/Geo/VPN) [Módulo Curl/Grip]
  11. ip-api.com (ASN/Geo/VPN) [Módulo Grip] [Não é necessário registro, mas é menos preciso que o iphub]
  12. GeoIP (Geo) [módulo geoip do pacote amxx]
  13. Instale os provedores de dados escolhidos, configure-os e retorne a este guia.
  14. 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);

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *