AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 408497
Accepted
user223600
user223600
Asked: 2017-12-03 22:09:23 +0800 CST2017-12-03 22:09:23 +0800 CST 2017-12-03 22:09:23 +0800 CST

Erro de configuração do Nftables: protocolos conflitantes especificados: inet-service v. icmp

  • 772

Estou tentando construir um firewall stateful simples com nftables seguindo o guia Arch Linux nftables . Postei esta pergunta no fórum do Arch Linux e nunca recebi uma resposta.

Depois de concluir o guia e reiniciar minha máquina, o systemd falhou ao carregar o nftables.service . Para solucionar o erro, executei:

systemctl status nftables

Aqui está a saída relevante:

/etc/nftables.conf:7:17-25: Error: conflicting protocols specified: inet-service v. icmp

O erro está reclamando de uma regra que estabeleci para aceitar novos pings (icmp) na cadeia de entrada. Aqui está a regra e não vejo nada de errado nisso:

icmp type echo-request ct state new accept

Se eu remover a regra, funcionará. Mas eu quero a regra.

Aqui está meu conjunto de regras em nftables.conf depois de concluir o guia:

    table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif "lo" accept
        ct state invalid drop
        icmp type echo-request ct state new accept
        ip protocol udp ct state new jump UDP
        tcp flags & (fin | syn | rst | ack) == syn ct state new jump TCP
        ip protocol udp reject
        ip protocol tcp reject with tcp reset
        meta nfproto ipv4 counter packets 0 bytes 0 reject with icmp type prot-unreachable
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }

    chain TCP {
        tcp dport http accept
        tcp dport https accept
        tcp dport ssh accept
        tcp dport domain accept
    }

    chain UDP {
        tcp dport domain accept
    }
}

o que estou perdendo? Agradeço antecipadamente.

arch-linux systemd
  • 1 1 respostas
  • 1546 Views

1 respostas

  • Voted
  1. Best Answer
    A.B
    2018-09-04T13:05:58+08:002018-09-04T13:05:58+08:00

    Esta foi uma limitação de sintaxe do nftables 0.7 (ou algumas outras versões): não considerou ICMP e ICMPv6 diretamente utilizáveis ​​na tabela dual IPv4/IPv6 inetsem declarar explicitamente qual protocolo IP primeiro:

    Então a regra:

    icmp type echo-request ct state new accept
    

    para funcionar tanto em IPv4 quanto em IPv6 tem que ser escrito duas vezes assim:

    ATUALIZAÇÃO : na verdade, não se deve confiar no IPv6 ao nexthdrapontar para o protocolo da camada superior: pode haver cabeçalhos de extensão entre o cabeçalho fixo e o cabeçalho da camada superior (que vem por último). Adicionando a sintaxe correta (usando as meta-informações que já fornecem informações de protocolo) e deixando minha resposta original riscada, porque não sei se a sintaxe "correta" é válida com nftables 0.7:

    meta nfproto ipv4 meta l4proto icmp icmp type echo-request ct state new accept
    meta nfproto ipv6 meta l4proto icmpv6 icmpv6 type echo-request ct state new accept
    
    ip protocol icmp icmp type echo-request ct state new accept
    ip6 nexthdr icmpv6 icmpv6 type echo-request ct state new accept
    

    fornecendo o bytecode correspondente (exibido usando nft --debug=netlink list ruleset -a):

    inet filter input 9 8 
      [ meta load nfproto => reg 1 ]
      [ cmp eq reg 1 0x00000002 ]
      [ payload load 1b @ network header + 9 => reg 1 ]
      [ cmp eq reg 1 0x00000001 ]
      [ payload load 1b @ transport header + 0 => reg 1 ]
      [ cmp eq reg 1 0x00000008 ]
      [ ct load state => reg 1 ]
      [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ]
      [ cmp neq reg 1 0x00000000 ]
      [ immediate reg 0 accept ]
    
    inet filter input 10 9 
      [ meta load nfproto => reg 1 ]
      [ cmp eq reg 1 0x0000000a ]
      [ payload load 1b @ network header + 6 => reg 1 ]
      [ cmp eq reg 1 0x0000003a ]
      [ payload load 1b @ transport header + 0 => reg 1 ]
      [ cmp eq reg 1 0x00000080 ]
      [ ct load state => reg 1 ]
      [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ]
      [ cmp neq reg 1 0x00000000 ]
      [ immediate reg 0 accept ]
    

    ICMP é o protocolo IP 1, valor de solicitação de eco 8.
    ICMPv6 é o protocolo IPv6 58 (0x3a), seu valor de solicitação de eco é 128 (0x80).

    O nftables 0.9 mais recente aceita diretamente a regra icmp type echo-request ct state new accept, mas seu bytecode correspondente é apenas:

    inet filter input 9 8 
      [ meta load nfproto => reg 1 ]
      [ cmp eq reg 1 0x00000002 ]
      [ meta load l4proto => reg 1 ]
      [ cmp eq reg 1 0x00000001 ]
      [ payload load 1b @ transport header + 0 => reg 1 ]
      [ cmp eq reg 1 0x00000008 ]
      [ ct load state => reg 1 ]
      [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ]
      [ cmp neq reg 1 0x00000000 ]
      [ immediate reg 0 accept ]
    

    o que significa que está lidando apenas com ICMP, não também ICMPv6, que ainda deve ser adicionado com uma regra adicional, simplesmente como:

    icmpv6 type echo-request ct state new accept
    

    devolvendo o bytecode equivalente da versão anterior:

    inet filter input 10 9 
      [ meta load nfproto => reg 1 ]
      [ cmp eq reg 1 0x0000000a ]
      [ meta load l4proto => reg 1 ]
      [ cmp eq reg 1 0x0000003a ]
      [ payload load 1b @ transport header + 0 => reg 1 ]
      [ cmp eq reg 1 0x00000080 ]
      [ ct load state => reg 1 ]
      [ bitwise reg 1 = (reg=1 & 0x00000008 ) ^ 0x00000000 ]
      [ cmp neq reg 1 0x00000000 ]
      [ immediate reg 0 accept ]
    
    • 3

relate perguntas

  • Como alguém pode configurar o áudio no Arch Linux suportando vários programas que emitem áudio ao mesmo tempo sem criar um asoundrc?

  • Use o suporte de watchdog do systemd para reiniciar o aplicativo

  • Por que às vezes é necessário importar chaves manualmente?

  • Carregar dispositivo na inicialização

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve