Iptables: “-p udp - state ESTABLISHED”

15

vamos ver estas duas regras do iptables que são frequentemente usadas para permitir o DNS de saída:

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

Minha pergunta é: Como exatamente eu deveria entender o estado ESTABLISHED no UDP? O UDP é sem estado.

Aqui está minha intuição - eu gostaria de saber, se ou onde isso está incorreto:

A página man me diz isso:

state

This module, when combined with connection tracking, allows access to the
connection tracking state for this packet.

  --state ...

Assim, o iptables basicamente lembra o número da porta que foi usada para o pacote de saída (o que mais poderia lembrar para um pacote UDP?) , e então permite que o primeiro pacote recebido seja enviado de volta um curto período de tempo? Um invasor teria que adivinhar o número da porta (isso seria realmente muito difícil?)

Sobre como evitar conflitos:

O kernel rastreia quais portas estão bloqueadas (por outros serviços ou por pacotes UDP de saída anteriores), para que essas portas não sejam usadas para novos pacotes DNS de saída dentro do período de tempo? (O que aconteceria, se eu acidentalmente tentasse iniciar um serviço naquela porta dentro do prazo - essa tentativa seria negada / bloqueada?)

Por favor, encontre todos os erros no texto acima :-) Obrigado,

Chris

    
por Chris Lercher 17.03.2010 / 00:55

3 respostas

11

So, iptables basically remembers the port number that was used for the outgoing packet (what else could it remember for a UDP packet?),

Tenho certeza de que, para o UDP, as portas e os endereços de origem e destino são armazenados.

Se você quiser inspecionar as tabelas de estado, instale conntrack e / ou netstat-nat.

(What would happen, if I accidentally tried to start a service on that port within the timeframe - would that attempt be denied/blocked?)

Como você está usando o OUTPUT e o INPUT, você está falando sobre os serviços locais. A porta já está sendo usada Não acredito que seu sistema permita que você inicie outro serviço, já que algo já está escutando nessa porta. Eu acho que você poderia parar o primeiro serviço e começar outro, se você realmente quisesse, nesse caso, a resposta provavelmente chegaria ao seu serviço. O que o serviço faz com o pacote depende do conteúdo do pacote e do serviço.

    
por 17.03.2010 / 01:04
7

NB: Esta resposta foi editada.

Apesar do que dizem as páginas do manual, ESTABLISHED parece significar "stateful". Para UDP, isso significa simplesmente (como você sugere) lembrar cada pacote UDP de saída (a tupl "src ip, porta src porta dst ip, porta dst") por um tempo e reconhecer suas respostas.

FWIW, minhas regras normais para o tráfego DNS seria algo assim:

# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53  -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53  -j ACCEPT

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

i.e. controlar o tráfego na cadeia OUTPUT e, em seguida, deixar os módulos de estado iptables tratar de todo o restante da cadeia INPUT .

Veja também esta questão relacionada .

    
por 17.03.2010 / 11:22
1

Os desenvolvedores do iptables consideraram que um estado "ESTABLISHED" era a situação em que os pacotes eram vistos em ambas as direções, qualquer que fosse o protocolo entre dois clientes.

a extensão de estado faz parte do conntrack. O kernel entende o estado da tabela

/proc/net/nf_conntrack

Exemplo de estados de iptable para UDP na tabela nf_conntrack do ponto de vista do remetente. Vamos imaginar que você envie uma consulta DNS no UDP

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

Um pacote foi enviado. Não é reiterado e, oh, a tabela tem os dados para o que é esperado em retorno (o pacote para a resposta do DNS).

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

A resposta chegou, a bandeira não respondida sumiu, significa que esta conexão UDP está no estado ESTABELECIDO por um pequeno período de tempo definido em seu sistema.

    
por 22.09.2015 / 08:48