Preciso redirecionar todos os pacotes UDP com a porta de destino 15000 para a porta 15001 se o pacote contiver, por exemplo, a string test
. Eu tenho estas duas regras simples:
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 15000 -m string --string 'test' --algo bm -j LOG --log-prefix='[netfilter] '
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 15000 -m string --string 'test' --algo bm -j REDIRECT --to-ports 15001
Os comportamentos estranhos:
- se o primeiro pacote contiver
test
string, o redirecionamento será feito para todos os pacotes da conexão; - se o primeiro pacote da conexão não contiver
test
, o redirecionamento nunca será feito, mesmo que um pacote subsequente contenhatest
No entanto, todos os pacotes correspondentes à regra são registrados corretamente.
Tentei adicionar também as informações da faixa à regra:
-m state --state NEW,ESTABLISHED
mas o comportamento é o mesmo. Algumas ideias?
Este é o iptables
conjunto de regras completo :
tabela de filtro:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
tabela nat:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
LOG udp -- anywhere anywhere udp dpt:15000 STRING match "test" ALGO name bm TO 65535 LOG level warning prefix "[netfilter] "
REDIRECT udp -- anywhere anywhere udp dpt:15000 STRING match "test" ALGO name bm TO 65535 redir ports 15001
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
mesa mangle:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
tabela bruta:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
nf_conntrack_udp_timeout
parâmetro para 1 asysctl
. A única coisa ruim é que este é um parâmetro global e afeta todos "conexões" UDP em cache