O uso do estado RELATED no iptables é usado corretamente?

3

Tenho visto muitas pessoas usando as sinalizações ESTABLISHED e RELATED juntas para ACEITAR o tráfego até que uma conexão tenha sido aceita anteriormente (consulte Permitir sessões estabelecidas ).

Digamos que eu configure meu firewall com as seguintes regras:

-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -d x.x.x.x --syn -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp -s x.x.x.x --dport 22 -d x.x.x.x --syn -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED -m tcp ! --syn -d x.x.x.x -j ACCEPT
-A INPUT -i all -p all -j REJECT

Espero que quaisquer novas conexões sejam bloqueadas pela última regra, a menos que seja para a porta 80 ou porta 22. No entanto, para a porta 22, limite as conexões a um endereço IP de entrada (digamos, meu escritório doméstico).

Então, espero que a regra com --state ESTABLISHED,RELATED aceite apenas o tráfego anteriormente conectado usando a regra com a porta 80 ou a porta 22.

Pelo que eu posso ver nos meus contadores de firewall, parece que se eu tiver ambos ESTABLISHED e RELACIONADOS, qualquer tráfego no TCP pode ser enviado para o servidor ...

Nos meus testes, digamos que eu tenha outro servidor HTTP na porta 8080, primeiro conecto à porta claramente permitida 80, então, de alguma forma eu posso conectar e enviar um GET e receber a resposta na porta 8080, mesmo que não seja aberto.

Da mesma forma, se eu conectar na porta 22, qualquer outra porta TCP atualmente aberta e ouvindo em 0.0.0.0 estará acessível. Minha preocupação é que isso significa que alguém que se conecta à porta 80 agora tem acesso à porta 22, já que o RELATED permite (assumindo que a porta 80 esteja aberta, então uma nova conexão é feita para a porta 22).

Estou correto? Eu estava pensando em mudar a regra para isso:

-A INPUT -i eth0 -p tcp -m state --state ESTABLISHED -m tcp ! --syn -d x.x.x.x -j ACCEPT

(ou seja, nenhum estado RELATED, apenas ESTABELECIDO)

Também achei que o ! --syn impediria que novas conexões fossem estabelecidas usando essa regra, mas isso também parece incorreto ...

    
por Alexis Wilke 20.04.2015 / 09:42

1 resposta

1

Deixe-me supor as seguintes três coisas na sua configuração:

  • você tem uma política padrão na tabela INPUT de ACCEPT (é o valor padrão).
  • seu contador de pacotes / bytes na última regra -A INPUT -i all -p all -j REJECT é 0
  • você não tem uma interface chamada 'all'

AFAIK O parâmetro -i não tem uma palavra-chave como all , por isso é considerado como um nome de interface. Não há erro ao carregar essa regra porque é legal criar regras em interfaces que ainda não existem ou que não estão ativas. Portanto, sua última regra não captura nada e, como sua política padrão é ACCEPT , todos os pacotes que não correspondem a nenhuma regra são aceitos.

Se você quiser o que espera, não mencione nenhuma interface e, em seguida, a regra será aplicada a todas as interfaces disponíveis:

-A INPUT -j REJECT

Este também é um bom exemplo para definir uma política padrão de DROP na tabela (mas, pelo menos, esteja na lista de permissões antes, é claro):

iptables -P INPUT DROP

Espero que isso resolva seu problema. Deixe-nos saber se o contador de pacotes ou a política padrão não é como eu esperava.

    
por 20.04.2015 / 15:12