Para dizer que é possível (mas provavelmente não é útil), sim, é possível, usando nftables recentes o suficiente e uma expressão de carga útil bruta.
Portanto, para a tabela inet
(dual ip
/ ip6
), primeiro é necessário filtrar o protocolo de nível 4 correto (aqui TCP = 6 e UDP = 17) usando um conjunto e filtrar a porta 53 Isso é útil, TCP e UDP tem o mesmo local para a porta de destino em seus respectivos formatos. dport
é expresso como o deslocamento da porta de destino na parte TCP / UDP do pacote: 16 bits, com um tamanho de 16 bits, como visto nos links anteriores. Embora tcp
e udp
possam ser usados por seu nome simbólico, parece que dns
deve ser declarado como 53
não dns
, só imagino que dns/tcp
e dns/udp
(ou domain
see later) estão em dois "namespaces de protocolo" diferentes.
O comando resultante é (aspas simples adicionais ou se aspas duplas são necessárias aqui):
# nft 'add rule inet filter input meta l4proto {tcp, udp} @th,16,16 53 counter accept comment "accept DNS"'
Se você quiser apenas IPv4, inicialize a tabela e correntes ip
correspondentes e substitua inet
por ip
.
Por favor, note também que quase o mesmo é dado como exemplo nas notas de versão 0.8.3 e agora está incluído em < a href="https://manpages.debian.org/stretch-backports/nftables/nft.8.en.html#RAW_PAYLOAD_EXPRESSION"> página de manual do nft
, o exemplo não work: dns
e http
precisam ser substituídos por 53
e 80
(e, de qualquer forma, algumas distribuições / versões podem ter exigido domain
em vez de dns
).