Ir para conteúdo
  • Cadastre-se

Instalando o Sistema "max_packets_per_seconds" contra Syn Flood no seu Servidor 0.x


Posts Recomendados

  • Sub-Admin

Instalando o Sistema max_packets_per_seconds no Servidor 0.x

 

Passo 1: Modificar o Connection.cpp

  1. Abra o arquivo Connection.cpp.
  2. Procure pela função:
void Connection::parseHeader(const boost::system::error_code& error)

Antes da linha:

--m_pendingRead;
try

Adicione o seguinte código:

uint32_t timePassed = std::max<uint32_t>(1, (time(NULL) - m_timeConnected) + 1);
if ((++m_packetsSent / timePassed) > static_cast<uint32_t>(g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))) {
    std::cout << convertIPAddress(getIP()) << " disconnected for exceeding packet per second limit." << std::endl;
    close();
    m_connectionLock.unlock();
    return;
}

if (timePassed > 2) {
    m_timeConnected = time(NULL);
    m_packetsSent = 0;
}

 

 

Passo 2: Modificar o Connection.h

  1. Abra o arquivo Connection.h.
  2. Procure pela classe:
class Connection : public boost::enable_shared_from_this<Connection>, boost::noncopyable

Abaixo de:

m_protocol = NULL;

Adicione:

m_packetsSent = 0;
m_timeConnected = time(NULL);

Abaixo de:

uint32_t m_refCount;

Adicione:

time_t m_timeConnected;
uint32_t m_packetsSent;

 

Passo 3: Modificar o ProtocolGame.cpp

  1. Abra o arquivo ProtocolGame.cpp.
  2. Procure pela função:
void ProtocolGame::parsePacket(NetworkMessage &msg)

Abaixo de:

if(!player || !m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN
    || msg.getMessageLength() <= 0)
    return;

Adicione:

uint32_t now = time(NULL);
if(m_packetTime != now) {
    m_packetTime = now;
    m_packetCount = 0;
}

++m_packetCount;
if(m_packetCount > (uint32_t)g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))
    return;

 

Passo 4: Modificar o ProtocolGame.h

  1. Abra o arquivo ProtocolGame.h.
  2. Procure por:
ProtocolGame(Connection_ptr connection): Protocol(connection)

Substitua:

m_eventConnect = 0;

por:

m_eventConnect = m_packetCount = m_packetTime = 0;

Procure por:

uint32_t m_eventConnect

Substitua por:

uint32_t m_eventConnect, m_maxSizeCount, m_packetCount, m_packetTime;

 

Passo 5: Modificar o ConfigManager.cpp

  1. Abra o arquivo ConfigManager.cpp.
  2. Procure por:
m_loaded = true;

Acima disso, adicione:

m_confNumber[MAX_PACKETS_PER_SECOND] = getGlobalNumber("max_packets_per_second", 500);

 

Passo 6: Modificar o ConfigManager.h

  1. Abra o arquivo ConfigManager.h.
  2. Procure por
LAST_NUMBER_CONFIG /* this must be the last one */

Acima disso, adicione:

MAX_PACKETS_PER_SECOND,

 

Passo 7: Modificar o config.lua

  1. No arquivo config.lua do seu servidor, adicione:
max_packets_per_second = 80
  1. Lembrando que, quanto maior o número, mais pacotes a pessoa pode enviar sem ser desconectada.

 

 

Medidas para ajudar a proteger o servidor contra ataques de "packet flood" ou "SYN flood". Esses ataques envolvem o envio de um grande número de pacotes ao servidor em um curto espaço de tempo, com a intenção de sobrecarregar os recursos do servidor e causar falhas ou degradação no desempenho. Implementando o sistema max_packets_per_seconds, você está limitando o número de pacotes que cada conexão pode enviar por segundo. Isso ajuda a mitigar o impacto de ataques de flood, desconectando automaticamente conexões que excedem o limite configurado de pacotes por segundo. Essas mudanças melhoram a resiliência do seu servidor contra certos tipos de ataques de negação de serviço (DoS), contribuindo para a estabilidade e segurança do seu  OTServer.

 

Créditos

@L3K0T por esse tutorial formatado.

@Yan Liima [TFS 0.4 REV3996] pelo código <3

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo