string Iptables

2

Eu tenho uma regra do iptables como esta:

iptables -t nat -I PREROUTING -p tcp --dport 80 -s 192.168.1.2 -j DNAT --to-destination 192.168.1.1:80

funciona perfeitamente ... mas quero redirecionar apenas para um URL como este:

iptables -t nat -I PREROUTING -p tcp --dport 80 -s 192.168.1.2 -m string --string "google.com" -j DNAT --to-destination 192.168.1.1:80

que não funciona de qualquer forma ... por favor me ajude com isso

    
por Mr. BeatMasta 27.06.2012 / 22:18

2 respostas

6

Isso não vai funcionar. Apenas o primeiro pacote de cada conexão cruza a tabela NAT. As strings só serão visíveis no terceiro pacote, aquele com a carga útil.

Você deve usar um proxy para fazer isso, no modo transparente, se não quiser configurá-lo nos navegadores.

    
por 27.06.2012 / 23:49
1

Essas regras fazem a mesma coisa. Independentemente de qual corresponde, o resultado é o mesmo.

Qualquer pacote que possa corresponder à segunda regra já teria correspondido à primeira regra. Mesmo que um pacote tenha correspondido à segunda regra, ele não faz nada diferente da primeira regra. (Na verdade, eu indiquei corretamente o -I em suas regras, o que significa que as regras estão na ordem inversa).

Eu devo avisá-lo que tentar mudar os fluxos de pacotes da maneira que você está fazendo não funcionará como você espera. O IPTables funciona no nível pacote , não no nível conexão . Uma regra com --string "google.com" corresponderia ao (s) pacote (s) nesta página que contém a string "google.com", mas não a qualquer parte do handshake TCP e não a qualquer outro pacote que não contenha "google.com" . Esta página é atualmente sobre 45KB que seria aproximadamente 30 pacotes e somente dois deles combinariam. Uma regra com --string "google.com" provavelmente não corresponderia a nenhum pacote da página inicial real do Google. Ele pode redirecionar as solicitações de DNS se isso acontecer no TCP.

Como @diegows apontou em sua resposta, apenas o primeiro pacote de qualquer conexão TCP atravessa a tabela nat porque você não pode redirecionar pacotes no meio de uma conexão TCP e esperar que funcione para que eles não façam é possível. Mesmo se você colocar esse tipo de regra em uma tabela diferente, ainda não funcionará.

    
por 28.06.2012 / 00:03