Tenho um servidor game feito para plataforma Linux, ele trabalha com 4 processos:
Master Server-> Utiliza a porta 5112
Client Server-> Utiliza a porta 5113
DataBase Server -> Utiliza a porta 5114
Game Server -> Utiliza a porta 3000
Em resumo, o processos MasterServer, ClientServer e DataBase Server são feito para a plataforma Linux, e o Game Server eu utilizo o Wine para rodar o *.exe do processo. Tudo ocorre bem!
A um tempo atrás estava com meu servidor na plataforma Windows, mas descobri que estava sendo atacado diretamente na porta 3000. O individuo se conecta no servidor, entra no jogo e utiliza um plugin para enviar um flood de mensagens a 100ms em um "Chat Especifico" onde não tem um limitador para floods. Isso faz o Game Server.exe travar e os Players caírem do servidor.
Então utilizei uma ferramenta para capturar o código HEX enviado dentro desse "Chat Especifico" e encontrei!
O código é:
16 00 00 [mensagem] 00 00 00
Então resolvi migrar para a plataforma Linux para bloquear esse pacote especifico, evitando os Floods dentro do jogo.
Pois bem, utilizei as seguintes regras:
iptables -N my_chain
iptables -A my_chain -p tcp --dport 3000 -j DROP ! -f -m string --hex-string '|160000|' --algo bm
iptables -A INPUT -p tcp --dport 3000 -j en ! -f -m string --hex-string '|000000|' --algo bm
Então ele bloquearia todo pacote enviado com o HEX "16 00 00 [mensagem] 00 00 00".
Funcionou! Mas começou a desconectara também os demais Players, pois existem HEX iguais em outros pacotes enviados entre Client -> Server, não no início do pacote, mas no meio do pacote acaba surgindo os HEX "16 00 00" e "00 00 00".
Alguém poderia fornecer uma solução para o meu problema?
Sou iniciante em Linux e não faço ideia de como bloquear esses ataques.