Não é possível portar para a frente com o UFW no Ubuntu

4

Estou tentando fazer com que o port fowarding funcione para expor um contêiner LXC, ao usar ufw no Ubuntu, mas sem sucesso. Eu construí o seguinte fluxo de trabalho de guias pela Internet ([1] [2] [3]); mais notavelmente a seção sobre /etc/ufw/before.rules eu vejo repetida em todo o lugar, mas .... eu não consigo fazer isso funcionar para mim.

Se alguém seguir este guia e encontrar sucesso ... deixe-me saber (para que eu possa primeiro chorar e depois retroceder e escrever minha própria ferramenta de firewall)

Etapas para reproduzir / testar

Configuração

  1. Ambiente de teste

    • Nova VM (usei o virtualbox) "host1" com uma interface de rede NAT e NAT
      • Instale o servidor Ubuntu 16.04 - basta fazer uma instalação padrão
    • Segunda instância de VM "host2", na mesma rede NAT
  2. Instalação do LXC no host1 - Estou fazendo isso com o LXC simples, não apresentando as configurações do LXD ainda

    • sudo lxc-create -n web -t download -- -d centos -r 7 -a amd64
    • sudo lxc-start -n web
    • %código%
      • sudo lxc-attach -n web
      • yum install httpd ; yum enable httpd ; yum start httpd

Nós assumimos agora que

  • A interface de rede NAT no host1 é exit e
  • o IP do contêiner no host1 é enp0s8
  • o IP do enp0s8 do host1 é 10.0.3.101
  • Veja que com 10.0.2.6 o mascaramento já foi configurado pelo LXC install

Você pode querer obter um instantâneo deste estado básico.

Neste ponto, duas rotas: A-route com iptables simples, e B-route, a problemática, com ufw

  1. A - iptables
    • sudo iptables -L -t nat
    • No segundo host eu posso sudo iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 8080 -j DNAT --to "10.0.3.101:80" e isso me dá a página inicial padrão do CentOS. Sucesso!

O problema

  1. B - isso pode ser feito após uma reinicialização do host1 ou, se você fez um instantâneo anterior, apenas reverterá. De qualquer forma, ele se comporta da mesma
    • Editar wget http://10.0.2.6:8080
      • definir /etc/default/ufw
      • definir MANAGE_BUILTINS=yes
    • Editar DEFAULT_FORWARD_POLICY="ACCEPT"
      • descomentar /etc/ufw/sysctl.conf
    • Editar net/ipv4/ip_forward=1
      • Insira as linhas nat (veja abaixo [4]) abaixo dos comentários principais, mas acima da linha /etc/ufw/before.rules
      • Ajuste claro para as configurações relevantes
    • *filter
    • ufw allow 8080
    • Neste ponto, não consigo alcançar o host1 do host2 com o wget, o firefox etc. - a conexão não pode ser estabelecida
    • Se eu executar ufw enable no host1 e tentar conectar novamente a partir do host2, recebo o despejo do cabeçalho HTTP - indicando que não está ocorrendo encaminhamento de porta. FALHA!

Eu passei meus passos sobre curtos 5 tempos diferentes agora com VMs novas, gotículas digitalOcean e instâncias do AWS EC2 - sem sorte, sempre o mesmo.

Alguém pode apontar o que estou fazendo errado ...?

  • [1] link
  • [2] link
  • [3] link
  • [4] Linhas Nat:

    *nat
    :PREROUTING ACCEPT [0:0]
    -A PREROUTING -i enp0s8 -p tcp --dport 8080 -j DNAT --to 10.0.3.101:80
    COMMIT
    
    # comments etc and the rest of the file, like,
    *filter
    ...
    
por taifwa 28.03.2017 / 15:47

1 resposta

1

Acontece que há mais algumas etapas de configuração necessárias para permitir o fluxo geral do tráfego:

Na parte superior de /etc/ufw/before.rules , antes da seção *filter

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i enp0s8 -p tcp --dport 8080 -j DNAT --to 10.0.3.101:80
COMMIT

E perto do final, antes da% finalCOMMIT:

-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT

-A INPUT -p udp --dport 53 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 53 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p udp --dport 67 -i enp0s8 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 67 -i enp0s8 -m state --state NEW -j ACCEPT

Na parte superior de /etc/ufw/after.rules , antes da seção de filtro:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT

Isso foi feito para o meu ambiente de teste, conforme descrito na descrição do problema.

    
por 04.04.2017 / 11:19