É útil rastrear estados atuais e esperados. É mais útil quando os IPs esperados e a porta não são apenas invertidos no sentido inverso. Isso acontece, por exemplo, quando o NAT está em uso ou apenas quando o inverso não é exatamente o mesmo. Também, quando relevante, verificar que as transições de estado são respeitadas (por exemplo: para TCP) Alguns exemplos:
Aqui, após um simples ping de 192.0.2.2, espera-se que a resposta tenha um tipo ICMP 0 (resposta de eco) em vez do tipo inicial 8 (solicitação de eco):
icmp 1 12 src=192.0.2.2 dst=8.8.8.8 type=8 code=0 id=26387 src=8.8.8.8 dst=192.0.2.2 type=0 code=0 id=26387 mark=0 use=1
Uma sessão FTP ativa (em vez de passiva) (rastreada com conntrack -E
) de um host 10.1.2.3 atrás de um roteador NAT com IP público 198.51.100.32 para um servidor FTP 203.0.113.47. Observe que na resposta, o ip do roteador é esperado em vez do ip do cliente ftp NATed (e não roteável pela Internet). A criação da expectativa foi alterada por uma regra SNAT (ou MASQUERADE):
[NEW] tcp 6 120 SYN_SENT src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 [UNREPLIED] src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp
[UPDATE] tcp 6 60 SYN_RECV src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp
[UPDATE] tcp 6 432000 ESTABLISHED src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 [ASSURED] helper=ftp
Após ls
, uma entrada de expectativa com o destino calculada a partir do comando ftp PORT do cliente, bem como a entrada conntrack anterior (com nat) foi incluída pelo auxiliar de ftp na tabela de expectativa, para permitir que o fluxo fosse aprovado (< em> por exemplo com uma regra RELATED no firewall) antes do processamento auxiliar adicional. Isso pode ser lido lá (mas irá desaparecer assim que uma conexão correspondente, o que significa que a conexão é vista, então não pode ser visto a menos que um firewall atrase):
# cat /proc/net/nf_conntrack_expect
295 l3proto = 2 proto=6 src=203.0.113.47 dst=198.51.100.32 sport=0 dport=41603 ftp
e ser alterado pelo ajudante (aqui DNATed, ainda usando a entrada conntrack anterior para obter ajuda) para finalmente obter essa nova conexão rastreada:
[NEW] tcp 6 120 SYN_SENT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 [UNREPLIED] src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20
[UPDATE] tcp 6 60 SYN_RECV src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20
[UPDATE] tcp 6 432000 ESTABLISHED src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[UPDATE] tcp 6 120 FIN_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[UPDATE] tcp 6 60 CLOSE_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[UPDATE] tcp 6 30 LAST_ACK src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[UPDATE] tcp 6 120 TIME_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[DESTROY] tcp 6 src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
Essas entradas de expectativa são usadas para rastrear fluxos (conntrack), permitindo, por exemplo, ter facilmente um firewall com estado, eliminando o que não é rastreado (não deixe passar uma resposta de eco icmp se não houver o icmp inicial echo ping feito antes com o mesmo id) e lembre-se como traduzir IPs / port (se nat estiver em uso).