CafezinhoComTi
(usa Debian)
Enviado em 17/04/2009 - 13:35h
Prezados colegas, Boa Tarde!
Estou utilizando o modulo STRING para identificar o nome "teste.lalala.com.br" nos pacotes que entram em um servidor http, para baseando-se nisso fazer um DNAT para outro servidor, porém não estou conseguindo.
Parece que tem alguma coisa que impede que o DNAT seja feito baseando-se na procura de STRINGS.
Com o modulo STRING consegui fazer accepts, rejects, drops etc mas DNAT não.
Ex de um DNAT por porta: FUNCIONA
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.234.56.1
Ex da primeira tentativa: NÃO FUNCIONA !
# iptables -t nat -A PREROUTING -p tcp --dport 80 -m string --string "lalala" -j DNAT --to-destination 192.234.56.1
Não funcionou.
Então pensei:
Vou enganar o iptables, vou usar marcação de pacotes e depois fazer o DNAT pela marca do pacote e não diretamente pela STRING, ou seja, na tabela mangle procuro nos pacotes tcp com destino a porta 80 pela string "lalala" e marco os que a contiverem com um carinbo "0x1"
Depois na tabela nat procuro pelos pacotes que tenham a marca "0x1" e mando fazer o DNAT
Ex da segunda tentativa: NÃO FUNCIONA !
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -m string --string "lalala" --algo bm -j MARK --set-mark 0x1
# iptables -t nat -A PREROUTING -m mark --mark 0x1 -j DNAT --to-destination 192.234.56.1
Mesmo assim não funciona!
Agora se na tabela mangle eu marcar os pacotes que estão entrando pela porta 80 com "0x1" e depois na tabela nat eu mandar fazer o DNAT dos pacotes marcados com 0x1 FUNCIONA.
Ex: FUNCIONA
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 0x1
# iptables -t nat -A PREROUTING -m mark --mark 0x1 -j DNAT --to-destination 192.234.56.1
Assim funcionou.
Então eu pensei.. pois bem, o que está acontecendo é que não consigo marcar os pacotes me baseando na string.. o modulo não deve suportar.
Então testei marcar os pacotes pela STRING "lalala" na tabela mangle e depois na tabela nat dar um drop nos pacotes marcados.
Para meu espanto FUNCIONOU!
Ex:
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -m string --string "lalala" --algo bm -j MARK --set-mark 0x1
# iptables -t nat -A PREROUTING -m mark --mark 0x1 -j DROP
Ou seja a marcação funciona.
Tem alguma coisa que impede que se faça DNAT quando de alguma forma a origem dessa decisão tenha sido feita pelo modulo STRING.
Cheguei a marcar os pacotes com o string, depois remarca-los com uma segunda marca "0x2" baseando-me pela primeira marca e posteriormente tentando o DNAT pela segunda marca "0x2"
Ex: NÃO FUNCIONA !
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -m string --string "lalala" --algo bm -j MARK --set-mark 0x1
# iptables -t mangle -A PREROUTING -m mark --mark 0x1 -j MARK --set-mark 0x2
# iptables -t nat -A PREROUTING -m mark --mark 0x2 -j DNAT --to-destination 192.234.56.1
Não adianta, não vai
Alguém que já passou por situação parecida poderia por favor me ajudar? Já arranquei metade dos meus cabeleos tentando essa solução e nada!
Agradeço qualquer colaboração, nem que seja pra dizer que também andou a arrancar os cabelos e não conseguiu..
Abraços,
Lawrence Waclawiak