
Estou migrando regras do iptable para o nftable seguindoMudando de iptable para nftable
Agora tenho poucas regras de bloqueio de IPs e portas em vigor, juntamente com regras de iptable baseadas em string, mas usando a regra de tradução iptable integrada, sou capaz de converter as regras de iptable para nftable, mas as regras baseadas em string que estavam em vigor no iptable são comentados em nftables após a tradução. Abaixo está a regra nftável após a tradução
add rule ip filter INPUT tcp dport 1024-65535 counter accept
add rule ip filter INPUT udp dport 1024-65535 counter accept
65535 -j DROP
# -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
# -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
# -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP
add rule ip filter INPUT icmp type echo-reply ct state new,related,established counter accept
add rule ip filter INPUT icmp type echo-request ct state new,related,established counter accept
add rule ip filter INPUT icmp type destination-unreachable ct state new,related,established counter accept
add rule ip filter INPUT icmp type time-exceeded ct state new,related,established counter accept
Preciso de ajuda sobre como converter regras iptable baseadas em string em regras nftable e, se falhar, como acima, a qual log me refiro.
Responder1
HáAtualmente não equivalente em nftables, ocordamatch está atualmente na lista de extensões não suportadas. Todas essas extensões não suportadas (e provavelmente também algumas suportadas) não serão traduzidas paranftáveisuma vez que eles usam uma característica especial que não pode ser expressa apenas comnftáveisbytecode (tente nft -a --debug=netlink list ruleset
ver o bytecode) nem é implementado no kernel como nativonftáveismódulo, então a ferramenta de tradução nem tentará.
Se você sabe mais sobre o protocolo e pode esperar encontrar a string em umfixolocalização no pacote, existem soluções alternativas para fazer o mesmo usandoexpressões de carga útil brutacom umexemplo aí.
Caso contrário, você pode simplesmente misturarnftáveisetabelas de ip(Incluindoiptables-nft) regras, desde que você use nomes de tabelas diferentes emnftáveispara não entrar em conflito comiptables-nft(que provavelmente está em uso). Ainda não há planos para descontinuartabelas de ip(pelo menos oiptables-nftimplementação, perfeitamente capaz de usar os vários módulos xtables comocorda).
Aqui a mesa t
é escolhida, então não vai colidir com a mesa filter
.nftáveisobtém sua cadeia de entrada (chamada arbitrariamente c_in
) com prioridade 10, entãotabelas de ipA cadeia INPUT do que conecta no mesmo local tem precedência em sua prioridade fixa 0. Deixar a prioridade em 0 obtém uma ordem indefinida entre qual cadeia (tabelas de ip' ounftáveis') é executado primeiro. Não importa descartar/aceitar regras entre tabelas. Os casos em que isso importa é ao dividir as regras como é feito aqui (mas para este caso específico, não há nada de especial na ordem, então está tudo bem) e para alterar regras ou regras com efeitos colaterais: adicionar um elemento em umnftáveis definirou umtabelas de ipcompanheiroipsete descartar o pacote não é o mesmo que descartar o pacote primeiro (e depois nada).
nft add table ip t
nft add chain ip t c_in '{ type filter hook input priority 10; policy accept; }'
nft add rule ip t c_in tcp dport 1024-65535 counter accept
nft add rule ip t c_in udp dport 1024-65535 counter accept
nft add rule ip t c_in icmp type echo-reply ct state new,related,established counter accept
nft add rule ip t c_in icmp type echo-request ct state new,related,established counter accept
nft add rule ip t c_in icmp type destination-unreachable ct state new,related,established counter accept
nft add rule ip t c_in icmp type time-exceeded ct state new,related,established counter accept
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j DROP
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j DROP
Desculpe, não sei o que fazer sobre:
65535 -j DROP
o que parece um erro de digitação ou de tradução da ferramenta.
Quando a interação entre os dois mundos é necessária, “mensagens” podem ser passadas usandomarcas. Esse é um caso em que a prioridade é importante. Por exemplo, se a ação de soltar deve ser feita apenas emnftáveispor razões de gerenciamento de regras, isso poderia ser usado, tendo em mente quetabelas de ip'filtro/INPUT tem prioridade sobrenftáveis't c_in aqui:
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string abc.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string def.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
iptables -t filter -A INPUT -p udp -m udp --dport 234 -m string --string hij.exe --algo bm --to 65535 -j MARK --set-mark 0xdead
E insira issonftáveisregra antes das ...established...
regras de curto-circuito no localcordaas regras eram inicialmente:
nft add ip t c_in meta mark 0xdead drop