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 / 735835
Accepted
schweik
schweik
Asked: 2023-02-18 00:00:23 +0800 CST2023-02-18 00:00:23 +0800 CST 2023-02-18 00:00:23 +0800 CST

Como proteger a interface de toque com nftables

  • 772

A Qemu VM pode ser conectada à LAN principalmente de duas maneiras: type=userou type=tap. O usermodo isola completamente a VM na rede privada, que é sNATed para hospedar a pilha de rede principal. O uso do tapé mais complicado, ele precisa de um virtual bridgepara se tornar mestre de uma interface física ( eth0) e interface virtual ( tap0). O tap0é como um tubo para dados fluindo de fora do mundo e host para a VM. Passei muitas horas tentando regular o tráfego de rede na tap0interface com o lado do host iptables/nftablespara redirecionar, por exemplo, todas as solicitações http para algum endereço IP interno, mas sem sucesso. Todos os conselhos, fóruns e wiki recomendam muitas soluções, que não podem funcionar, devido ao principal motivo: os pacotes da VM convidada nunca chegam à pilha de rede do kernel do host. Eles escolhem seu caminho no nível da ponte e não atendem a nenhuma regra de firewall ajustada por nenhuma cadeia de filtro de pacotes, se o endereço IP do host não for seu alvo. Você pode tentar simplesmente definindo a política global do host para DROP(com host XYtables) e poderá ver: a rede do host está completamente inoperante, mas o convidado pode continuar a enviar e receber pacotes pela rede.

Bem, a pergunta: Existe alguma outra maneira de conectar virtualmente a VM convidada a uma interface de rede virtual do host? Para melhor entendimento seguem os gráficos:

     General virtual connections for host/VM guest
    +---------------------------------------------+
    |    +-----------------------------+          |
    |    |    iptables    host kernel  |          |
    |    |    nftables   network stack |          |
    |    +-------+---------------------+          |
    |            |                                |
    |    +-------+---------+      +-----------+   |
---eth0--+    virtual      |      |    VM     |   |
    |    |    bridge       +-tap-eth0 guest   |   |
---eth1--+      br0        |      |           |   |
    |    +-----------------+      +-----------+   |
    +---------------------------------------------+


       Host became a router for VM guest
    +-------------------------------------+
    |    +----------------+  +---------+  |
---eth0-->  host kernel   |  |    VM   |  |
    |    |                <-vppp guest |  |
---eth1-->  network stack |  |         |  |
    |    +----------------+  +---------+  |
    +-------------------------------------+

Para resolver meu problema, deve haver uma maneira de controlar (com nftables, por exemplo) o tráfego da própria ponte virtual, ou como conectar a interface de rede convidada da VM por meio de um fio virtual a uma interface de rede virtual do host. Algo como uma rede PPPoE.

Mas a maneira definitiva e mais clara é adicionar mais alguns parâmetros à rede do modo de usuário Qemu para poder forçar o redirecionamento de algumas portas (serviços) para o endereço de destino escolhido, incluindo o loopback do host. Sim, enviei esses desejos à equipe do Qemu e obtive uma resposta: não é o recurso mais necessário.

virtual-machine
  • 1 1 respostas
  • 15 Views

1 respostas

  • Voted
  1. Best Answer
    Austin Hemmelgarn
    2023-02-18T09:40:44+08:002023-02-18T09:40:44+08:00

    Há duas soluções possíveis:

    • Use bridgea família nftables e faça a filtragem abaixo da camada 3.
    • Use o host como um roteador.

    A primeira solução é a opção mais eficiente, mas limita você a filtrar as propriedades dos quadros Ethernet. Você não pode filtrar endereços IP ou portas, ou qualquer outra coisa na camada 3 ou superior, porque a ponte não processa nenhum desses dados.

    A segunda solução é mais provável de permitir que você faça o que quiser aqui. Na verdade, isso é muito simples por dois motivos específicos:

    • Você pode atribuir um endereço IP diretamente em uma interface de ponte, assim como em qualquer outro tipo de dispositivo de rede.
    • Você não precisa ter nenhum dispositivo de rede física conectado a uma interface de ponte.

    Dê isso, a configuração 'normal' para o que você deseja fazer é:

    1. Configure uma interface de ponte no sistema host. Atribua um IP estático a ele, mas não o conecte a nenhuma interface física.
    2. Configure nftables para que o sistema lide com o roteamento entre a interface de ponte da etapa 1 e quaisquer interfaces externas.
    3. Ao iniciar uma VM, anexe-a à interface de ponte da etapa 1.

    Então, você apenas filtra as coisas em nftables de maneira diferente de se o sistema estivesse agindo como um firewall de perímetro. Você pode tornar isso ainda mais fácil configurando um servidor DHCP e armazenando em cache o resolvedor de DNS no sistema host para que você não precise fornecer a configuração de rede estática da VM.

    • 1

relate perguntas

  • Convidado do VirtualBox Win10 @ Linux host trava muito tempo na inicialização, como solucionar problemas?

  • Debian 9: Como configurar o Samba-Exchange entre QEMU-Host e QEMU-Guest (Windows)?

  • Como posso acionar manualmente o driver de balão virtio em um convidado?

  • Como você altera a porta KVM VNC em tempo de execução, na linha de comando?

  • Linux do zero dentro de um contêiner LXC

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

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

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +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

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