Preciso fazer algumas pequenas modificações no tráfego de entrada de um host tcp: port conhecido antes que o processo de manipulação da conexão obtenha o fluxo.
Por exemplo, seja 192.168.1.88 um host remoto que execute um servidor web.
Eu preciso disso, quando um processo no meu host local recebe dados de 192.168.1.88:80 (por exemplo, o navegador), os dados são alterados primeiro substituindo text-A
por text-B
, como este:
- 127.0.0.1: ... conecta-se a 192.168.1.88:80
127.0.0.1: ... envia para 192.168.1.88:80:
GET /
192.168.1.88:80 envia para 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Esses dados são um pouco interceptados pelo sistema e transmitidos para um programa cuja saída é:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
o sistema fornece os dados alterados para o processo que manipula 127.0.0.1: ..., como se fosse de 192.168.1.88:80.
Supondo que eu tenha uma maneira baseada em fluxo para fazer essas alterações (usando, sed
por exemplo), qual é a maneira mais fácil de pré-processar o fluxo tcp recebido?
Acho que isso envolveria iptables
, mas não sou muito bom nisso.
Observe que o aplicativo deve lidar com o host original, portanto, a configuração de um proxy provavelmente não é uma solução.
fonte
Respostas:
Use proxies com redes e iptables.
Então corra:
O NetSED é um utilitário pequeno e útil projetado para alterar, em tempo real, o conteúdo dos pacotes encaminhados pela sua rede. É realmente útil para alteração, falsificação ou manipulação de pacotes de rede. O NetSED suporta:
auditoria de protocolo de caixa preta - sempre que houver duas ou mais caixas proprietárias se comunicando usando algum protocolo não documentado. Ao impor alterações nas transmissões em andamento, você poderá testar se o aplicativo examinado pode ser reivindicado como seguro.
experimentos de geração de fuzz, testes de integridade - sempre que você faz testes de estabilidade de um aplicativo para ver como ele se importa com a integridade dos dados;
outros casos de uso comuns: transferências enganosas, filtragem de conteúdo, conversão de protocolo - o que melhor se adequar à sua tarefa.
fonte
netsed
, ele se encaixa quase perfeitamente para o meu propósito. A única coisa que não entendo é como configurar o "proxy transparente local" (veja a pergunta). Talvez eu deva configurar outra interface de rede (virtual) para obter isso. A propósito, por enquanto esta é a resposta mais satisfatória.OUTPUT
, nãoPREROUTING
. Além disso, a-D
opção tinha que ser-A
para mim. Além disso, para a-j
opção, eu tive que usarDNAT --to-destination (ip)
ouREDIRECT --to-port
. Por fim, não consegui corrigir o erro de segmentação do netsed. veja também: ubuntuforums.org/showthread.php?t=2337389Você pode fazer exatamente isso usando o iptables para fazer proxy de conexões transparentes por meio de um proxy squid e depois ter o squid reescrito o conteúdo http para você.
fonte
iptables
+ o uso de libnetfilter_qu é outra opção que fará o que você deseja:"... [reinicializa] pacotes alterados para o subsistema nfnetlink_queue do kernel."
Provavelmente, você terá mais extensibilidade, pois depende de você codificar software.
Também existe um wrapper python .
fonte