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 / server / Perguntas / 1018300
Accepted
Osqui
Osqui
Asked: 2020-05-23 14:55:09 +0800 CST2020-05-23 14:55:09 +0800 CST 2020-05-23 14:55:09 +0800 CST

Como usar variáveis ​​definidas em Nftables através do terminal (não no script)

  • 772

Eu quero executar esses dois comandos em um shell interativo, um após o outro (como root e com a tabela "filter" e a cadeia "input" carregadas):

nft define lala=1.2.3.4
nft add rule ip filter input ip saddr \$lala accept

Você pode ver que eu escape do "$" para evitar a expansão do shell. Mas recebo esta mensagem de erro "Identificador desconhecido 'lala'". Se eu não escapar do "$", recebo esta mensagem de erro: "Erro de sintaxe, aceitação inesperada". Se eu escrever \$$lala , recebo esta mensagem de erro: "Syntax error, uneepcted accept, esperando string" e esta regra errada é mostrada: add rule ip filter input ip saddr $ accept.

Então, qual é a sintaxe correta para poder usar variáveis ​​Nft dentro de um shell interativo. Fazer o mesmo dentro de um script Nft funciona bem (sem se preocupar em escapar).

Muito obrigado

firewall nftables
  • 1 1 respostas
  • 1808 Views

1 respostas

  • Voted
  1. Best Answer
    A.B
    2020-05-28T00:47:54+08:002020-05-28T00:47:54+08:00

    Variáveis ​​simbólicas em uso pelo comando nft userspace são resolvidas em seus valores apenas por este comando. O nftcomando resolve a variável em seu valor atribuído para montar o resultado final. Em seguida, os nftcomandos usam a API netlink para se comunicar com o kernel e enviar uma nova regra para adicionar. O kernel nunca vê lala=1.2.3.4nem tem nenhum conceito de variável simbólica.

    Então, se você dividir seu nftcomando em duas invocações, o que acontece é:

    • O primeiro nftcomando define uma variável simbólica para seu próprio uso posterior. Mas não faz mais nada. Ele nem precisa se comunicar com o kernel, pois nenhuma alteração no conjunto de regras é solicitada. (Na verdade ele se comunica, mas para enviar "nada", como no comando nft ''). Ao final do comando perde-se a definição do símbolo, sem ter sido utilizado.

    • Uma segunda invocação do nftcomando precisa resolver o $lalasímbolo, mas não consegue encontrar uma definição: nftpára com um erro.

    Portanto, tudo isso deve ser feito em uma nft invocação para que a segunda instrução ainda saiba sobre a variável simbólica. Existem várias maneiras de fazer isso. Deixei os exemplos abaixo nftdos prompts do shell e do 's que não devem ser digitados.

    • interativonft

      -i, --interactive
      Leia a entrada de uma CLI de linha de leitura interativa. Você pode usar quitpara sair ou usar o marcador EOF, normalmente é CTRL-D.

      # nft -i
      nft> define lala=1.2.3.4
      nft> add rule ip filter input ip saddr $lala accept
      nft> quit
      
    • dois comandos em uma única nftinvocação.

      # nft 'define lala=1.2.3.4; add rule ip filter input ip saddr $lala accept'
      

      Observe o adicional ;necessário, pois neste contexto nftrecebe uma linha de parâmetros, mas eles devem ser divididos em dois comandos lógicos. Também nfttendo seu próprio analisador, não importa se os comandos são recebidos como um único parâmetro de comando ou vários parâmetros separados. Aqui tudo foi colocado em um par de ''para evitar problemas de shell com ambos ;e $caracteres.

    • Em seguida nft, tem uma opção para ler a partir de um arquivo. Ao ler de um arquivo, todas as entradas fazem parte do mesmo nftcontexto de comando.

      -f, --file filename
      Leia a entrada do nome do arquivo. Se o nome do arquivo for -, leia de stdin.

      scripts nft devem ser iniciados#!/usr/sbin/nft -f

      Então, com um arquivo chamado test.nftcom este conteúdo:

      define lala=1.2.3.4
      add rule ip filter input ip saddr $lala accept
      

      Isso pode então ser usado:

      # nft -f test.nft
      

      A variante abaixo executa um script na " linguagem nftables ". Ter um test.nftconteúdo de arquivo como:

      #!/usr/sbin/nft -f
      define lala=1.2.3.4
      add rule ip filter input ip saddr $lala accept
      

      Então:

      # chmod a+rx test.nft
      # ./test.nft
      

      Isso também teria funcionado:

      # nft -f - <<'EOF'
      > define lala=1.2.3.4
      > add rule ip filter input ip saddr $lala accept
      > EOF
      

    Para cada comando anterior, o conjunto de regras resultante é o mesmo (assumindo que a tabela e a cadeia foram criadas antes):

    # nft list chain ip filter input
    table ip filter {
        chain input {
            type filter hook input priority filter; policy accept;
            ip saddr 1.2.3.4 accept
        }
    }
    

    Não haverá mais nenhum vestígio de $lalaesquerda: o kernel nunca recebeu, $lalamas apenas 1.2.3.4e é isso que ele devolve.

    • 2

relate perguntas

Sidebar

Stats

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

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 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