Suporte Gristony 230 Postado 2 de Abril Suporte Compartilhar Postado 2 de Abril Solução Kondrah Alpha Multi Proxy Este guia foi escrito por This is the hidden content, please Entre ou Cadastre-se , com agradecimentos e crédito a This is the hidden content, please Entre ou Cadastre-se - atribuição total no final. Nível de dificuldade: Difícil – Este guia pressupõe conhecimento de Linux, firewalls, C++ e Lua. Tempo de leitura: Aprox. 10 minutos Devido ao aumento da frequência de ataques DDoS com resgate contra nossa comunidade nos últimos meses, decidi escrever este guia na esperança de que ele ajude você a proteger seu jogo e fornecer a melhor experiência aos seus jogadores. O que é isto? Este guia explica como implementar o sistema proxy escrito pelo This is the hidden content, please Entre ou Cadastre-se para OTClientv8. (Observação: o recurso do lado do cliente também foi portado e lançado para OTClient Redemption por This is the hidden content, please Entre ou Cadastre-se ). Este guia pode ser usado para resgate OTCv8 e OTC. O guia faz referência a um repositório externo que contém o aplicativo proxy de back-end criado pelo This is the hidden content, please Entre ou Cadastre-se , com importantes correções de bugs do Alpha que abordam alguns problemas importantes que estavam presentes no software original. Se você atualmente executa a versão e configuração desta solução instalada por This is the hidden content, please Entre ou Cadastre-se , desde que entenda o que ele fez, este guia pode ser usado para simplificar sua infraestrutura. De agora em diante, estarei me referindo a este sistema como Alpha Proxy. O que isso faz? O uso desse sistema proxy permite que o cliente do jogo estabeleça e mantenha conexões com vários servidores proxy de encaminhamento simultaneamente e envie e receba pacotes de jogos nos dois melhores. Com a configuração completa descrita neste guia, o servidor de jogo de back-end permanece desconhecido do público e, portanto, não pode ser atacado diretamente. Além disso, os jogadores se beneficiam da redundância de rotas ao serem conectados a vários servidores proxy de encaminhamento, reduzindo o risco de atrasos e desconexões. Em muitos casos, os jogadores também se beneficiarão do roteamento otimizado para latência para o servidor do jogo, graças ao uso de locais e provedores estratégicos de proxy avançado. Pré-requisitos Um servidor de jogos rodando no Linux (Este guia assumirá TFS1.4 e Ubuntu 24.04) Um mínimo de dois outros servidores Linux para atuar como proxies de encaminhamento (tecnicamente, você poderia usar o Windows para isso, mas ... não) Um IP desconhecido/secreto para o seu back-end (a máquina do servidor do jogo) Seu servidor web deve ser proxy (por exemplo, pela cloudflare) e/ou em uma máquina separada (para que seu IP de back-end permaneça oculto o tempo todo) Portas necessárias abertas nos firewalls de todos os servidores. Você pode usar o que quiser, mas para este guia usaremos o seguinte: Servidor de jogo de back-end (IP secreto): 7100 TCP (ouvinte HAProxy para login) 7200 TCP (ouvinte HAProxy para status) 7300 TCP (ouvinte de proxy alfa) Para uma camada extra (provavelmente desnecessária) de segurança, restrinja as portas acima para permitir apenas cada um dos endereços IP do proxy de encaminhamento Servidores proxy de encaminhamento: 7100 TCP (ouvinte HAProxy para login) 7200 TCP (ouvinte HAProxy para status) 7300 TCP (ouvinte HAProxy para jogo) Nota: Se o seu servidor já estiver ativo e/ou seu IP já for público, você tem duas opções: Prepare-se para migrar para um novo servidor com um novo IP (fácil, sem necessidade de novos conhecimentos), ou; Compre um endereço IP secundário para o seu servidor, se disponível (também é fácil, mas exigirá algum conhecimento novo para configurar sua máquina para usar os dois endereços IP. Seu provedor pode fornecer um guia ou usar o chatGPT para obter instruções). Se você seguir esse caminho, configurará o sistema proxy apenas para o novo endereço IP e, uma vez pronto, para habilitá-lo, desativará (negará todos os ipv4 ativados) o firewall de borda de rede de endereço IP original. Quantos, com quem, quanto e onde Para que valha a pena implementar essa configuração, você precisa de pelo menos 2 servidores proxy de encaminhamento, no entanto, a recomendação típica é de pelo menos 5. Embora tecnicamente a configuração possa ser executada com apenas 1, se você puder pagar apenas 1, existe um método muito mais fácil do que este, confira este tópico: This is the hidden content, please Entre ou Cadastre-se de IP do cliente Para manter as coisas simples, recomendo que você fique com grandes provedores de hospedagem que oferecem hospedagem VPS muito acessível, como OVH e Hetzner. Para aqueles um pouco mais avançados, você também pode considerar AWS, GCP, etc. Se você quiser levar as coisas ainda mais longe, sinta-se à vontade para me enviar uma mensagem. Você não precisa gastar muito nesses servidores proxy avançados. Eles não usarão muita energia ou largura de banda, então normalmente você deseja obter o VPS mais barato que a empresa oferece. Isso pode parecer algo como 1vCore + 1 GB de RAM por US$ 5/m. Para aproveitar ao máximo essa configuração, você deve distribuir geograficamente seus servidores proxy avançados com referência à sua base de jogadores. Mais importante, porém, você vai querer pelo menos 1 servidor proxy de encaminhamento o mais próximo possível do seu servidor de jogo de back-end. Minhas recomendações rápidas para locais de proxy de encaminhamento seriam: Vint Hill, EUA (OVH) e/ou Beauharnois, CA (OVH) Londres, Reino Unido (OVH) Varsóvia, PL (OVH) Falkenstein, DE (Hetzner) e/ou Nuremberg, DE (Hetzner) Miami, EUA (Gcore) Vamos começar! 1. Alterações de origem do TFS Existem muitas alterações de origem para direcionar cada edição individual nesta postagem, então, em vez disso, criei um arquivo de patch para o TFS1.4 (anexado). As alterações não são particularmente complicadas, se você usar uma versão diferente do TFS (ou OTX, TVP, etc.), ainda poderá acompanhar e fazer essas alterações manualmente. Com as alterações de origem compiladas com sucesso, você pode atualizar seu config.lua da seguinte maneira: LUA: ip = "127.0.0.1" -- important, do not change statusIP = "123.456.78.9" -- set this to your closest forward proxy server IP bindOnlyGlobalAddress = true -- important, do not change loginProtocolPort = 7171 gameProtocolPort = 7172 statusProtocolPort = 7171 2. Configuração do cliente Supondo que você ainda não tenha massacrado seu módulo para forçar diferentes IPs e portas, não há muito que você precise fazer para preparar o cliente. Os jogadores se conectarão ao servidor de login normalmente e o servidor de login passará todas as informações necessárias para o cliente. É possível 'codificar' os IPs do proxy de encaminhamento no cliente, e é isso que muitos optam por fazer porque é 'mais fácil', no entanto, essa não era a configuração pretendida e não é tão flexível quanto enviar a lista de proxy durante o login (que é o que faremos, supondo que você tenha seguido as alterações do TFS na seção 1). 3. Configuração de proxy de encaminhamento Como o nome sugere, essa configuração é para cada um de seus servidores proxy de encaminhamento. $ $ $ $ $ $ Importante : substitua pelo seu IP de back-end real! Dica: Pressionar -> enquanto estiver no vim o levará ao topo do arquivo e, em seguida, excluirá tudo no arquivo, permitindo que você cole imediatamente (normalmente no modo 'i'nput). Se a pasta estiver recuando automaticamente, pressione -> -> e tente novamente.client_entergamesudo apt updatesudo apt-get updatesudo apt upgradesudo apt install haproxysudo vim /etc/haproxy/haproxy.cfgBACKENDIPggwgright-clickesc:set: paste Código: global chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults timeout connect 4s timeout client 50s timeout server 50s # login connections listen l1 bind 0.0.0.0:7100 mode tcp server srv1 BACKENDIP:7100 send-proxy-v2 # game connections listen l2 bind 0.0.0.0:7200 mode tcp server srv2 BACKENDIP:7200 send-proxy-v2 # status connections listen l3 bind 0.0.0.0:7300 mode tcp server srv3 BACK ENDIP:7300 send-proxy-v2 $ sudo systemctl restart haproxy 4. Configuração de proxy reverso Você também configurará uma instância do HAProxy em seu servidor de back-end para ouvir e lidar com conexões de servidor de login + status. $ sudo apt install haproxy $ sudo vim /etc/haproxy/haproxy.cfg Código: global chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults timeout connect 4s timeout client 50s timeout server 50s # login connections listen l1 bind 0.0.0.0:7100 accept-proxy mode tcp server srv1 127.0.0.1:7171 send-proxy-v2 # status connections listen l2 bind 0.0.0.0:7300 accept-proxy mode tcp server srv1 127.0.0.1:7171 send-proxy-v2 $ sudo systemctl restart haproxy 5. Alpha Proxy Este é o aplicativo que irá ouvir e lidar com cada uma das conexões de jogo proxy proxy por seus servidores proxy avançados, é onde a maior parte da mágica acontece. Compile o aplicativo proxy: $ $ $ $ Crie um arquivo de serviço para garantir que o Alpha Proxy esteja sempre em execução. Certifique-se de atualizar o seguinte:git clone [email protected]:thatmichaelguy/alpha-proxy.gitmkdir build && cd buildcmake ..makesystemd ExecStart caminho para corresponder ao do seu binário Alpha Proxy compilado WorkingDirectory caminho para corresponder ao diretório binário do Alpha Proxy User & Group campos, se necessário O primeiro parâmetro do binário é a porta de escutaExecStart O segundo parâmetro do binário é o máximo de conexões por IP (4 proxies = 4 conexões por IP por cliente aberto)ExecStart $ sudo vim /usr/lib/systemd/system/alpha-proxy.service Código: [Unit] Description=Alpha Proxy After=network.target Wants=network-online.target [Service] Type=simple ExecStart=/path/to/the/proxy/build/alpha-proxy 7200 20 WorkingDirectory=/path/to/the/proxy/build/ Restart=always User=ubuntu Group=ubuntu LimitCORE=104857600 LimitNOFILE=50000 [Install] WantedBy=default.target $ sudo systemctl daemon-reload $ sudo systemctl start alpha-proxy $ sudo systemctl enable alpha-proxy 6. Banco de dados A etapa final é criar uma tabela em seu banco de dados para seus servidores proxy - é aqui que o servidor de login lerá. Ajuste a consulta abaixo para corresponder aos endereços IP de seus servidores proxy de encaminhamento. - A coluna pode ser utilizada para desativar temporariamente um proxy, se desejado. - A coluna pode ser usada para ajustar como o cliente escolherá servidores proxy, você pode querer usá-la se houver limitações de largura de banda em alguns de seus servidores proxy de encaminhamentoINSERTdisabledpriority SQL: CREATE TABLE `proxies` ( `id` int(11) NOT NULL, `host` tinytext NOT NULL, `port` smallint(5) UNSIGNED NOT NULL DEFAULT 0, `priority` smallint(5) UNSIGNED NOT NULL DEFAULT 0, `disabled` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 ); ALTER TABLE `proxies` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT ADD PRIMARY KEY (`id`) USING BTREE, ADD KEY `disabled` (`disabled`) USING BTREE; INSERT INTO `proxies` (`id`, `host`, `port`, `priority`, `disabled`) VALUES (1, '123.456.78.9', 7200, 0, 0), (2, '123.456.78.8', 7200, 0, 0), (3, '123.456.78.7', 7200, 0, 0), (4, '123.456.78.6', 7200, 0, 0), (5, '123.456.78.5', 7200, 0, 0); Conformidade com o Otservlist O Otservlist tem exigido que servidores populares forneçam informações adicionais para ajudar a manter a integridade das contagens de jogadores exibidas na lista de servidores. Isso não é realmente uma preocupação com a privacidade, pois nenhum dado pessoal está associado ao . Este não é o tópico para discutir como você se sente sobre isso de qualquer maneira, é apenas onde você aprende a cumpri-lo. O Otservlist solicita uma saída do comando para ajudar a verificar se a quantidade de jogadores que você relata como online é congruente com a quantidade de conexões ativas e se você está respeitando o limite de 4 jogadores relatados como online por endereço IP. Ao usar vários servidores proxy nessa configuração, você precisa fornecer a saída solicitada de cada servidor proxy, bem como do servidor de jogo de back-end. Eu escrevi um script simples que você pode executar em um intervalo com cron para buscar cada saída do comando e despejá-la em um diretório especificado em seu servidor web. O script também edita seu IP de back-end do . Opcionalmente, você pode restringir o acesso a este diretório por IP ou por senha para que apenas otservlist possa acessá-lo - o chatGPT provavelmente pode ajudá-lo a conseguir isso.lsoflsoflsoflsoflsof Para gerar a saída lsof.log em um intervalo em seus servidores proxy de encaminhamento, configure um cronjob como o seguinte: * * * * * sudo lsof -nP -i :7300 > /tmp/lsof.log && md5sum /tmp/lsof.log > /tmp/lsof.md5 Para gerar a saída lsof.log em um intervalo no servidor de back-end, configure um cronjob como o seguinte (observe que esse comando edita o IP do back-end, desde que você o atualize conforme necessário): * * * * * sudo lsof -nP -i :7300 | sed 's/123.456.78.9/BACKEND_IP/g' > /tmp/lsof.log && md5sum /tmp/lsof.log > /tmp/lsof.md5 Para puxar todos os arquivos para o seu servidor web, você pode usar um script como abaixo Observe que se você escolheu diferentes portas de escuta de proxy de encaminhamento ou proxy alfa, não se esqueça de atualizar essas portas nos cronjobs acima para que a saída lsof esteja correta: Bash: #!/bin/bash PASSWORD="password123" # to simplify things, we are using the same password for each forward proxy server. If you use SSH keys, you could modify this script to not require the sshpass utility # Array of remote file (lsof.log) and local destination directory pairs # Format: "user@host:/remote/path/to/file /local/path/to/destination" FILES_TO_RETRIEVE=( "[email protected]:/tmp/lsof.log /var/www/lsof.comain.com/lsof-ovh01.log" "[email protected]:/tmp/lsof.md5 /var/www/lsof.comain.com/lsof-ovh01.md5" ) for entry in "${FILES_TO_RETRIEVE[@]}"; do REMOTE_FILE=$(echo "$entry" | awk '{print $1}') LOCAL_PATH=$(echo "$entry" | awk '{print $2}') sshpass -p "$PASSWORD" scp "$REMOTE_FILE" "$LOCAL_PATH" if [[ $? -ne 0 ]]; then echo "Failed to retrieve $REMOTE_FILE" else echo "Successfully retrieved $REMOTE_FILE" fi done Site Se o seu site depende do protocolo de status para status e/ou contagem online, você precisará atualizar o IP/PORTA que ele está usando para se adequar à sua nova configuração (observe que alguns sites extraem isso diretamente de um config.lua) Créditos This is the hidden content, please Entre ou Cadastre-se : Desenvolvedor do aplicativo proxy de back-end, do recurso de proxy otclient e das alterações necessárias do TFS para reunir tudo This is the hidden content, please Entre ou Cadastre-se : Correções de bugs no aplicativo proxy de back-end e me ensinaram como implementar o sistema (da maneira certa) This is the hidden content, please Entre ou Cadastre-se : Portando o recurso de proxy do cliente para OTClient Redemption (e colocando em seus próprios esforços para ajudar as pessoas a implementar este sistema) This is the hidden content, please Entre ou Cadastre-se : Escrevendo este guia Doações Se você achou este guia útil e se sente inclinado, pode direcionar quaisquer doações para This is the hidden content, please Entre ou Cadastre-se e/ou This is the hidden content, please Entre ou Cadastre-se Footnotes Aparentemente, este sistema de proxy também pode ser usado com clientes reais do Tibia, no entanto, não estou familiarizado com isso. Ref: This is the hidden content, please Entre ou Cadastre-se Há uma solicitação de pull de rascunho para implementar as alterações do servidor de jogos no TFS. Eu não o revisei, e as alterações que instruo aqui podem diferir desse PR. Ref: This is the hidden content, please Entre ou Cadastre-se proxy1.4.patch 25 3 1 Link para o comentário https://tibiadevs.com/forums/topic/1026-guia-de-proxy-alfa-proxy-multi-caminho-kondrahotclient/ Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora