Pergunta

Eu estou procurando um utilitário linux que pode alterar as cargas de pacotes de rede com base em um conjunto de regras. Idealmente, eu usaria iptables e o módulo do kernel netfilter, mas eles não suportam mangling payload genérica: iptables irá alterar vários cabeçalho Campos (endereços, portos, TOS, etc), e pode < em> jogo arbitrária bytes dentro de um pacote, mas aparentemente não é capaz de alter dados arbitrários dentro do pacote.

Um kernel módulo seria uma grande vantagem, como a eficiência é uma preocupação, mas estou feliz para explorar outras opções que iria fazer o trabalho.

Obrigado por suas idéias!


Atualização longo atraso:

Nós escolhemos usar o módulo NFQUEUE, que é a mais recente implementação dos módulos fila que Robert Gamble sugeriu. Parecia ser bastante simples, com um bônus de segurança para permitir que o nosso código para ser executado no usuário, não do kernel, espaço.

A implementação teria sido quase trivial se tivéssemos simplesmente queria alterar a carga útil sem alterar seu tamanho. Nesse caso, nós definir uma regra iptables para selecionar os pacotes "interessantes" para nós e enviá-los um alvo NFQUEUE. Nós iria escrever uma função de retorno de chamada que iria inspecionar os pacotes de NFQUEUE, modificar os dados, conforme necessário, e recalcular as somas de verificação em seus cabeçalhos TCP e IP.

No entanto, o nosso caso de uso envolve a injeção de caracteres adicionais no fluxo de dados. Isto tem o efeito secundário um pouco óbvio de aumentar o número SEQ / ACK correspondentes no fluxo TCP, e o efeito secundário não tão óbvia de confundir o conntrack módulo o suficiente para que ele quebra NAT inteiramente. Depois de um muito de pesquisa, de coçar a cabeça, e experimentação, a solução mais conveniente era para desabilitar o controle de conexão para estes pacotes particulares (com o alvo NOTRACK na tabela de raw) e manipulá-lo em nosso retorno. Salvar seus tomates e mensagens de ódio; Não estou nada orgulhoso de deixá-lo sob o capô, mas era a única maneira de obter um produto confiável para o cliente antes da próxima Era Glacial. E é uma história boa. Mas eu realmente aprecio, e compartilhar, seus sentimentos sentido.

Version 2 irá alavancar nossa nova iluminação, substituindo o nosso retorno e várias regras iptables com um NAT personalizado e / ou conntrack ajudante . Estamos confiantes de que o exercício atual nos deu experiência suficiente para criar um módulo do kernel que vai caber organicamente na arquitetura netfilter para resolver os problemas que encontramos.

Obrigado novamente por seu interesse e sugestões!

Foi útil?

Solução

Eu não tê-lo usado, mas o alvo FILA netfilter parece que ele poderia funcionar. Ele usa um soquete nflink e um aplicativo de espaço do usuário registrado para o soquete para realizar as modificações de carga útil.

O href="http://linux.die.net/man/3/libipq" rel="noreferrer"> libipq página homem

Outras dicas

Resolução:

Nós acabamos com um módulo personalizado para netfilter, que é claramente a ferramenta "certa" para o trabalho.

scroll top