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 ).