Por exemplo:
#!/usr/sbin/nft -f
add table ip filter_4
add chain ip filter_4 input {
type filter hook input priority filter; policy drop;
}
add chain ip filter_4 new_in_4 {
comment "New input IPv4 traffic"
}
# Note it's goto not jump! (thus no way out of new_in_4 chain)
add rule ip filter_4 input ct state new goto new_in_4
# Is this block drop or accept rule?
add rule ip filter_4 new_in_4 log prefix "some comment: "
A regra não tem explícito accept
ou drop
veredicto, então qual é o padrão?
Nenhum. Não é necessário que uma regra tenha um veredicto final – se você não especificar um, então ela não terá nenhum. O processamento de pacotes continuará na próxima regra.
Se o pacote chegar ao final de uma cadeia que você atingiu
goto
, o resultado será como se ele tivesse chegado ao final da cadeia pai – neste caso, a cadeia de "entrada" possuipolicy drop
, então isso será aplicado.(Em outras palavras, há uma saída para a nova cadeia, assim como há uma saída para a cadeia de 'entrada' – a política da cadeia pode ser considerada no início da pilha de chamadas e é o lugar final onde você irá "retornar" para. Com 'jump' a pilha seria
policy > chain input > chain new_in_4
, e com 'goto' seriapolicy > chain new_in_4
.)O que foi dito acima não é exclusivo dos nftables; é aproximadamente o mesmo no iptables (que também possui 'JUMP' e 'GOTO', políticas de cadeia e regras sem um veredicto final).
nftables permite que você veja o processamento de pacotes regra por regra – aplique a regra
nftrace set 1
aos seus pacotes (de preferência o mais cedo possível) e executenft monitor trace
.Uma maneira mais legível de escrever seu conjunto de regras seria:
Normalmente
chain new
é feito o oposto - a cadeia de entrada teria uma única regra para aceitar pacotes estabelecidos , então todo o resto seria "novo" e você não precisaria da segunda cadeia.