por que essa regra iptable funciona em uma posição específica na cadeia

1

Estou executando o OpenWrt no meu roteador, o que me permite executar aplicativos como apache e emule. Eu instalei o emule mas continuo ficando lowid, indicando que minha porta está mal configurada. Consegui resolver isso usando o SSH em meu roteador e editando o iptables. Minha tabela INPUT originalmente se parece com isso ...

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            state INVALID 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere            
syn_flood  tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN 
input_rule  all  --  anywhere             anywhere            
input      all  --  anywhere             anywhere

Se eu adicionar essa regra, obtenho highid, indicando que minha porta está configurada corretamente ...

iptables -I INPUT 2 -p tcp --dport 4662 -j ACCEPT

Depois de executar isso, minha tabela INPUT se parece com ...

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            state INVALID 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:4662 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere            
syn_flood  tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN 
input_rule  all  --  anywhere             anywhere            
input      all  --  anywhere             anywhere

Observe a posição. Se eu tentar fazer da 1ª ou 2ª regra da cadeia, isso me dá uma vantagem. Se eu for a qualquer lugar abaixo disso (regras 3-6) eu ainda fico abatido. Eu sei muito pouco sobre o iptables, mas eu entendo que as regras na cadeia INPUT são verificadas em ordem. Pelo que eu posso ver, minha regra funciona quando verificada antes ou depois que todos os pacotes inválidos são descartados.

Eu não entendo porque não funciona depois de aceitar todos os pacotes relacionados ou estabelecidos. Alguém pode explicar o meu porque esta regra funciona na posição 1 ou 2, mas não em quaisquer outras?

    
por b10hazard 19.12.2012 / 13:59

1 resposta

0

Não está funcionando abaixo da regra "estado RELACIONADO, ESTABELECIDO" porque permite somente pacotes de entrada que estão relacionados a conexões existentes; Como você não tem portas abertas além do 4662, esses pacotes só podem ter origem em hosts nos quais você abriu uma conexão de saída.

A regra da porta 4662 está bem onde está e no lugar certo, mas se você realmente quer que ela funcione em qualquer lugar da cadeia, adicione '-m state --state NEW' ao comando iptables que você está usando para crie-o; isso indicará explicitamente que os pacotes de solicitação de conexão de entrada devem ser aceitos nessa porta.

    
por 19.12.2012 / 14:37